Upload
hoadktd
View
8.555
Download
3
Embed Size (px)
DESCRIPTION
VHDL - Thầy Lê Hải Sâm
Citation preview
Hardware Modeling - 1 - 1
Bài 1
Vấn đề Mô hình hoá phần cứng
(Hardware Modeling)
Hardware Modeling - 1 - 2
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 của VHSIC Hardware Description Language
– Còn VHSIC là từ viết tắt của Very High Speed Integrated 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 - 3
VHDL - Mục đích và sự hình thành
• VHDL, trướ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á thiết bị, nhưng nó mới chỉ định nghĩa các tham số khái quát cho việc tổng hợp thiết bị
• Kết quả: một mô hình phần cứng đã cho không hẳn đã phù hợp với một thiết kế ở mức cổng logic đã có thông qua các công cụ và các công nghệ đích (target) khác nhau
Hardware Modeling - 1 - 4
Chuẩn hoá VHDL
• Tổ chức IEEE chính thức phê chuẩn chấp nhận ngôn ngữ VHDL 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 được sửa đổi theo chu kỳ tối thiểu là 5 năm
• Sửa đổi đầu tiên được thực hiện năm 1993, và VHDL-93 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 (VHDL-87)– Các bộ phận của VHDL 200X được hỗ trợ bởi một số tool
VHDL-87
VHDL-93
VHDL-2X
Hardware Modeling - 1 - 5
IEEE 1076(modeling)
IEEE 1076(synthesis)
Language Subsets
• Không phải tất cả các cấu trúc VHDL đều có thể tổng hợp được. Ví dụ, wait for 10 ns là một cấu trúc mô hình hoá thông dụng, nhưng nó không tương ứng với và cũng không thể tạo ra một phần tử ở mức cổng logic
Hardware Modeling - 1 - 6
Behavioral
Logic
RTL
Layout
Ít chi tiết hơn, thiết kế và mô phỏng nhanh hơn
Chi tiết hơn, phụ thuộc công nghệ, thiết kế và mô phỏng chậm hơn
DFF AND_OR2
CLB_R5C5
CLB_R5C6
Các mức trừu tượng trong mô tả phần cứng
F
Hardware Modeling - 1 - 7
Sự chồng chéo trong VHDL
Behavioral
Logic
RTL
Layout Place & Route Utility
FPGA Vendor Library
Synthesizable Code
Hardware Model Sum <= A + B after 3 ns ;
Sum <= A + B ;
component Xlx_add2
port ( A: in bit ; B: in bit ; Sum: out bit );end component ;
Hardware Modeling - 1 - 8
Trình tự thiết kế Top-Down
• VHDL hỗ trợ hướng tiếp cận top-down trong thiết kế
Hardware Modeling - 1 - 9
Nguyên tắc phân đoạn • Khi tiến hành phân đoạn một thiết kế trong VHDL,
cần lưu 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ại biên giới các module
• Phù hợp với cấu trúc mã nguồn dạng RTL – Giảm đến tố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• Hầu hết các công cụ đều không tối ưu thông qua biên
giới hierarchy– Kích thước của từng block đủ nhỏ để có thể kiểm tra
nhanh chóng• Mẫu thử nhanh, đơn giản cho mỗi sub-module
Hardware Modeling - 1 - 10
A[3:0]entityAdd_4
B[3:0]
C_in
SUM [3:0]
C_out
C_out
SumA
B
C_in
entity Full_Add
A
B
entityHalf_Add Sum
Carry Leaf Cell
Cấu trúc Top - Down
Macro
Hardware Modeling - 1 - 11
VHDL modules
Synthesis
Place & Route
Behavioral Simulation (Testbench driven)
Gate-Level Functional (Netlist-driven )
Gate-Level Timing (Back-annotated netlist )
V I
T A
L
VHDL Initiative Toward ASIC Libraries
SDF (Standard Delay Format)& Structural VHDL File
Kiểm tra thiết kế• Khi sử dụng VHDL, có thể thực hiện các bước kiểm tra
thiết kế, bắt đầu từ Behavioral Simulation
Hardware Modeling - 1 - 12
VHDL modules
Synthesis
Place & Route
Các bước kiểm tra thiết kế (1) Mô phỏng Behavioral
• Thực hiện mã nguồn mô tả hành vi, dùng testbench
(2) Mô phỏng RTL • Thực hiện file mã nguồn RTL, dùng testbench
(3) Mô phỏng chức năng trong VHDL • Thực hiện file .vhd mô tả cấu trúc, dùng testbench
(4) Mô phỏng chức năng thiết bị ở mức cổng• Mô phỏng netlist pre-P&R EDN dùng công cụ mức cổng
(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 - 13
Test-Bench
Behavioral Module
MCU FPGA
PLDMemory
Kiểm tra thiết kế?
• Chip level• Board level• Std parts model• Model bus operation • Discrete event-driven • Flexibility over strictly
netlist-driven
Hardware Modeling - 1 - 14
Kết luận
• VHDL là một ngôn ngữ dùng để mô hình hoá phần cứng của thiết bị
• 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ưởng
đến 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 (back-annotated timing data)
Hardware Modeling - 1 - 15
Bài 2
Ngôn ngữ VHDL
Hardware Modeling - 1 - 16
Chương trình VHDL bao gồm các design units.
Một số design units độc lập với các design unit khác.
Design Units trong VHDL
• Entity• Architecture• Configuration• Package• Package Body• Library
Hardware Modeling - 1 - 17
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 kiểm tra lại secondary design unit. Nếu không, chương trình sẽ có lỗi.
• Các secondary unit không thể tồn tại độc lập -- tức là, phải phụ thuộc primary unit
Hardware Modeling - 1 - 18
• Entity mô tả external interface của thực thể được thiết kế, cùng các thuộc tính liên quan với interface đó
entity Half_Add is
port (A, B : in std_logic ;
Carry, Sum : out std_logic) ;
end Half_Add ;
A
Carry
Sum
B
Entity
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 - 19
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
Architecture
• Architecture mô tả hoạt động bên trong của 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 với nó, có thể có nhiều architecture cho một thực thể
Hardware Modeling - 1 - 20
Multiple Architecture• Có thể có nhiều architecture cùng tồn tại để mô tả hoạt
động 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ết 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 . . .
end Half_Add ;
architecture BEH of Half_Add is . . .
end BEH ;
architecture RTL of Half_Add is . . .
end RTL ;
architecture XLX of Half_Add is . . .
end XLX ;
entity Cnt64 is . . .
end Cnt64 ;
architecture BEH of Cnt64 is . . .
end BEH ;
architecture RTL of Cnt64 is . . .
end RTL ;
architecture XLX of Cnt64 is . . .
end XLX ;
Hardware Modeling - 1 - 21
package My_Pack is
constant. . . . . .function. . .. . .component . . .. . .subtype. . .
end package My_pack ;
library IEEE;use IEEE.std_logic_1164.all ;. . .use work.My_Pack.all ;
entity . . .
Package• Một package declaration được dùng để khai báo các dữ
liệu dùng cho toàn bộ thiết kế, bao gồm:– Constants, data types, subtypes, subprogram và function
declarations, v.v…
Hardware Modeling - 1 - 22
package My_Pack is
constant. . . . . .function bv_to_integer (. . .component . . .. . .subtype. . .
end My_Pack ;
package body My_Pack is
function bv_to_integer (BV: bit_v.. return integer is variable … begin for index in BV'range loop . . . .
. . .end My_Pack ;
declaration
details
Package Body• Một package body là một dependent unit của một
package, nó chứa các thông tin chi tiết về các đối tượng trong package
– Subprograms, deferred constants
Hardware Modeling - 1 - 23
Library • Về cơ bản, tất cả các đối tượng VHDL đều được lưu
trong các thư viện– Theo định nghĩa, thư viện là một tập hợp các đơn vị
thiết kế (design unit) đã được kiểm chứng– Work và std là hai thư viện dùng được cho mọi design
unit
package std_logic_1164 is..
package std_logic_arith is..
package std_logic_unsigned is..
library IEEE ;
Hardware Modeling - 1 - 24
Library
• Libraries và Packages comprise the VHDL Design Management structure
– Theo một nghĩa nào đó, nó tương tự như directories và subdirectories
package std_logic_1164 is..
package std_logic_arith is..
package std_logic_unsigned is..
library IEEE ;
Hardware Modeling - 1 - 25
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 trúc của library, do vậy chúng không dễ được chuyển giao giữa các tool
package Fast_Counters is..
package DSP_Filters is..library My_Lib ;use My_Lib.Fast_Counters.all ;
entity Mod1 is port ( . . .
library My_Lib
Hardware Modeling - 1 - 26
Khởi tạo các Library • Thông thường, cần phải tạo các thư viện trong mỗi
tool cụ thể thay vì attach các thư viện đã có ở đâu đó
– Đặt tên cho library, và sau đó phân tách các design unit được chọn đưa vào nó
package Fast_Counters is..
package DSP_Filters is..library My_Lib ;use My_Lib.Fast_Counters.all ;
entity Mod1 is port ( . . .
library My_Lib
Hardware Modeling - 1 - 27
Work Library• Đây là thư mục con (sub-directory) mặc định được
dùng để lưu giữ tất cả các đơn vị thiết kế đã được biên dịch (compiled design units), trừ khi có các chỉ định khác.
• Mỗi một công cụ mô phỏng hoặc tổng hợp đều sẽ tạo ra một cấu trúc như thế
– Chú ý: hiển thị ở library là nhãn tên của design unit chứ không phải là tên của source file
Hardware Modeling - 1 - 28
Design Unit Identifier
entity HALF_ADDentity DFFentity REG4package My_Counters. . .
architecture RTLarchitecture STRUCTURAL
Work Library
Một ví dụ về nội dung của
work library
Secondary (dependent) design units tham trỏ tới primary unit tương ứng với nó
Hardware Modeling - 1 - 29
entity DFF is port (D, Clock : in std_logic ; Reset : in std_logic ; Q : out std_logic) ;end entity DFF ;
architecture RTL of DFF isbegin 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 ;
ClockReset
D Q
Ví dụ về Hierarchy : DFF
Hardware Modeling - 1 - 30
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;
architecture Structural of REG_4 is
component DFF port ( D, Clock : in std_logic ; Reset : in std_logic; Q : out std_logic ) ; end component ;
beginU3 : 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;
Clk
Rst
D_in(3)
D_in(2)
D_in(1)
D_in(0)
Q_out(3)
Q_out(2)
Q_out(1)
Q_out(0)
DFF
DFF
DFF
DFF
U3
U0
U1
U2
REG_4
Ví dụ về Hierarchy : REG-4
Hardware Modeling - 1 - 31
Liên kết Tín hiệu• Có hai phương pháp liên kết các tín hiệu với các
cổng tương ứng của chúng– Liên kết theo vị trí: Các tín hiệu ở mức cao được liệt kê
theo đúng trật tự của các cổng (port) ở mức thấp trong component 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 ;
Hardware Modeling - 1 - 32
Liên kết Tín hiệu• Có hai phương pháp liên kết các tín hiệu với các
cổng tương ứng của chúng– Liên kết theo tên: Các cổng (ports) và tín hiệu
(signals) được liệt kê một cách rõ ràng, đầy đủ, không phụ thuộc trật tự (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 ;
Hardware Modeling - 1 - 33
architecture Structural of Top is
component Sub_A port (A1, A2, A3 : in std_logic ; A4 : out std_logic_vector (3 downto 0)) ; end component ;
component Sub_B port (B1: in std_logic_vector (3 downto 0 ) ; B2, B3, B4 : out std_logic) ; end component ;
signal Bus_1 : std_logic_vector (3 downto 0) ;signal Sig_1: std_logic ;
beginU0 : Sub_A port map (I1, I2, Sig_1, Bus_1) ;U1 : Sub_B port map (Bus_1, Sig_1, O1, O2) ; end Structural ;
Sub_A Sub_B
Top
I1
I2O1O2
Sig_1
Bus_1
A1
A2
A4
A3 B4
B3
B2
B1
entity Top is port (I1, I2 : in std_logic; 01, 02 : out std_logic) ;end Top ;
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
Hardware Modeling - 1 - 34
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 ;
architecture Xilinx_Struct of REG_4 iscomponent FDC port (D : in std_logic ; Clock, Reset : in std_logic ; Q : out std_logic) ; end component ; beginU3 : FDC port map (D=>D_in(3), Clock=>Clk, Reset=>Rst, Q=> Q_out(3)) ;
U2 : FDC port map (D=>D_in(2), Clock=>Clk, Reset=>Rst, Q=> Q_out(2)) ;
U1 : FDC port map (D=>D_in(1), Clock=>Clk, Reset=>Rst, Q=> Q_out(1)) ;
U0 : FDC port map (D=>D_in(0), Clock=>Clk, Reset=>Rst, Q=> Q_out(0)) ;
end Xilinx_Struct ;
• Component instantiation from target library may be helpful for chip level optimization ( i.e., Xilinx Virtex )
Clk
Rst
D_in(3)
D_in(2)
D_in(1)
D_in(0)
Q_out(3)
Q_out(2)
Q_out(1)
Q_out(0)
FDC
FDC
FDC
FDC
U3
U2
U1
U0
Cụ thể hoá phần tử
Hardware Modeling - 1 - 35
Sử dụng Generics• Generics là các tham số có thể cập nhật động (thay
đổi giá trị) trong từng câu lệnh cụ thể hoá phần tử của thiết kế (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;
architecture RTL of My_Cntr is• • • • end architecture RTL;
LabMarker
Hardware Modeling - 1 - 36
Cập nhật giá trị của Generics
• Sử dụng một generic mapcùng với port map, khi có một phần tử được cụ thể hoá đâu đó trong thiết kế
– Nếu không có genericmap, generic nhận giá trị mặc định ban đầu
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
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 ;beginU0: My_Cntr generic map (Count_Width => 64) port map (DATA_BUS, CLOCK, RST, LD, CNTRL, DATA_OUT ) ; • • • • end architecture RTL;
Hardware Modeling - 1 - 37
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ý
cho một mô hình phần cứng VHDL – Analysis (phân tích)
• Design unit được kiểm tra lỗi cú pháp. Sau khi hoàn tất, nó sẽ được lưu giữ ở work directory
– Elaboration (chỉnh sửa)• Cấu trúc hierarchy của thiết kế được dàn trải bắt đầu từ mức
cao nhất. Ứng với mỗi sub-module cụ thể chỉ có một copy duy nhất được tạo ra
– Synthesis (tổng hợp)• Dạng mô tả netlist của thiết kế được tạo ra hoặc theo format
chuẩn công nghiệp hoặc theo một vendor-specific format– Execution (chỉ mô phỏng)
• Mô hình được mô phỏng theo các bước thời gian gián đoạn. Nó được điều khiển bởi các sự kiện ở các tín hiệu đồng bộ quá trình
Hardware Modeling - 1 - 38
Analyze
ElaborateExecute Synthesize
Quy trình biên dịch entity DFF is port (D, Clk : in Reset: in Q: out
. . .architecture..
Hardware Modeling - 1 - 39
Trình tự Biên dịch • Do mối quan hệ giữa các primary và secondary
design unit cũng như khả năng có thể cụ thể hoá các module ở mức 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 được phân tích trước các architecture tương ứng với chúng
• Các package cần phải được phân tích trước các package body
• Mỗi một module cần phải được phân tích trước khi nó được tham trỏ bởi các module khác
– Đây là trình tự biên dịch Bottom-up
Hardware Modeling - 1 - 40
- - 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 cả các dòng
A_OUT <= ‘1’ ; - - Comments có thể viết từ đây
Comments• Comments (chú thích) có tác dụng làm cho mã
nguồn trở nên dễ hiểu hơn, điều này cũng tương tự như ở các ngôn ngữ khác
Hardware Modeling - 1 - 41
Kết luận
• VHDL bao gồm các primary và secondary design unit
• Trật tự biên dịch chương trình VHDL được thực hiện theo một quy luật chặt chẽ
• Tất cả các design unit đã được kiểm chứng được lưu trong một thư viện gọi là work library
• Có thể sử dụng Generics để tăng tính linh hoạt của mã nguồn (source code)
Hardware Modeling - 1 - 42
Bài 3
Signals và Data Types
Hardware Modeling - 1 - 43
Data Types
• Data types là một yếu tố quan trọng trong VHDL (cũng như 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 giả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ả phần cứng và kiểm tra lỗi nhằm đảm bảo sự tương thích tín hiệu 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 (gate-level)
Hardware Modeling - 1 - 44
entity REG_4 isport (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;
signal A : integer ; signal B : bit ;signal C : integer ;signal D : std_logic ;
A <= C;A <= C + 1;A <= B;D <= C;B <= D;Q_out <= Cntrl;
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)
Hardware Modeling - 1 - 45
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 - 46
Scalar Data Types
• Kiểu dsữ liệu vô hướng nhận các giá trị đơn lẻ. Trong VHDL, lớp các data type này gồm có:
– Bit– Boolean– Integer– Real– Physical– Character – Std_logic and std_ulogic– Enumerated
Hardware Modeling - 1 - 47
type bit is (‘0’, ‘1’) ;
type boolean is (false, true) ;
architecture BEHAVE of MUX issignal A,B,Sel, Z : bit ; begin if Sel = ‘1’ then Z <= A ; else Z <= B ; end if . . .
if Sel =‘1’, if F >= G..
both yield boolean result
Bit và Boolean • Vừa đủ để mô hình hoá phần cứng, nhưng nó không
cho phép mô tả các giá trị high-impedance, unknown, don’t care, v.v...
• Thích hợp cho việc mô hình hoá ở mức khái niệm lý thuyết
Hardware Modeling - 1 - 48
Integer và Real• Chấp nhận các giá trị và các đại lượng một cách trực
quan và linh hoạt– Cần phải quy định giải giá trị cho các kiểu nguyên
(integer), nếu không nó sẽ sử dụng giải giá trị mặc định với số nguyên 32-bit
• Cho phép người thiết kế sử dụng các giá trị floating point
– Khai báo các kiểu real với giải giá trị thực nhất định – Cách dùng giá trị kiểu ‘Real’ không giống như ‘Integer’
type integer is range . . .
type real is range . . .
signal A : integer range 0 to 7;signal B : integer range 15 downto 0 ;
type CAPACITY is range -25.0 to 25.0 ;signal Sig_1 : CAPACITY := 3.0 ;
Hardware Modeling - 1 - 49
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.
type time is range 1 to 1000000
unitsfs;ps = 1000 fs;ns = 1000 ps;us = 1000 ns;ms = 1000 us; . . .
constant Tpd : time := 3ns ; . . .Z <= A after Tpd ;
Physical• Kiểu vật lý (Physical type) được dùng để định lượng
các đại lượng vật lý như là khối lượng, độ dài, thời gian
• Kiểu vật 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ở
Hardware Modeling - 1 - 50
type std_ulogic is ( ‘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
) ;
Recall: type bit is limited to (‘0’, ‘1’).
Std_logic và Std_ulogic• Std_logic được phát triển từ hệ thống MVL (Multi-Value
Logic) và được dùng để mô hình hoá phần cứng một cách chi tiết hơn so với kiểu bit
– Hỗ trợ các mức giá trị khác nhau của tín hiệu: don't-care conditions, unknown, three-state …
– Được định nghĩa trong gói IEEE std_logic_1164
Hardware Modeling - 1 - 51
signal A,B,C,Res_Out : std_logic ;signal Out_1 : std_ulogic ;
Out_1 <= A ;Out_1 <= B ; Out_1 <= C ;
CB
A
Out_1C
B
A
Res_Out <= A;Res_Out <= B; Res_Out <= C;
Res_Out
So sánh Std_logic và Std_ulogic
• Cả hai kiểu đều chứa cùng một tập các giá trị như nhau– Sự khác nhau ở chỗ thực hiện mạch (implementation)– Chữ u trong ulogic có nghĩa là unresolved
• Nếu người thiế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ín hiệu nào được đưa tới cửa ra
• Std_ulogic không có khả năng đó, nhưng nó tạo ra một công cụ nội tại để kiểm tra các lỗi wired-oring do sơ suất
X
Hardware Modeling - 1 - 52
signal A,B,C,Res_Out : std_logic ;
C
B
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’ ;
Res_Out
En0
En2
En1
Signal Resolution• Một cửa ra cụ thể không thể có nhiều tín hiệu điều
khiển kiểu wire-or – Để mô hình một cửa ra ba trạng thái, ta sử dụng một
lệnh gán tín hiệu có điều kiện và data-type là std_logic:
Hardware Modeling - 1 - 53
type My_State is ( RST, LOAD, FETCH, STOR, SHIFT ) ;. . .signal STATE, NEXT_STATE : My_State ;. . .
Enumerated (liệt kê)• Tăng mức độ linh hoạt trong việc mô hình hoá phần
cứng– Các kiểu liệt kê do người dùng định nghĩa sử dụng các giá trị
có thể nhận biết một cách dễ dàng và thích hợp với hoạt động của mô hình
– Làm cho các chương trình dễ hiểu hơn nhất là khi mô tả các máy trạng thái (hệ logic dãy) hoặc các hệ thống phức tạp
case (STATE) iswhen LOAD => . . .if COND_A and COND_B thenNEXT_STATE <= FETCH ;else NEXT_STATE <= STOR ;
Hardware Modeling - 1 - 54
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
• 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 biên dịch giá trị này không được tự động hiểu là ‘3’
Chú ý: dùng dấu trích kép (“0011”) cho các đối tượng có kiểu bit_vector, std_logic_vector hoặc string, và dùng dấu trích đơn (‘1’) cho các đối tượng có kiểu bit, std_logic và character
signal A_word : bit_vector (3 downto 0) := “0011” ;
Hardware Modeling - 1 - 55
Array• Array là nhóm các phần tử đơn có cùng kiểu (type)
ban đầu
type WORD is array (3 downto 0) of std_logic ;
index position0123
B_bus
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?
signal B_bus : WORD ;
type DATA is array (3 downto 0) of integer range 0 to 9 ;
signal B_bus : DATA ;
Hardware Modeling - 1 - 56
signal My_BusA, My_BusB: bit_vector (3 downto 0) ;signal My_BusC : bit_vector (0 to 3) ;
3 012
3 012
My_BusA
My_BusB
My_BusB <= My_BusA ;
My_BusA
3 012
0 321
My_BusC
Inadvertent bit-swap?
My_BusC <= My_BusA ;
Phép gán các Array • Khi gán giá trị một array cho một array khác, thì:
– 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
Hardware Modeling - 1 - 57
signal Data_Word : std_logic_vector (11 downto 0) ;
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 dễ đọc hơn - người thiết kế có thể sử dụng các giá trị ở cơ số 16 (hexadecimal) hoặc 8 (octal)
– Có thể sử dụng dấu gạch dưới các giá trị biến cho dễ đọc
Data_Word <= X”A6F”;
Data_Word <= ”101001101111” ;
Data_Word <= O”5157”;
Data_Word <= B”1010_0110_1111” ;
Hardware Modeling - 1 - 58
Record là nhóm các phần tử đơn có kiểu ban đầu có thể khác nhau.
type OPCODE is recordPARITY : 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
Records
Hardware Modeling - 1 - 59
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
String
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 ;
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 ;
Hardware Modeling - 1 - 60
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;
WORD <= ( A, B, C, D ) ; Q_Out <= ( others => ‘0’ ) ;
WORD <= ( 2 => ‘1’, 3 => D, others => ‘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
Phép gộp các Array • Phép gộp (Aggregate) là một công cụ tiện lợi để
nhóm các kiểu dữ liệu (data type) cả vô hướng và phức hợp trong các phép gán
Only scalar data variables are allowed on the left-side aggregates.
H_Byte <= ( 7|6|0 => ‘1’, 2 to 5 => ‘0’ ) ;
Hardware Modeling - 1 - 61
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
TX_PACKET <= ( ‘1’,”0011”,”11101010”,5,”10” ) ;
TX_PACKET. ADDRESS <= ( “0011” ) ;
Gộp các Record• Phép gộp (Aggregate) là một công cụ tiện lợi để
nhóm các kiểu dữ liệu (data type) cả vô hướng và phức hợp trong các phép gán
Only records can accept aggregate of arrays
TX_PACKET. ADDRESS(2) <= ‘0’ ;
DATA_WORD <= ( H_BYTE, L_BYTE) ;
DATA_WORD <= ( LOWER => L_BYTE, UPPER=> H_BYTE) ;
DATA_WORD <= ( LOWER | UPPER=> H_BYTE);
DATA_WORD <= ( others => H_BYTE);
Hardware Modeling - 1 - 62
Tạo lập các Array 2-D
• Khi cần mô hình hoá các cấu trúc bộ nhớ, người thiết kế phải tạo ra một cấu trúc array 2 chiều (2-D structure)
– Đây thực sự là một array của các array (hoặc các record)
type Mem_Array is array ( 0 to 3 ) of std_logic_vector ( 7 downto 0);
signal My_Mem : Mem_Array ;
7 6 5 4 3 2 1 00
1
2
3
Hardware Modeling - 1 - 63
Tạo Array của các Record
• Array của các record thường được dùng trong các ứng 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 recordPARITY : 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
. . .
. . .
. . .
My_Data
Hardware Modeling - 1 - 64
Phép gán các Array 2-D• Với hầu hết các ứng dụng của memory, vector địa
chỉ Read/Write được chuyển thành dạng integer, để tham trỏ tới một phần tử trong array 2-D - 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 00
1
2
3
My_Mem (conv_integer( W_Addr)) <= Data_In ; . . . D_Out <= My_Mem (conv_integer (R_Addr));
Hardware Modeling - 1 - 65
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 2-D
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 00
1
2
3
constant My_ROM : ROM_Array := ( 0 => (others => ‘1’) , 1 => “10100010”, 2 => “00001111”, 3 => “11110000” ) ;
Hardware Modeling - 1 - 66
Các kiểu con (Subtypes) thường được dùng để phát hiện lỗi ‘out-of-range’ trong kết quả mô phỏng, và cũng có thể có tác dụng tối ưu hoá quá trình tổng hợp logic
Kiểu con trong VHDL• Một kiểu con (subtype) trong VHDL là một tập hợp
có hạn chế của một kiểu (type) đã có– Kiểu đã có cũng có thể là một kiểu đã đượ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 ;
Hardware Modeling - 1 - 67
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 ;
Label Base Type Constraint
subtype Arith_Ops is My_State range Add to Mult ;
subtype My_OHE_State is std_logic_vector ( 3 downto 0 ) ; constant Init_St0 : My_OHE_State := “0001” ; constant Load_St1 : My_OHE_State := “0010” ; constant Jump_St2 : My_OHE_State := “0100” ; constant Stor_St3 : My_OHE_State := “1000” ;
Hardware Modeling - 1 - 68
Bài 4
Operators vàExpressions
Hardware Modeling - 1 - 69
Các toán tử trong VHDL
• VHDL chứa một lượng lớn các toán tử (operator) dùng cho 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ữ liệu (data type) nhất đ ịnh
– Đặc biệt, cần lưu ý các toán tử số học (arithmetic) không dùng được với các kiểu dữ liệu phức hợp (bit_vector and std_logic_vector), vì các array không có giá trị bằng số tường minh
• Các Function (subprogram) được tạo ra để khắc phục những vấn đề liên quan
– Các hàm này có trong các gói được gọi là “arithmetic packages”
Hardware Modeling - 1 - 70
Operator Overloading• Operator overloading (chồng hàm) trong VHDL có
nghĩa là một toán tử cụ thể (ví dụ, ‘+’ ) có thể được dùng với các data type khác nhau
– Điều này xảy ra do các subprogram riêng biệt được viết cho từng data type nhất định
Compiler tự động chọn sub-function thích hợp dựa trên data type của các operands
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 );
Y <= A + B ; -- add 2 vectorsF <= C + D ; -- add 2 integersQ_Out <= Q_Out + 1; -- add vector and integer
Hardware Modeling - 1 - 71
andornandnorxornotxnor (VHDL-93)
Y <= G or ( F and H ) ;
Z <= A and B ;
ZB
A
F
H
GY
Các toán tử Logic
• Các logical operator đượ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
Hardware Modeling - 1 - 72
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ị ỗ ừ ả
signal A_vec, B_vec, C_vec : bit_vector ( 7 downto 0 ) ;
B_vec (7)A_vec (7)
C_vec (7)
B_vec (6)A_vec (6)
C_vec (6)
B_vec (5)A_vec (5)
C_vec (5)
B_vec (0)A_vec (0)
C_vec (0)
.
.
.
C_vec <= A_vec and B_vec ;
Các toán tử Logic với biến kiểu Array
Hardware Modeling - 1 - 73
= Equality/= Inequality< Less than<= Less than or equal > Greater than>= Greater than or equal
signal FLAG_BIT : boolean ;signal A, B : integer ;
FLAG_BIT <= ( A > B ) ;
Nếu A lớn hơn B, FLAG_BIT sẽ được gán giá trị true, ngược lại
FLAG_BIT được gán giá trị false
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
Hardware Modeling - 1 - 74
Rules for use on Arrays1. Arrays must be same type2. Arrays may be different lengths3. Arrays of different lengths are aligned left and then lexically compared -- Compares ASCII values
signal A_vec : bit_vector ( 7 downto 0 ) := “11000110” ;signal B_vec : bit_vector ( 5 downto 0 ) := “111001” ;
if ( A_vec > B_vec ) thenState <= NormalelseState <= Code_Redend if …
Toán tử quan hệ với các Array
• Ví dụ này cho kết quả là false – Các vector được so sánh từ trái sang phải. Việc so sánh được
thực hiện lần lượ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 - 75
+ Addition
- Subtraction
* Multiplication
/ Division
abs Absolute Value
** Exponentiation
signal A_num, B_num : integer range 0 to 15 ; signal Z_num : integer range 0 to 31 ;
Z_num <= ( A_num + B_num ) ;
+ Z_num
A_num
B_numInfers a 5-bit adder
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ử số học vốn không dùng với các dữ liệu có kiểu array
Hardware Modeling - 1 - 76
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 định nghĩa sẵn trong IEEE hoặc từ các hãng cung cấp phần mềm thiết kế
– Các function như vậy thườ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
• Toán tử “+” là overloaded
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 ;. . . .
library IEEE ;use IEEE.std_logic_1164.all ;use IEEE.Std_Logic_Unsigned.all ;use IEEE.Std_Logic_Arith.all;
Hardware Modeling - 1 - 77
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 + D_int ;
Z_vec < = A_vec + B_vec ;
Array Arithmetic • Nếu có các function thích hợp có thể dùng được
trong module thiết kế (thông qua mệnh đề “use”), thì compiler sẽ tự động truyền tham số cho trả lại kết quả tính từ subprogram đó
– Nếu không, compiler sẽ thông báo lại rằng các operator đó là “undefined”
Hardware Modeling - 1 - 78
Các toán tử Shift (dịch)
• Các toán tử Shift được định nghĩa trong VHDL-93 và rất hay được sử dụng, nhất là khi cần mô tả hoạt động của các phần 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 one-dimension (1-D) 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ược lại
• 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 - 79
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 - 80
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);
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”
cho kq
Hardware Modeling - 1 - 81
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 ;
Concatenation• Toán tử nối (concatenation) “&” cho phép kết nối
các biến kiểu scalar và kiểu array thành kiểu array lớn hơn
– Các phép gán được thực hiện với sự tương hợp vị trí (positional association)
Hardware Modeling - 1 - 82
Z <= A + B + C + D ; Z <= ( A + B ) + ( C + D ) ;
B
A
CD
Z
3 logic levels
D
Z
A
B
C
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
+++
++
+
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
Hardware Modeling - 1 - 83
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 ;
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
Các Slice của Array• Một nhóm các phần tử kề cận nhau trong một array
được goại là một slice và có thể được tham trỏ đồng thời
– Các phần tử khác của array không bị ảnh hưởng bởi phép gán slice
Hardware Modeling - 1 - 84
signal Status_Bus : std_logic_vector (15 downto 0) ;
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 tử được chọn không liền nhau (9,8,3,2,1, và 0) từ ‘Status’ bus gồm 16-bit
– Giải mã toàn bộ bus có thể làm tăng số lượng mạch logic tổ hợp và làm cho thiết bị làm việc chậm hơn)
process ( Status_Bus )begincase ( Status_Bus ) is when “1101111101010011” => < sequential statement(s) > ; when . . .
signal Int_Bus : std_logic_vector ( 5 downto 0 ) ;. . . Int_Bus <= Status_Bus ( 9 downto 8 ) & Status_Bus ( 3 downto 0 ) ;
Inefficient !!
process ( Status_Bus )begincase ( Status_Bus(9 downto 8) & Status_Bus (3 downto 0)) is when “110011” => < sequential statement(s) > ; when . . .
Will Not Compile!
process ( Int_Bus )begincase ( Int_Bus ) is when “110011” => < sequential statement(s) > ; when . . .
Optimal !!
Hardware Modeling - 1 - 85
Bài 5
Các câu lệnh Concurrent và Sequential
Hardware Modeling - 1 - 86
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 hiện không tuỳ thuộc vào vị trí của chúng trong chương trình
• Các câu lệnh được gọi là sequential khi chúng được thực hiện một cách tuần tự theo trình tự viết chúng trong chương trình, giống như các lệnh trong các phần mềm thông thường
– Tất cả các câu lệnh viết trong một process là những lệnh sequential
Hardware Modeling - 1 - 87
architecture RTL of ENTITY_1 is . . . begin concurrent statements ;
. . . process begin sequential statements ; . . . end process ;
. . . concurrent statements ; . . . process begin sequential statements ; . . . end process ; ...end architecture RTL ;
• Mọi câu lệnh nằm ngoài một process đều là lệnh concurrent
Cấu trúc ngôn ngữ
Hardware Modeling - 1 - 88
architecture RTL of My_And2 isbegin. . .process (A, B)begin C <= A and B ;end process ;. . .end architecture RTL;
Process• Một process bao gồm
các câu lệnh sequential – Các câu lệnh trong một
process được thực hiện lần lượt
• Mỗi process đều phải được hoạt kích theo một cách nhất định
– Thường là do sự thay đổi 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 - 89
G1 G2
G3
B
AC C<=A and B
...
Process 1
process (C,..)begin
Process 3
If C = ‘1’then ...
Process 2
C
C
Các Process là đồng thời• Trong việc mô hình hoá phần cứng, quan điểm về
concurrency (tính đồng thời) là rất cần thiết– Bất kỳ sự thay đổi nào ở tín hiệu ‘C’ - cửa ra của c ng ổ
G1, cũng đều được đồng thời đưa tới cửa vào của các cổng G2 và G3
Hardware Modeling - 1 - 90
C<=A and B...
Process n
process (C,..)begin
Process n2
If C = ‘1’then ...
Process n1
C
C
Mô hình kết nối trong VHDL• Chỉ có các tín hiệu (signal) là có thể chuyển giá trị từ
một process sang một process khác– Các process concurrent, được liên kết bởi các tín hiệu,
thường được gọi là VHDL Connectivity Model (mô hình kết nối)
process n
process (...
Rst
Sig1
Sig2
Process n4
Process n3
Hardware Modeling - 1 - 91
architecture Behave of DFF isbegin. . .Reg1: process (Clock, Reset)beginif Reset = ‘1’ then Q <= ‘0’ ;elsif ( Clock’event and Clock = ‘1’ ) then Q <= D ;end if ;end process;. . .end Behave ;
Optional Label
Các thành phần của Process Signals in sensitivity list create implied “wait” condition
Signal updated with new value when process suspends
All statements within the process are handled
sequentially, in order
Keyword
Keywords “end” and “process”
Hardware Modeling - 1 - 92
architecture ...process ( ) begin Out1 <= A; Out1 <= B; . . . end process ;end architecture ;
architecture . . . begin Out1 <= A; Out1 <= B; . . . end architecture ;
B
B
Chỉ có phép gán cuối cùng là có hiệu lực
Out1
? Out1
A
Cần phải có một hàm resolution cho tín hiệu ra ‘Out1’
Bên trong và bên ngoài Process
Hardware Modeling - 1 - 93
wait on... An event on given signal wait until... A specific condition wait for ... A specified time amount wait Indefinite suspension
wait on... An event on given signal wait until... A specific condition wait for ... A specified time amount wait Indefinite suspension
wait on A, B ;wait until CLK = ‘1’ ;wait for 10 ns ;
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 • 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• Đối với các mô hình hành vi, người thiết kế thưòng
dùng các câu lệnh wait. Trong VHDL có bốn dạng lệnh wait
wait;
Hardware Modeling - 1 - 94
Các điều kiện Wait• Ví dụ dưới đây so sánh các điều kiện ‘wait’ từ các
câu lệnh được viết rõ ràng (explicit) và điều kiện ‘wait’ ẩn ý (implicit)
– Note: Một số compiler dùng tổng hợp mạch không hỗ trợ điều kiện explicit ‘wait’
process (A, B) begin C <= A and B ;end process ;
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 - 95
Simulation discrete time step
998 999 1000 1001
D1 D+nD+2D+1
1002
. . .
Delta cycles in-between
D1 D+2D+1. . .
Delta cycles in-between
Concurrent Operations
Modeling Concurrency• Công cụ mô phỏng VHDL đượ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 process được thực hiện cho đến khi bị tạm dừng, (2) giá trị của các tín hiệu được cập nhật, (3) sự thay đổi giá trị ở các tín hiệu làm cho các process liên quan được thực hiện
• Thời gian giữa các công đoạn này được gọi là delta cycle • 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
Hardware Modeling - 1 - 96
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 trường mô hình hoá hành vi trong VHDL
• Mỗi hoạt động (transaction) của thực thể được sắp đặt ở một thời điểm thích hợp
• Bước thời gian chỉ tăng lên khi không còn transaction nào khác ở thời điểm mô phỏng
Hardware Modeling - 1 - 97
Simulation discrete time steps
t t+1 t+2 t+3
D1 D+nD+2D+1
t+4
. . .Delta cycles
D1 D+2D+1. . .Delta cycles
Transaction Queuet + 3 t + 4 t + 5
. . .
. . .Int <= ‘1’ Data<= ‘0’
Out1 <= ‘1’ ;Out2 <= ‘0’ ;. . .Int <= ‘1’ after 1 ns;. . .Data <= ‘0’ after 2 ns;. . .
. . .Out2<= ‘0’
Out1<= ‘1’
Scheduling Events
ns
Del
ta
Cyc
les
Discrete Time
Hardware Modeling - 1 - 98
• Câu lệnh gán tín hiệu “Z <= A” tạo ra một transaction trong VHDL
• Cụ thể, giá trị hiện tại của A được đọc và được dùng
để gán cho tín hiệu Z
process (. . .) begin Z <= A ; F <= G ;
. . .end process ;
Transactions
Hardware Modeling - 1 - 99
process (A, G) begin Z <= A; F <= G; . . .end process ;
process (A, G) begin Z <= A; F <= G; . . .end process ;
Z<=A;...
Process 1Process 1
process (Z,..)begin
Process 3Process 3
If Z = ‘1’
then ...
Process 2Process 2
Z
Z
Events• 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 ở tín hiệu đó
• Mỗi một phép gán tín hiệu đều gây ra mộttransaction, nhưng không phải tất cả các transaction đều làm xuất hiện các event ở tín hiệu được gán
• Một event ở một tín hiệu đã cho có thể hoạt kích một process chỉ khi tín hiệu đó có tên trong sensitivity list của proccess
Hardware Modeling - 1 - 100
process ( Clk) begin
if (Clk’event and Clk = ‘1’) then C <= A and B ; end if; end process;
process ( Clk) begin
if (Clk’event and Clk = ‘1’) then C <= A and B ; end if; end process;
Mọi phép gán tín hiệu xảy ra sau mệnh đề:
if clock’event and clock = ‘1’ then...
đều tạo ra một cấu trúc thanh ghi (register)
C
ClkBA
Building Registers
Hardware Modeling - 1 - 101
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)
• Tuy nhiên, cần phân biệt cách dùng, các khả năng và những hạn chế của từng đối tượng này
• Ở mức thực thể, tất cả các port được khai báo thuộc lớp signal, chúng có khả năng trao đổi giá trị với các module khác, và có thể dùng được cho mọi process được khai báo trong các architecture body lệ thuộc
• Trong mỗi architecture body, tất cả các tín hiệu được khai báo chỉ có tác dụng cục bộ với architecture đó, và chỉ được dùng với các process được khai báo trong cùng architecture đó
• 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 - 102
Phạm vi của Signal và Variable
• Port là signal, được khai báo ở mức cao nhất (entity)• 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
Input Ports
Signals
process
Variables
Output Ports
Hardware Modeling - 1 - 103
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 được gán phải có cùng kiểu
(type)– Tất cả các signal và variable được gán phải có cùng kích
thước (size)
• Nếu signal là một port, người thiết kế phải lưu ý thêm:– Signals có mode “in” có thể đọc nhưng không được gán giá
trị– Signals có mode “out” có thể được gán giá trị trong
process, nhưng không được đọc
Hardware Modeling - 1 - 104
entity Count_1 isport (Clk, D : in bit ; Q : out integer range...); end Count_1;
architecture WRONG of Count_1 isbeginprocess (Clk)begin If Clk’event and Clk =‘1’ then Q <= Q + 1;end if ;end process ;
Q
Internal_Cnt
Will produce compiler error
architecture RTL of Count_1 issignal Internal_Cnt : integer range ... ;beginprocess (Clk) begin If Clk’event and Clk =‘1’ then Internal_Cnt <= Internal_Cnt + 1 ; end if ;end process ;Q <= Internal_Cnt ;
Counter
Phép gán với Signal
Hardware Modeling - 1 - 105
Using Variables
• Vì phạm vi của một variable chỉ giớ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 đọc trước khi giá trị của nó được xác định, đều sẽ được suy diễn như là một register trong cấu trúc hardware nếu như nó được dùng với một process có clock
– 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 - 106
process ( Clk ) variable B, C, D : bit := ‘1’ ; begin If (Clk’event and Clk =‘1’) then B := A ; C := B ; D := C ; end if ; end process ;
process ( Clk ) variable B, C, D : bit := ‘1’ ; begin If (Clk’event and Clk =‘1’) then B := A ; C := B ; D := C ; end if ; end process ;
Clk
A D
process ( Clk ) variable B, C, D : bit := ‘1’ ; begin If ( Clk’event and Clk =‘1’ ) then D := C ; C := B ; B := A ; end if ;end process ;
process ( Clk ) variable B, C, D : bit := ‘1’ ; begin If ( Clk’event and Clk =‘1’ ) then D := C ; C := B ; B := A ; end if ;end process ;
Clk
A CB D
Variable trong các Process có Clock
Hardware Modeling - 1 - 107
entity Count_1 isport (Clk, D : in std_logic ; Q : out std_logic_vector ...); end Count_1;
architecture WRONG of Count_1 isbeginprocess (Clk)begin If Clk’event and Clk =‘1’ then Q <= Q + 1;end if ;end process ;
Q
Internal_Cnt
Alternate Solution
Will produce compiler error
architecture RTL of Count_1 isbeginprocess (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 ;
Counter
© 2003 Xilinx, Inc. All Rights Reserved
Các lệnh điều khiển chương trình trong VHDL
Bài 6
Hardware Modeling - 1 - 109
architecture RTL of ENTITY_1 is . . . begin concurrent statements ;
. . . 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 ;
• Các lệnh if/else, case hoặc loop phải được viết bên trong một process
Cấu trúc ngôn ngữ
Hardware Modeling - 1 - 110
processbeginif (boolean expression) thensequential statements;
end if ;
processbeginif (boolean expression) thensequential statements;
end if ;
processbeginif (boolean expression) thensequential statements ;else sequential statements ;
end if ;
processbeginif (boolean expression) thensequential statements ;else sequential statements ;
end if ;
processbeginif (boolean expression 1) thensequential statements ;elsif (boolean expression 2) then sequential statements ; elsif (boolean expression 3) then sequential statements ; else sequential statements ;
end if ;
processbeginif (boolean expression 1) thensequential statements ;elsif (boolean expression 2) then sequential statements ; elsif (boolean expression 3) then sequential statements ; else sequential statements ;
end if ;
Các câu lệnh If/Else• Câu lệnh if/else làm cho các giao dịch được thực
hiện dựa trên những điều kiện nhất định. Có ba dạng lệnh if/else cơ bản sau:
Hardware Modeling - 1 - 111
process (A, B, C, D, Sel)beginIf (Sel = “00”) then
Z <= A ;elsif (Sel = “01”) then
Z <= B ;elsif (Sel = “10”) then
Z <= C ; elsif (Sel = “11”) then
Z <= D ; end if; end process ;
process (A, B, C, D, Sel)beginIf (Sel = “00”) then
Z <= A ;elsif (Sel = “01”) then
Z <= B ;elsif (Sel = “10”) then
Z <= C ; elsif (Sel = “11”) then
Z <= D ; end if; end process ;
Z
D
C
B
A
SelD
C
B
AZ
Late arriving signal?Late arriving signal?
Ví dụ về lệnh If/Elsif1. Điều kiện đầu tiên thoả mãn sẽ
được thực hiện ngay2. Các điều kiện có thể gối nhau3. Điều kiện đầu tiên của lệnh
if/elsif có ưu tiên cao nhất
Sufficient for std_logic?Sufficient for std_logic?
Hardware Modeling - 1 - 112
process (…) begincase ( selector expression ) iswhen ... =>
sequential statements ;when ... =>
sequential statements ; when ... =>
sequential statements ; end case ; . . .end process ;
process (…) begincase ( selector expression ) iswhen ... =>
sequential statements ;when ... =>
sequential statements ; when ... =>
sequential statements ; end case ; . . .end process ;
process (...)begincase ( selector expression ) iswhen ... =>
sequential statements ; . . . when others =>
sequential statements ; end case ; . . .end process ;
process (...)begincase ( selector expression ) iswhen ... =>
sequential statements ; . . . when others =>
sequential statements ; end case ; . . .end process ;
Câu lệnh Case• Câu lệnh case làm cho các giao dịch được thực hiện
tuỳ thuộc vào giá trị của biểu thức chọn• Lệnh case có hai dạng cơ bản:
Hardware Modeling - 1 - 113
• Tất cả các giá trị có thể có của biểu thức chọn đều phải được chỉ rõ (specified) trong câu lệnh
• Các điều kiện không được chồng chéo (gối) nhau• Giải các giá trị được mô tả phải hữu hạn (discrete)• 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
process (A, B, C, D, Sel )begincase Sel is when “00” => Z <= A ; when “01” => Z <= B ; when “10” => Z <= C ; when “11” => Z <= D ;
end case ;. . .end process ;
Z
D
C
B
A
Sel Is this sufficient for std_logic?
Ví dụ về lệnh Case
Hardware Modeling - 1 - 114
process (A, B, C, D, Sel)beginIf (Sel <= 3) then
Z <= A ;elsif (Sel <= 5) then
Z <= B ;elsif (Sel <= 7) then
Z <= C ; elsif (Sel <= 9) then
Z <= D ; end if; end process ;
process (A, B, C, D, Sel)beginIf (Sel <= 3) then
Z <= A ;elsif (Sel <= 5) then
Z <= B ;elsif (Sel <= 7) then
Z <= C ; elsif (Sel <= 9) then
Z <= D ; end if; end process ;
D
C
B
AZ
Các điều kiện chồng chéo • Ví dụ dưới đây minh hoạ trường hợp các điều kiện chồng
chéo nhau. Khi đó ta chỉ có thể sử dụng lệnh if/elseif. Muốn sử dụng lệnh case phải chỉnh lại các điều kiện
Hardware Modeling - 1 - 115
process (…) beginif (x = 12 to 14) then sequential statements ; . . .
case ( selector expression ) iswhen 0 to 7 => sequential statements ;when 4.3 to 7.7 => sequential statements ; when “1000” to “1010” => sequential statements ; when “1000” | “1010” => sequential statements ;
. . .end process ;
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)
Hardware Modeling - 1 - 116
Lệnh gán Signal có điều kiện • Lệnh gán tín hiệu có điều kiện là một dạng có tác dụng tương
đương lệnh if/else
• 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
architecture ... begin process ( A,B, C, Sel ) begin if (Sel = “00” ) then Z <= A ; elsif (Sel = “10”) then Z <= B ; elsif (Sel = “11”) then Z <= C ; else Z <= ‘X’ ; end if ; end process ;end architecture ;
architecture ... begin process ( A,B, C, Sel ) begin if (Sel = “00” ) then Z <= A ; elsif (Sel = “10”) then Z <= B ; elsif (Sel = “11”) then Z <= C ; else Z <= ‘X’ ; end if ; end process ;end architecture ;
architecture ... begin Z <= A when Sel = “00” else B when Sel = “10” else C when Sel = “11” else ‘X’ ;end architecture ;
architecture ... begin Z <= A when Sel = “00” else B when Sel = “10” else C when Sel = “11” else ‘X’ ;end architecture ;
Hardware Modeling - 1 - 117
architecture ... begin process ( A,B,C, SEL ) begin case (SEL) is when “00” => Z <= A ; when “10” => Z <= B ; when “11” => Z <= C ; when others => Z <= ‘X’ ; end case ; end process ;end architecture ;
architecture ... begin process ( A,B,C, SEL ) begin case (SEL) is when “00” => Z <= A ; when “10” => Z <= B ; when “11” => Z <= C ; when others => Z <= ‘X’ ; end case ; end process ;end architecture ;
architecture...with SEL select Z <= A when “00” , B when “10” , C when “11” , ‘X’ when others ;end architecture ;
architecture...with SEL select Z <= A when “00” , B when “10” , C when “11” , ‘X’ when others ;end architecture ;
Lệnh gán Signal có lựa chọn• Lệnh gán tín hiệu có lựa chọn là một dạng lệnh có tác
dụng tương đương với lệnh case• Quy tắc sử dụng hoàn toàn giống với lệnh case:
– (1) Tât cả các điều kiện phải được liệt kê đủ– (2) Các điều kiện không được chồng chéo nhau
Hardware Modeling - 1 - 118
Outline
• If/else Statements• Case Statement• Concurrent Form of If/else
and Case Statements• Loop Statements• Summary
Hardware Modeling - 1 - 119
process ( A, B_bus ) begin
for i in 7 downto 0 loop C_bus (i) <= A and B_bus (i) ; end loop ;
process ( A, B_bus ) begin
for i in 7 downto 0 loop C_bus (i) <= A and B_bus (i) ; end loop ;
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 một phương pháp điều khiển lặp riêng. Dạng thông dụng nhất là “for … loop”
– Biến chỉ số ‘index’ cho vòng lặp không được khai báo riêng, không thể gán giá trị cho nó, và không được sử dụng ở ngoài vòng lặp
– Nó được dùng như là một hằng số– Sau mỗi phép lặp,
giá trị của nó được cập nhật theo chiều hướng ghi trong câu lệnh từ trái sang phải
Hardware Modeling - 1 - 120
process ( A, B_bus ) begin
for i in 7 downto 0 loop C_bus (i) <= A and B_bus (i) ; end loop ;
process ( A, B_bus ) begin
for i in 7 downto 0 loop C_bus (i) <= A and B_bus (i) ; end loop ;
A
B_bus (7)
A
..
.
A
B_bus (6)
B_bus (0)
C_bus (7)
C_bus (6)
C_bus (0)
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ênkết quả logic của từng phép lặp
• 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 hay được sử dụng trong các chương trình con (function và procedure)