VHDL

You might also like

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 59

NGÔN NGỮ MÔ TẢ PHẦN CỨNG VHDL

1
NGÔN NGỮ VHDL

 Là viết tắt của VHSIC Hardware Description Language

 VHSIC là viết tắt của Very High Speed Integrated Circuits

 Là ngôn ngữ mô tả phần cứng cho mạch tích hợp tốc độ cao.

 Độc lập, không gắn với bất kì phương pháp thiết kế hay công
nghệ phần cứng nào.

2
ỨNG DỤNG CỦA THIẾT KẾ MẠCH BẰNG
VHDL

 Trong các thiết bị logic lập trình được FPGA

 Trong ASICs (Application Specific Integrated Circuits)

3
2.1 CẤU TRÚC CHƯƠNG TRÌNH VHDL
library ieee;
use ieee.std_logic_1164.all;

LiBRARY std;
USE std.standard.all; --comment

LIBRARY work;
USE work.all;

entity Light_control is
port (
x1, x2 : IN STD_LOGIC;
f : OUT STD_LOGIC
);
end Light_control ;

architecture LogicFunction of Light_control IS


begin 4
f <= (x1 AND (NOT x2)) OR ((NOT x1) AND x2);
end LogicFunction;
CÁC ĐƠN VỊ CƠ BẢN
 LIBRARY: chứa danh sách của các thư viện được sử
dụng (VD: ieee, std, work, …)

 ENTITY: Mô tả các cổng vào ra của phần tử

 ARCHITECTURE: chứa mã VHDL, mô tả hoạt động


của phần tử mạch

5
KHAI BÁO LIBRARY
 Để khai báo Library, chúng ta cần hai dòng mã. Dòng
thứ nhất chứa tên thư viện, dòng tiếp theo là tên của gói
trong thư viện đó:

LIBRARY library_name;
USE library_name.package_name.package_parts;

 3 gói thư viện thường sử dụng:


 ieee.std_logic_1164 (from the ieee library)
 standard (from the std library)
 work (work library)

6
KHAI BÁO LIBRARY
 std là thư viện tài nguyên (kiểu dữ liệu, i/o text, .. )
 work là thư viện dùng để lưu thiết kế (file vhd, …)

 Thư viện std gồm nhiều gói (packages):


 std_logic_1164: định rõ STD_LOGIC ( 8 mức) và STD_ULOGIC
(9 mức) là các hệ logic đa mức
 std_logic_arith: định rõ các kiểu dữ liệu SIGNED và UNSIGNED,
các giải thuật liên quan và so sánh toán tử. Nó cũng chứa nhiều
hàm chuyển đổi dữ liệu, mà cho phép một kiểu được chuyển đổi
thành các kiểu dữ liệu khác: conv_integer(p),conv_unsigned(p, b),
conv_signed(p, b), conv_std_logic_vector(p, b)
 std_logic_signed: chứa các hàm cho phép làm việc với dữ liệu
STD_LOGIC_VECTOR như khi dữ liệu là kiểu SIGNED
 std_logic_unsigned: chứa các hàm cho phép làm việc với dữ liệu
STD_LOGIC_VECTOR như khi dữ liệu là kiểu UNSIGNED.
7
 Các thư viện std và work thường là mặc định.
 Thư viện ieee là cần phải viết nếu sử dụng.
ENTITY (THỰC THỂ)
 Một ENTITY là một danh sách mô tả các chân vào/ra ( các PORT) của
mạch điện.

• Chế độ của tín hiệu: có thể là IN, OUT, INOUT hoặc BUFFER
• Kiểu của tín hiệu: BIT, STD_LOGIC, INTEGER, …
• Tên của entity không được trùng với từ khóa của VHDL

chế độ của tín hiệu


ARCHITECTURE (KIẾN TRÚC)
 Architecture là một mô tả hoạt động của thực thể
(entity).

Ví dụ:

9
TEST THỬ TRÊN QUARTUS

