You are on page 1of 5

Connexions module: m27428

1

Đ i tư ng và ki u d li u trong VHDL∗
Do Manh Ha
This work is produced by The Connexions Project and licensed under the Creative Commons Attribution License †

Tóm t t n i dung Trình bày khái ni m, cú pháp và ng d ng c a c a các đ i tư ng thi t k s d ng trong VHDL (tín hi u - signal, bi n - variable, h ng - constant) và các ki u d li u cơ b n đư c s d ng cho các đ i tư ng thi t k đó.

1. Đ i tư ng trong VHDL Trong ngôn ng VHDL g m có 3 đ i tư ng là: tín hi u - signal, bi n - variable, h ng - constant, m i đ i tư ng đư c khai báo d a vào t khóa tương ng và chúng có m c đích s d ng như sau: + Tín hi u – Signal: là đ i tư ng đ bi u di n đư ng k t n i các gi a các c ng vào/ra c a th c th , gi a các c ng vào/ra c a các kh i thành ph n ph n c ng xu t hi n trong th c th . . . Chúng là phương ti n truy n d li u đ ng gi a các thành ph n c a th c th . Tín hi u có tính toàn c c r t cao, chúng có th đư c khai báo trong package (tín hi u toàn c c, đư c s d ng b i m t s th c th ), khai báo trong th c th - Entity (tín hi u n i b dùng trong th c th , có th đư c tham chi u b i b t kỳ ki n trúc nào c a th c th đó), khai báo trong ki n trúc – Architecture (tín hi u n i b dùng trong ki n trúc, có th đư c s d ng trong b t c c u trúc l nh nào trong ki n trúc). Các tín hi u có th đư c s d ng nhưng không đư c khai báo trong ti n trình – process, trong chương trình con. Vì ti n trình và chương trình con là thành ph n cơ s c a mô hình và chúng đư c coi như các h p đen. Cú pháp khai báo tín hi u như sau: Signal tên_tín_hi u {,tên_tín_hi u}:ki u_d _li u [:=giá_tr _kh i_t o]; Ví d : Signal a,b,c: Bit:=’1’; Signal y, reg: std_logic_vector(3 downto 0):=”0000”; + Bi n – Variable: là đ i tư ng c c b đư c s d ng đ ch a các k t qu trung gian. Bi n ch đư c khai báo và s d ng trong process và trong chương trình con. Cú pháp khai báo c a bi n cũng tương t như khai báo tín hi u: Variable tên_bi n {,tên_bi n}: ki u_d _li u [:=giá_tr _kh i_t o]; Ví d : variable x: Bit:=’1’; variable Q: std_logic_vector(3 downto 0); N u không đư c kh i t o giá tr ban đ u bi n s nh n giá tr kh i t o ban đ u là giá tr th p nh t trong các giá tr thu c mi n xác đ nh c a ki u d li u. Tín hi u cũng có th ch a d li u nhưng chúng l i không đư c s d ng vì nh ng lý do sau: • Vi c s d ng bi n hi u qu hơn vì giá tr c a bi n đư c gán ngay l p t c trong process khi tín hi n ch đư c l p k ho ch đ th c hi n và ch đư c c p nh t toàn b sau khi k t thúc process.
∗ Version

1.1: Jul 7, 2009 2:53 am GMT-5

† http://creativecommons.org/licenses/by/3.0/

http://cnx.org/content/m27428/1.1/

