You are on page 1of 74

Lập trình VHDL

www.viethung-idt.com.vn

1
Nội dung
1 Giới thiệu VHDL
2 Cấu trúc lập trình

3 Các đối tượng


4 Các kiểu dữ liệu
5 Các phép toán
6 Các mệnh đề tuần tự
7 DES với VHDL
8 AES với VHDL
2
I. Giới thiệu VHDL
Là ngôn ngữ mô phỏng và tổng hợp phần
cứng
 VHSIC Hardware Description Language
 VHSIC = Very High Speed IC
Ứng dụng
 PLD (Programmable Logic Device)
• CPLD (Complex PLD)
• FPGA (Field Programmable Gate Array)
 ASIC (Application-Specific IC)
Công cụ
 Xilinx ISE và Altera Quartus
3
I. Giới thiệu VHDL (tiếp)
Đặc điểm ngôn ngữ
 Không phân biệt chữ hoa – thường
 Các lệnh được phân cách bởi dấu “;”
 Các chú thích được bắt đầu bởi dấu “--”

 Mô phỏng phần cứng theo hướng Top-down


 Yêu cầu chặt chẽ về kiểu dữ liệu

4
Nội dung
1 Giới thiệu VHDL
2 Cấu trúc lập trình

3 Các đối tượng


4 Các kiểu dữ liệu
5 Các phép toán
6 Các mệnh đề tuần tự
7 DES với VHDL
8 AES với VHDL
5
II. Cấu trúc
Library
 Library chứa các phép toán đã được xây
dựng sẵn trên 1 kiểu dữ liệu nào đó.
Entity
 Entity thể hiện giao diện bên ngoài của vi
mạch (các cổng vào/ra).
Architecture
 Architecture thể hiện cấu trúc bên trong, chức
năng, hoạt động của vi mạch.

6
II. Cấu trúc (tiếp)
LIBRARY IEEE;
USE ...; Library
--------------------
ENTITY Example IS
GENERIC (...);
PORT (...); Entity
END Example;
--------------------
ARCHITECTURE Ex1 OF Example IS
COMPONENT (...);
GENERIC MAP (...);
PORT MAP (...);
BEGIN

Architecture
Process(...);
End Process;
END Ex1;

ARCHITECTURE Ex1 OF Example IS


...
END Ex2;

7
II.1. Library
Các thành phần (package) của thư viện
chuẩn IEEE:
 Dùng chung với tất cả các công cụ lập trình.
 IEEE công khai mã nguồn của thư viện này.
Các công cụ phát triển của các hãng khác
nhau có thể có thư viện riêng.
-- Các thư viện này được khai báo sẵn khi tạo Project
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

8
II.2. Entity
Xác định: số lượng, chiều, kiểu các cổng
vào/ra và một số tham số khác.

-- Entity Declaration
ENTITY Adder IS
GENERIC
(iCount : INTEGER);
PORT
(A : IN STD_LOGIC_VECTOR(15 downto 0);
B : IN STD_LOGIC_VECTOR(15 downto 0);
S : OUT STD_LOGIC_VECTOR(15 downto 0);
C : OUT STD_LOGIC);
END Adder;

9
II.3. Architecture
Giữa 2 từ khóa “Architecture” và “Begin”
là khai báo, liệt kê các phần tử bên trong
của vi mạch, bao gồm:
 Tín hiệu (signal)
 Thành phần (component)
Giữa 2 từ khóa “Begin” và “End” là đoạn
mã mô tả kết nối giữa các thành phần bên
trong và hoạt động của vi mạch.

10
II.3. Architecture (tiếp)
-- Architecture Body
ARCHITECTURE Adder16 OF Adder IS

signal Cr : STD_LOGIC_VECTOR(16 downto 0);

BEGIN
...
PROCESS (...)
...
END PROCESS;
END Adder16;

Cùng 1 Entity ta có thể định nghĩa nhiều


Architecture khác nhau. Tuy nhiên, 1
Architecture chỉ gắn với một Entity xác định.

11
II.4 Khái niệm Process
Các câu lệnh nằm ngoài Process được
thực hiện đồng thời (concurrent)
Các câu lệnh nằm trong Process được
thực hiện tuần tự (sequential)
Process được kích hoạt khi 1 trong các tín
hiệu trong “sensitivity list” thay đổi giá trị.
 Các tín hiệu trong “sensitivity list” thường là