10
ARCHITECTURE (KIẾN TRÚC)

 Có 3 kiểu mô tả một architecture:

 Mô tả theo dòng dữ liệu (dataflow model)

 Mô tả theo mô hình hoạt động (behavioral model)

 Mô tả theo mô hình cấu trúc (structural model)

11
ARCHITECTURE (KIẾN TRÚC)
 Mô tả theo dòng dữ liệu (dataflow model):

Cú pháp:
ARCHITECTURE architecture-name OF entity-name IS
signal-declarations;
BEGIN concurrent-statements;
END architecture-name;

Ví dụ:

12
ARCHITECTURE (KIẾN TRÚC)
 Mô tả theo mô hình hoạt động (behavioral model):
Ví dụ:
Cú pháp:

13
ARCHITECTURE (KIẾN TRÚC)
 Mô tả theo mô hình cấu trúc (structural model):
Cú pháp:

Ví dụ:

14
2.2 KIỂU DỮ LIỆU TRONG VHDL

15
KIỂU DỮ LIỆU ĐƯỢC ĐỊNH NGHĨA TRƯỚC:
 Các chuẩn IEEE 1076 và IEEE 1164 định nghĩa trước một số kiểu dữ
liệu thường sử dụng:

 Gói
standard của thư viện std: Định nghĩa các kiểu dữ liệu BIT,
BOOLEAN, INTEGER và REAL.

 Góistd_logic_1164 của thư viện ieee: Định nghĩa kiểu dữ liệu


STD_LOGIC và STD_ULOGIC.

 Gói std_logic_arith của thư viện ieee: Định nghĩa SIGNED và


UNSIGNED. Một số hàm chuyển đổi dữ liệu ví dụ: conv_integer(p),
conv_unsigned(p, b), conv_signed(p, b), và conv_std_logic_vector(p, b).

 Gói std_logic_signed và std_logic_unsigned của thư viện ieee: Chứa các


hàm cho phép hoạt động trên kiểu dữ liệu STD_LOGIC_VECTOR được 16
thực hiện như với SIGNED hoặc UNSIGNED.
KIỂU DỮ LIỆU ĐƯỢC ĐỊNH NGHĨA TRƯỚC:

 BIT và BIT_VECTOR : 2 Ví dụ:


mức logic (‘0’, ’1’).

 STD_LOGIC và STD_LOGIC_VECTOR : 8
mức logic theo chuẩn IEEE 1164

 ‘X’ không xác định ( bắt buộc) Ví dụ:


 ‘0’ mức thấp ( bắt buộc)
 ‘1’ mức cao ( bắt buộc)
 ‘Z’ trở kháng cao
 ‘W’ không xác định (yếu)
 ‘L’ mức thấp ( yếu) 17

 ‘H’ mức cao ( yếu)


 ‘-’ không quan tâm
KIỂU DỮ LIỆU ĐƯỢC ĐỊNH NGHĨA TRƯỚC:
 STD_ULOGIC và STD_ULOGIC_VECTOR: giống với
STD_LOGIC nhưng thêm giá trị logic ‘U’.
 BOOLEAN: đúng hoặc sai
 INTEGER: số nguyên 32 bits ( từ -2.147.483.647 đến +2.147.483.647)
 NATURAL: số nguyên không âm ( từ 0 đến +2.147.483.647)
 REAL: số thực nằm trong khoảng ( từ -1.0E38 đến +1.0E38)
 Physic literals: sử dụng đối với các đại lượng vật lý, như thời gian, điện áp,
…chủ yếu dùng trong mô phỏng
 Character literals: kí tự ASCII đơn hoặc là một chuỗi các kí tự
 SIGNED và UNSIGNED: các kiểu dữ liệu được định nghĩa trong gói
std_logic_arith của thư viện IEEE. Chúng có hình thức giống như
STD_LOGIC_VECTOR, nhưng ngoại trừ các toán tử số học, mà tiêu biểu là
kiểu dữ liệu INTEGER
18
KIỂU DỮ LIỆU NGƯỜI DÙNG ĐỊNH NGHĨA:
 VHDL cũng cho phép người dùng tự định nghĩa các kiểu dữ liệu
