Tải bản đầy đủ (.pdf) (32 trang)

Hệ thống nhúng slide 2

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.5 MB, 32 trang )

13:15:17

BÀI 2: FPGA
1. Giới thiệu
2. VHDL (Very High speed integrated circuit Description
Language)
3. Verilog HDL

Bài 2

1

13:21:53

Giới thiệu
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ử
dụng.
- Tác vụ tái lập trình của FPGA thực hiện đơn giản.
- Khả năng lập trình linh động.
-

Kiến trúc của FPGA cho phép nó có khả năng chứa khối
lượng lớn cổng logic.
Bài 2

2


1


13:21:53

Giới thiệu
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.

Bài 2

3

13:21:53

Một số ứng dụng của Altera DE2
TV Box

Chuột USB

Ứng dụng Ethernet

Ứng dụng âm thanh

Bài 2

4

2



13:21:53

Giới thiệu
Cấu trúc cơ bản của FPGA

(Configurable Logic
Blocks)

Bài 2

5

13:21:53

VHDL
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

Bài 2

6

3


13:21:53


VHDL
CẤU TRÚC CỦA MỘT THIẾT KẾ DÙNG VHDL

Bài 2

7

13:21:53

VHDL
LIBRARY (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).
Bài 2

8

4


16:13:14

VHDL

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, INOUT
hoặc BUFFER.
signal_type: BIT, STD_LOGIC,
INTEGER, …
entity_name:

tên

bất

kỳ,

trừ các từ khóa của VHDL.
Bài 2

9

16:13:14
Entity (thực thế)

library ieee;
use ieee.std_logic_1164.all;
ENTITY HALF_ADDER IS
PORT(A,B : IN BIT;
SUM,CARRY : OUT BIT);
END HALF_ADDER;

Bài 2

10

5


16:13:14
Entity (thực thế)
2.1.
D-FF

Mux 8-1
2.3.

Mux 4-1
2.2.

Bài 2

11

16:13:14
Entity (thực thế)
signal_type:
 bit : có các giá trị 0 và 1
 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

Bài 2

12

6


16:13:14
Entity (thực thế)
signal_type:
std_logic:

U

chưa gán

X

không xác định

'X', '1', '0' là giá trị mạnh và trội
hơn các giá trị yếu 'W', 'L', 'H' và
chúng lại trội hơn 'Z’.

0
1


'1' và '0' có thể hiểu như là nối

Z

tổng trở cao

W

không xác định (yếu)

L

0 (yếu)

H

1 (yếu)

-

Không quan tâm

nguồn và nối đất.
Giá trị 'U'và 'W' được gọi là giá trị gần
luận lý, chủ yếu có chức năng mô
phỏng và không có ý nghĩa phần
cứng.
Bài 2


13

16:13:14
Entity (thực thế)
signal_type:
std_logic:

A
B
A = 0, B = H  0
A = Z, B = H  H
A = H, B = L  W

Bài 2

14

7


16:13:14
Entity (thực thế)
signal_type:
std_logic_vector:
Khai báo một vector kiểu std_logic
ENTITY my_design IS
Port (a, b : in integer range 0 to 7;
c

: in std_logic_vector (0 to 2);


d

: in std_logic_vector (3 downto 0);

e

: out Boolean);

END my_design;

Bài 2

15

16:13:14
Entity (thực thế)

Bài 2

16

8


16:13:14

VHDL
ARCHITECTURE (cấu trúc)
mô tả mạch dùng để xác định mạch sẽ làm việc như thế nào (có chức năng gì)


Bài 2

17

16:13:14
Architechture 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 đó
ARCHITECTURE

HA_STRUCTURE

OF

HALF_ADDER IS
Component XOR2
Port(X,Y: in BIT; Z: out BIT);
End component
Component AND2
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;
Bài 2

18

9



16:13:14
Architechture dạng cấu trúc (structure)
2.4.

Bài 2

19

16:13:14
Architechture dạng hành vi (behavioral)
Kiể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
BEGIN
Process(A,B)
Begin
SUM<=A xor B;
CARRY<=A and B;
End process;
END HA_STRUCTURE;
Bài 2

20

10



16:13:14
Architechture dạng hành vi (behavioral)
ENTITY DFF IS
PORT( D,CK : IN BIT;
Q,Qnot: OUT BIT);
END DFF;
ARCHITECTURE DFF_BEHAVIOR OF DFF IS
BEGIN
Process(CK)
Begin
If rising_edge(ck) then
Q<=D;
Qnot<=not D;
End if;
End process;
END DFF_BEHAVIOR ;

Bài 2

21

16:13:14

Architechture dạng hỗn hợp

Bài 2

22


11


16:13:14

Mô phỏng trên Quartus 13
Download: />Hay: />B1: Khởi động Quartus, chọn File > New Project Wizard:

