Professional Documents
Culture Documents
VHDL
VHDL
VHDL
1
NGÔN NGỮ VHDL
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
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 ;
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;
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, …)
• 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
Ví dụ:
9
TEST THỬ TRÊN QUARTUS
10
ARCHITECTURE (KIẾN TRÚC)
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.
STD_LOGIC và STD_LOGIC_VECTOR : 8
mức logic theo chuẩn IEEE 1164
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ụ:
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
23
TOÁN TỬ GÁN
<= : Gán giá trị cho SIGNAL
=> : 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:
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
26
TOÁN TỬ SO SÁNH
TOÁN TỬ DỊCH
Cú pháp:
<left operand> <shift operation> <right operand>
Ví dụ:
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
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:
33
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.
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:
Dùng EXIT để kết thúc vòng lặp tại một điều kiện nào đó:
Dùng NEXT để bỏ qua một bước lặp tại một điều kiện nào đó:
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:
47
GENERIC TRONG VHDL:
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:
Gọi procedure:
Tính chất:
52
MẠCH ĐIỀU CHẾ ĐỘ RỘNG XUNG
(PWM):
53
PACKAGE:
54
PACKAGE:
Cú pháp phần khai báo
(declaration):
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).
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
58
CHUẨN GIAO TIẾP RS232
DATA
59