các tín hiệu đầu vào của vi mạch.
PROCESS (Clk, Rst,...)
...
END PROCESS;

12
II.4 Khái niệm Process (tiếp)
Nếu có nhiều Process thì các Process này
được thực hiện đồng thời
Để chuyển giá trị từ một process
sang một process khác ta phải dùng
tín hiệu (signal)
P1: Process (Rst) P3: Process (Clk)

S <= “0000” S <= DI and B

P2: Process (S)


S S
DO <= S and A

13
Nội dung
1 Giới thiệu VHDL
2 Cấu trúc lập trình

3 Các đối tượng


4 Các kiểu dữ liệu
5 Các phép toán
6 Các mệnh đề tuần tự
7 DES với VHDL
8 AES với VHDL
14
III. Các đối tượng trong VHDL
Component: Một thiết kế VHDL hoàn
chỉnh có thể được chia thành nhiều thành
phần nhỏ hơn.
Signal: biểu diễn dây nối, kết nối các cổng
của các thành phần với nhau.
 tín hiệu chỉ đổi giá trị khi kết thúc 1 chu kỳ
lệnh vì yêu cầu về đồng bộ

15
III. Các đối tượng trong VHDL (tiếp)
Variable: là các biến được sử dụng để tính
toán, lưu các giá trị trung gian.
 biến nhận giá trị ngay khi được gán, giá trị
mới này có thể được sử dụng ngay trong
dòng lệnh tiếp theo
 biến chỉ sử dụng được trong phạm vi Process

16
III. Các đối tượng trong VHDL (tiếp)

Clk1 Encryptor
Clk
Component_1
Key
Key_In
Key_Out

Key_1_2

Key_In

Plain Component_2 Cipher


Data

17
III. Các đối tượng trong VHDL (tiếp)

entity

architecture
component
1
Signals

process
component
Input Ports Variables Output Ports
2

18
III. Các đối tượng trong VHDL (tiếp)
Architecture Example1 of Example is

-- Khai báo các thành phần


Component Component_1
Port ( Clk1: in std_logic;
Key_In: in std_logic_vector(1 to 32);
Key_Out: out std_logic_vector(1 to 32));
End Component;
...
-- Khai báo tín hiệu
...
-- Khai báo các kết nối
...
-- Mô tả hoạt động
...

End Example1

19
III. Các đối tượng trong VHDL (tiếp)
Architecture Example1 of Example is

-- Khai báo các thành phần


...
-- Khai báo các tín hiệu
signal Key_1_2: std_logic_vector(1 to 32);

-- Khai báo các kết nối


...
-- Mô tả hoạt động
...

End Example1

-- Có thể gán trị mặc định cho tín hiệu khi khai báo
signal wire: std_logic := ‘1’;
signal bus: std_logic_vector(3 downto 0) := “1010”;

20
III. Các đối tượng trong VHDL (tiếp)

Architecture Example1 of Example is

-- Khai báo các thành phần


...
-- Khai báo các tín hiệu
...
-- Khai báo các kết nối
Com1: Component_1
Port map (Clk => Clk1,
Key_In => Key,
Key_Out => Key_1_2);
-- Mô tả hoạt động
...

End Example1

21
III. Các đối tượng trong VHDL (tiếp)
Architecture Example1 of Example is
-- Khai báo các thành phần
...
-- Khai báo các tín hiệu
...
-- Khai báo các kết nối
...
-- Mô tả hoạt động
Begin
Process (...)
variable i: integer range 0 to 15;
constant pi: real := 3.14;
Begin
...
End Process
End Example1

22
III. Các đối tượng trong VHDL (tiếp)
Generic
 Sử dụng Generic cho phép khai báo các tham
số chung để có thể sử dụng một cách linh
hoạt, mềm dẻo trong nhiều tình huống.
 Generic là thành phần không bắt buộc trong
thiết kế VHDL.

Entity Example is
Generic (iCount: integer; iTime: time);
Port (...);
End Example;

23
III. Các đối tượng trong VHDL (tiếp)
LIBRARY IEEE;
Use IEEE.std_logic_1164.ALL;

ENTITY Example IS
GENERIC (rise, fall: time; load: integer);
PORT (inA, inB, inC, inD: In std_logic;
out1, out2: Out std_logic);
END Example;

ARCHITECTURE Ex1 OF Example IS


COMPONENT Com1
GENERIC (rise, fall: time:= 10 ns; load: integer:= 0);
PORT (a, b: In std_logic; c: Out std_logic);
END COMPONENT;