Bài 2

23

16:13:14

B2:

Chọn Family là Cyclone II, chọn Available devices là EP2C35F672C6 
Finish

B3: Chọn File > New:

Bài 2

24

12


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.
Bài 2

25

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

Bài 2

26

13


16:13:14
B7: Biên dịch thành công:

B8: Chọn File > New, sau đó chọn
University Program VWF để mô
phỏng

Bài 2

27


16:13:14
B9: Cửa sổ Simulation Waveform
Editor:

B10: Nhấn chuột phải vào khung bên trái, chọn Insert Nodes or Bus

Bài 2

28

14


16:13:14
B11: Nhấn vào Node Finder

B12: Nhấn vào List, sau đó nhấn vào >>

Bài 2

29

16:13:14
B13: Nhấn OK

B14: Click vào clk, click chọn Overwrite clock, sau đó nhấn OK

Bài 2


30

15


16:13:14
B15: Click vào d, chọn giá trị tùy ý cho d bằng mức 0 hay 1.
Tương tự cho rst

B16: Nhấn nút Run Functional Simulation hay Run Time Simulation

Bài 2

31

16:13:14

Kết quả:

Bài 2

32

16


16:13:14

Bài tập về nhà:
2.5.

Thực hiện D-FF trên với ngõ vào d = 3 số cuối MSSV
VD: SV có 3 số cuối MSSV là 123  d = 0001 0010 0011

Bài 2

33

16:13:14

Viết mã VHDL cho:
2.6.

2.7.
Mux 4-1

=(

̅ )+(

Bài 2

)+(

̅ )+(

)

34

17



Lệnh If

16:13:14

Bài 2

35

16:13:14

Viết mã VHDL cho:
2.8.
Mạch dồn kênh 2-> 1

2.9. Mạch dồn kênh 8-> 1

2.10. Mạch so sánh 4 bit

Mạch so sánh 4 bit bao gồm 8 bit ngõ vào, chia thành 2 nhóm, mỗi nhóm 4 bit và được đặt
tên là A và B.
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).
Bài 2

36

18



Lệnh Case

16:13:14

2.11. Thực hiện 2.8 -> 2.9 dùng lệnh case
Bài 2

WHEN

37

16:13:14

Gán WHEN điều_kiện ELSE
Gán WHEN điều_kiện ELSE
…;

WITH biểu_thức SELECT
Gán WHEN giá trị,
Gán WHEN giá trị,

Gán WHEN OTHERS;
2.12. Thực hiện lại 2.11
Bài 2

38

19



16:13:14
2.13. Viết mã VHDL cho
bộ giải mã 3-> 8

2.14. Viết mã VHDL cho bộ mã hóa 8 -> 3

Bài 2

39

16:13:14

Verilog HDL
Cấu trúc chương trình
// 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 …
Endmodule

Bài 2

40


20


16:13:14

Verilog HDL

assign: lệnh gán
~, &, |: toán tử NOT, AND, OR

Bài 2

41

16:13:14

Verilog HDL
Thực hiện trên Quartus:
Quá trình tương tự như VHDL, trong B4,
chọn Verilog HDL thay cho VHDL

Bài 2

42

21


16:13:14


Verilog HDL

Bài 2

43

16:13:14
Wire:
- 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
đến Wire.
Wor (wired_or): giá trị phụ thuộc vào mức logic Or toàn bộ bộ điều khiển kết nối đến
Wire.
Tri (three_state): tất cả bộ điều khiển kết nối đến 1 tri phải ở trạng thái tổng trở cao.

Bài 2

44

22


16:13:14

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.
Ví dụ:
Wire c;
Wand d;
Assign d= a;
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.

Bài 2

45

16:13:14
2.15. Viết mã Verilog mô tả mạch:

~ (bitwire NOT)
& (bitwire AND)
| (bitwire OR)
^ (bitwire XOR),

2.16.

~^ hay ^~ (bitwire XNOR).

=(

̅ )+(

Bài 2

)+(

̅ )+(

)
46

23


16:13:14
Mạ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

Bài 2

47

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.


Bài 2

48

24


16:13:14
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).
Cú pháp:
Always @(sự kiện 1 or sự kiện 2 or…)
Begin
… các lệnh…
end

Always @(sự kiện 1 or sự kiện 2 or…)
Begin: tên khối
… các lệnh…
end
Bài 2


49

16:13:14
posedge: xung cạnh lên
negedge: xung cạnh xuống

Nếu có xung cạnh lên tại chân clk hay clr
thì thực hiện đoạn mã giữa begin …end
4’b0: b0: số nhị phân 0, 4’: 4 bit  0000
3’d5: d5: số thập phân 5, 3’: 3 bit  101
8’hAB: hAB: số thập lục phân AB, 8’: 8 bit  1010 1011

Bài 2

50

25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×