Ví dụ:

 SUBTYPES: cũng là kiểu dữ liệu được người dùng định nghĩa khi áp
dụng thêm điều kiện ràng buộc vào kiểu cơ sở
Ví dụ:

19
KIỂU MẢNG (ARRAYS):
 Mảng được dùng để nhóm các thành phần có cùng kiểu dữ liệu.

 Chỉ được dùng sau khi người dùng định nghĩa một kiểu dữ liệu
mang kiểu mảng. Ngoại trừ một số ít kiểu có sẵn như:
STD_BIT_VECTOR, STD_LOGIC_VECTOR.
Ví dụ:

20
?
KIỂU BẢN GHI (RECORDS)
 Tương tự kiểu mảng nhưng mỗi thành phần là một kiểu dữ liệu
khác nhau

Ví dụ:

KIỂU SIGNED VÀ UNSIGNED


 Được định nghĩa trong gói std_logic_arith của thư viện IEEE
 Cú pháp khai báo giống với STD_LOGIC_VECTOR
 Chấp nhận các phép toán số học, không chấp nhận phép toán logic
(trái ngược với STD_LOGIC_VECTOR)

21
 Với STD_LOGIC_VECTOR, phải khai báo thêm thư viên nếu
muốn thực hiện phép toán số học

CHUYỂN ĐỔI DỮ LIỆU TRONG VHDL


 Đôi khi ta cần chuyển đổi giữa các kiểu dữ liệu để tính toán. Tham
khảo link bên dưới để biết một số hàm chuyển đổi có sẵn:
https://www.nandland.com/vhdl/tips/tip-convert-numeric-std-logic-ve 22
ctor-to-integer.html
2.3 TOÁN TỬ VÀ THUỘC TÍNH

23
TOÁN TỬ GÁN
<= : Gán giá trị cho SIGNAL

:= : Gán giá trị cho VARIABLE, CONSTANT, GENERIC

=> : Gán giá trị cho thành phần vector, dùng map cổng các entity,
component

Ví dụ:

24
TOÁN TỬ LOGIC
o Các toán tử logic được định nghĩa trong VHDL:

NOT, AND, OR, NAND, NOR, XOR, XNOR

o Kiểu dữ liệu cho toán tử logic:

BIT, STD_LOGIC, STD_ULOGIC, BIT_VECTOR,


STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR.

Ví dụ:

25
TOÁN TỬ TOÁN HỌC

+ : Cộng ** : Lấy mũ
- : Trừ MOD : Chia lấy nguyên
* : Nhân REM : Chia lấy phần dư
/ : Chia ABS : Lấy trị tuyệt đối

o Kiểu dữ liệu dùng toán tử toán học:

INTEGER, SIGNED, UNSIGNED, REAL

26
TOÁN TỬ SO SÁNH

= : bằng > : lớn hơn


/= : không bằng <= : nhỏ hơn hoặc bằng
< : nhỏ hơn >= : lớn hơn hoặc bằng

TOÁN TỬ DỊCH
Cú pháp:
<left operand> <shift operation> <right operand>

<left operand>: là dữ liệu kiểu BIT_VECTOR


<right operand> : có kiểu INTEGER
<shift opreration> : sll dịch trái, điền 0 vào bên phải 27
srl dịch phải, điền 0 vào bên trái
THUỘC TÍNH DỮ LIỆU
 d’LOW Trả về giá trị nhỏ nhất của chỉ số mảng.
 d’HIGH Trả về chỉ số lớn nhất của mảng.
 d’LEFT Trả về chỉ số bên trái nhất của mảng.
 d’RIGHT Trả về chỉ số bên phải nhất của mảng.
 d’LENGTH Trả về kích thước của mảng.
 d’RANGE Trả về mảng chứa chỉ số.
 d’REVERSE_RANGE Trả về mảng chứa chỉ số được đảo ngược.

Ví dụ:

d'LOW = 0, d'HIGH = 7, d'LEFT = 0, d'RIGHT = 7,