BEGIN
U1: Com1
GENERIC MAP (10 ns, 12 ns, 3);
PORT MAP (inA, inB, out1);
U2: Com1
PORT MAP (inC, inD, out2);
END Ex1;
24
Nội dung
1 Giới thiệu VHDL
2 Cấu trúc lập trình

3 Các đối tượng


4 Các kiểu dữ liệu
5 Các phép toán
6 Các mệnh đề tuần tự
7 DES với VHDL
8 AES với VHDL
25
IV. Các kiểu dữ liệu
bit, bit_vector
 thường dùng để định nghĩa biến (variable)
 chỉ nhận các giá trị ‘0’, ‘1’
std_logic, std_logic_vector
 thường dùng để định nghĩa tín hiệu (signal)
 nhận các giá trị: ‘U’ (Uninitialized), ‘0’, ‘1’,
‘X’ (Forcing Unknown), ‘Z’ (High Impedance),
boolean
 true, false

26
IV. Các kiểu dữ liệu (tiếp)
Integer
 32 bit (-2,147,483,647 ... +12,147,483,647)
 a := 1; a := -1; -- đúng
 a := 1.0; -- sai
Real
 32 bit (-10^38 ... +10^38)
 độ chính xác: 7 chữ số phần thập phân
 a := 1; a := -1; -- sai
 a := 1.0; -- đúng
 a := -1.0E10; a := 1.5E-20; -- đúng

27
IV. Các kiểu dữ liệu (tiếp)
Kiểu dữ liệu tự định nghĩa
 1. Kiểu dữ liệu liệt kê
• Thường dùng khi mô tả trạng thái
 2. Kiểu dữ liệu mảng 1 chiều
TYPE MyState IS : (Start, S1, S2, S3, Stop);
...
variable S : MyState;
...
S := S1;
TYPE MyRegister IS ARRAY (0 to 255) OF INTEGER;
...
variable R : MyRegister;
...
R(1) := 1;
28
IV. Các kiểu dữ liệu (tiếp)
Kiểu dữ liệu tự định nghĩa
 3 Kiểu dữ liệu mảng nhiều chiều
• Thường dùng với chức năng bảng tra giá trị
(Lookup Table)

TYPE LUT IS ARRAY(0 TO 3, 0 TO 3) OF std_logic;


...
constant MyLUT : LUT :=
((‘0’, ‘0’, ‘0’),
(‘0’, ‘0’, ‘0’),
(‘0’, ‘0’, ‘1’));

29
IV. Các kiểu dữ liệu (tiếp)
Time
 Thời gian là kiểu dữ liệu vật lý duy nhất được
định nghĩa sẵn trong VHDL
 Dùng để xác định trễ và đồng bộ tín hiệu (với
từ khóa “wait”)
 Đơn vị: fs, ps, ns, us, ms, sec, min, hr
variable T : time;
...
T := 1 ns;

30
IV. Các kiểu dữ liệu (tiếp)
Có thể nói: không có khái niệm “ép kiểu”
trong VHDL. Một số ngoại lệ:
 integer +/- bit_vector/std_logic_vector
 Xét ví dụ:
TYPE long is integer range -100 to 100;
TYPE short is integer range -10 to 10;
Signal x: short;
Signal y: long;
...

y <= 2 * x + 5; -- Sai
y <= long(2 * x + 5); -- OK
-- trong trường hợp này, thực chất x và y
-- có cùng kiểu là integer
31
IV. Các kiểu dữ liệu (tiếp)
Để chuyển đổi kiểu dữ liệu, có 2 cách:
 Tự viết một đoạn mã để chuyển dữ liệu.
 Khai báo thư viện và dùng hàm có sẵn.
Gói std_logic_arith trong thư viện IEEE có
một số hàm chuyển đổi kiểu dữ liệu:
 conv_integer(p)
 conv_unsigned(p, b)
 conv_signed(p, b)
 conv_std_logic_vector(p, b)

32
Nội dung
1 Giới thiệu VHDL
2 Cấu trúc lập trình

3 Các đối tượng


4 Các kiểu dữ liệu
5 Các phép toán
6 Các mệnh đề tuần tự
7 DES với VHDL
8 AES với VHDL
33
V. Các phép toán
Phép gán
 đối với tín hiệu: “<=”, đối với biến: “:=”
 kiểu và kích thước dữ liệu 2 vế của phép gán
