1
Chương 3:
NGÔN NG
NGÔN NG
Ữ
Ữ
MÔ T
MÔ T
Ả
Ả
PH
PH
Ầ
Ầ
N C
N C
Ứ
Ứ
NG
NG
-
-
VHDL
VHDL
ThS
ThS
.
.
Nguy
Nguy
ễ
ễ
n
n
H
H
ữ
ữ
u
u
Kh
Kh
á
á
nh
nh
Nhân
Nhân
Tài liệu tham khảo
Text Book:
Circuit Design with VHDL, Volnei A.Pedroni, MIT press.
VHDL Programming by Examples, Douglas L.Perry,
McGraw Hill.
Reference Books:
1076 IEEE Standard Vhdl Language Reference Manual
2002, IEEE Computer Society.
Microprocessor Design Principles and Practices with
VHDL, Enoch O. Hwang.
HDL Chip Design- A Practical Guide for Designing,
Synthesizing and Simulating ASICs and FPGAs using
VHDL or Verilog, Douglas J.Smith.
Phần mềm học tập
Active-HDL 7.1.sp2
Quartus (for Altera FPGAs)
ISE (for Xilinx FPGAs)
www.opencores.org
2
NỘI DUNG
Giới thiệu về ngôn ngữ mô tả phần cứng –
HDL
Cấu trúc của một thiết kế được mô tả bằng
VHDL
Kiểu dữ liệu
Toán tử và thuộc tính
Phát biểu đồng thời
Phát biểu tuần tự
Hàm và thủ tục
1. Giới thiệu ngôn ngữ VHDL.
Phương pháp
thiết kế
bằng HDL
Phương pháp
thiết kế
truyền thống
1. Giới thiệu ngôn ngữ VHDL.
VHDL là gì?
Một ngôn ngữ mô tả phần cứng:
VHDL - VHSIC Hardware Description Language.
VHSIC - Very High Speed Integrated Circuits.
Là chuẩn do Bộ QP Mỹ phát triển từ thập niên
70. Dựa trên ngôn ngữ lập trình ADA, nhằm tạo
ra tài liệu mô tả hoạt động của các mạch điện
tử.
1987 được IEEE chuẩn hóa trong IEEE 1076-1987.
1993 hoàn thiện lại thành IEEE 1076-1993.
2002 giải quyết vấn đề protected types=>IEEE
1076-2002
3
1. Giới thiệu ngôn ngữ VHDL.
VHDL là chuẩn độc lập mô tả hệ thống:
Các nhà phát triển hệ thống dựa trên VHDL để
mô
tả
,
thiết kế
hệ thống.
Các phần mềm
mô phỏng
có thể thực hiện mô
phỏng hoạt động của hệ thống mô tả.
Các phần mềm
tổng hợp
có thể thực hiện tổng
hợp sinh ra mạch thực để thực hiện hệ thống.
Mạch sau khi tổng hợp có thể được nạp xuống chip
để thực hiện chức năng mô tả.
Chức năng: mô tả hoạt động của các hệ thống
hoặc mạch điện tử nhằm thực hiện các hệ thống
hoặc mạch này trên linh kiện thực.
1. Giới thiệu ngôn ngữ VHDL.
Ưu điểm của VHDL:
Cho phép hoạt động của hệ thống được mô tả
(modeled) và kiểm thử (simulated) trước khi
các công cụ tổng hợp “dịch” thiết kế sang phần
cứng thực tế (gates and wires).
Cho phép mô tả hệ thống song song.
Khi các mô hình VHDL được “dịch” sang “gates
and wires” thì nó có thể được nạp lên phần
cứng CPLD và FPGA để thực thi.
1. Giới thiệu ngôn ngữ VHDL.
Hai ứng dụng chính của VHDL là:
PLD (Programmable Logic Device):
CPLD (Complex PLD)
FPGA (Field Programmable Gate Array).
ASIC (Application-Specific IC)
4
Quy trình thiết kế mạch dựa trên VHDL
5
Design Entry
Text Editor
Language Sensitive Text Editor
Keyword coloring
Statement Template
Visual Entry Tools
Template & Translate (Structural)
Testbench
Converter (Waveformer)
HDL Design Entry (Text Editor)
6
HDL & Schematic Mixed
HDL Design Entry (Visual Tools)
HDL Simulation
7
HDL Synthesis
Các công cụ thiết kế VHDL
Bộ công cụ của nhà sản xuất chip:
Quartus/Maxplus => tổng hợp VHDL code lên
chip CPLD/FPGA của Altera.
ISE => tổng hợp VHDL code lên chip
CPLD/FPGA của Xilinx.
Một số công cụ của các hãng thứ ba:
ActiveHDL
Leonardo Spectrum (Mentor Graphics).
Synplify (Synplicity).
ModelSim (Mentor Graphics).
8
Một ví dụ VHDL đơn giản
Một ví dụ VHDL đơn giản
2. Code structure
library IEEE;
use IEEE.std_logic_1164.all;
ENTITY full_adder IS
PORT (a,b,cin: in bit;
s,cout:out bit);
END full_adder;
Architecture dataflow of full_adder is
begin
s <= a xor b xor cin;
cout <= (a and b) or (a and cin)
or (b and cin);
end dataflow;
9
Cấu trúc của một thiết kế được mô tả bằng VHDL
Một đọan Code chuẩn của VHDL gồm tối thiểu 3 mục sau:
• Khai báo LIBRARY: chứa một danh sách của tất cả các thư
viện được sử dụng trong thiết kế. Ví dụ: ieee, std, work, ….
• ENTITY: Mô tả các chân vào ra (I/O pins) của mạch
• ARCHITECTURE: chứa mã VHDL, mô tả mạch sẽ họat
động như thế nào.
Thư viện LIBRARY
A LIBRARY là một
tập các đoạn mã
thường được sử
dụng. Đặt các đoạn
mã thường sử dụng
vào thư viện cho
phép chúng có thể
được tái sử dụng
hoặc chia sẻ giữa
các thiết kế khác
nhau.
Khai báo Library.
10
Thư viện LIBRARY
Các thư viện thường sử dụng:
ieee.std_logic_1164 (from the ieee library),
standard (from the std library), and
work (work library).
LIBRARY ieee; A semi-colon (;) indicates
USE ieee.std_logic_1164.all; the end of a statement or
LIBRARY std; declaration, while a double
USE std.standard.all; dash ( ) indicates a comment.
LIBRARY work;
USE work.all;
Thư viện LIBRARY
std_logic_1164
Gói của thư viện IEEE hỗ trợ multi-level logic.
std
Gói thư viện tài nguyên (kiểu dữ liệu, text IO…)
cho môi trường thiết kế VHDL.
work
Gói thư viện chứa các thiết kế của người dùng
mới tạo ra.
Thư viện LIBRARY
Thư viện IEEE:
std_logic_1164
std_logic (8 mức logic),std_ulogic (9 mức logic)
std_logic_arith
Thực hiện các phép toán số học và so sánh.
std_logic_signed
Thực hiện các phép toán với kiểu DL
std_logic_vector, dữ liệu coi là có dấu
std_logic_unsigned
Thực hiện các phép toán với kiểu DL
std_logic_vector, dữ liệu coi là không dấu.
11
ENTITY (thực thể)
ENTITY là danh sách đặc tả của các cổng vào
ra (input/output pins) của mạch.
PORT là giao diện của mạch với các mạch bên
ngoài khác, PORT thường là các chân pin.
BLACK_BOX
rst
d[7:0]
clk
q[7:0]
co
ENTITY
signal_mode: chiều truyền dữ liệu
IN, OUT, INOUT (2chiều), BUFFER (khi tín hiệu ra
được dùng cho các tín hiệu khác bên trong).
signal_type:
bit, std_logic, integer…
Port_name:
Đặt tên theo quy tắc đặt tên chuẩn, tránh các từ
khóa.
ENTITY
Chế độ signal_mode cho biết chiều dữ liệu được truyền nhận:
IN Dữ liệu chỉ đi vào ENTITY
OUT Dữ liệu chỉ đi ra khỏi ENTITY
(và không được sử dụng bên trong)
INOUT Dữ liệu là hai chiều (đi vào và ra)
BUFFER Dữ liệu đi ra khỏi ENTITY và cũng
được đưa quay trở lại vào trong
Entity
12
Ví dụ: khai báo entity
ARCHITECTURE
Phần ARCHITECTURE mô tả mạch hoạt
động như thế nào.
Một ARCHITECTURE luôn gắn với một ENTITY và mô tả
hoạt động của ENTITY đó.
Một ARCHITECTURE chỉ gắn với một ENTITY nhưng
Một ENTIY có thể có nhiều ARCHITECTURE khác nhau
ARCHITECTURE
ARCHITECTURE có hai phần:
Phần khai báo (optional)
Khai báo tín hiệu và biến.
Phần mã code:
Mô tả cách kết nối, hoạt động của mạch.
13
ARCHITECTURE
Ví dụ về mạch NAND:
Mô tả kết nối mạch:
Mạch thực hiện thao
tác NAND trên 2 đầu
vào (a,b) và gán (<=)
kết quả cho đầu ra x.
ARCHITECTURE
Behavioral (hành vi)
Dataflow (dòng dữ liệu)
Structural (cấu trúc)
Tổng hợp (hybrid)
Ví dụ: code cho mạch ghép kênh 2 : 1
ARCHITECTURE
Mô hình hành vi tuần tự (Behavioral)
14
ARCHITECTURE
Mô hình dòng dữ liệu (dataflow)
ARCHITECTURE
Mô hình cấu trúc (structural)
ARCHITECTURE
Mô hình cấu trúc (structural)
ENTITY multiplexer IS PORT (
d0, d1, s: IN BIT;
y: OUT BIT);
END multiplexer;
ARCHITECTURE Structural OF
multiplexer IS
COMPONENT and2 PORT (
i1, i2: IN BIT;
o: OUT BIT);
END COMPONENT;
COMPONENT or2 PORT (
i1, i2: IN BIT;
o: OUT BIT);
END COMPONENT;
COMPONENT inv PORT (
i: IN BIT;
o: OUT BIT);
END COMPONENT;
SIGNAL sn, asn, sb: BIT;
BEGIN
U1: inv PORT MAP(s, sn);
U2: and2 PORT MAP(d0, sn, asn);
U3: and2 PORT MAP(s, d1, sb);
U4: or2 PORT MAP(asn, sb, y);
END Structural;
15
Ví dụ
Viết code theo mô hình cấu trúc cho flip
flop RS sau:
Viết code theo mô hình cấu trúc cho bộ
cộng đầy đủ
VD1: Full_adder
Bộ cộng hai số 1 bit đầy đủ theo dataflow
VD2: Full_adder
Adder
A(7:0)
B(7:0)
C(7:0)
Bộ cộng vector 8 bit đầy đủ theo dataflow
16
VD2: D Flip-flop, asyn reset
D flip-flop tích cực theo sườn dương của xung
đồng hồ clk với tín hiệu reset không đồng bộ.
Hoạt động:
+ rst = ‘1’ => q<=‘0’ không phụ thuộc clk.
+ rst = ‘0’, sườn dương clk => q<=d.
Mô hình hành vi tuần tự
BT1: Bộ dồn kênh Multilpexor
a,b: hai kênh vào 8 bit
sel: các bit chọn kênh
c: kênh ra 8 bit
Bộ dồn kênh Multilpexor
17
BT2: RS Flip-flop, asyn reset
Viết VHDL code mô tả flip-flop RS đồng bộ theo
sườn âm với tín hiệu reset không đồng bộ.
RS Flip-flop, asyn reset
3. Các kiểu dữ liệu.
3.1. Các kiểu đối tượng.
3.1.1. Signal
3.1.2. Variable
3.1.3. Constant
3.2. Các kiểu dữ liệu.
18
3.1. Các kiểu đối tượng
Một đối tượng VHDL bao gồm 1 trong các
loại sau:
Signal: biểu diễn cho dây kết nối giữa các cổng
của các thành phần trong hệ thống.
Variable: được sử dụng lưu trữ dữ liệu nội bộ
tạm thời, chỉ visible bên trong process.
Constant: hẳng số
3.1.1. Signal
Các đối tượng signal được sử dụng để
kết
nối
-
truyền thông
giữa các entity nhằm tạo
nên hệ thống.
Signal
3.1.1. Signal
Phân loại:
External Signal: là các tín hiệu kết nối hệ thống
với bên ngoài, tạo nên giao diện ghép nối của
hệ thống với các hệ thống khác.
Internal Signal: là các tín hiệu chỉ nhúng bên
trong hệ thống, không nhìn thấy từ bên ngoài,
tạo ra sự truyền thông giữa các thành phần
bên trong hệ thống.
19
3.1.1. Signal
External Signal & Internal Signal:
External
Signal
Internal
Signal
Khai báo
trong Entity
Khai báo
trong Architecture
ENTITY myboard IS
PORT ( [SIGNAL] a,b,c: inout bit;
data,extbus,result: inout bit_vector(0 to 7));
END myboard;
ARCHITECTURE structure OF myboard IS
SIGNAL x,y: bit;
SIGNAL intbus: bit_vector(0 to 7);
BEGIN
3.1.1. Signal
Vị trí khai báo signal:
Phần khai báo của ENTITY
Phần khai báo của ARCHITECTURE
Phần khai báo của PACKAGE
Khai báo signal:
SIGNAL name: mode type [:=initial_value]
Không cần trong ENTITY
Chỉ cần trong ENTITY
3.1.1. Signal
Ví dụ khai báo signal trong package:
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
PACKAGE sigdecl IS
TYPE bus_type IS ARRAY(0 to 7) OF std_logic;
SIGNAL vcc : std_logic := ‘1’;
SIGNAL ground : std_logic := ‘0’;
FUNCTION magic_function( a : IN bus_type) RETURN bus_type;
END sigdecl;
=> USE WORK.sigdecl.ALL;
20
3.1.1. Signal
Ví dụ về phạm vi tác động của signal
A
B
C
D
E
F
3.1.1. Signal
Một đặc điểm quan trọng của signal khi
được sử dụng bên trong một phần của mã
tuần tự (vd PROCESS, FUNCTION,
PROCEDURE) là:
Giá trị không được cập nhật ngay lập tức sau
câu lệnh, mà phải đến kết thúc đoạn mã tuần
tự đó.
VD: asyn-reset DFF & NAND
Sự kết hợp giữa mạch
tổ hợp và mạch tuần tự
signal
21
3.1.2. Biến (variable)
Biến variable chỉ biểu diễn các dữ liệu nội
bộ, chỉ có thể sử dụng bên trong PROCESS,
FUNCTION, hoặc PROCEDURE.
Giá trị của biến variable không thể truyền
ra ngoài trực tiếp.
Giá trị của biến được cập nhật trực tiếp sau
từng dòng mã lệnh.
3.1.2. Biến (variable)
Khai báo biến:
VARIABLE name: type [range] [:= init_value];
VARIABLE control: BIT := '0';
VARIABLE count: INTEGER RANGE 0 TO 100;
VARIABLE y: STD_LOGIC_VECTOR (7 DOWNTO 0) := "10001000";
Ví dụ về sử dụng variable trong VHDL
22
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY mux IS
PORT ( a, b, c, d, s0, s1: IN STD_LOGIC;
y: OUT STD_LOGIC);
END mux;
ARCHITECTURE ok OF mux IS
SIGNAL sel : INTEGER RANGE 0 TO 3;
BEGIN
PROCESS (a, b, c, d, s0, s1)
BEGIN
sel <= 0;
IF (s0='1') THEN sel <= sel + 1;END IF;
IF (s1='1') THEN sel <= sel + 2;END IF;
CASE sel IS
WHEN 0 => y<=a;
WHEN 1 => y<=b;
WHEN 2 => y<=c;
WHEN 3 => y<=d;
END CASE;
END PROCESS;
END not_ok;
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY mux IS
PORT ( a, b, c, d, s0, s1: IN STD_LOGIC;
y: OUT STD_LOGIC);
END mux;
ARCHITECTURE ok OF mux IS
BEGIN
PROCESS (a, b, c, d, s0, s1)
VARIABLE sel : INTEGER RANGE 0 TO 3;
BEGIN
sel := 0;
IF (s0='1') THEN sel := sel + 1; END IF;
IF (s1='1') THEN sel := sel + 2; END IF;
CASE sel IS
WHEN 0 => y<=a;
WHEN 1 => y<=b;
WHEN 2 => y<=c;
WHEN 3 => y<=d;
END CASE;
END PROCESS;
END ok;
NOT OK
So sánh giữa Signal & Variable
3.1.3. Hằng số (Constant)
Hằng số Constant là các tên được gán cho các giá
trị cụ thể của 1 kiểu DL. Sử dụng hằng số cho
phép người thiết kế xây dựng mô hình dễ hiểu
(better-documented) và dễ thay đổi.
Khai báo hằng số:
CONSTANT name : type := value;
CONSTANT name : type := value;
Hằng số có thể khai báo trong package, entity hoặc
architecture. Phạm vi tác động giống như tín hiệu
signal.
CONSTANT set_bit : BIT := '1';
CONSTANT pi: REAL := 3.1414;
CONSTANT datamemory : memory := ( ('0','0','0','0'),
('0','0','0','1'),
('0','0','1','1'));
23
3.2. Các kiểu dữ liệu VHDL
- Kiểu dữ liệu được định nghĩa trước
- Kiểu dữ liệu do người dùng định nghĩa
Các kiểu dữ liệu được định nghĩa trước
BIT, BIT_VECTOR
24
STD_LOGIC và STD_LOGIC_VECTOR
STD_LOGIC (and STD_LOGIC_VECTOR): 8-valued
logic system introduced in the IEEE 1164
standard.
‘X’ Forcing Unknown (synthesizable unknown)
‘0’ Forcing Low (synthesizable logic ‘1’)
‘1’ Forcing High (synthesizable logic ‘0’)
‘Z’ High impedance (synthesizable tri-state buffer)
‘W’ Weak unknown
‘L’ Weak low
‘H’ Weak high
‘–’ Don’t care
Ví dụ
Nếu 2 tín hiệu std_logic bất
kỳ được nối đến cùng một
node, thì các mức logic đối
lập được tự động giải quyết
theo bảng
STD_ULOGIC và STD_ULOGIC_VECTOR
hệ thống logic 9 mức trong chuẩn IEEE 1164:
(“U‟, “X‟, “0‟, “1‟, “Z‟, “W‟, “L‟, “H‟, “–‟).
Thật vậy, hệ STD_LOGIC mô tả ở trên là một
tập con của STD_ULOGIC. Hệ thống thứ 2 này
thêm giá trị logic “U‟ (Unresolve).
25
Một số kiểu khác
Ví dụ về các kiểu