std_logic và std_ulogic. . http://cnx.1414. đư c t o nên t 1 m ng c a m t m ng 1 chi u ( hay m t b n ghi). • Ki u ghép: các d li u dư i d ng m t nhóm các thành ph n như m ng. true). – B s nguyên 5 bit Các cách bi u di n s nguyên d ng th p phân: + digit[underline]digit.0E+38 đ n 1. . entity. ví d : 2#1100_0100#. ví d : 0. – B s nguyên 4 bit signal B: integer range 15 downto -15. – A s nguyên 3 bit variable B: integer range 15 downto 0. Ki u Boolean đã đư c đ nh nghĩa như sau: Type Boolean is (false. Tóm l i: Các đ i tư ng trong VHDL có m c đích s d ng. VDHL đ nh nghĩa nhi u ki u d li u khác nhau đ phù h p v i vi c mô t .. signal Sig_1: CAPACITY:= 3. character. Các ki u d li u đã đư c đ nh nghĩa trong gói Standard ch a trong thư vi n chu n Standard Library c a VHDL là: bit. . . real. integer. boolean. thi t k . ví d : 987E6 (=987. . 4#301#E1. b ng ghi (record). Bit_logic_vector. integer. . 16#C4#. (=196) .0 . type CAPACITY is range -25. 2. + H ng –constant: là đ i tư ng h ng đư c gán cho các giá tr c th c a m t ki u khi đư c t o ra và không đ i trong toàn b quá trình th c hi n. . Ki u d li u trong VHDL Trong VHDL có 4 d ng d li u: • Vô hư ng: g m các d li u có giá tr đơn như bit. đ l n m c đ nh là 32 bit v i gi i h n giá tr : t -2147483647 đ n +2147483647. std_logic and std_ulogic. constant PI: real:=3. mô ph ng các h th ng s khác nhau trong th c t .0 to 25. Ki u Bit đã đư c đ nh nghĩa như sau: Type Bit is (‘0’. 123_456_789 . std_logic_vector và String và m t s ki u d li u con. H ng cũng có tính toàn c c gi ng như tín hi u và có th đư c khai báo trong package. real. process. . • S d ng tín hi u yêu c u có l nh wait đ th c hi n đ ng b phép gán tín hi u v i phép l p th c hi n theo cách s d ng quen thu c. physical. nhưng chúng có cú pháp khai báo chung như sau: Đ i_tư ng tên_đ i_tư ng: ki u_d _li u {:=giá_tr _kh i_t o} Các đ i tư ng khi khai báo ph i đư c xác đ nh ki u d li u tương ng. boolean. Khi s d ng có th gi i h n mi n xác đ nh theo gi i h n gi m d n dùng t khóa downto ho c tăng d n dùng t khóa to: signal A: integer range 0 to 7.Ki u Bit: Ki u li t kê v i 2 giá tr ‘0’ và ‘1’. Ví d : constant GND: std_logic:=’0’. • VHDL Subtypes: d ng d li u con do ngư i dùng t đ nh nghĩa d a trên nh ng d ng có s n. ph m vi s d ng khác nhau. -123_5678. ‘1’).tên_h ng} : ki u_d _li u := giá_tr _kh i_t o. Cú pháp chung đ nh nghĩa ki u d li u như sau: Type Tên_ki u is gi i_h n_giá_tr _c a_ki u a. 1. physical.0E+38. enumerated (ki u li t kê).Ki u Real: Ki u s th c có gi i h n t -1.Connexions module: m27428 2 • Bi n chi m ít b nh hơn trong khi tín hi u c n nhi u thông tin đ có th l p k ho ch th c hi n cũng như đ ch a các thu c tính c a tín hi u.106). architecture.Ki u Boolean: Ki u li t kê v i 2 giá tr false và true.org/content/m27428/1. Các cách bi u di n dư i d ng cơ s xác đ nh: + base#based_integer#[exponent].Ki u Integer: Ki u s nguyên v i nh ng giá tr dương ho c âm.. Ki u vô hư ng . std_logic_vector và String đ u là nh ng d ng d li u ghép đã đư c đ nh nghĩa s n. + digit(E)digit. Cú pháp khai báo h ng: constant tên_h ng {. proceduce. Bit_logic_vector.1/ . • 2-D Arrays: các d li u có d ng m ng 2 chi u. khác v i ki u integer ki u s th c khi s d ng thư ng đư c đ nh nghĩa thành ki u d li u riêng và có gi i h n mi n xác đ nh: signal a: Real:=-123E-4.0 . character.