phải giống nhau
Phép ghép vector (concatenation)
 dùng với kiểu bit_vector/std_logic_vector
signal DI1 : bit_vector (7 downto 0) := “11000110”;
signal DI2 : bit_vector (3 downto 0) := “0010”;
signal DO : bit_vector (7 downto 0);

DO <= DI1(7 downto 4) & DI2; -- 11000010

34
V. Các phép toán (tiếp)
Phép toán logic
 Toán tử: and or not xor nor nand xnor
 Toán hạng: boolean, bit, bit_vector, std_logic,
std_logic_vector
 Các toán hạng vector phải cùng kích thước và
phép toán được thực hiện trên các bit tương
ứng

35
V. Các phép toán (tiếp)
Phép toán so sánh
 Toán tử: =, /=, <, <=, >, >=
 Trả về giá trị boolean (true/false)
Phép toán số học
 *, /, ** (exp) chỉ dùng với integer, real, time.
 mod, rem chỉ dùng với integer.
 +,- dùng với cả integer, real, time và
bit_vector, std_logic_vector
 +,- cho phép 1 toán hạng integer và 1 toán
hạng bit_vector/std_logic_vector (THĐB)
36
V. Các phép toán (tiếp)
Phép toán shift (dịch bit)
 Toán tử: sll, srl, sla, sra, rol, ror
 Toán hạng trái: bit_vector/std_logic_vector
 Toán hạng phải: integer
signal DI : bit_vector (7 downto 0) := “11000110”;
signal DO : bit_vector (7 downto 0);

DO <= DI sll 2; -- 00011000


DO <= DI sla 2 -- 00011000
DO <= DI srl 2; -- 00110001
DO <= DI sra 2; -- 11110001
DO <= DI ror 3 -- 11011000

37
Ví dụ 1: (câu hỏi)
Thiết kế bộ cộng đầy đủ (Full Adder) 16bit
 Chú ý: ví dụ chỉ mang tính minh họa vì phép cộng
“C <= A + B” đã được định nghĩa sẵn.
a b cin s cout
a 0 0 0 0 0
s
Full 0 1 0 1 0
b Adder
cout 1 0 0 1 0
cin 1 1 0 0 1
0 0 1 1 0
s <= a xor b xor cin; 0 1 1 0 1
cout <= (a and b) or (cin and (a xor b)); 1 0 1 0 1
1 1 1 1 1
38
Ví dụ 1: (trả lời)
ENTITY Adder IS
PORT
(B : IN STD_LOGIC_VECTOR(15 downto 0);
A : IN STD_LOGIC_VECTOR(15 downto 0);
S : OUT STD_LOGIC_VECTOR(15 downto 0);
C : OUT STD_LOGIC);
END Adder;

ARCHITECTURE Adder16 OF Adder IS


signal Cr : STD_LOGIC_VECTOR(16 downto 0);
BEGIN
PROCESS (A, B)
variable i : integer;
Begin
Cr(0) <= '0';
For i in 0 to 15 loop
S(i) <= A(i) xor B(i) xor Cr(i);
Cr(i+1) <= (A(i) and B(i)) or (Cr(i) and (A(i) xor B(i)));
End loop;
C <= Cr(16);
END PROCESS;
END Adder16;
39
Ví dụ 2: (câu hỏi)
Xây dựng bộ nhân 2 số 8bit đối với kiểu
std_logic_vector.
x3 x2 x1 x0

y3 y2 y1 y0

x3 x2 x1 x0 and y0
(phần trả lời
tham khảo x3 x2 x1 x0 and y1
mã nguồn x3 x2 x1 x0 and y2
kèm theo)
x3 x2 x1 x0 and y3

z3 z2 z1 z0 z3 z2 z1 z0

40
Ví dụ 3: (câu hỏi)
Xây dựng bộ chia chia số 16bit cho số 8bit
đối với kiểu std_logic_vector.

41
Bài tập 1:
Xây dựng bộ cộng 2 số dấu phẩy động
 (học viên tự tìm hiểu số dấu phẩy động)

42
Bài tập 2:
Xây dựng bộ nhân 2 số dấu phẩy động
 (học viên tự tìm hiểu số dấu phẩy động)

43
44
Nội dung
1 Giới thiệu VHDL
2 Cấu trúc lập trình

3 Các đối tượng


