1
Lập trình VHDL
www.viethung-idt.com.vn
2
Nội dung
Giới thiệu VHDL
1
Cấu trúc lập trình
2
Các đối tượng
3
Các kiểu dữ liệu
4
Các phép toán
5
Các mệnh đề tuần tự
6
DES với VHDL
7
AES với VHDL
8
3
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
4
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
5
Nội dung
Giới thiệu VHDL
1
Cấu trúc lập trình
2
Các đối tượng
3
Các kiểu dữ liệu
4
Các phép toán
5
Các mệnh đề tuần tự
6
DES với VHDL
7
AES với VHDL
8
6
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.
7
II. Cấu trúc (tiếp)
LIBRARY IEEE;
USE ...;
--------------------
ENTITY Example IS
GENERIC (...);
PORT (...);
END Example;
--------------------
ARCHITECTURE Ex1 OF Example IS
COMPONENT (...);
GENERIC MAP (...);
PORT MAP (...);
BEGIN
Process(...);
End Process;
END Ex1;
ARCHITECTURE Ex1 OF Example IS
...
END Ex2;
Library
Entity
Architecture
8
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;
9
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;
10
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.
11
II.3. Architecture (tiếp)
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.
-- Architecture Body
ARCHITECTURE Adder16 OF Adder IS
signal Cr : STD_LOGIC_VECTOR(16 downto 0);
BEGIN
...
PROCESS (...)
...
END PROCESS;
END Adder16;
12
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;
13
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)
S <= “0000”
P1: Process (Rst)
DO <= S and A
P2: Process (S)
S
S
S <= DI and B
P3: Process (Clk)
14
Nội dung
Giới thiệu VHDL
1
Cấu trúc lập trình
2
Các đối tượng
3
Các kiểu dữ liệu
4
Các phép toán
5
Các mệnh đề tuần tự
6
DES với VHDL
7
AES với VHDL
8
15
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ộ
16
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
17
III. Các đối tượng trong VHDL (tiếp)
Key
Plain
Data
Clk
Cipher
Component_1
Component_2
Encryptor
Key_In
Key_Out
Key_In
Key_1_2
Clk1
18
III. Các đối tượng trong VHDL (tiếp)
entity
architecture
Input Ports
Signals
Output Ports
component
1
component
2
process
Variables
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
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
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
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”;
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
Com1: Component_1
Port map (Clk => Clk1,
Key_In => Key,
Key_Out => Key_1_2);
-- Mô tả hoạt động
...
End Example1
22
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
23
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;
24
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;
25
Nội dung
Giới thiệu VHDL
1
Cấu trúc lập trình
2
Các đối tượng
3
Các kiểu dữ liệu
4
Các phép toán
5
Các mệnh đề tuần tự
6
DES với VHDL
7
AES với VHDL
8