. và linh ho t cho các mô hình ph n c ng s v i m c đ tr u tư ng cao. – High Impedance‘W’. STOR. Các cách bi u di n s th c: + Bi u di n dư i d ng th p phân: integer[. ..111_1111_111#E+11.0) . Trong th c vi c chu n Time (ki u d li u th i gian) là ki u v t lý duy nh t đã đư c đ nh nghĩa. . – Weak One‘-‘ – Don’t Care) . 16#F. signal A. FETCH. ví d : 0. . Table 1 Hai ki u d li u std_logic và std_ulogic tương t nhau. End Units. . – Đơn v cơ b n ps = 1000 fs. so v i ki u Bit thì chúng có th mô t chính xác và chi ti t hơn cho các ph n c ng s . – High Impedance‘W’.. us = 1000 ns.CBARes_Out <= A. Ki u d li u này dùng nhi u mô t đ hình tr ng thái.Out_1 <= A . giá tr c a tín hi u bên ph i s đư c gán cho tín hi u bên trái). ms = 1000 us. Thư vi n cũng cung c p hàm phát hi n l i này c a các tín hi u ki u std_ulogic. cùng đ l n. type Time is range <xác_đ nh gi i h n> Ví d s d ng:constant Tpd: time:= 3ns . min = 60 sec.integer][exponent]. – Forcing Unknown‘0’. ESC.0. . + Bi u di n dư i d ng cơ s xác đ nh: base#based_integer[. . sec = 1000 ms.. chúng còn xác đ nh đư c cư ng đ khác nhau c a các tín hi u. ‘*’.1/ . đi n tr . ‘a’. – Forcing One‘Z’. – Weak Zero‘H’.Ki u d li u li t kê t đ nh nghĩa: Ki u d li u li t kê. Ví d : type My_State is( RST. Bi u di n c a giá tr Character: ‘A’.org/content/m27428/1. – Weak Zero‘H’. ns = 1000 ps. các h th ng ph c t p. – Forcing Zero‘1’. http://cnx.4E-9. . do đó s có l i khi các tín hi u ki u std_ulogic đư c n i chung vào 1 đi m. type std_logic is ( ‘U’.. cho phép mô t r t sáng s a.5. SHIFT) . – Weak Unknown‘L’. units fs.Connexions module: m27428 3 type PROBABILITY is range 1. – Forcing One‘Z’. NUL.Ki u V t lý – Physical: đư c s d ng đ bi u di n các đ i lư ng v t lý như kho ng cách.FF#E2 (=4095.Res_Out <= B. – Weak Unknown‘L’. 12. .Res_Out: std_logic .5 . 0. – UninitializeX’. do ngư i s d ng t đ nh nghĩa.based_integer ]#[exponent] Ví d : 2#1. . đơn v nh nh t có th bi u di n đư c là đơn v cơ b n. constant P: PROBABILITY:= 0.Ki u std_logic và std_ulogic: ki u d li u logic nhi u m c đã đư c đ nh nghĩa trong gói std_logic_1164. dòng đi n.1234_5678. Ki u v t lý cung c p đơn vi cơ b n và các đơn v k ti p đư c đ nh ngh a theo đơn v cơ b n. .0. l nh gán tín hi u th c hi n đư c v i 2 d li u cùng ki u. chúng ch khác nhau ch là ki u std_ulogic không có hàm phân d i (unresolved) – hàm quy t đ nh giá tr tín hi u.Res_Out <= C. LOAD. – Weak One‘-‘ – Don’t Care) . – Forcing Zero‘1’.C. .Z <= A after Tpd .Ki u Character: Ki u ki u ký t .signal Out_1: std_ulogic . . hr = 60 min.0 downto 0. – Forcing Unknown‘0’. 1.B.Out_1 <= C . ‘ ‘.– UninitializeX’.Out_1 <= B . type std_ulogic is ( ‘U’. th i gian. li t kê v i mi n xác đ nh là t p h p các ký t ASCII.Res_OutCBAOut_1XCó l iTh c hi n đư c (Ký hi u “<=” dùng trên là l nh gán tín hi u.

My_BusB: bit_vector (3 downto 0). + B ng ghi – Record: B ng ghi là nhóm nhi u ph n t có ki u d li u khác nhau thành đ i tư ng duy nh t. WORD <= ( A. H_Byte <= (7|6|0=>’1’. http://cnx. NEXT_STATE: My_State . signal A. Q_Out <= (others => ‘0’) . + M ng – Array: M ng là nhóm nhi u ph n t có cùng ki u d li u v i nhau thành đ i tư ng duy nh t. . D ) . 4 to 7 => ‘1’). signal My_BusC: bit_vector (0 to 3) . std_logic_vector (m ng d li u ki u std_logic) và String (m ng d li u ki u Chacracter). type DATA is array (3 downto 0) of integer range 0 to 9 . B. C. (A. L_Byte <= (3=>’1’. signal Data_Word: std_logic_vector (11 downto 0).org/content/m27428/1. nó có ý nghĩa là các t t c các ph n t còn l i đư c gán b ng m t giá tr nào đó) . Ví d m t s cách khai báo và s d ng d li u m ng: type WORD is array (3 downto 0) of std_logic . Data_Word <= X”A6F”.. Chú ý: Phép g p v bên trái ch dùng v i ki u d li u vô hư ng. Aborting Now”. Cú pháp đ nh nghĩa ki u d li u m ng như sau: Type tên_m ng is array (kho ng _c a _ch s ) of ki u_c a_ph n_t . D : std_logic. Data_Word <= B”1010_0110_1111” .B. signal WORD: std_logic_vector (3 downto 0). X: hexadecimal. L_BYTE: std_logic_vector ( 0 to 7). Trong đó B: Binary -Ki u nh phân.C.1/ . Các ki u d li u m ng đã đư c đ nh nghĩa trong thư vi n chu n c a VHDL là: Bit_logic_vector (m ng d li u ki u Bit). VHDL cũng có các ki u d li u ghép là nhóm các ph n t d li u theo d ng m ng (array) ho c b ng ghi (record). Chú ý: “others” có th đư c s d ng khi gán m c đ nh. B.ki u bát phân. M t s phép toán thao tác v i ph n t m ng: . signal Q_Out: std_logic_vector (31 downto 0). phép gán s th c hi n gán theo t ng ph n t theo th t t trái sang ph i: Data_Word <= ”101001101111” . 1 to 2 => ‘0’. Data_Word <= O”5157”. O: Octal . cùng đ l n. 2 to 5 => ‘0’ ). C. signal C_bus: DATA . 3 => D. WORD <= ( 2 => ‘1’. M i ph n t c a m ng có th đư c truy c p b ng m t ho c nhi u ch s c a m ng. b. Ki u d li u ghép Tương t các ngôn ng l p trình. variable Warning2: string(1 to 30):= “Unstable.Phép g p ( ): cho phép nhóm c d li u vô hư ng và d li u m ng đ thu n ti n cho các phép gán cho m ng: signal H_BYTE.. Cách bi u di n s li u bit_vector và std_logic_vector: B|O|X ”giá_tr ” (dùng d u nháy kép). others => ‘0’ ) . constant Warning3: string(1 to 20):= “Entering FSM State2”. X”1AF”=B”0001_1010_1111”= B”000_110_101_111”=O”0657” .Phép gán cho m ng: 2 m ng ph i cùng ki u.D)<=WORD.Connexions module: m27428 4 signal STATE. signal B_bus: WORD . M t s ví d s d ng các ki u d li u này như sau: signal My_BusA.

Connexions module: m27428 5 • M i ph n t c a b n ghi đư c truy nh p t i theo tên trư ng. PARITYADDRESSDATA_BYTENUM_VALUESTOP_BITS. signal My_Mem:Mem_Array . Ví d ng d ng dùng m ng 2 chi u kh i t o m t vùng nh ROM constant My_ROM: REM_Array:= (0 => (others=>‘1’). c. 2 => “00001111”.ADDRESS <= (“0011”). end record .”10” ) . d. Cú pháp khai báo chung: Subtype Tên_ki u_d _li u_con is xác_đ nh_ki u_d _li u_con. signal TX_PACKET. ... • Các ph n t c a b n ghi có th nh n m i ki u c a ngôn ng VHDL k c m ng và b ng ghi. 2 thành ph n này đư c ngăn cách b i d u ‘. http://cnx. RX_PACKET : OPCODE.5. 3 => “11110000”). DATA_BYTE: std_logic_vector ( 7 downto 0 ).org/content/m27428/1. ADDRESS: std_logic_vector ( 0 to 3 ). TX_PACKET. Ki u d li u con Là m t t p h p con c a các ki u d li u đã đư c đ nh nghĩa khác.30123012My_BusAMy_BusBMy_BusC <= My_BusA .. 3012My_BusAMy_BusBMy_BusB <= My_BusA . subtype word is bit_vector(31 downto 0). 1 => “10100010”. Ví d : subtype My_Int is integer range 0 to 255 .ADDRESS. TX_PACKET <= RX_PACKET.”0011”.1/ . signal My_Data:Data_Array . M t s ví d đ nh nghĩa và khai báo ki u d li u m ng 2 chi u như sau: type Mem_Array is array (0 to 3) of std_logic_vector (7 downto 0)..”11101010”.’ TX_PACKET <= ( ‘1’. STOP_BITS: bit_vector (1 downto 0).Cách truy nh p và gán d li u cho các trư ng c a b n ghi: Các ph n t c a b n ghi đư c truy nh p theo tên b n ghi và tên trư ng. .0. NUM_VALUE: integer range 0 to 6.2 Ví d đ nh nghĩa ki u d li u b ng ghi như sau: type OPCODE is record PARITY : bit. Phép khai báo ki u d li u con có th n m m i v trí cho phép khai báo ki u d li u. TX_PACKET. Ki u d li u m ng 2 chi u (2-D Array) M ng 2 chi u là ki u d li u m ng c a các ph n t m ng m t chi u hay b ng ghi. type Data_Array is array ( 0 to 2 ) of OPCODE . subtype My_Small_Int is My_Int range 5 to 30 .ADDRESS <= RX_PACKET.