4 Các kiểu dữ liệu
5 Các phép toán
6 Các mệnh đề tuần tự
7 DES với VHDL
8 AES với VHDL
45
VI. Các mệnh đề tuần tự
1. IF
2. CASE
3. LOOP
 For ... Loop
 While ... Loop
4. WAIT
 Wait on ...
 Wait for ...
 Wait until ...

46
VI.1. Mệnh đề IF
IF (biểuthứclogic1) THEN
...
ELSIF (biểuthứclogic2) THEN –- có thể có nhiều ELSIF
...
ELSE –- nhưng chỉ có 1 ELSE
... A
END IF; M
B
U S
process (A, B, C, D, Sel ) C X
begin
if (Sel = “00”) then S <= A; D
elsif (Sel = “01”) then S <= B;
elsif (Sel = “10”) then S <= C;
Sel
elsif (Sel = “11”) then S <= D;
else S <= “0000”;
end if;
end process;

47
VI.2. Mệnh đề CASE
CASE (biến / tínhiệu) IS
WHEN giátrị1 => ...
WHEN giátrị2 => ...
WHEN OTHERS => ...
END CASE;
A
B M
process (A, B, C, D, Sel )
U S
begin C X
case (Sel) is
when “00” => S <= A; D
when “01” => S <= B;
when “10” => S <= C;
Sel
when “11” => S <= D;
when others => S <= “0000”;
end case;
end process;

48
VI.2. Mệnh đề CASE (tiếp)
Ta có thể sử dụng 1 dải giá trị hữu
hạn trong biểu thức logic của mệnh
đề CASE hoặc IF.

if (x = 12 to 14) then
...
end if;

case (D_In) is
when “1000” to “1010” => ...
...
end case;

49
VI.2. Mệnh đề CASE (tiếp)
Xét ví dụ
 Cú pháp hoàn toàn đúng.
 S có thể được gán cùng lúc 1 giá trị A và 3 giá
trị “0000”. S trong trường hợp này được gọi là
“multi-driver signal”.
 Có thể tổng hợp được nhưng kết quả sai!
Architecture Bad of MUX is
Begin
S <= A when Sel = “00” else “0000”;
S <= B when Sel = “01” else “0000”;
S <= C when Sel = “10” else “0000”;
S <= D when Sel = “11” else “0000”;
End Bad;
50
VI.2. Mệnh đề CASE (tiếp)
 Kết quả sai là do hiện tượng “chập mạch”
(short-circuit) khi tổng hợp.
 Thực tế có rất nhiều tín hiệu nhận giá trị từ
nhiều nguồn (source) khác nhau (nguồn tín
hiệu của S là A, B, C, D).
Cách xử lý
 Người thiết kế/lập trình phải phân giải giá trị
từ nhiều nguồn khác nhau để tín hiệu chỉ
nhận 1 giá trị duy nhất tại 1 thời điểm (multi-
source - single-driver).

51
VI.3. Mệnh đề LOOP
PROCESS (A_Sig, B_Bus)
variable i : integer;
Begin
for i in 7 downto 0 loop
C_Bus(i) <= A_Sig and B_Bus(i);
end loop;
END PROCESS;

PROCESS (A_Sig, B_Bus)


variable i : integer;
Begin
i := 7;
while (i >= 0) loop
C_Bus(i) <= A_Sig and B_Bus(i);
i := i – 1;
end loop;
END PROCESS;

52
VI.3. Mệnh đề LOOP (tiếp)
Dừng vòng lặp đang thực hiện dở để
chuyển sang vòng lặp tiếp theo: NEXT.
Dừng vòng lặp đang thực hiện dở và thoát
hẳn khỏi vòng lặp: EXIT.
 Có thể có nhiều vòng lặp lồng nhau, nhưng
lệnh Exit chỉ có tác dụng đối với vòng lặp trực
tiếp chứa nó.

53
VI.4. Mệnh đề WAIT
Mệnh đề WAIT dùng để tạm dừng Process
trong một khoảng thời gian nào đó:
 Wait on tín_hiệu_nào_đó_thay_đổi_giá_trị
 Wait until biểu_thức_logic_nhận_giá_trị_true
 Wait for khoảng_thời_gian_xác_định
 Wait (khoảng_thời_gian_không_xác_định)
Wait on A, B;
...
Wait until Clk = ‘1’;
...
Wait for 10 ns;
...
Wait;
54
VI.4. Mệnh đề WAIT (tiếp)

Không phải tất cả các mệnh đề VHDL


đều có thể tổng hợp được.
 Ví dụ, wait for 10 ns là một mệnh đề
thông dụng trong mô hình hoá, 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.

55
VI.4. Mệnh đề WAIT (tiếp)
Mệnh đề Wait có thể được viết dưới dạng
tường minh (explicit) hoặc không tường
minh (implicit).
Một số công cụ tổng hợp mạch không
hỗ trợ explicit ‘wait’.
-- Implicit WAIT -- Explicit WAIT
Process (A, B) Process
Begin Begin
C <= A and B; Wait on A, B;
End Process; C <= A and B;
End Process;

56
Ví dụ 4: (câu hỏi)
Xây dựng hệ dãy đoán nhận xâu “1101”
0 1 1
0

1 1 0 1
A B C D E

0
0

Input

Output

(phần trả lời tham khảo mã nguồn kèm


theo)
57
Bài tập

58
Nội dung
1 Giới thiệu VHDL
2 Cấu trúc lập trình

3 Các đối tượng


4 Các kiểu dữ liệu
5 Các phép toán
6 Các mệnh đề tuần tự
7 DES với VHDL
8 AES với VHDL
59
VII. Mã hóa DES với VHDL
DES = Data Encryption Standard
Là thuật toán mã hóa khối, làm việc với
khối dữ liệu 64bit.
Khóa mã hóa 64bit (thực tế chỉ có 56bit vì
8bit còn lại dùng để kiểm tra)
Vì khóa không đủ độ dài, DES được cải
tiến thành Triple_DES (thức hiện DES 3
lần với 3 khóa)

60
VIII. Mã hóa DES với VHDL (tiếp)

...

16
IP F F F F FP
rounds

...

61
VIII. Mã hóa DES với VHDL (tiếp)

62
VIII. Mã hóa DES với VHDL (tiếp)

63
Nội dung
1 Giới thiệu VHDL
2 Cấu trúc lập trình

3 Các đối tượng


4 Các kiểu dữ liệu
5 Các phép toán
6 Các mệnh đề tuần tự
7 DES với VHDL
8 AES với VHDL
64
VIII. Mã hóa AES với VHDL
AES = Advanced Encryption Standard
Là thuật toán mã hóa khối, làm việc với
khối dữ liệu 128bit.
Khóa mã hóa có thể 128, 192 hoặc 256bit
Được chính phủ Hoa Kỳ chính thức sử
dụng để thay thế Triple_DES.

65
VIII. Mã hóa AES với VHDL (tiếp)

Plaintext AddRoundKey SubBytes

CipherKey ShiftRows

MixColumn

SubBytes AddRoundKey RoundKey 1-9

ShiftRows

Ciphertext AddRoundKey RoundKey 10

66
VIII. Mã hóa AES với VHDL (tiếp)

67
VIII. Mã hóa AES với VHDL (tiếp)

68
VIII. Mã hóa AES với VHDL (tiếp)

69
VIII. Mã hóa AES với VHDL (tiếp)

70
So sánh với Embedded C
Vi xử lý, vi điều khiển có sẵn tập lệnh nên
có thể dùng Embedded C để lập trình, các
lệnh C sẽ được dịch sang ngôn ngữ máy ở
dạng nhị phân.
FPGA chỉ bao gồm các phần tử Logic cơ
bản nên phải sử dụng VHDL để mô phỏng
và tổng hợp dưới dạng ghép nối các phần
tử logic.
Làm việc với VHDL đòi hỏi hiểu sâu hơn
về cấu trúc và hoạt động của vi mạch.
71
So sánh với Verilog
Giống nhau:
 Cùng là ngôn ngữ mô phỏng và tổng hợp
phần cứng. Có thể so sánh như C++ và Java.
Khác nhau:
 VHDL yêu cầu cấu trúc chặt chẽ hơn (đặc biệt
về kiểu dữ liệu) nên dễ phát hiện lỗi hơn, tuy
nhiên lại thường dài dòng hơn và khó phân
tích mã nguồn hơn.
 VHDL được dùng nhiều ở Châu Âu, Verilog
được dùng nhiều ở Mỹ (mặc dù cả 2 đều sinh
ra ở Mỹ)
72
Tài liệu tham khảo
VHDL Programming by Examples, Douglas
L.Perry, McGraw Hill.
Circuit Design with VHDL, Volnei
A.Pedroni, MIT Press.
1076 IEEE Standard VHDL Reference
Manual, IEEE Computer Society.

73
74

You might also like