Bài 2 3Giới thiệu 13:21:53 Thiết kế hay lập trình cho FPGA được thực hiện chủ yếu bằng các ngôn ngữ mô tả phần cứng HDL như VHDL, Verilog, AHDL... 13:21:53 VHDL là ngôn ngữ mô tả phần cứ
Trang 1Giới thiệu
13:21:53
FPGA (Field Programmable Gate Array) là vi mạch dùng cấu trúc
mảng phần tử logic mà người dùng có thể lập trình được
- Có thể tái cấu trúc lại khi đang sử dụng
- Công đoạn thiết kế đơn giản
- Chi phí giảm, rút ngắn thời gian đưa sản phẩm vào sử
Trang 2Bài 2 3
Giới thiệu
13:21:53
Thiết kế hay lập trình cho FPGA được thực hiện chủ yếu bằng các ngôn
ngữ mô tả phần cứng HDL như VHDL, Verilog, AHDL
13:21:53
Một số ứng dụng của Altera DE2
Trang 313:21:53
VHDL là ngôn ngữ mô tả phần cứng cho các mạch tích hợp tốc độ rất cao
(VHDL: Very High Speed Integrated Circuits - Hardware Description Language)
được sử dụng để mô tả một hệ thống thiết kế logic
VHDL được chuẩn hóa từ 1987 bởi IEEE 1076-1987, nâng cấp năm 1993 Đa số
các phần mềm thiết kế hiện nay đều hỗ trợ VHDL
Trang 4LIBRARY (thư viện)
Một thư viện là nơi lưu trữ các câu lệnh thường được sử dụng
Khai báo Library:
LIBRARY library_name;
USE library_name.package_name.package_parts;
Có 3 gói, từ 3 thư viện khác nhau thường được sử dụng trong thiết kế:
• ieee.std_logic_1164, ieee.std_logic_arith (ieee library),
• standard (std library)
• work (work library)
Trang 5Bài 2 9
VHDL
16:13:14
Entity (thực thế)
Khai báo entity dùng để mô tả ngõ vào và ngõ ra của một thiết kế.
Mức cao nhất của bất kỳ một thiết kế VHDL là một khai báo entity đơn, tên của file
lưu trữ phải trùng với tên theo sau của từ khóa entity.
signal_mode: IN, OUT, INOUThoặc BUFFER
signal_type: BIT, STD_LOGIC,INTEGER, …
entity_name: tên bất kỳ,trừ các từ khóa của VHDL
Trang 6 bit_vector: là là một vector của các giá trị bit, ví dụ: bit_vector (0 to 7)
std_logic, std_logic_vector: có 9 giá trị chỉ ra giá trị và kích thước của một tín
hiệu
boolean: có giá trị TRUE và FALSE
integer: là một dãy giá trị integer
Real: có là một dãy giá trị Real
Time - để biểu thị thời gian
signal_type:
Trang 7'1' và '0' có thể hiểu như là nốinguồn và nối đất.
Giá trị 'U'và 'W' được gọi là giá trị gầnluận lý, chủ yếu có chức năng môphỏng và không có ý nghĩa phầncứng
A = 0, B = H 0
A = Z, B = H H
A = H, B = L W
Trang 9Architechture dạng cấu trúc (structure)
mô tả các phần tử con bên trong hệ thống và sự kết nối của các phần tử con đó
Port(L,M: in BIT; N: out BIT);
End component
BEGIN
X1: XOR2 port map (A,B,SUM);
A1: AND2 port map (A,B,CARRY);
END HA_STRUCTURE;
Trang 10Kiểu mô tả hành vi bao gồm tập hợp thứ tự các phép gán tín hiệu
tuần tự được khai báo bên trong phát biểu process.
Biến được khai báo trong process là biến cục bộ Tín hiệu không
được khai báo trong process
ARCHITECTURE HA_STRUCTURE OF HALF_ADDER IS
Trang 11If rising_edge(ck) thenQ<=D;
Trang 13Bài 2 25
16:13:14
B4: Chọn VHDL File, nhập đoạn mã mô tả cho D-FF, sau đó nhấn nút Save
Lưu ý: tên ENTITY phải trùng với tên file.
16:13:14
B5: Trên cửa sổ Project Navigator (bên phải), chọn Tab File, nhấn
chuột phải vào file VHDL và chọn Set as Top-level Entity
B6: Chọn menu Processing > Start Compilation hay nhấn nút Start
Compilation
Trang 14Bài 2 27
16:13:14
B7: Biên dịch thành công:
B8: Chọn File > New, sau đó chọn
University Program VWF để mô
Trang 15Bài 2 29
16:13:14
B11: Nhấn vào Node Finder
B12: Nhấn vào List, sau đó nhấn vào >>
Trang 18Bài 2 35
16:13:14
Lệnh If
16:13:14Viết mã VHDL cho:
Kết quả của phép so sánh ở ngõ vào sẽ được biểu thị bằng 3 bit ngõ ra cho 3 trường hợp so
sánh giữa A và B: AeqB(A equal B), AgtB(A greater B), AltB (A lighter B)
2.8.
2.9.
2.10.
Trang 19Gán WHEN điều_kiện ELSE
Gán WHEN điều_kiện ELSE
Trang 20// Khai báo module
Module tên chương trình (tên biến I/O);
// tên chương trình trùng tên file.v
Input [msb:lsb] biến;
Output [msb:lsb] biến;
Reg [msb:lsb] biến reg;
Wire [msb: lsb] biến wire;
// Khai báo khối always, hoặc khối initial
… các lệnh …
Trang 21Thực hiện trên Quartus:
Quá trình tương tự như VHDL, trong B4,
chọn Verilog HDL thay cho VHDL
Trang 22- Mô tả dây dẫn trong mạch, dùng để kết nối các cổng hay các module.
- Giá trị của Wire có thể đọc, nhưng không được gán trong hàm hoặc khối
- Wire không lưu trữ giá trị nhưng vẫn phải được thực thi bởi 1 lệnh gán kế tiếp hay
bởi sự kết nối Wire với ngõ ra của 1 cổng hoặc 1 module
Những dạng đặc biệt khác của Wire:
Wand (wired_and): giá trị phụ thuộc vào mức logic And toàn bộ điều khiển kết nối
Trang 23Bài 2 45
Cú pháp:
Wire [msb:lsb] tên biến wire.
Wand [msb:lsb] tên biến wand.
Wor [msb:lsb] tên biến wor.
Tri [msb:lsb] tên biến tri.
Assign d= b;// giá trị d là mức logic của phép And a và b.
Wire [9:0] A; // vectơ A có 10 wire.
Trang 24Bài 2 47
16:13:14Mạch đếm lên không đồng bộ 4 bit có ngõ vào xóa (clr) tích cực mức thấp
16:13:14
Reg:
Reg (register) là một đối tượng dữ liệu chứa giá trị từ một thủ tục gán kế tiếp,
chỉ được dùng trong hàm và khối thủ tục
Reg là một loại biến Verilog và không nhất thiết là thanh ghi tự nhiên
Cú pháp:
Reg [msb:lsb] tên biến reg
Ví dụ:
Reg a; // biến thanh ghi đơn giản 1 bit
Reg [7:0] A; // một vector 8 bit
Reg [5:0]b, c; // hai biến thanh ghi 6 bit
Trang 25Bài 2 49
Khối always:
là trạng thái tồn tại được thực thi liên tục khi mô phỏng Tất cả các khối always
trong một module thực thi liên tục
Khối always có thể được dùng trong chốt, flip flop hay các kết nối logic Nếu
các lệnh của khối always nằm trong phạm vi khối begin… end thì được thực
thi liên tục, nếu nằm trong khối fort… join, chúng được thực thi đồng thời (chỉ
trong mô phỏng)
Khối always thực hiện bằng mức, cạnh lên hoặc cạnh xuống của một hay nhiều
tín hiệu (các tín hiệu cách nhau bởi từ khóa OR)
Trang 26Bài 2 51
16:13:14
Lệnh if
Thực hiện một lệnh hoặc một khối
lệnh phụ thuộc vào kết quả của
biểu thức theo sau mệnh đề if
c = #10 0: sau 10 đơn vị thời gian, c = 0
c = #11 1: sau 11 đơn vị thời gian sau khi đã thực hiện lệnh trên, c = 1 c = 1
tại thời điểm 21
d <= #10 0: sau 10 đơn vị thời gian, d = 0
d <= #11 1: sau 11 đơn vị thời gian, d = 1 c = 1 tại thời điểm 11
Trang 28Reset
Khi có xung clock: chuyển sang trạng thái kế, nếu Reset = 1 thì
chuyển về trạng thái S0 (ngõ ra là 0000)
Trang 30Bài 2 59
16:13:14
2.21.
Viết mã Verilog và VHDL cho sơ đồ máy trạng thái sau:
Sơ đồ trạng thái bộ điều khiển động cơ bước
16:13:14
Thiết kế mạch tuần tự với đầu vào x là luồng bit nối tiếp và đầu ra y là 1 khi
đầu vào xuất hiện chuỗi “111”, và 0 trong các trường hợp còn lại
+ Trạng thái S0 là trạng thái chờ bit 1 đầu tiên (y = 0)
+ Trạng thái S1 là trang thái đã có bit 1 và chờ bit 1 thứ 2 (y = 0)
+ Trạng thái S2 là trạng thái đã có 11 và đang chờ bit 1 thứ 3 (y = 0)
+ Trạng thái S3 là trạng thái thu được chuỗi 111 (y = 1)
S2S3
Reset
x=1
x=0
x=1x=0
x=1
x=0x=1
x=0
Trang 31Bài 2 61
Trang 32Bài 2 63
16:13:14
Thiết kế mạch tuần tự với đầu vào x là luồng bit nối tiếp và đầu ra y là 1 khi
đầu vào xuất hiện chuỗi “1101”, và 0 trong các trường hợp còn lại
S4
1/00/0
1/0
0/1
1/10/0
Reset
1/1
2.22 Viết mã Verilog và VHDL cho sơ đồ máy trạng thái sau: