Bài 1
ấ
ề
ầ
V n đ Mô hình hoá ph n c ng ứ (Hardware Modeling)
Hardware Modeling - 1 - 1
VHDL là gì?
• M t t
ừ ế ắ ộ ừ ế ắ vi t t t cho m t t ộ ừ ế ắ vi t t t khác, VHDL là t vi t t t
t c a
vi
ừ ế ắ ủ Very High Speed Integrated
c a ủ VHSIC Hardware Description Language t t – Còn VHSIC là t
Circuit
• Ti p theo, chúng ta b t đ u tìm hi u v xu t x và m c
ắ ầ ấ ứ ụ ế ể ề
ủ ữ đích c a ngôn ng này
Hardware Modeling - 1 - 2
ụ
ự
• VHDL, tr ầ
ụ ể ướ ế
VHDL M c đích và s hình thành ộ ủ ế c h t và ch y u là m t công c đ mô hình ứ ỏ
ể
ạ
ổ
hoá ph n c ng (hardware modeling) ợ – Đ mô ph ng (simulation) và t ng h p (synthesis) m ch
ệ
ố
ấ ớ ợ ẩ ỉ • Chu n IEEE 1076 r t hoàn ch nh cho vi c mô hình hoá ị ế ị t b , nh ng nó m i ch đ nh nghĩa các tham s khái ế ị t b ỉ ư thi ệ ổ quát cho vi c t ng h p thi
ẳ
ế ợ ộ ộ ứ • K t qu : m t mô hình ph n c ng đã cho không h n đã phù ổ m c c ng logic đã có thông qua các t k
ả ầ ớ ế ế ở ứ h p v i m t thi ệ ụ công c và các công ngh đích (target) khác nhau
Hardware Modeling - 1 - 3
ẩ
Chu n hoá VHDL
ổ
ứ
ứ
ẩ
ấ
• T ch c IEEE chính th c phê chu n ch p nh n ngôn ng VHDL
ư
ậ ẩ
ẩ
ọ
ộ
ủ ẩ
ượ
ư
ử
ẩ
ổ
ố
c s a đ i
ỳ ố
ể
ữ nh là m t chu n c a h vào năm 1987, chu n IEEE 1076 ủ – Gi ng nh các chu n kác c a IEEE, chu n IEEE 1076 đ i thi u là 5 năm
theo chu k t
ệ
ự
ượ
ả
ệ ệ
ủ
ữ
ổ ầ • S a đ i đ u tiên đ ượ ắ ầ
ấ ầ
ụ
ề
ầ
VHDL-2X
ỗ ợ ộ
VHDL-93
ậ ỗ ợ ở
ượ
ử c th c hi n năm 1993, và VHDL93 hi n ứ nay đ c coi là phiên b n chính th c c a ngôn ng này, hi n ệ nay b t đ u xu t hi n VHDL 200X ế – Tuy nhiên, h u h t các công c (tool) ả đ u h tr phiên b n đ u tiên (VHDL87) ủ – Các b ph n c a VHDL 200X ộ ố c h tr b i m t s tool đ
VHDL-87
Hardware Modeling - 1 - 4
Language Subsets
IEEE 1076 (modeling)
IEEE 1076 (synthesis)
ể ổ ề ấ ợ
ể ạ ươ ứ ả ấ ả t c các c u trúc VHDL đ u có th t ng h p ụ wait for 10 ns là m t c u trúc mô hình hoá thông ộ ấ ớ ng ng v i và cũng không th t o ra
• Không ph i t c. Ví d , đ ư d ng, nh ng nó không t ầ ử ở ứ m t ph n t
ượ ụ ộ ổ m c c ng logic
Hardware Modeling - 1 - 5
Các mức trừu tượng trong mô tả phần cứng
F
Behavioral
Ít chi tiết hơn, thiết kế và mô phỏng nhanh hơn
RTL
AND_OR2
DFF
Logic
Chi tiết hơn, phụ thuộc công nghệ, thiết kế và mô phỏng chậm hơn
Layout
CLB_ R5C5
CLB_ R5C6
Hardware Modeling - 1 - 6
ồ
ự
S ch ng chéo trong VHDL
Sum <= A + B after 3 ns ;
Hardware Model
Behavioral
Synthesizable Code
Sum <= A + B ;
RTL
component Xlx_add2
FPGA Vendor Library
Logic
Place & Route Utility
Layout
port ( A: in bit ; B: in bit ; Sum: out bit ); end component ;
Hardware Modeling - 1 - 7
Trình tự thiết kế Top-Down
• VHDL h tr h
ỗ ợ ướ ế ậ ng ti p c n topdown trong thi ế ế t k
Hardware Modeling - 1 - 8
ắ ạ
• Khi ti n hành phân đo n m t thi
ầ ư ế ế
ạ t k trong VHDL, c n l u
Nguyên t c phân đo n ộ ế ể
ệ
i các module
i biên gi
ắ
ợ ế ố – Gi m đ n t ọ
ớ • Phù h p v i c u trúc mã ngu n d ng RTL ố ả i thi u s clock trên m i block • Quan tr ng đ i v i các ràng bu c v th i gian, Important for
ố ư
ạ ỗ ề ờ ạ
timing constraints, t
ộ ấ i u hoá c u trúc m ch
ạ
ố
ỗ
ụ ề
ố ư
ế
ầ
ớ
– Duy trì các tín hi u then ch t trong ph m vi m i block i u thông qua biên gi
ệ • H u h t các công c đ u không t
i
hierarchy ướ
ủ ừ
ể ể
ủ
ỏ ể c c a t ng block đ nh đ có th ki m tra nhanh
– Kích th chóng ẫ
ử
ỗ
ơ
ả • M u th nhanh, đ n gi n cho m i submodule
ộ ố tâm cân nh c m t s các đi m chính sau ạ ố – Tín hi u ra có ch t (Register) t ớ ấ ồ ể ố ớ
Hardware Modeling - 1 - 9
Cấu trúc Top - Down
SUM [3:0]
A[3:0]
entity Add_4
B[3:0]
C_out
C_in
Sum
entity Full_Add
A B
C_out
Macro
C_in
A
entity Half_Add
B
Sum
Leaf Cell
Carry
Hardware Modeling - 1 - 10
ể
Ki m tra thi
ế ế t k
ể ự ướ ể ế c ki m tra thi t
• Khi s d ng kế, b t đ u t
Behavioral Simulation (Testbench driven)
VHDL modules
ệ ử ụ VHDL, có th th c hi n các b ắ ầ ừ Behavioral Simulation
L A T
Synthesis
Gate-Level Functional (Netlist-driven )
I
V
Place & Route
VHDL Initiative Toward ASIC Libraries
Gate-Level Timing (Back-annotated netlist )
SDF (Standard Delay Format) & Structural VHDL File
Hardware Modeling - 1 - 11
Các bước kiểm tra thiết kế
ả
(1) Mô ph ng Behavioral ồ
ệ
hành vi, dùng testbench
• Th c hi n mã ngu n mô t
ỏ ự ỏ (2) Mô ph ng RTL ự
ệ
ồ
• Th c hi n file mã ngu n RTL, dùng testbench
VHDL modules
ỏ ự
ả ấ
ệ
(3) Mô ph ng ch c năng trong VHDL c u trúc,
ứ • Th c hi n file .vhd mô t dùng testbench
Synthesis
ỏ
ứ
ế ị ở ứ
ổ
t b
m c c ng
(4) Mô ph ng ch c năng thi ỏ
ụ ứ
ổ
• Mô ph ng netlist preP&R EDN dùng công c m c c ng
Place & Route
ệ ờ
ỏ ự
ệ
ấ
(5) Mô ph ng theo quan h th i gian trong VHDL • Th c hi n file c u trúc .vhd và file SDF; dùng testbench ỏ
ở ứ
ệ ờ
ổ
(6) Mô ph ng quan h th i gian
m c c ng
ử ụ
ỏ
• Mô ph ng netlist post P&R EDN netlist, s d ng các delays
Hardware Modeling - 1 - 12
ể
ế ế
Ki m tra thi
t k ?
Test-Bench
Behavioral Module
• Chip level • Board level • Std parts model • Model bus operation • Discrete event-driven • Flexibility over strictly
FPGA
MCU
netlist-driven
Memory
PLD
Hardware Modeling - 1 - 13
ế
ậ
K t lu n
• VHDL là m t ngôn ng dùng đ mô hình hoá ph n c ng
ứ ữ ể ầ
ộ ế ị t b ợ ủ c a thi ổ ữ ủ
ộ ả ưở ế ệ ng đ n
ộ ậ • T ng h p logic là m t t p con c a toàn b ngôn ng ụ • Các v n đ v công c và công ngh có nh h ủ ấ ệ ổ vi c t ng h p logic c a m t thi
ề ề ợ ỏ ế ế t k ồ ữ ệ ờ ị ộ ể • Các mô ph ng HDL có th bao g m các d li u đ nh th i
(backannotated timing data)
Hardware Modeling - 1 - 14
Bài 2
ữ
Ngôn ng VHDL
Hardware Modeling - 1 - 15
Design Units trong VHDL
ồ
ươ
ng trình VHDL bao g m
Ch các design units.
ộ ậ
ộ ố M t s design units đ c l p ớ v i các design unit khác.
• Entity • Architecture • Configuration • Package • Package Body • Library
Hardware Modeling - 1 - 16
ạ
Các lo i Design Unit
• Trong VHDL có hai lo i ạ design unit, đó là:
– Primary
ụ
ộ
• Không ph thu c vào các design unit khác
– Secondary ộ
ụ
• Ph thu c vào primary design unit
ầ ổ
ỗ ể ế ạ ả • M i khi có thay đ i trong primary design unit, c n ph i ươ ng i secondary design unit. N u không, ch
ki m tra l ẽ trình s có l ỗ i.
• Các secondary unit không th t n t ụ
ể ồ ạ ộ ậ i đ c l p
ả ộ ph i ph thu c primary unit ứ t c là,
Hardware Modeling - 1 - 17
Entity
ự
ủ
• Entity mô t
ả external interface c a th c th đ
c
ế ế
ộ t k , cùng các thu c tính liên quan v i
ể ượ ớ interface
thi đó
A
Sum
entity Half_Add is
B
Carry
port (A, B : in std_logic ;
Carry, Sum : out std_logic) ;
end Half_Add ;
Chú thích: VHDL’93 cho phép dùng optional reserved word entity ngay sau reserved word end, ví dụ, ‘end entity Half_Add ; ’
Hardware Modeling - 1 - 18
Architecture
• Architecture mô t
ả ạ ộ ự ủ ể ho t đ ng bên trong c a th c th
ể ắ
ứ
ự
ớ ắ
ể ệ ề
ủ ộ
ự
ể
ể
ộ ớ v i nó, có th có nhi u architecture cho m t th c th
(entity) g n v i nó (primary unit) ộ – M t architecture th hi n m t ch c năng c a th c th g n
architecture My_Arch of Half_Add is
begin
Sum <= A xor B ;
Carry <= A and B ;
end My_Arch ;
Note: VHDL’93 cho phép sử dụng reserved word architecture sau reserved word end
Hardware Modeling - 1 - 19
Multiple Architecture
ồ ạ ể
ả
• Có th có nhi u architecture cùng t n t
ạ ộ ho t đ ng
i đ mô t
ự
ể ể ể
ễ
ạ
ế
t
ủ ộ
ứ
ậ
ặ
ể ề ộ ủ c a m t th c th – Chúng có th bi u di n các giai đo n khác nhau c a quá trình thi ế ế k ho c các cách ti p c n khác nhau cho cùng m t ch c năng (optimization for speed verus area, etc.)
entity Half_Add is . . .
entity Cnt64 is . . .
end Half_Add ;
end Cnt64 ;
architecture BEH of Half_Add is . . .
architecture BEH of Cnt64 is . . .
end BEH ;
end BEH ;
architecture RTL of Half_Add is . . .
architecture RTL of Cnt64 is . . .
end RTL ;
end RTL ;
architecture XLX of Half_Add is . . .
architecture XLX of Cnt64 is . . .
end XLX ;
end XLX ;
Hardware Modeling - 1 - 20
Package
ượ
ữ ệ
ể
c dùng đ khai báo các d li u
• M t ộ package declaration đ ế ế
ộ
ồ
t k , bao g m: dùng cho toàn b thi – Constants, data types, subtypes, subprogram và function
declarations, v.v…
package My_Pack is
library IEEE; use IEEE.std_logic_1164.all ; . . . use work.My_Pack.all ;
entity . . .
constant. . . . . . function. . . . . . component . . . . . . subtype. . .
end package My_pack ;
Hardware Modeling - 1 - 21
Package Body
ộ ố ượ ế ề ứ ủ • M t ộ package body là m t ộ dependent unit c a m t t v các đ i t ng
package, nó ch a các thông tin chi ti trong package – Subprograms, deferred constants
package My_Pack is
package body My_Pack is
declaration
details
function bv_to_integer (BV: bit_v.. return integer is variable … begin for index in BV'range loop . . . .
constant. . . . . . function bv_to_integer ( . . . component . . . . . . subtype. . .
end My_Pack ;
. . . end My_Pack ;
Hardware Modeling - 1 - 22
Library
ấ ả ượ ư ề ng t c các đ i t ố ượ VHDL đ u đ c l u trong
ơ
ợ
ị
ế ế t k
ượ
(design unit) đã đ
ượ
ọ design unit
ư ệ ị
c cho m i
library IEEE ;
package std_logic_1164 is..
package std_logic_unsigned is..
package std_logic_arith is..
ề ơ ả • V c b n, t các th vi n ộ ậ ư ệ – Theo đ nh nghĩa, th vi n là m t t p h p các đ n v thi ứ ể c ki m ch ng ư ệ – Work và std là hai th vi n dùng đ
Hardware Modeling - 1 - 23
Library
•
ươ
ự
ộ
Libraries và Packages comprise the VHDL Design Management structure – Theo m t nghĩa nào đó, nó t
ư directories và
ng t
nh
subdirectories
library IEEE ;
package std_logic_1164 is..
package std_logic_unsigned is..
package std_logic_arith is..
Hardware Modeling - 1 - 24
ở ạ
Kh i t o các Library
• Tên c a library đ n thu n là m t tham tr v m t logic
ẩ
ị
ẽ ề ấ ể
– Chu n VHDL không quy đ nh các yêu c u ch t ch v c u ễ ượ chuy n giao
ủ ầ ộ ơ
ữ
ầ ậ ủ trúc c a library, do v y chúng không d đ gi a các tool
library My_Lib
package Fast_Counters is..
ỏ ề ặ ặ c
library My_Lib ; use My_Lib.Fast_Counters.all ;
package DSP_Filters is..
entity Mod1 is port ( . . .
Hardware Modeling - 1 - 25
ở ạ
Kh i t o các Library
ườ ả ạ ầ ỗ ụ ng, c n ph i t o các th vi n trong m i tool c
ượ
• Thông th ể th thay vì attach các th vi n đã có – Đ t tên cho library, và sau đó phân tách các design unit đ
c
ặ ọ
ư ch n đ a vào nó
library My_Lib
package Fast_Counters is..
ư ệ ở ư ệ đâu đó
library My_Lib ; use My_Lib.Fast_Counters.all ;
package DSP_Filters is..
entity Mod1 is port ( . . .
Hardware Modeling - 1 - 26
Work Library
ể c dùng đ ị t t k ặ subdirectory) m c đ nh đ ế ế đã đ ư ụ • Đây là th m c con ( ơ ữ ấ ả t c các đ n v thi
ủ
ẽ ạ ề ổ
ứ library là nhãn tên c a design unit ch
ể ả
ủ
ộ ỗ • M i m t công c ộ ấ m t c u trúc nh th – Chú ý: hi n th
ượ ị ượ ư ị c biên d ch l u gi ị ỉ ừ (compiled design units), tr khi có các ch đ nh khác. ợ đ u s t o ra ụ mô ph ngỏ ho c ặ t ng h p ư ế ị ở không ph i là tên c a source file
Hardware Modeling - 1 - 27
Work Library
ụ ề ộ ủ ộ M t ví d v n i dung c a
work library
Design Unit Identifier
DFF
entity HALF_ADD entity entity REG4 package
My_Counters. . .
ươ ng
Secondary (dependent) design units tham tr ỏ ớ t i primary unit t ớ ứ ng v i nó
architecture RTL architecture STRUCTURAL
Hardware Modeling - 1 - 28
ụ ề
Ví d v Hierarchy : DFF
entity DFF is port (D, Clock : in std_logic ; Reset : in std_logic ; Q : out std_logic) ; end entity DFF ;
D
Q
Clock
Reset
architecture RTL of DFF is begin process (Clock, Reset) begin If (Reset = ‘1’ ) then Q <= ‘0’ ; elsif (Clock’event and Clock = ‘1’) then Q <= D ; end if ; end process ; end architecture RTL ;
Hardware Modeling - 1 - 29
ụ ề
Ví d v Hierarchy : REG4
REG_4
D_in(3)
Q_out(3)
entity REG_4 is port (D_in : in std_logic_vector (3 downto 0); Clk, Rst : in std_logic; Q_out : out std_logic_vector (3 downto 0));
DFF U3
end REG_4;
architecture Structural of REG_4 is
D_in(2)
Q_out(2)
DFF U2
D_in(1)
Q_out(1)
DFF U1
component DFF port ( D, Clock : in std_logic ; Reset : in std_logic; Q : out std_logic ) ; end component ;
D_in(0)
Q_out(0)
DFF U0
Clk
Rst
begin U3 : DFF port map (D_in(3), Clk, Rst, Q_out(3)); U2 : DFF port map (D_in(2), Clk, Rst, Q_out(2)); U1 : DFF port map (D_in(1), Clk, Rst, Q_out(1)); U0 : DFF port map (D_in(0), Clk, Rst, Q_out(0)); end Structural;
Hardware Modeling - 1 - 30
• Có hai ph
ệ ổ
ứ
Liên kết Tín hiệu ớ ế ươ ng pháp liên k t các tín hi u v i các c ng ủ ng ng c a chúng
t kê theo
ấ
ượ ệ ệ ở ứ c li m c cao đ ở ứ m c th p trong component
đúng tr t t declaration
• U1: DFF port map (D_in, Clk, Rst, Q_out) ;
component DFF port (D, Clock : in std_logic ; Reset : in std_logic ; Q : out std_logic ) ; end component ;
ươ t ị ế – Liên k t theo v trí: Các tín hi u ổ ậ ự ủ c a các c ng (port)
Hardware Modeling - 1 - 31
• Có hai ph
ệ ổ
ứ
Liên kết Tín hiệu ớ ế ươ ng pháp liên k t các tín hi u v i các c ng ủ ng ng c a chúng
ế
ổ
c
ệ ụ
ủ
ộ
ộ
t kê m t cách rõ ràng, đ y đ , không ph thu c tr t t
ệ li (strongly recommended)
• U1: DFF port map ( D =>D_in(1), Clock =>Clk, Reset
=>Rst, Q =>Q_out(1)) ;
component DFF port (D, Clock : in std_logic ; Reset : in std_logic ; Q : out std_logic ) ; end component ;
ươ t ượ – Liên k t theo tên: Các c ng (ports) và tín hi u (signals) đ ậ ự ầ
Hardware Modeling - 1 - 32
ấ ả ể ầ ự ệ ả ượ
Signal Declaration • T t c các tín hi u bên trong th c th c n ph i đ
c khai
báo rõ ràng
architecture Structural of Top is
entity Top is port (I1, I2 : in std_logic; 01, 02 : out std_logic) ; end Top ;
component Sub_A port (A1, A2, A3 : in std_logic ; A4 : out std_logic_vector (3 downto 0)) ; end component ;
Top
component Sub_B port (B1: in std_logic_vector (3 downto 0 ) ; B2, B3, B4 : out std_logic) ; end component ;
Sub_A
Sub_B
Bus_1
signal Bus_1 : std_logic_vector (3 downto 0) ; signal Sig_1: std_logic ;
A4
B1
A1
B3
Sig_1
A2
A3
B2
B4
I1 I2
O1 O2
begin U0 : Sub_A port map (I1, I2, Sig_1, Bus_1) ; U1 : Sub_B port map (Bus_1, Sig_1, O1, O2) ; end Structural ;
Hardware Modeling - 1 - 33
Cụ thể hoá phần tử
• Component instantiation
entity REG_4 is port (D_in : in std_logic_vector (3 downto 0) ; Clk, Rst : in std_logic ; Q_out : out std_logic_vector (3 downto 0)) ; end REG_4 ;
Q_out(3)
from target library may be helpful for chip level optimization ( i.e., Xilinx D_in(3) Virtex )
FDC U3
D_in(2)
Q_out(2)
FDC U2
architecture Xilinx_Struct of REG_4 is component FDC port (D : in std_logic ; Clock, Reset : in std_logic ; Q : out std_logic) ; end component ; begin U3 : FDC port map (D=>D_in(3), Clock=>Clk, Reset=>Rst, Q=> Q_out(3)) ;
D_in(1)
Q_out(1)
FDC U1
U2 : FDC port map (D=>D_in(2), Clock=>Clk, Reset=>Rst, Q=> Q_out(2)) ;
D_in(0)
Q_out(0)
U1 : FDC port map (D=>D_in(1), Clock=>Clk, Reset=>Rst, Q=> Q_out(1)) ;
FDC U0
Clk
Rst
U0 : FDC port map (D=>D_in(0), Clock=>Clk, Reset=>Rst, Q=> Q_out(0)) ;
end Xilinx_Struct ;
Hardware Modeling - 1 - 34
S d ng Generics • Generics là các tham s có th c p nh t đ ng (thay đ i giá ụ ể
ố ộ
ề
ạ
ế ế ị ể ậ ệ c th hoá ph n t ậ ộ ủ ầ ử c a thi ổ t k
ử ụ ố ừ tr ) trong t ng câu l nh (component instantiation) – Đi u này cho phép khai báo các tham s m t cách linh ho t, m m
ề d oẻ
library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned_all; use IEEE.std_logic_arith.all;
entity My_Cntr is generic (Count_Width : integer := 8 ); port ( Data_In: in std_logic_vector (Count_Width -1 downto 0); Clk, Reset, Load, UpDn : in std_logic; Q_Out: out std_logic_vector (Count_Width -1 downto 0)); end entity My_Cntr;
Lab Marker
architecture RTL of My_Cntr is • • • • end architecture RTL;
Hardware Modeling - 1 - 35
Cập nhật giá trị của Generics
ử ụ
library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned_all; use IEEE.std_logic_arith.all;
entity MY_TOP_DESIGN is port ( DATA_BUS: in std_logic_vector (63 downto 0); CLOCK, RST, LD, CNTRL : in std_logic; DATA_Out: out std_logic_vector (63 downto 0)) ; end entity MY_TOP_DESIGN;
architecture STRUCTURAL of MY_TOP_DESIGN is
t kế ế
ế
ộ • S d ng m t generic map cùng v i ớ port map, khi có m t ộ ụ ầ ử ượ ph n t c c đ ể th hoá đâu đó trong thi – N u không có
component My_Cntr generic ( Count_Width : integer := 8 ); port ( Data_In: in std_logic_vector (Count_Width -1 downto 0); Clk, Reset, Load, UpDn : in std_logic; Q_Out: out std_logic_vector (Count_Width -1 downto 0)); end component ; begin U0: My_Cntr generic map (Count_Width => 64) port map (DATA_BUS, CLOCK, RST, LD, CNTRL, DATA_OUT ) ; • • • • end architecture RTL;
generic map, generic ậ ị nh n giá tr ị ặ m c đ nh ban đ uầ
Hardware Modeling - 1 - 36
ị
Biên d ch VHDL ớ ố ố
• Có th có b n giai đo n biên d ch ng v i b n m c x lý
ạ ứ ử ị
ấ
ể
i cú pháp. Sau khi hoàn t
ẽ t, nó s
ỗ c ki m tra l work directory
đ
ứ ể ộ
ử
ấ
• C u trúc hierarchy c a thi
m c
c l u gi – Elaboration (ch nh s a) ủ ỗ
c dàn tr i b t đ u t ỉ ụ ể
ả ắ ầ ừ ứ ộ
ấ Ứ ấ ượ ạ
ế ế ượ t k đ cao nh t. ng v i m i submodule c th ch có m t copy duy nh t đ
– Synthesis (t ng h p)
ạ
ủ
ặ
netlist c a thi
c t o ra ho c theo format
ớ c t o ra ợ ổ ả • D ng mô t ẩ
ệ
ặ
ế ế ượ ạ t k đ ộ
chu n công nghi p ho c theo m t vendorspecific format
– Execution (ch mô ph ng)
ỉ ượ
ỏ ỏ
ướ
ạ
ờ
• Mô hình đ ề
c mô ph ng theo các b ể
ự ệ ở
ượ
ệ
ộ
ở c đi u khi n b i các s ki n
c th i gian gián đo n. Nó ồ các tín hi u đ ng b quá trình
đ
ứ ầ cho m t mô hình ph n c ng VHDL – Analysis (phân tích) ượ • Design unit đ ữ ở ượ ư ỉ
Hardware Modeling - 1 - 37
Quy trình biên d chị
entity DFF is port (D, Clk : in Reset: in Q: out . . . architecture..
Analyze
Execute
Elaborate
Synthesize
Hardware Modeling - 1 - 38
ự
ị
Trình t
Biên d ch
• Do m i quan h gi a các
ố ệ ữ
ả ư
ấ ị
ướ architecture c phân tích tr c các
primary và secondary design unit ở ứ ể ụ ể m c cũng nh kh năng có th c th hoá các module ộ ậ ự ơ th p h n, nên quá trình biên d ch luôn tuân theo m t tr t t nghgiêm ng tặ • Các entity ph i đ ứ ả ượ ớ ng ng v i chúng ươ t
• Các package c n ph i đ
ả ượ ầ ướ package c phân tích tr c các
• M i m t module c n ph i đ
ả ượ ộ ướ c phân tích tr c khi nó
ị
ỏ ở ự body ỗ ượ đ – Đây là trình t ầ c tham tr b i các module khác Bottomup biên d ch
Hardware Modeling - 1 - 39
Comments
ụ
ễ ể ư ở ươ ự ề ơ ở ồ • Comments (chú thích) có tác d ng làm cho mã ngu n tr các ngôn nh ng t
ữ nên d hi u h n, đi u này cũng t ng khác
ằ
ắ ầ ỉ ế ụ ấ ế ế
ấ ả ấ ả ầ t c các dòng ạ Comments b t đ u b ng hai d u g ch ngang Chúng ch ti p t c cho đ n h t dòng ề ộ M t comment trên nhi u dòng c n ph i dùng ạ hai d u g ch ngang trên t
ể ế ừ t t đây
A_OUT <= ‘1’ ; Comments có th vi
Hardware Modeling - 1 - 40
ế
ậ
K t lu n
• VHDL bao g m các
ồ primary và secondary design unit
• Tr t t
ượ ự ng trình VHDL đ ệ c th c hi n theo
ậ ự ộ ươ ẽ ặ ị biên d ch ch ậ m t quy lu t ch t ch
ứ ể ượ ư design unit đã đ c ki m ch ng đ c l u trong
ọ ượ work library ấ ả • T t c các ư ệ ộ m t th vi n g i là
• Có th s d ng
ạ ủ ể ể ử ụ Generics đ tăng tính linh ho t c a mã
ngu n (ồ source code)
Hardware Modeling - 1 - 41
Bài 3
Signals và Data Types
Hardware Modeling - 1 - 42
• Data types là m t y u t
ọ ư quan tr ng trong VHDL (cũng nh
ậ
ộ
ị
gi
ữ ữ ệ
Data Types ộ ế ố trong các ngôn ng khác) ỉ ể ộ ỗ – M i m t ki u d li u ch cho phép nh n các giá tr trong m t ả ấ ị i nh t đ nh ỗ ố ượ – M i đ i t
ả ng (signal, variable, constant, ho c port) c n ph i
ể
có ki u d li u nh t đ nh khi đ
ầ ặ c khai báo (declared)
ấ ị • VHDL là m t ngôn ng đ nh ki u r t ch t ch
ữ ệ ộ ệ
ả
ữ ị ẽ ặ
ủ
ể
ầ
ượ ể ấ ể ế ớ ầ – Các tín hi u liên k t v i nhau c n ph i có cùng ki u ả ữ ệ ể ề • Trong VHDL có nhi u ki u d li u cho phép mô t ả ứ ả ằ c ng và ki m tra l i nh m đ m b o s t ứ ạ ớ trong các mô hình l n và ph c t p ả ể ắ – C n tuân th quy t c ki m tra ki u trong các mô hình c
ứ
ổ
hành vi (behavioral) và m c c ng (gatelevel)
ự ươ ể ỗ ầ ph n ệ ng thích tín hi u
Hardware Modeling - 1 - 43
ữ ệ ộ ộ ể ả
Signals và Ports ợ ầ • Ki u d li u và đ r ng bus c n ph i phù h p trong các ổ
ệ ệ l nh gán tín hi u (signal) và c ng vào ra (port)
entity REG_4 is port (D_in1 : in std_logic_vector (3 downto 0); Cntrl : in std_logic_vector (1 downto 0); Clock, Reset : in std_logic; Q_out : out std_logic_vector (3 downto 0)); end entity REG_4;
(cid:0)
(cid:0)
signal A : integer ; signal B : bit ; signal C : integer ; signal D : std_logic ;
(cid:0)
(cid:0)
(cid:0)
A <= C; A <= C + 1; A <= B; D <= C; B <= D; Q_out <= Cntrl;
(cid:0)
Hardware Modeling - 1 - 44
ạ
Các lo i data type trong VHDL
• Có 4 categories (lo i) data types trong VHDL
– Scalar
• Single value object, defined indices, ordered
– Composite
• Group objects, similar or different types
– Access
• Defines pointers to objects • covered in Advanced VHDL course
– File
• Sequence of objects of given type • covered in Advanced VHDL course
ạ
Hardware Modeling - 1 - 45
Scalar Data Types
ị ơ ẻ ậ ể ng nh n các giá tr đ n l . Trong
–
ữ ệ • Ki u ds li u vô h ớ ồ
– Real – Physical – Character – Std_logic and std_ulogic – Enumerated
ướ VHDL, l p các data type này g m có: – Bit – Boolean Integer
Hardware Modeling - 1 - 46
Bit và Boolean
ứ ư ừ ầ • V a đ đ mô hình hoá ph n c ng, nh ng nó không cho
ị các giá tr highimpedance, unknown, don’t
ủ ể ả phép mô t care, v.v...
architecture BEHAVE of MUX is signal A,B,Sel, Z : bit ; begin if Sel = ‘1’ then Z <= A ; else Z <= B ; end if . . .
type bit is (‘0’, ‘1’) ;
• Thích h p cho vi c mô hình hoá
if Sel =‘1’, if F >= G..
ệ ợ ở ứ ế ệ m c khái ni m lý thuy t
both yield boolean result
type boolean is (false, true) ;
Hardware Modeling - 1 - 47
Integer và Real
• Ch p nh n các giá tr và các đ i l
ả
ị ẽ ử ụ
ể i giá tr cho các ki u nguyên (integer), ị ặ
ớ ố
ị ả
ị
i giá tr m c đ nh v i s nguyên
ạ ượ ậ ấ ị ự ộ ng m t cách tr c quan
và linh ho tạ ả ầ – C n ph i quy đ nh gi ế n u không nó s s d ng gi 32bit
signal A : integer range 0 to 7; signal B : integer range 15 downto 0 ;
type integer is range . . .
• Cho phép ng
ị
ấ ị ư
ị ự ố
ị ể
ế ế ử ụ ả ớ i thi ể t k s d ng các giá tr floating point i giá tr th c nh t đ nh
ườ – Khai báo các ki u real v i gi – Cách dùng giá tr ki u ‘Real’ không gi ng nh ‘Integer’
type CAPACITY is range -25.0 to 25.0 ; signal Sig_1 : CAPACITY := 3.0 ;
type real is range . . .
Hardware Modeling - 1 - 48
ượ ng các
Physical ượ ố ượ
ộ ể ị c dùng đ đ nh l ờ ng, đ dài, th i gian
• Ki u v t lý đ
ị ơ ở ủ ượ
ậ ể • Ki u v t lý (Physical type) đ ạ ượ ư ậ ng v t lý nh là kh i l đ i l ơ ị ậ ể c đ nh nghĩa theo đ n v c s c a nó – Bất kỳ đơn vị dẫn xuất nào cũng là bội của đơn vị cơ sở
type time is range 1 to 1000000
Time là kiểu vật lý duy nhất được định nghĩa trong VHDL. Nó rất cần thiết cho việc mô phỏng thời gian trễ và các tham số khác có liên quan thời gian.
constant Tpd : time := 3ns ; . . . Z <= A after Tpd ;
units fs; ps = 1000 fs; ns = 1000 ps; us = 1000 ns; ms = 1000 us; . . .
Hardware Modeling - 1 - 49
Std_logic và Std_ulogic
• Std_logic đ
ượ c phát tri n t
ỗ ợ
ệ
ị
ượ ứ ế ầ ộ h th ng c dùng đ mô hình hoá ph n c ng m t cách chi ti ể ừ ệ ố MVL (MultiValue Logic) t
ủ unknown, threestate …
ượ
ị
– Đ c đ nh nghĩa trong gói IEEE std_logic_1164
type std_ulogic is (
ể và đ ớ ể bit ơ h n so v i ki u ứ – H tr các m c giá tr khác nhau c a tín hi u: don'tcare conditions,
Recall: type bit is limited to (‘0’, ‘1’).
‘U’, -- Uninitialized ‘X’, -- Forcing Unknown ‘0’, -- Forcing Zero ‘1’, -- Forcing One ‘Z’, -- High Impedance ‘W’, -- Weak Unknown ‘L’, -- Weak Zero ‘H’, -- Weak One ‘ - ‘ -- Don’t Care
) ;
Hardware Modeling - 1 - 50
ứ
ề
ư
ị
• C hai ki u đ u ch a cùng m t t p các giá tr nh nhau
So sánh Std_logic và Std_ulogic ộ ậ ạ
ở
ự
ỗ ự
ệ
ch th c hi n m ch (implementation)
ế ế ử ụ
ườ
ệ
ể
ề
ộ
i thi
ộ
ả ế ị
ự ế
ượ
ể
ệ tín hi u nào đ
ư c đ a
ể ả – S khác nhau – Ch ữ u trong ulogic có nghĩa là unresolved ề ế • N u ng t k s d ng hai hay nhi u tín hi u đi u khi n m t ử c a ra chung thì anh ta ph i dùng m t hàm resolution (có trong gói ieee_std_1164) đ quy t đ nh trên th c t ớ ử t
i c a ra
ụ ộ
ư
ả
ộ
ơ
i đ ki m tra các l
ạ ể ể t
i
ạ • Std_ulogic không có kh năng đó, nh ng nó t o ra m t công c n i ấ ỗ wiredoring do s su t
signal A,B,C,Res_Out : std_logic ; signal Out_1 : std_ulogic ;
A
A
Res_Out <= A; Res_Out <= B; Res_Out <= C;
Out_1 <= A ; Out_1 <= B ; Out_1 <= C ;
Res_Out
Out_1
X
B C
B C
(cid:0)
Hardware Modeling - 1 - 51
Signal Resolution
ụ ể ề ể ề ệ
ể • M t c a ra c th không th có nhi u tín hi u đi u khi n
ử ụ
ộ ệ
ệ
ệ
ộ ử ề
gán tín hi u có đi u ki n và datatype là std_logic:
signal A,B,C,Res_Out : std_logic ;
ộ ử ể ki u wireor ạ ể – Đ mô hình m t c a ra ba tr ng thái, ta s d ng m t l nh
En0
A
Res_Out <= A when En0 = ‘1’ else ‘Z’ ; Res_Out <= B when En1 = ‘1’ else ‘Z’ ; Res_Out <= C when En2 = ‘1’ else ‘Z’ ;
En1
(cid:0)
B
Res_Out
En2
C
Hardware Modeling - 1 - 52
ệ
ứ ệ
t kê) ầ
• Tăng m c đ linh ho t trong vi c mô hình hoá ph n c ng
ị
ị
ế
ạ ộ
ủ
Enumerated (li ạ ứ ộ ườ ệ ể t kê do ng – Các ki u li ễ ộ ậ nh n bi
ử ụ ể i dùng đ nh nghĩa s d ng các giá tr có th ớ ợ t m t cách d dàng và thích h p v i ho t đ ng c a mô hình ấ
ả
ễ ể
ươ
các máy
– Làm cho các ch
ơ ng trình d hi u h n nh t là khi mô t ệ ố
ứ ạ
ệ
ặ
ạ
tr ng thái (h logic dãy) ho c các h th ng ph c t p
type My_State is ( RST, LOAD, FETCH, STOR, SHIFT ) ; . . . signal STATE, NEXT_STATE : My_State ; . . .
case (STATE) is when LOAD => . . . if COND_A and COND_B then NEXT_STATE <= FETCH ; else NEXT_STATE <= STOR ;
Hardware Modeling - 1 - 53
Composite Data Types
ự ế ợ
ỗ
ộ
• Các data type h n h p là s k t h p các ph n t
ầ ử ướ ạ d
i d ng m t
ặ
ộ
ể
ỗ
ợ
ượ
ợ array ho c m t record – Bit_vector, Std_logic_vector và String là các ki u h n h p đã đ
c
ị
đ nh nghĩa trong VHDL
signal A_word : bit_vector (3 downto 0) := “0011” ;
ể
ệ
ạ
ộ
ừ ộ
• Câu l nh này t o nên m t ki u bit_vector (array) t
m t nhóm 4
ặ
ậ
ị
ị
bit – Trong VHDL không đ nh nghĩa đâu là LSB ho c MSB; do v y, khi ượ ự ộ c t
ị biên d ch giá tr này không đ
ể đ ng hi u là ‘3’
ấ
ố ượ ng có ki u ấ
ể ơ
ặ
ố ượ
ể
Chú ý: dùng d u trích kép (“0011”) cho các đ i t bit_vector, std_logic_vector ho c string, và dùng d u trích đ n (‘1’) ng có ki u bit, std_logic và character cho các đ i t
Hardware Modeling - 1 - 54
Array
• Array là nhóm các ph n t
ầ ử ơ ể đ n có cùng ki u (type) ban
type WORD is array (3 downto 0) of std_logic ;
signal B_bus : WORD ;
đ uầ
B_bus
1
3
2
0
index position
signal B_bus : DATA ;
Nếu B_bus có kiểu WORD, giá trị có thể có của các phần tử là? Còn nếu B_bus có kiểu DATA? type DATA is array (3 downto 0) of integer range 0 to 9 ;
Hardware Modeling - 1 - 55
Phép gán các Array ị ộ array cho m t array khác, thì ộ :
• Khi gán giá tr m t
ầ
ể
ị
ộ
ự
ệ
ị
ừ
ả – 1. Các array c n ph i có cùng ki u giá tr ả – 2. Các array ph i có cùng đ dài ượ – 3. Phép gán đ
c th c hi n theo v trí, t
ả trái sang ph i
signal My_BusA, My_BusB: bit_vector (3 downto 0) ; signal My_BusC : bit_vector (0 to 3) ;
My_BusC <= My_BusA ;
3
2
1
0
My_BusB <= My_BusA ; 0
2
3
1
My_BusA
My_BusA
My_BusB
My_BusC
0
1
2
3
3
2
1
0
Inadvertent bit-swap?
Hardware Modeling - 1 - 56
Cách viết lệnh gán Array
• Đ đ n gi n các phép gán array – và làm cho ch
ươ
ả ơ ể ử ụ ng trình ị ở ơ c i thi
ể ử ụ
ễ ọ
ị ế
ướ
ấ
i các giá tr bi n cho d đ c
ế ế t k có th s d ng các giá tr ặ ạ ể ơ ườ ễ ọ d đ c h n ng ố s 16 (hexadecimal) ho c 8 (octal) – Có th s d ng d u g ch d
signal Data_Word : std_logic_vector (11 downto 0) ;
Data_Word <= X”A6F”;
Data_Word <= ”101001101111” ;
Data_Word <= O”5157”;
Data_Word <= B”1010_0110_1111” ;
Hardware Modeling - 1 - 57
Records
Record là nhóm các phần tử đơn có kiểu ban đầu có thể khác nhau.
type OPCODE is record PARITY : bit; ADDRESS : std_logic_vector ( 0 to 3 ); DATA_BYTE : std_logic_vector ( 7 downto 0 ); NUM_VALUE : integer range 0 to 6; STOP_BITS : bit_vector (1 downto 0); end record ; . . . signal TX_PACKET, RX_PACKET : OPCODE;
. . .
PARITY
ADDRESS
DATA_BYTE
NUM_VALUE STOP_BITS
T X _ P A C K E T
Hardware Modeling - 1 - 58
String
String là array của các character
signal Warning1: string (1 to 30) := “ Unexpected Outputs Detected” ; --declared within the architecture variable Warning2: string (1 to 30) := “ Unstable, Aborting Now” ; --declared within the process constant Warning3: string (1 to 20) := “ Entering FSM State2” ; --declared within the package or architecture
process ( A_sig , B_sig, C_sig ) begin if (A_sig and B_sig ) /= ‘1’ then report “ Unexpected Outputs…” ; elsif ( A_sig and C_sig ) = ‘1’ then report “ I need a vacation “; end if ; end process ;
process ( A_sig , B_sig, C_sig ) begin if (A_sig and B_sig ) /= ‘1’ then report Warning1; elsif ( A_sig and C_sig ) = ‘1’ then report Warning2 & “ Problem Mod2“; end if ; end process ;
process ( A_sig , B_sig, C_sig ) begin assert (A_sig and B_sig ) /= ‘1’ then report Warning1; severity note ; end if ; end process ;
Hardware Modeling - 1 - 59
Phép gộp các Array
ộ i đ nhóm các
ụ ệ ợ ể • Phép gộp (Aggregate) là m t công c ti n l ợ ứ ữ ệ ướ ể ả ng và ph c h p trong
ki u d li u (data type) c vô h các phép gán
signal H_BYTE, L_BYTE: std_logic_vector ( 0 to 7); signal Q_Out : std_logic_vector (31 downto 0); signal A, B, C, D : std_logic; signal WORD : std_logic_vector (3 downto 0);
(A,B,C,D)<=WORD;
Only scalar data variables are allowed on the left- side aggregates.
WORD <= ( 2 => ‘1’, 3 => D, others => ‘0’ ) ;
Q_Out <= ( others => ‘0’ ) ; WORD <= ( A, B, C, D ) ;
H_Byte <= ( 7|6|0 => ‘1’, 2 to 5 => ‘0’ ) ;
The total number of elements on both sides of any assignment must match, “others” can be used as a default assignment, regardless of the array size
Hardware Modeling - 1 - 60
Gộp các Record ộ
i đ nhóm các
ụ ệ ợ ể • Phép g p (Aggregate) là m t công c ti n l ợ ứ ộ ữ ệ ướ ể ả ng và ph c h p trong
ki u d li u (data type) c vô h các phép gán
DATA_WORD <= ( H_BYTE, L_BYTE) ;
type D_WORD is record UPPER : std_logic_vector (7 downto 0 ) ; LOWER : std_logic_vector (7 downto 0 ) ; end record ; signal DATA_WORD : D_WORD ; signal H_BYTE, L_BYTE: std_logic_vector (7 downto 0); signal TX_PACKET, RX_PACKET : OPCODE; --defined earlier
Only records can accept aggregate of arrays
TX_PACKET <= ( ‘1’,”0011”,”11101010”,5,”10” ) ;
DATA_WORD <= ( LOWER => L_BYTE, UPPER=> H_BYTE) ;
TX_PACKET. ADDRESS <= ( “0011” ) ;
TX_PACKET. ADDRESS(2) <= ‘0’ ;
DATA_WORD <= ( LOWER | UPPER=> H_BYTE);
DATA_WORD <= ( others => H_BYTE);
Hardware Modeling - 1 - 61
ạ ậ
T o l p các Array 2D
• Khi c n mô hình hoá các c u trúc b nh , ng
ườ ớ i thi ế ế t k
ầ ả ạ ộ ề
ự
ặ
ộ
7 6 5 4 3 2 1 0
0
ộ ấ ự ấ ph i t o ra m t c u trúc array 2 chi u (2D structure) ủ – Đây th c s là m t array c a các array (ho c các record)
of
1
2
type Mem_Array is array ( 0 to 3 ) std_logic_vector ( 7 downto 0); signal My_Mem : Mem_Array ;
3
Hardware Modeling - 1 - 62
ạ
ượ ứ
ủ T o Array c a các Record ườ c dùng trong các ng ng đ
• Array c a các record th
ụ ủ ử d ng x lý gói tin (packet handling)
type Data_Array is array ( 0 to 2 ) of OPCODE ; signal My_Data : Data_Array ;
type OPCODE is record PARITY : bit; ADDRESS : std_logic_vector ( 0 to 3 ); DATA_BYTE : std_logic_vector ( 7 downto 0 ); NUM_VALUE : integer range 0 to 6; STOP_BITS : bit_vector (1 downto 0); end record ; . . . signal TX_PACKET, RX_PACKET : OPCODE;
My_Data
. . .
PARITY
ADDRESS
DATA_BYTE
NUM_VALUE STOP_BITS
. . .
. . .
Hardware Modeling - 1 - 63
ế ị
Phép gán các Array 2D ỉ ủ ớ ầ • V i h u h t các ng d ng c a memory, vector đ a ch
ể ạ
ụ ứ ỏ ể c chuy n thành d ng integer, đ tham tr trong array 2D
ượ Read/Write đ ầ ử ộ ớ i m t ph n t t Hàm bi n đ i conv_integer có trong gói ổ ế
ieee.std_logic_unsigned
type Mem_Array is array ( 0 to 3 ) of std_logic_vector ( 7 downto 0 ); signal My_Mem : Mem_Array ;
signal R_Addr, W_Addr : std_logic_vector (1 downto 0 ) ;
7 6 5 4 3 2 1 0
0
1
2
My_Mem (conv_integer( W_Addr)) <= Data_In ; . . . D_Out <= My_Mem (conv_integer (R_Addr));
3
Hardware Modeling - 1 - 64
Initializing a ROM Array
• V i các ng d ng ROM, phép k t t p (aggregate) là m t ạ
ớ ụ ộ
ế ậ ạ ứ ụ ệ ể công c ti n ích đ kích ho t m ng array 2D
type ROM_Array is array ( 0 to 3 ) of std_logic_vector ( 7 downto 0); constant My_ROM : ROM_Array := --continued below
7 6 5 4 3 2 1 0
0
1
2
constant My_ROM : ROM_Array := ( 0 => (others => ‘1’) , 1 => “10100010”, 2 => “00001111”, 3 => “11110000” ) ;
3
Hardware Modeling - 1 - 65
ể
ộ ậ ạ
ộ
Ki u con trong VHDL ợ ể ộ • M t ki u con (subtype) trong VHDL là m t t p h p có h n ế ủ ể
ượ
ể
c đ nh nghĩa trong
ể
ặ
ườ
ị ạ
ể IEEE1076 ho c cũng có th do ng
i dùng t o ra
subtype My_Int is integer range 0 to 255 ;
Label
Base Type
Constraint
subtype My_Small_Int is My_Int range 5 to 30 ;
ể ch c a m t ki u (type) đã có ộ – Ki u đã có cũng có th là m t ki u đã đ
ể
ệ
ng đ
ượ ỏ
ế
ể
ố ư
ợ
Các ki u con (Subtypes) th ể ườ c dùng đ phát hi n ả ỗ i ‘outofrange’ trong k t qu mô ph ng, và cũng có th có l ổ ụ tác d ng t
i u hoá quá trình t ng h p logic
Hardware Modeling - 1 - 66
ử ụ
ể
S d ng ki u con trong VHDL
type My_State is ( Load, Jump, Add, Sub, Div, Mult, StorA, StorB) ; signal Curr_State, Next_State : My_State ;
subtype Arith_Ops is My_State range Add to Mult ;
Base Type
Label
Constraint
subtype My_OHE_State is std_logic_vector ( 3 downto 0 ) ; constant Init_St0 constant Load_St1 constant Jump_St2 constant Stor_St3
: My_OHE_State := “0001” ; : My_OHE_State := “0010” ; : My_OHE_State := “0100” ; : My_OHE_State := “1000” ;
Hardware Modeling - 1 - 67
Bài 4
Operators và Expressions
Hardware Modeling - 1 - 68
Các toán tử trong VHDL
• VHDL ch a m t l
ộ ượ ứ ử (operator) dùng cho
ệ ng l n các toán t ầ ớ ứ vi c mô hình hoá ph n c ng
• Tuy nhiên, m i toán t
ử ụ ữ ể ớ ữ c s d ng v i (nh ng) ki u d
ầ ư ớ
ứ
ể
ợ
ử ố ọ s h c (arithmetic) không c v i các ki u d li u ph c h p (bit_vector and
ố ườ
ị ằ
ng
ấ
ử ượ ỗ đ ị ệ li u (data type) nh t đ nh ệ ặ – Đ c bi t, c n l u ý các toán t ữ ệ ượ dùng đ std_logic_vector), vì các array không có giá tr b ng s t minh
• Các Function (subprogram) đ ề
ượ ạ ụ ể ắ c t o ra đ kh c ph c
ượ
ọ
ữ ấ
c g i là “arithmetic
packages”
nh ng v n đ liên quan – Các hàm này có trong các gói đ
Hardware Modeling - 1 - 69
Operator Overloading
• Operator overloading (ch ng hàm) trong VHDL có nghĩa là
ề
ế
ệ ượ t đ
c vi
t cho
ộ ử ụ ể ể ượ ớ ồ ụ c th (ví d , ‘+’ ) có th đ c dùng v i các
ả ừ t ng data type nh t đ nh
signal A, B : std_logic_vector ( 3 downto 0 ) ; signal C, D : integer range 0 to 31 ; signal Q_Out : std_logic_vector ( 15 downto 0 );
-- add 2 vectors -- add 2 integers
Y <= A + B ; F <= C + D ; Q_Out <= Q_Out + 1; -- add vector and integer
m t toán t data type khác nhau – Đi u này x y ra do các subprogram riêng bi ấ ị
ự ộ
ự
ợ
đ ng ch n subfunction thích h p d a trên data
ủ
ọ Compiler t type c a các operands
Hardware Modeling - 1 - 70
Các toán tử Logic
• Các logical operator đ
ượ ạ ớ ị
A
Z
B
F
Z <= A and B ;
H
Y
G
ể c đ nh nghĩa v i các toán h ng có ki u (data type) bit, boolean, bit_vector và std_logic_vector
Y <= G or ( F and H ) ;
and or nand nor xor not xnor (VHDL-93)
Hardware Modeling - 1 - 71
Các toán tử Logic với biến kiểu Array
signal A_vec, B_vec, C_vec : bit_vector ( 7 downto 0 ) ;
C_vec (7)
A_vec (7) B_vec (7)
C_vec <= A_vec and B_vec ;
C_vec (6)
A_vec (6) B_vec (6)
C_vec (5)
A_vec (5) B_vec (5)
. . .
C_vec (0)
A_vec (0) B_vec (0)
Quy tắc sử dụng với biến kiểu Array 1. Các array phải có cùng kiểu (type) 2. Các array phải có cùng kích thước 3. Phép toán thực hiện với các phần tử cùng vị trí trong mỗi array, từ trái sang phải
Hardware Modeling - 1 - 72
ử
ệ
Các toán t ể
ử ệ
quan h ớ ầ
• Các toán t
ế quan h có th dùng v i h u h t các data type
• T t c các toán t
ử ả ể ệ ề ế quan h đ u cho k t qu ki u (type)
ấ ả Boolean
signal FLAG_BIT : boolean ; signal A, B : integer ;
FLAG_BIT <= ( A > B ) ;
ớ
ế
ơ
ẽ ượ
c gán giá tr
ượ ạ c l i
ị true, ng
ượ
FLAG_BIT đ
c gán giá tr
N u A l n h n B, FLAG_BIT s đ ị false
= Equality /= Inequality < Less than <= Less than or equal > Greater than >= Greater than or equal
Hardware Modeling - 1 - 73
ử
ệ ớ
Toán t
quan h v i các Array
signal A_vec : bit_vector ( 7 downto 0 ) := “11000110” ; signal B_vec : bit_vector ( 5 downto 0 ) := “111001” ;
Rules for use on Arrays 1. Arrays must be same type 2. Arrays may be different lengths 3. Arrays of different lengths are aligned left and then lexically compared -- Compares ASCII values
if ( A_vec > B_vec ) then State <= Normal else State <= Code_Red end if …
ả
ệ
ượ
trái sang ph i. Vi c so sánh đ
ự c th c
ừ ầ ử
– Các vector đ ệ ầ ượ hi n l n l ắ
ụ ả
ố ượ ợ ế • Ví d này cho k t qu là false ượ c so sánh t ừ t theo t ng ph n t ả • Quy t c: đ đ m b o phép so sánh s đ c h p lý các
ầ ướ ể ả ả array c n ph i có cùng kích th c
Hardware Modeling - 1 - 74
ử ố ọ
Các toán t
s h c
• Các toán t
ử ố ọ ữ ệ ể ớ s h c dùng v i các ki u d li u (data type)
integer, real, và physical
• Các toán t
ố ử ố ọ ữ ệ ớ
Z_num <= ( A_num + B_num ) ;
A_num
Z_num
+
ể s h c v n không dùng v i các d li u có ki u signal A_num, B_num : integer range 0 to 15 ; signal Z_num : integer range 0 to 31 ;
B_num
Infers a 5-bit adder
array + Addition - Subtraction * Multiplication / Division abs Absolute Value ** Exponentiation
Hardware Modeling - 1 - 75
ớ
ế
ệ
ể ự ị ấ
ố ọ Phép tính s h c v i các bi n Array ầ • Đ th c hi n các phép tính s h c c n có các function các hãng cung c p
ư ậ
ượ
ọ
ề ầ
ng đ
ườ ộ ố
c đ t trong các gói g i là ị
ặ ụ
ẵ
ặ ở ư ệ
ủ
“arithmetic packages”. M t s công c (tool) d ch s n các gói này và đ t
ậ
th vi n c a chúng – Các gói std_logic_unsigned và std_logic_arith đ ể
c xác l p ồ
ượ ổ
ư ệ
ả
ụ
ữ
trong th vi n IEEE đ phát huy kh năng trao đ i mã ngu n gi a các công c khác nhau
ố ọ ặ ừ ẵ đ nh nghĩa s n trong IEEE ho c t ế ế ph n m m thi t k – Các function nh v y th
package STD_LOGIC_UNSIGNED is function “+” (A,B: std_logic_vector) return std_logic_vector ; function “+” (A: std_logic_vector, B: integer ) return std_logic_vector ; function “+” (A,B: std_logic_vector) return integer ; . . . .
ử
• Toán t
“+” là overloaded
library IEEE ; use IEEE.std_logic_1164.all ; use IEEE.Std_Logic_Unsigned.all ; use IEEE.Std_Logic_Arith.all;
Hardware Modeling - 1 - 76
Array Arithmetic
• N u có các function thích h p có th dùng đ
ợ ế ượ c trong
ạ ằ
ế
ẽ
ể ẽ ề ế ế ệ t k (thông qua m nh đ “use”), thì compiler s ả ạ ế ề ừ ố ả i k t qu tính t đ ng truy n tham s cho tr l
i r ng các operator đó là
“undefined”
module thi ự ộ t subprogram đó – N u không, compiler s thông báo l
signal A_vec : std_logic_vector ( 7 downto 0 ) := “11001001” ; signal B_vec : std_logic_vector ( 7 downto 0 ) := “11100100 ” ; signal Z_vec : std_logic_vector ( 8 downto 0 ) ; signal D_int : integer range ( 0 to 9 ) ;
Z_vec < = A_vec + B_vec ;
Z_vec < = A_vec + D_int ;
Hardware Modeling - 1 - 77
ử
ị
Các toán t
Shift (d ch)
ượ
ạ ộ ấ ủ ượ ầ ả
• Các toán t hay đ các ph n t
ầ ử ấ ị ử c đ nh nghĩa trong VHDL93 và r t Shift đ ấ ử ụ ho t đ ng c a c s d ng, nh t là khi c n mô t trong c u trúc máy tính
ử ể ạ ỗ • M i toán t có hai toán h ng, toán h ng trái có ki u array
ạ
ỉ ố ướ ặ
ượ ể ề ặ ị ỉ ạ ả onedimension (1D) và toán h ng ph i có ki u nguyên ị (integer) ch s b c c n d ch (ho c quay). S âm cũng đ ầ c dùng đ ch chi u d ch (ho c quay) ng ể ố ượ ạ i c l
• K t qu c a các phép d ch (ho c quay) có cùng ki u và
ế ể ặ ị
ả ủ ướ ạ ớ kích th c v i toán h ng trái
Hardware Modeling - 1 - 78
ử
ị
Các toán t
Shift (d ch)
•
•
• sll Logical left shift • srl Logical right shift • sla Arithmetic left shift • sra Arithmetic right shift rol rotate left logical ror rotate right logical
Hardware Modeling - 1 - 79
Shift Operator Các ví dụ
• Ví d :ụ signal A_vec : bit_vector (7 downto 0) := “11000110”; signal D_vec : bit_vector (7 downto 0);
cho kq
D_vec <= A_vec sll 2; D_vec <= A_vec sra 2; D_vec <= A_vec ror 3; D_vec <= A_vec srl 2; D_vec <= A_vec sra -2;
“00011000” “11110001” “11011000” “00110001” “00011000”
Hardware Modeling - 1 - 80
Concatenation
ử ố ế
ượ
ợ
ệ c th c hi n v i s t
ng h p v trí
n i (concatenation) “&” cho phép k t n i các bi n ể ớ ự ươ
ế ố • Toán t ơ ớ ể ể ki u scalar và ki u array thành ki u array l n h n ị ự – Các phép gán đ (positional association)
signal A_vec, B_vec : std_logic_vector ( 7 downto 0 ) ;
signal Z_vec : std_logic_vector ( 15 downto 0 ) ; signal A_bit, B_bit, C_bit, D_bit : std_logic ; signal X_vec : std_logic_vector ( 2 downto 0 ) ; signal Y_vec : std_logic_vector ( 8 downto 0 ) ; Z_vec <= A_vec & B_vec ;
X_vec <= A_bit & B_bit & C_bit ;
Y_vec <= B_vec & D_bit ;
Hardware Modeling - 1 - 81
Nhóm các toán tử
ể ấ ơ ử ặ • Có th s d ng d u ngo c đ n đ nhóm các toán t trong
ễ ọ ơ ộ ể ử ụ ứ ể m t bi u th c đã cho làm cho nó d đ c h n
Z <= A + B + C + D ;
Z <= ( A + B ) + ( C + D ) ;
A
A
+
+
B
+
B
Z
C
Z
+
+
D
+
C D
3 logic levels
2 logic levels
This is especially important when the target technology is LUT (Look-Up Table) based. Each added level of logic incurs additional block and routing delays
Hardware Modeling - 1 - 82
ủ
Các Slice c a Array
ượ k c n nhau trong m t array đ c
• M t nhóm các ph n t ộ ầ ử
ộ ạ
ưở
ị ả
ủ
ng b i phép
ộ ờ ỏ ồ c tham tr đ ng th i ở ể ượ khác c a array không b nh h
ầ ử ề ậ go i là m t slice và có th đ – Các ph n t gán slice
signal A_vec, B_vec : std_logic_vector (7 downto 0) ; signal Z_vec : std_logic_vector (15 downto 0) ; signal A_bit, B_bit, C_bit, D_bit : std_logic ;
(cid:0)
Z_vec (15 downto 8) <= A_vec ; B_vec <= Z_vec (12 downto 5) ; A_vec (1 downto 0) <= C_bit & D_bit ; . . . Z_vec (5 downto 1) <= B_vec (1 to 5 ) ;
The direction (ascending or descending) of the slice must be consistent with the direction of the array as it was originally declared
Hardware Modeling - 1 - 83
Slice và Concatenation
ụ ể
ứ
ề
ộ
ớ
ể • Ví d , đ mô hình hoá m t bi u th c có đi u ki n v i các ph n
ề
ọ
ệ ừ c ch n không li n nhau (9,8,3,2,1, và 0) t
ầ ‘Status’ bus
ể
ố ượ
ạ
ổ ợ
ng m ch logic t
h p và
ử ượ t đ ồ g m 16bit ả – Gi
i mã toàn b bus có th làm tăng s l ệ
ộ ế ị
ậ
ơ
t b làm vi c ch m h n)
làm cho thi
signal Status_Bus : std_logic_vector (15 downto 0) ;
Will Not Compile!
process ( Status_Bus ) begin case ( Status_Bus ) is when “1101111101010011” => < sequential statement(s) > ; when . . .
Inefficient !!
process ( Status_Bus ) begin case ( Status_Bus(9 downto 8) & Status_Bus (3 downto 0)) is when “110011” => < sequential statement(s) > ; when . . .
process ( Int_Bus ) begin case ( Int_Bus ) is when “110011” => < sequential statement(s) > ; when . . .
Optimal !!
signal Int_Bus : std_logic_vector ( 5 downto 0 ) ; . . . Int_Bus <= Status_Bus ( 9 downto 8 ) & Status_Bus ( 3 downto 0 ) ;
Hardware Modeling - 1 - 84
Bài 5
Các câu l nh ệ Concurrent và Sequential
Hardware Modeling - 1 - 85
ứ
ầ
Mô hình hoá ph n c ng
ự ứ ộ ộ
ể ả ử ụ ệ ờ ầ ệ ồ
ể • Đ mô hình hoá m t th c th ph n c ng m t cách có hi u ả qu , VHDL s d ng c các câu l nh concurrent (đ ng th i) ầ ự ẫ l n sequential (tu n t )
• Các câu l nh đ ỳ
ệ ượ ọ
c g i là concurrent khi chúng đ ủ ộ ị ự c th c ươ ng
ượ ệ hi n không tu thu c vào v trí c a chúng trong ch trình
• Các câu l nh đ
ượ ượ c g i là sequential khi chúng đ ự c th c
ộ ự ế vi
ệ
ế
ữ
ệ
ộ
ọ ầ ự theo trình t ư ố ầ t chúng trong ề ệ ng trình, gi ng nh các l nh trong các ph n m m ườ
t trong m t process là nh ng l nh
sequential
ệ ệ hi n m t cách tu n t ươ ch thông th ng ấ ả – T t c các câu l nh vi
Hardware Modeling - 1 - 86
ấ
ữ
C u trúc ngôn ng
architecture RTL of ENTITY_1 is . . . begin
concurrent statements ;
. . .
process begin sequential statements ; . . . end process ;
ệ
. . .
ọ ộ
ằ ề
ệ
• M i câu l nh n m ngoài m t process đ u là l nh concurrent
concurrent statements ; . . . process begin sequential statements ; . . . end process ; ... end architecture RTL ;
Hardware Modeling - 1 - 87
Process
• M t process bao g m các
ộ
ự
ộ ệ
ệ
ồ câu l nh sequential ệ – Các câu l nh trong m t ượ c th c hi n process đ ầ ượ l n l
ả ượ ề c
architecture RTL of My_And2 is begin . . . process (A, B) begin C <= A and B ; end process ; . . . end architecture RTL;
ườ
ổ
ự ng là do s thay đ i
t ỗ • M i process đ u ph i đ ạ ho t kích theo m t cách ấ ị nh t đ nh – Th ủ
ệ
ụ ể
c a các tín hi u trong ề ặ process, ho c các đi u ộ ệ ki n c th trong m t câu ệ l nh ‘wait’
ộ
Hardware Modeling - 1 - 88
Các Process là đồng thời ầ
ệ ể ề • Trong vi c mô hình hoá ph n c ng, quan đi m v
ử
ế ứ ấ ầ t
ờ tín hi u ‘C’ c a ra c a c
ượ
ủ
ề
ổ
ệ ở ờ ư ớ ử c đ ng th i đ a t
ổng G1, ủ i c a vào c a các c ng G2
ấ ỳ ự cũng đ u đ và G3
Process 1
Process 2
A
C
C
G2
G1
B
C<=A and B ...
If C = ‘1’ then ...
C
Process 3
G3
process (C,..) begin
ồ concurrency (tính đ ng th i) là r t c n thi ổ – B t k s thay đ i nào ồ
Hardware Modeling - 1 - 89
ể ể ỉ
Mô hình kết nối trong VHDL ị ừ ộ m t • Ch có các tín hi u (signal) là có th chuy n giá tr t
ượ
ế ở
ệ
c liên k t b i các tín hi u,
ượ
ế
ọ
ng đ
c g i là VHDL Connectivity Model (mô hình k t
ườ th n i)ố
Process n
Process n1
Sig1
C
Process n3
C<=A and B ...
Sig2
If C = ‘1’ then ...
C
process (...
Process n4
Process n2
Rst
process n
process (C,..) begin
ệ ộ process sang m t process khác – Các process concurrent, đ
Hardware Modeling - 1 - 90
Các thành phần của Process
Keyword
Signals in sensitivity list create implied “wait” condition
Optional Label
Signal updated with new value when process suspends
Keywords “end” and “process”
All statements within the process are handled sequentially, in order
architecture Behave of DFF is begin . . . Reg1: process (Clock, Reset) begin if Reset = ‘1’ then Q <= ‘0’ ; elsif ( Clock’event and Clock = ‘1’ ) then Q <= D ; end if ; end process; . . . end Behave ;
Hardware Modeling - 1 - 91
Bên trong và bên ngoài Process
B
Out1
ố
ỉ Ch có phép gán cu i cùng là có ệ ự hi u l c
architecture ... process ( ) begin Out1 <= A; Out1 <= B; . . . end process ; end architecture ;
A
Out1
?
B
ả
ầ
architecture . . . begin Out1 <= A; Out1 <= B; . . . end architecture ;
ộ C n ph i có m t hàm ệ resolution cho tín hi u ra ‘Out1’
Hardware Modeling - 1 - 92
ỗ ả ầ ạ
ề
ạ
ạ
ợ
ế ể ừ ơ
ạ ệ • V i đo n mã RTL, các tín hi u trong sensitivity list t o nên
ệ ặ ị m t đi u ki n wait m c đ nhcho process
Tạm dừng các Process ề ộ ơ • M i process c n ph i có m t c ch đ kích ho t, đi u đó ế ể ạ cũng có nghĩa là có c ch đ t m d ng (suspending) process – Đi u này t o nên tr ng thái đ i (wait) cho process ạ ớ ề ộ ố ớ
• Đ i v i các mô hình hành vi, ng
ườ t k th òng dùng
An event on given signal An event on given signal A specific condition A specific condition
ệ i thi ố ế ế ư ệ ạ các câu l nh wait. Trong VHDL có b n d ng l nh wait
wait on A, wait on... wait on... B ;wait until CLK = ‘1’ ; wait until... wait until... wait for 10 ns ; wait for ... A specified time amount wait for ... A specified time amount wait; wait wait
Indefinite suspension Indefinite suspension
Hardware Modeling - 1 - 93
ệ ệ
Các điều kiện Wait ề i đây so sánh các đi u ki n ‘wait’ t
ề ừ các câu l nh ẩ t rõ ràng (explicit) và đi u ki n ‘wait’ n ý (implicit)
ộ ố
ạ
ổ
ề
ệ
đi u ki n explicit ‘wait’
process (A, B) begin C <= A and B ; end process ;
ệ ợ ụ ướ • Ví d d ế ượ đ c vi ỗ ợ – Note: M t s compiler dùng t ng h p m ch không h tr
process begin wait on A, B ; C <= A and B ; end process ;
process begin C <= A and B ; wait on A, B ; end process ;
FYI: Another important consideration is that all processes are initialized before simulation, that means they are run until the first ‘wait’ condition is met
Given that fact, what is the value on ‘C’ at simulation time zero—assuming use of std_logic for each of the examples above ?
Hardware Modeling - 1 - 94
Modeling Concurrency
ạ
ụ
ượ
ộ
ạ
ỏ ể
ấ ả
ờ
ỏ
ự ệ c ho t kích theo s ki n – T i m t th i đi m b t k trong th i gian mô ph ng, (1) t
t c các ị ủ
ế
ấ ỳ ệ ậ
ự ậ
ượ
ự
• Công c mô ph ng VHDL đ ờ ượ process đ ượ ệ tín hi u đ các process liên quan đ ờ
ừ ị ạ c th c hi n cho đ n khi b t m d ng, (2) giá tr c a các ệ ị ở ổ ự các tín hi u làm cho c c p nh t, (3) s thay đ i giá tr c th c hi n ạ
ữ
ọ
c g i là delta cycle
ượ
ệ ượ • Th i gian gi a các công đo n này đ ệ • Theo cách đó, các process và các l nh concurrent đ
ư c coi nh
ờ ạ
ả
ể
ỗ
ỏ
ồ x y ra đ ng th i t
i m i đi m mô ph ng
Concurrent Operations
. . .
Delta cycles in-between D1
D+2
D+1
. . .
D+n
Delta cycles in-between D1
D+2
D+1
Simulation discrete time step
998
999
1000
1001
1002
Hardware Modeling - 1 - 95
Sắp xếp trình tự các Event
• C ch s p x p trình t
ế ắ ủ ự ế
ơ ườ ạ các event là h t nhân c a môi ng mô hình hoá hành vi trong VHDL tr
• M i ho t đ ng (transaction) c a th c th đ
ể ượ ủ ự ặ ở ắ c s p đ t
• B c th i gian ch tăng lên khi không còn transaction nào
ỗ ộ ợ ạ ộ ể ờ m t th i đi m thích h p
ờ ở ờ ể ỏ ướ khác ỉ th i đi m mô ph ng
Hardware Modeling - 1 - 96
Scheduling Events
. . .
Simulation discrete time steps
Delta cycles D+1 D+2
D1
. . .
D+n
Delta cycles D+2
D+1
D1
ns
t
t+1
t+2
t+4
t+3
Transaction Queue
t + 3 Out1<= ‘1’
t + 5 Data<= ‘0’ . . .
t + 4 Int <= ‘1’ . . .
Out2<= ‘0’
l
. . .
s e c y C
Out1 <= ‘1’ ; Out2 <= ‘0’ ; . . . Int <= ‘1’ after 1 ns; . . . Data <= ‘0’ after 2 ns; . . .
a t l e D
Discrete Time
Hardware Modeling - 1 - 97
Transactions
• Câu l nh gán tín hi u “Z <= A” t o ra m t transaction trong
ệ ạ ộ
ệ VHDL
process (. . .) begin Z <= A ; F <= G ;
. . . end process ;
• C th , giá tr hi n t gán cho tín hi u Zệ
ụ ể ị ệ ạ ủ ượ ọ ượ i c a A đ c đ c và đ ể c dùng đ
Hardware Modeling - 1 - 98
Events ặ
ự ế ự ệ ổ
ệ tín hi u đó ề ệ ộ ỗ ị ủ • N u giá tr c a “Z” ho c “F” th c s có thay đ i sau l nh gán (transaction), ta nói có m t ộ ệ ở ấ event xu t hi n • M i m t phép gán tín hi u đ u
process (A, G) process (A, G) begin begin Z <= A; Z <= A; F <= G; F <= G; . . . . . . end process ; end process ;
ề
Process 2 Process 2
Process 1 Process 1
ệ ở
Z
Z<=A; ...
gây ra m tộ ả ư transaction, nh ng không ph i ấ ả t c các transaction đ u làm t ấ tín hi u xu t hi n các event ượ đ ộ ở ộ ệ m t tín hi u đã cho
If Z = ‘1’ then ...
ệ c gán • M t event ạ ể ộ
Z
Process 3 Process 3
ỉ
có th ho t kích m t process ệ ch khi tín hi u đó có tên trong ủ sensitivity list c a proccess
process (Z,..) begin
Hardware Modeling - 1 - 99
Building Registers
process ( Clk) process ( Clk) begin begin
Mọi phép gán tín hiệu xảy ra sau mệnh đề:
if clock’event and clock = ‘1’ then...
if (Clk’event and Clk = ‘1’) then if (Clk’event and Clk = ‘1’) then C <= A and B ; C <= A and B ; end if; end if; end process; end process;
đều tạo ra một cấu trúc thanh ghi (register)
C
A B
Clk
Hardware Modeling - 1 - 100
Khái quát về Signal và Variable trong VHDL
ộ
ể
ể ề
ệ
ự ặ
• H u nh m i k t n i gi a các đi m trong m t th c th đ u có ế
ầ ể ượ th đ
ầ
ư ọ ế ố c mô hình hoá b ng signal (tín hi u) ho c variable (bi n) ạ
ữ
ữ ằ ả t cách dùng, các kh năng và nh ng h n
ệ ng này
•
ố ượ ể ấ ả
ộ ớ
t c các port đ ổ
ả
ượ
ọ
c cho m i process đ
• Tuy nhiên, c n phân bi ế ủ ừ ch c a t ng đ i t ượ Ở ứ ự c khai báo thu c l p signal, m c th c th , t ể ị ớ chúng có kh năng trao đ i giá tr v i các module khác, và có th ượ dùng đ c khai báo trong các architecture ộ ệ thu c body l ỗ
ấ ả
ệ
• Trong m i architecture body, t
t c các tín hi u đ
c khai báo ớ
ộ ớ
ỉ
c dùng v i
ượ
ượ ụ ỉ ượ ụ ch có tác d ng c c b v i architecture đó, và ch đ c khai báo trong cùng architecture đó các process đ
ử ụ
ể
ỗ
• Trong m i process, có th khai báo và s d ng variable đ mô ộ
ể ế ụ
ỏ
ố ph ng các m i liên k t c c b
Hardware Modeling - 1 - 101
Phạm vi của Signal và Variable
ượ
ấ
m c cao nh t (entity)
ụ
ộ
ỗ ỗ
ụ
ể
ở ứ c khai báo • Port là signal, đ ể • Trong m i architecture có th có các signal c c b ộ • Trong m i process có th có các variable c c b
entity
architecture
process
Variables
Signals
Input Ports
Output Ports
Hardware Modeling - 1 - 102
ớ
Phép gán v i Signal
ố ươ
ử
ớ
• VHDL phân bi
ệ t r t rõ ràng trong vi c x lý v i các đ i t
ng
ộ
ớ
ệ ấ thu c các l p signal và variable
ắ • Các quy t c c b n là:
ể
ượ ượ
ướ
ả ả
ơ ả – T t c các signal và variable đ – T t c các signal và variable đ
c gán ph i có cùng ki u (type) c c gán ph i có cùng kích th
ấ ả ấ ả (size)
ế
ộ
ườ
ả ư
• N u signal là m t port, ng
t k ph i l u ý thêm:
–
ế ế ư
ượ
ị
c gán giá tr
–
ể ượ
ị
ư
c gán giá tr trong process, nh ng
ượ
i thi ể ọ Signals có mode “in” có th đ c nh ng không đ Signals có mode “out” có th đ không đ
ọ c đ c
Hardware Modeling - 1 - 103
ớ
Phép gán v i Signal
Internal_Cnt
Q
Counter
entity Count_1 is port (Clk, D : in bit ; Q : out integer range...); end Count_1;
architecture WRONG of Count_1 is begin process (Clk) begin If Clk’event and Clk =‘1’ then Q <= Q + 1; end if ; end process ;
Will produce compiler error
architecture RTL of Count_1 is signal Internal_Cnt : integer range ... ; begin process (Clk) begin If Clk’event and Clk =‘1’ then Internal_Cnt <= Internal_Cnt + 1 ; end if ; end process ; Q <= Internal_Cnt ;
Hardware Modeling - 1 - 104
Using Variables
ộ
ở
ạ
ủ
ỉ ớ ạ
i h n trong process
ượ
đó nó ị ớ
ể
ổ
c khai báo, ta không th s d ng nó đ trao đ i giá tr v i
đ ư các module khác, nh cách s d ng các signal ượ
ị ủ
• B t k variable nào đ
c khi giá tr c a nó đ
c xác
ấ ỳ ị
ượ ấ
ộ
c suy di n nh là m t register trong c u trúc ộ ư
ớ
ả ẩ
ậ
• Vì ph m vi c a m t variable ch gi ể ử ụ ử ụ ướ ọ c đ c tr ư ễ ượ ử ụ ử ụ
ẽ ượ ề đ nh, đ u s đ ế c dùng v i m t process có clock hardware n u nh nó đ – Ph i c n th n khi s d ng variable trong các process có clock ạ
ượ
ấ
• Tuy nhiên, r t nên s d ng các variable đ
c trong các m ch
ổ ợ
logic t
h p trung gian
ỉ ầ
ệ
ạ
ố
• Chúng làm tăng t c đ c a vi c ch y mô ph ng vì ch c n ít ậ
ệ
ệ
ộ ủ ỏ ậ delta cycles cho vi c c p nh t các tín hi u ra
Hardware Modeling - 1 - 105
Variable trong các Process có Clock
process ( Clk ) process ( Clk ) variable B, C, D : bit := ‘1’ ; variable B, C, D : bit := ‘1’ ; begin begin If (Clk’event and Clk =‘1’) then If (Clk’event and Clk =‘1’) then B := A ; B := A ; C := B ; C := B ; D := C ; D := C ; end if ; end if ; end process ; end process ;
process ( Clk ) process ( Clk ) variable B, C, D : bit := ‘1’ ; variable B, C, D : bit := ‘1’ ; begin begin If ( Clk’event and Clk =‘1’ ) then If ( Clk’event and Clk =‘1’ ) then D := C ; D := C ; C := B ; C := B ; B := A ; B := A ; end if ; end if ; end process ; end process ;
A
B
C
D
D
A
Clk
Clk
Hardware Modeling - 1 - 106
Alternate Solution
Internal_Cnt
Q
Counter
entity Count_1 is port (Clk, D : in std_logic ; Q : out std_logic_vector ...); end Count_1;
architecture WRONG of Count_1 is begin process (Clk) begin If Clk’event and Clk =‘1’ then Q <= Q + 1; end if ; end process ;
architecture RTL of Count_1 is begin process (Clk) variable Internal_Cnt : std_logic_vector.. begin If Clk’event and Clk =‘1’ then Internal_Cnt := Internal_Cnt + 1 ; Q <= Internal_Cnt ; end if ; end process ;
Will produce compiler error
Hardware Modeling - 1 - 107
Bài 6
ể
ề
ươ
Các l nh đi u khi n ch
ệ ng trình trong VHDL
© 2003 Xilinx, Inc. All Rights Reserved
Cấu trúc ngôn ngữ
architecture RTL of ENTITY_1 is . . . begin
concurrent statements ;
. . .
ế
c vi
t bên
• Các l nhệ if/else, case ho cặ loop ả ượ ph i đ ộ trong m t process
process begin case ( sel_a ) is when… . . . end case ; end process ;
. . .
. . . process begin if (sel_b = “00”) then . . . else…. end if ; end process ; ... end architecture RTL ;
Hardware Modeling - 1 - 109
Các câu lệnh If/Else
• Câu l nh ệ
ự ự ị
ề ệ ệ ệ c th c hi n d a if/else c ơ
ả ượ if/else làm cho các giao d ch đ ạ ấ ị ữ trên nh ng đi u ki n nh t đ nh. Có ba d ng l nh b n sau:
process process begin begin if (boolean expression) then if (boolean expression) then sequential statements; sequential statements; end if ; end if ;
process process begin begin if (boolean expression 1) then if (boolean expression 1) then sequential statements ; sequential statements ; elsif (boolean expression 2) then elsif (boolean expression 2) then sequential statements ; sequential statements ; elsif (boolean expression 3) then elsif (boolean expression 3) then sequential statements ; sequential statements ; else else sequential statements ; sequential statements ; end if ; end if ;
process process begin begin if (boolean expression) then if (boolean expression) then sequential statements ; sequential statements ; else else sequential statements ; sequential statements ; end if ; end if ;
Hardware Modeling - 1 - 110
Ví dụ về lệnh If/Elsif
ẽ ượ
ả
ầ
1. Đi u ki n đ u tiên tho mãn s đ
c
ề ự
A
B
Z
ệ ệ th c hi n ngay ề ệ
ể ố ủ ệ
ệ 2. Các đi u ki n có th g i nhau ầ 3. Đi u ki n đ u tiên c a l nh
if/elsif
C
ề ư
ấ có u tiên cao nh t
D
D
Sel
process (A, B, C, D, Sel) process (A, B, C, D, Sel) begin begin If (Sel = “00”) then If (Sel = “00”) then
C
Z <= A ; Z <= A ;
elsif (Sel = “01”) then elsif (Sel = “01”) then
Z <= B ; Z <= B ;
B
elsif (Sel = “10”) then elsif (Sel = “10”) then
Z <= C ; Z <= C ;
elsif (Sel = “11”) then elsif (Sel = “11”) then
Z
A
Z <= D ; Z <= D ;
Late arriving signal? Late arriving signal?
end if; end if; end process ; end process ;
Sufficient for std_logic? Sufficient for std_logic?
Hardware Modeling - 1 - 111
Câu lệnh Case
• Câu l nh ệ ộ
ượ ự ệ ỳ c th c hi n tu
case làm cho các giao d ch đ ể ị ọ
• L nh ệ
ạ ị ủ ứ thu c vào giá tr c a bi u th c ch n ơ ả : case có hai d ng c b n
process (…) process (…) begin begin case ( selector expression ) is case ( selector expression ) is when ... => when ... =>
process (...) process (...) begin begin case ( selector expression ) is case ( selector expression ) is when ... => when ... =>
sequential statements ; sequential statements ;
sequential statements ; sequential statements ;
when ... => when ... =>
sequential statements ; sequential statements ;
. . . . . . when others => when others =>
when ... => when ... =>
sequential statements ; sequential statements ;
sequential statements ; sequential statements ;
end case ; end case ; . . . . . . end process ; end process ;
end case ; end case ; . . . . . . end process ; end process ;
Hardware Modeling - 1 - 112
Ví dụ về lệnh Case
ứ
ể
ể
ề
ọ
ả ượ
c
ủ • T t c các giá tr có th có c a bi u th c ch n đ u ph i đ ệ
ấ ả ỉ
ị ch rõ (specified) trong câu l nh
ệ
ề
ượ
•
ồ c ch ng ch ả ữ ả ấ
ể
ế
ợ
ầ ề ạ
ừ ệ
• Các đi u ki n không đ ả ị ượ • Gi i các giá tr đ c mô t ớ ợ ệ L nh Case thích h p v i các c u trúc ki u LUT ụ ổ – H u h t các công c t ng h p m ch ấ đ u t o ra c u trúc MUX t
ạ l nh case
A
B
Z
C
D
éo (g i) nhau ố ạ ph i h u h n (discrete)
process (A, B, C, D, Sel ) begin case Sel is when “00” => Z <= A ; when “01” => Z <= B ; when “10” => Z <= C ; when “11” => Z <= D ; end case ; . . . end process ;
Sel
Is this sufficient for std_logic?
Hardware Modeling - 1 - 113
Các điều kiện chồng chéo
ụ ướ
ợ
ề
ệ
ồ
• Ví d d
ử ụ
ng h p các đi u ki n ch ng chéo ố if/elseif. Mu n s d ng
i đây minh ho tr ỉ ỉ
ạ
nhau. Khi đó ta ch có th s d ng l nh l nh ệ
ạ ườ ệ ể ử ụ ệ ề i các đi u ki n
ả case ph i ch nh l
D
process (A, B, C, D, Sel) process (A, B, C, D, Sel) begin begin If (Sel <= 3) then If (Sel <= 3) then
Z <= A ; Z <= A ;
C
elsif (Sel <= 5) then elsif (Sel <= 5) then
Z <= B ; Z <= B ;
elsif (Sel <= 7) then elsif (Sel <= 7) then
B
Z <= C ; Z <= C ;
elsif (Sel <= 9) then elsif (Sel <= 9) then
Z <= D ; Z <= D ;
Z
A
end if; end if; end process ; end process ;
Hardware Modeling - 1 - 114
Giải hữu hạn các giá trị
• N u m t gi
ủ ệ ả ộ ộ
i các giá tr đ ặ ả ữ ề ạ ế ị ượ c dùng làm đi u ki n c a m t ầ ệ l nh case ho c if/else, nó c n ph i h u h n (discrete)
(cid:0)
process (…) begin if (x = 12 to 14) then sequential statements ; . . .
(cid:0)
(cid:0)
case ( selector expression ) is => sequential statements ; when 0 to 7 when 4.3 to 7.7 => sequential statements ; when “1000” to “1010” => sequential statements ; => sequential statements ; when “1000” | “1010”
(cid:0)
(cid:0)
. . . end process ;
Hardware Modeling - 1 - 115
Lệnh gán Signal có điều kiện
•
ộ ạ
ụ
ề
ươ
gán tín hi u có đi u ki n
ệ là m t d ng có tác d ng t
ng
L nh ệ ươ đ
ệ ng l nh
ệ if/else
architecture ... architecture ... begin begin Z <= A when Sel = “00” else Z <= A when Sel = “00” else B when Sel = “10” else B when Sel = “10” else C when Sel = “11” else C when Sel = “11” else ‘X’ ; ‘X’ ; end architecture ; end architecture ;
architecture ... architecture ... begin begin process ( A,B, C, Sel ) process ( A,B, C, Sel ) begin begin if (Sel = “00” ) then if (Sel = “00” ) then Z <= A ; Z <= A ; elsif (Sel = “10”) then elsif (Sel = “10”) then Z <= B ; Z <= B ; elsif (Sel = “11”) then elsif (Sel = “11”) then Z <= C ; Z <= C ; else else Z <= ‘X’ ; Z <= ‘X’ ; end if ; end if ; end process ; end process ; end architecture ; end architecture ;
ặ
ả
ỏ
ộ ế
ề
• C hai câu l nh đ u có chung m t k t qu khi mô ph ng ho c
ệ ạ
ả
ươ
ọ
ơ
ả ợ ổ t ng h p m ch ấ – Tuy nhiên, c u trúc bên ph i làm cho ch
ắ ng trình ng n g n h n
Hardware Modeling - 1 - 116
Lệnh gán Signal có lựa chọn
•
ộ ạ
ụ
ệ ọ là m t d ng l nh có tác d ng
ươ
L nh ệ ươ t
ng đ ắ
–
ự ệ gán tín hi u có l a ch n ớ ệ case ng v i l nh ử ụ ả
ề
• Quy t c s d ng hoàn toàn gi ng v i l nh case: ệ
ớ ệ ệ
ủ
t kê đ
–
ề
ố ả ượ c li (1) Tât c các đi u ki n ph i đ ồ ượ ệ (2) Các đi u ki n không đ
c ch ng chéo nhau
architecture... architecture... with SEL select with SEL select Z <= A when “00” , Z <= A when “00” , B when “10” , B when “10” , C when “11” , C when “11” , ‘X’ when others ; ‘X’ when others ; end architecture ; end architecture ;
architecture ... architecture ... begin begin process ( A,B,C, SEL ) process ( A,B,C, SEL ) begin begin case (SEL) is case (SEL) is when “00” => Z <= A ; when “00” => Z <= A ; when “10” => Z <= B ; when “10” => Z <= B ; when “11” => Z <= C ; when “11” => Z <= C ; when others => Z <= ‘X’ ; when others => Z <= ‘X’ ; end case ; end case ; end process ; end process ; end architecture ; end architecture ;
Hardware Modeling - 1 - 117
Outline
•
If/else Statements
• Case Statement • Concurrent Form of If/else and Case Statements
• Loop Statements • Summary
Hardware Modeling - 1 - 118
Các câu lệnh Loop
• Các câu l nh loop có th đ
ể ượ ọ ườ ợ c dùng cho m i tr ng h p
ệ có vòng l pặ
• L nh loop có nhi u d ng khác nhau, m i d ng s d ng
ỗ ạ ử ụ ề
ươ ể ặ ng pháp đi u khi n l p riêng.
ế
c khai báo ể
ở
ụ ạ ề ấ
c ngoài vòng l p ư
ượ
c dùng nh là
ệ ộ m t ph ạ D ng thông d ng nh t là “for … loop” ỉ ố index’ cho vòng l p ặ – Bi n ch s ‘ ượ không đ riêng, không th gán giá ượ ị tr cho nó, và không đ ặ ử ụ s d ng
process ( A, B_bus ) process ( A, B_bus ) begin begin for i in 7 downto 0 loop for i in 7 downto 0 loop C_bus (i) <= A and B_bus (i) ; C_bus (i) <= A and B_bus (i) ; end loop ; end loop ;
ố
ề
ậ
ậ
ướ
ệ
ừ
ặ ượ
c c p nh t theo chi u h
ng ghi trong câu l nh t
– Nó đ ộ ằ m t h ng s ỗ – Sau m i phép l p, ị ủ giá tr c a nó đ trái sang ph iả
Hardware Modeling - 1 - 119
Sử dụng các lệnh Loop
• Khi tổng hợp, lệnh loop được
“dàn trải ra” – Việc tổng hợp mạch dựa trên
process ( A, B_bus ) process ( A, B_bus ) begin begin for i in 7 downto 0 loop for i in 7 downto 0 loop C_bus (i) <= A and B_bus (i) ; C_bus (i) <= A and B_bus (i) ; end loop ; end loop ;
kết quả logic của từng phép lặp
A
C_bus (7)
B_bus (7)
A
C_bus (6)
• Khi mô phỏng, các lệnh loop tạo nên một công cụ linh hoạt để mô hình hoá hành vi • Các lệnh loop đặc biệt còn
B_bus (6)
. . .
hay được sử dụng trong các chương trình con (function và procedure)