d'LENGTH = 8, d'RANGE = (0 to 7),
28
d'REVERSE_RANGE = (7 downto 0).
THUỘC TÍNH TÍN HIỆU
 s’EVENT : Trả về true khi một sự kiện xảy ra đối với s.
 s’STABLE: Trả về true nếu không có sự kiện nào xảy ra đối với s.
 s’ACTIVE: Trả về true khi s = 1.
 s’QUIET<time>: Trả về true khi trong khoảng thời gian time không có sự
kiện nào xảy ra.
 s’LAST_EVENT: Trả về thời gian trôi qua kể từ sự kiện cuối cùng
 s’LAST_ACTIVE: Trả về thới gian kể từ lần cuối cùng s = 1
 s’LAST_VALUE: Trả về giá trị của s trước sự kiện trước đó.

Ví dụ:

29
THUỘC TÍNH ĐƯỢC ĐỊNH NGHĨA BỞI NGƯỜI DÙNG

 Người dùng có thể tự định nghĩa các thuộc tính mới trong VHDL

Cú pháp khai báo:

Ví dụ:

30
CHỒNG TOÁN TỬ (OPERATOR OVERLOADING)

 Người dùng có thể tự định nghĩa các phép tính mới cho các toán tử

Ví dụ:

Toán tử + mặc định trong VHDL chỉ áp dụng cho các kiểu dữ liệu số
học (INTEGER, REAL, UNSIGNED, SIGNED). Người dùng có thể
xây dựng toán tử + đơn giảng dùng để cộng INTEGER với một BIT
như sau:

31
SIGNAL VÀ VARIBALE

 SIGNAL:  VARIABLE:

 Được khai báo trong  Khai báo trong các phần


PACKAGE, ENTITY hoặc thực hiện tuần tự như
ARCHITECTURE PROCESS hoặc
FUNCTION
 Có tính toàn cục, thường
dùng để kết nối các  Có tính cục bộ
PROCESS

 Giá trị chỉ được cập nhật


 Giá trị được cập nhật tức
khi kết thúc lượt chạy hiện thì sau lệnh gán
tại của PROCESS
 Phép toán gán là: “ := ”
32
 Phép toán gán là: “ <= ”
MẠCH CHIA TẦN SỐ (CLOCK
DIVIDER)

Chia đôi tần số

33

Chia tám tần số


DUAL-EDGE CIRCUITS

If the target CPLD/FPGA is equipped with only single-edge DFFs (which is the
case for nearly all current devices), the compiler will not be able to synthesize a
dual-edge code directly into a flip-flop.

34
2.4 MÃ SONG SONG
(MÔ TẢ THEO DATAFLOW)

35
GÁN TÍN HIỆU ĐỒNG THỜI

Gán một giá trị hoặc kết quả của một biểu thức cho tín hiệu được thức
hiện đồng thời khi lệnh gán nằm ngoài Process hoặc Functions

Lệnh được thực thi khi nào tín hiệu trong biểu thức đó thay đổi giá trị.

Ví dụ:

36
GÁN TÍN HIỆU ĐƯỢC CHỌN LỰA
 Mệnh đề WHEN/ELSE:  Mệnh đề WITH/SELECT/WHEN:
assignment WHEN condition ELSE WITH identifier SELECT
assignment WHEN condition ELSE assignment WHEN value,
….; assignment WHEN value,
…;

37
GENERATE
 Generate cho phép viết các mã lệnh gán song song cùng dạng bằng một
câu lệnh ngắn gọn.

label: FOR identifier IN range GENERATE label: IF condition GENERATE


(concurrent assignements) (concurrent assignements)
END GENERATE; END GENERATE;

Ví dụ:

 Phần giới hạn (range) trong lệnh FOR phải là biến tĩnh, có giá trị xác định
38
2.5 MÃ TUẦN TỰ
(MÔ TẢ THEO KIỂU
BEHAVIORAL)

39
PROCESS
 Mô tả khối lệnh được thực hiện tuần tự
 Các process khác nhau được thực hiện song song
 Khai báo process phải có danh sách nhạy hoặc lệnh wait nhưng không
được chứa cả hai

40
Kết quả mô phỏng:

41
MỆNH ĐỀ IF
Cú pháp: IF conditions THEN assignments
ELSIF conditions THEN assignments
...
ELSE assignments;
END IF;

Ví dụ:

42
MỆNH ĐỀ CASE
Cú pháp:
CASE identifier IS
WHEN value => assignments
WHEN value1 to value2 => assignments
WHEN value3 | value4 => assignments
...
WHEN OTHERS => assignments;
END CASE;

Ví dụ:

43
VÒNG LẶP (LOOP)
 Có 2 cách chính sử dụng loop:

FOR identifier IN range LOOP WHILE condition LOOP


(sequential statements) (sequential statements)
END LOOP; END LOOP;

 Dùng EXIT để kết thúc vòng lặp tại một điều kiện nào đó:

EXIT WHEN condition; hoặc WHEN condition => EXIT

 Dùng NEXT để bỏ qua một bước lặp tại một điều kiện nào đó:

NEXT WHEN condition; hoặc WHEN condition => NEXT

44
VÒNG LẶP (LOOP)
Ví dụ:

45
 Chú ý: Giới hạn số vòng lặp của LOOP phải là xác định
GENERIC TRONG VHDL:

 Cho phép khai báo hằng số trong entity và architecture của entity
đó
 Giá trị của generic có thể được gán khác nhau tại mỗi lúc sử dụng

 Được khai báo trong phần khai báo entity và component, luôn
luôn trước phần khai báo port.

Cú pháp:

hoặc:

46
GENERIC TRONG VHDL:

Ví dụ khai báo generic trong entity:

47
GENERIC TRONG VHDL:

Ví dụ khai báo generic trong component:

48
Ví dụ khai báo generic trong component (tiếp):

49
FUNCTION (HÀM):
Cú pháp:

Gọi function:

Tính chất:

• Thực hiện tuần tự và trả lại một giá trị


• Các tham số truyền vào và giá trị trả về có thể là vector với độ dài bất kì. Chế độ
của tham số luôn là IN. 50

• Giá trị trả về phải luôn là variable


PROCEDURE (THỦ TỤC):
Cú pháp:

Gọi procedure:

Tính chất:

• Thực hiện tuần tự và không trả lại giá trị


• Các tham số truyền vào và giá trị trả về có thể là vector với độ dài bất kì. Các
51
chế độ tham số có thể là IN, OUT hoặc INOUT
VÍ DỤ : FUNCTION VS PROCEDURE

52
MẠCH ĐIỀU CHẾ ĐỘ RỘNG XUNG
(PWM):

53
PACKAGE:

 Là một tập hợp các functions, procedures, shared variables,


constants, files, aliases, types, subtypes, attributes, and
components, … dùng chung cho các entity. (giống với các file.h
trong lập trình C++).

 Package có hai phần: khai báo (declaration) và phần thân (body).

 Phần khai báo chứa các prototypes của các functions và


procedures. Phần thân chứa các thực thi của các functions và
procedures đó.

54
PACKAGE:
Cú pháp phần khai báo
(declaration):

Cú pháp phần thân (body):

55
PACKAGE:
Ví dụ:

56
SỬ DỤNG PACKAGE:

 Khai báo file my_package.vhd trong cùng thư mục làm việc với
các file khác (thư mục WORK).

 Sử dụng câu gọi use để gọi package.

library work; --có thể bỏ vì work được khai báo mặc định
use work.my_package.all;
entity my_entity is …

 my_package cũng có thể được đặt trong thư viện khác. Lúc đó
phải khai báo library.

57
MẠCH GIAO TIẾP UART – RS232

 Phát triển bởi the Electronic Industry Association and the


Telecommunications Industry Association (EIA/TIA)

 Các chuẩn giao tiếp trong UART: RS232, RS422, RS485, …

 RS: Recommended Standard

58
CHUẨN GIAO TIẾP RS232

 1 bit START : ‘0’

 5,6,7,8,9 bit DATA

 1-2 bit STOP: ‘1’

DATA

59

You might also like