slide vhdl 12345

Post on 23-May-2017

220 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Lập trình VHDL

www.viethung-idt.com.vn

2

Nội dungGiới thiệu VHDL1

Cấu trúc lập trình2Các đối tượng3

Các kiểu dữ liệu4

Các phép toán5

Các mệnh đề tuần tự6

DES với VHDL7

AES với VHDL8

3

I. Giới thiệu VHDLLà 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 dungGiới thiệu VHDL1

Cấu trúc lập trình2Các đối tượng3

Các kiểu dữ liệu4

Các phép toán5

Các mệnh đề tuần tự6

DES với VHDL7

AES với VHDL8

6

II. Cấu trúcLibrary

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. LibraryCá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 ProjectLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;

9

II.2. EntityXá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 DeclarationENTITY 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. ArchitectureGiữ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 BodyARCHITECTURE 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 ProcessCá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 dungGiới thiệu VHDL1

Cấu trúc lập trình2Các đối tượng3

Các kiểu dữ liệu4

Các phép toán5

Các mệnh đề tuần tự6

DES với VHDL7

AES với VHDL8

15

III. Các đối tượng trong VHDLComponent: 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_Ou

t

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ầnComponent 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ệusignal 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áosignal 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ốiCom1: Component_1Port 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 độngBegin Process (...) variable i: integer range 0 to 15; constant pi: real := 3.14; Begin ... End ProcessEnd 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 ISCOMPONENT Com1 GENERIC (rise, fall: time:= 10 ns; load: integer:= 0); PORT (a, b: In std_logic; c: Out std_logic);END COMPONENT;

BEGINU1: 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 dungGiới thiệu VHDL1

Cấu trúc lập trình2Các đối tượng3

Các kiểu dữ liệu4

Các phép toán5

Các mệnh đề tuần tự6

DES với VHDL7

AES với VHDL8

26

IV. Các kiểu dữ liệubit, bit_vector

thường dùng để định nghĩa biến (variable) chỉ nhận các giá trị ‘0’, ‘1’

std_logic, std_logic_vector thường dùng để định nghĩa tín hiệu (signal) nhận các giá trị: ‘U’ (Uninitialized), ‘0’, ‘1’,‘X’ (Forcing Unknown), ‘Z’ (High Impedance),

boolean true, false

27

IV. Các kiểu dữ liệu (tiếp)Integer

32 bit (-2,147,483,647 ... +12,147,483,647) a := 1; a := -1; -- đúng a := 1.0; -- sai

Real 32 bit (-10^38 ... +10^38) độ chính xác: 7 chữ số phần thập phân a := 1; a := -1; -- sai a := 1.0; -- đúng a := -1.0E10; a := 1.5E-20; -- đúng

28

IV. Các kiểu dữ liệu (tiếp)Kiểu dữ liệu tự định nghĩa

1. Kiểu dữ liệu liệt kê• Thường dùng khi mô tả trạng thái

2. Kiểu dữ liệu mảng 1 chiềuTYPE MyState IS : (Start, S1, S2, S3, Stop);...variable S : MyState;...S := S1;

TYPE MyRegister IS ARRAY (0 to 255) OF INTEGER;...variable R : MyRegister;...R(1) := 1;

29

IV. Các kiểu dữ liệu (tiếp)Kiểu dữ liệu tự định nghĩa

3 Kiểu dữ liệu mảng nhiều chiều• Thường dùng với chức năng bảng tra giá trị

(Lookup Table)

TYPE LUT IS ARRAY(0 TO 3, 0 TO 3) OF std_logic;...constant MyLUT : LUT := ((‘0’, ‘0’, ‘0’), (‘0’, ‘0’, ‘0’), (‘0’, ‘0’, ‘1’));

30

IV. Các kiểu dữ liệu (tiếp)Time

Thời gian là kiểu dữ liệu vật lý duy nhất được định nghĩa sẵn trong VHDL

Dùng để xác định trễ và đồng bộ tín hiệu (với từ khóa “wait”)

Đơn vị: fs, ps, ns, us, ms, sec, min, hrvariable T : time;...T := 1 ns;

31

IV. Các kiểu dữ liệu (tiếp)Có thể nói: không có khái niệm “ép

kiểu” trong VHDL. Một số ngoại lệ: integer +/- bit_vector/std_logic_vector Xét ví dụ:

TYPE long is integer range -100 to 100;TYPE short is integer range -10 to 10;Signal x: short;Signal y: long;...

y <= 2 * x + 5; -- Saiy <= long(2 * x + 5); -- OK-- trong trường hợp này, thực chất x và y-- có cùng kiểu là integer

32

IV. Các kiểu dữ liệu (tiếp)Để chuyển đổi kiểu dữ liệu, có 2 cách:

Tự viết một đoạn mã để chuyển dữ liệu. Khai báo thư viện và dùng hàm có sẵn.

Gói std_logic_arith trong thư viện IEEE có một số hàm chuyển đổi kiểu dữ liệu: conv_integer(p) conv_unsigned(p, b) conv_signed(p, b) conv_std_logic_vector(p, b)

33

Nội dungGiới thiệu VHDL1

Cấu trúc lập trình2Các đối tượng3

Các kiểu dữ liệu4

Các phép toán5

Các mệnh đề tuần tự6

DES với VHDL7

AES với VHDL8

34

V. Các phép toánPhép gán

đối với tín hiệu: “<=”, đối với biến: “:=” kiểu và kích thước dữ liệu 2 vế của phép gán

phải giống nhauPhép ghép vector (concatenation)

dùng với kiểu bit_vector/std_logic_vector

signal DI1 : bit_vector (7 downto 0) := “11000110”;signal DI2 : bit_vector (3 downto 0) := “0010”;signal DO : bit_vector (7 downto 0);

DO <= DI1(7 downto 4) & DI2; -- 11000010

35

V. Các phép toán (tiếp)Phép toán logic

Toán tử: and or not xor nor nand xnor Toán hạng: boolean, bit, bit_vector, std_logic,

std_logic_vector Các toán hạng vector phải cùng kích thước và

phép toán được thực hiện trên các bit tương ứng

36

V. Các phép toán (tiếp)Phép toán so sánh

Toán tử: =, /=, <, <=, >, >= Trả về giá trị boolean (true/false)

Phép toán số học *, /, ** (exp) chỉ dùng với integer, real, time. mod, rem chỉ dùng với integer. +,- dùng với cả integer, real, time và

bit_vector, std_logic_vector +,- cho phép 1 toán hạng integer và 1 toán

hạng bit_vector/std_logic_vector (THĐB)

37

V. Các phép toán (tiếp)Phép toán shift (dịch bit)

Toán tử: sll, srl, sla, sra, rol, ror Toán hạng trái: bit_vector/std_logic_vector Toán hạng phải: integer

signal DI : bit_vector (7 downto 0) := “11000110”;signal DO : bit_vector (7 downto 0);

DO <= DI sll 2;DO <= DI sla 2DO <= DI srl 2; DO <= DI sra 2;DO <= DI ror 3

-- 00011000-- 00011000-- 00110001-- 11110001-- 11011000

38

Ví dụ 1: (câu hỏi)Thiết kế bộ cộng đầy đủ (Full Adder) 16bit

Chú ý: ví dụ chỉ mang tính minh họa vì phép cộng“C <= A + B” đã được định nghĩa sẵn.

FullAdder

a

b

cincout

s

a b cin s cout0 0 0 0 00 1 0 1 01 0 0 1 01 1 0 0 10 0 1 1 00 1 1 0 11 0 1 0 11 1 1 1 1

s <= a xor b xor cin;cout <= (a and b) or (cin and (a xor b));

39

Ví dụ 1: (trả lời)ENTITY Adder IS PORT (B : IN STD_LOGIC_VECTOR(15 downto 0); A : IN STD_LOGIC_VECTOR(15 downto 0); S : OUT STD_LOGIC_VECTOR(15 downto 0); C : OUT STD_LOGIC);END Adder;

ARCHITECTURE Adder16 OF Adder ISsignal Cr : STD_LOGIC_VECTOR(16 downto 0);BEGIN PROCESS (A, B) variable i : integer; Begin Cr(0) <= '0'; For i in 0 to 15 loop S(i) <= A(i) xor B(i) xor Cr(i); Cr(i+1) <= (A(i) and B(i)) or (Cr(i) and (A(i) xor B(i))); End loop; C <= Cr(16); END PROCESS;END Adder16;

40

Ví dụ 2: (câu hỏi)Xây dựng bộ nhân 2 số 8bit đối với

kiểu std_logic_vector.x3 x2 x1 x0

y3 y2 y1 y0

x3 x2 x1 x0

x3 x2 x1 x0

x3 x2 x1 x0

x3 x2 x1 x0

and

and

and

and

y0

y1

y2

y3

z3 z2 z1 z0z3 z2 z1 z0

(phần trả lờitham khảomã nguồnkèm theo)

41

Ví dụ 3: (câu hỏi)Xây dựng bộ chia chia số 16bit cho

số 8bit đối với kiểu std_logic_vector.

42

Bài tập 1:Xây dựng bộ cộng 2 số dấu phẩy

động (học viên tự tìm hiểu số dấu phẩy động)

43

Bài tập 2:Xây dựng bộ nhân 2 số dấu phẩy

động (học viên tự tìm hiểu số dấu phẩy động)

44

45

Nội dungGiới thiệu VHDL1

Cấu trúc lập trình2Các đối tượng3

Các kiểu dữ liệu4

Các phép toán5

Các mệnh đề tuần tự6

DES với VHDL7

AES với VHDL8

46

VI. Các mệnh đề tuần tự1. IF2. CASE3. LOOP

For ... Loop While ... Loop

4. WAIT Wait on ... Wait for ... Wait until ...

47

VI.1. Mệnh đề IFIF (biểuthứclogic1) THEN...ELSIF (biểuthứclogic2) THEN –- có thể có nhiều ELSIF...ELSE –- nhưng chỉ có 1 ELSE...END IF;

process (A, B, C, D, Sel )begin if (Sel = “00”) then S <= A; elsif (Sel = “01”) then S <= B; elsif (Sel = “10”) then S <= C; elsif (Sel = “11”) then S <= D; else S <= “0000”; end if;end process;

MUX

AB

C

D

S

Sel

48

VI.2. Mệnh đề CASECASE (biến / tínhiệu) IS WHEN giátrị1 => ... WHEN giátrị2 => ... WHEN OTHERS => ...END CASE;

process (A, B, C, D, Sel )begin case (Sel) is when “00” => S <= A; when “01” => S <= B; when “10” => S <= C; when “11” => S <= D; when others => S <= “0000”; end case;end process;

MUX

AB

C

D

S

Sel

49

VI.2. Mệnh đề CASE (tiếp)

if (x = 12 to 14) then...end if;

case (D_In) iswhen “1000” to “1010” => ......end case;

Ta có thể sử dụng 1 dải giá trị hữu hạn trong biểu thức logic của mệnh đề CASE hoặc IF.

50

VI.2. Mệnh đề CASE (tiếp)

Architecture Bad of MUX isBegin S <= A when Sel = “00” else “0000”; S <= B when Sel = “01” else “0000”; S <= C when Sel = “10” else “0000”; S <= D when Sel = “11” else “0000”;End Bad;

Xét ví dụ Cú pháp hoàn toàn đúng. S có thể được gán cùng lúc 1 giá trị A và 3

giá trị “0000”. S trong trường hợp này được gọi là “multi-driver signal”.

Có thể tổng hợp được nhưng kết quả sai!

51

VI.2. Mệnh đề CASE (tiếp) Kết quả sai là do hiện tượng “chập mạch”

(short-circuit) khi tổng hợp. Thực tế có rất nhiều tín hiệu nhận giá trị từ

nhiều nguồn (source) khác nhau (nguồn tín hiệu của S là A, B, C, D).

Cách xử lý Người thiết kế/lập trình phải phân giải giá trị

từ nhiều nguồn khác nhau để tín hiệu chỉ nhận 1 giá trị duy nhất tại 1 thời điểm (multi-source - single-driver).

52

VI.3. Mệnh đề LOOPPROCESS (A_Sig, B_Bus)variable i : integer;Begin for i in 7 downto 0 loop C_Bus(i) <= A_Sig and B_Bus(i); end loop;END PROCESS;

PROCESS (A_Sig, B_Bus)variable i : integer;Begin i := 7; while (i >= 0) loop C_Bus(i) <= A_Sig and B_Bus(i); i := i – 1; end loop;END PROCESS;

53

VI.3. Mệnh đề LOOP (tiếp)Dừng vòng lặp đang thực hiện dở để

chuyển sang vòng lặp tiếp theo: NEXT.

Dừng vòng lặp đang thực hiện dở và thoát hẳn khỏi vòng lặp: EXIT. Có thể có nhiều vòng lặp lồng nhau, nhưng

lệnh Exit chỉ có tác dụng đối với vòng lặp trực tiếp chứa nó.

54

VI.4. Mệnh đề WAITMệnh đề WAIT dùng để tạm dừng

Process trong một khoảng thời gian nào đó: Wait on tín_hiệu_nào_đó_thay_đổi_giá_trị Wait until biểu_thức_logic_nhận_giá_trị_true Wait for khoảng_thời_gian_xác_định Wait (khoảng_thời_gian_không_xác_định)Wait on A, B;

...Wait until Clk = ‘1’;...Wait for 10 ns;...Wait;

55

VI.4. Mệnh đề WAIT (tiếp)Không phải tất cả các mệnh đề VHDL

đều có thể tổng hợp được. Ví dụ, wait for 10 ns là một mệnh đề

thông dụng trong mô hình hoá, nhưng nó không tương ứng với và cũng không thể tạo ra một phần tử ở mức cổng logic.

56

VI.4. Mệnh đề WAIT (tiếp)Mệnh đề Wait có thể được viết dưới

dạng tường minh (explicit) hoặc không tường minh (implicit).

Một số công cụ tổng hợp mạch không hỗ trợ explicit ‘wait’.

-- Implicit WAITProcess (A, B)Begin C <= A and B;End Process;

-- Explicit WAITProcessBegin Wait on A, B; C <= A and B;End Process;

57

Ví dụ 4: (câu hỏi)Xây dựng hệ dãy đoán nhận xâu

“1101”

A B C D E1 1 0 1

0 0 1

0 0

1

Input

Output

(phần trả lời tham khảo mã nguồn kèm theo)

58

Bài tập

59

Nội dungGiới thiệu VHDL1

Cấu trúc lập trình2Các đối tượng3

Các kiểu dữ liệu4

Các phép toán5

Các mệnh đề tuần tự6

DES với VHDL7

AES với VHDL8

60

VII. Mã hóa DES với VHDLDES = Data Encryption StandardLà thuật toán mã hóa khối, làm việc

với khối dữ liệu 64bit.Khóa mã hóa 64bit (thực tế chỉ có

56bit vì 8bit còn lại dùng để kiểm tra)Vì khóa không đủ độ dài, DES được

cải tiến thành Triple_DES (thức hiện DES 3 lần với 3 khóa)

61

VIII. Mã hóa DES với VHDL (tiếp)

IP F F FPF F

...

...

16rounds

62

VIII. Mã hóa DES với VHDL (tiếp)

63

VIII. Mã hóa DES với VHDL (tiếp)

64

Nội dungGiới thiệu VHDL1

Cấu trúc lập trình2Các đối tượng3

Các kiểu dữ liệu4

Các phép toán5

Các mệnh đề tuần tự6

DES với VHDL7

AES với VHDL8

65

VIII. Mã hóa AES với VHDLAES = Advanced Encryption

StandardLà thuật toán mã hóa khối, làm việc

với khối dữ liệu 128bit.Khóa mã hóa có thể 128, 192 hoặc

256bitĐược chính phủ Hoa Kỳ chính thức sử

dụng để thay thế Triple_DES.

66

VIII. Mã hóa AES với VHDL (tiếp)

SubBytes

ShiftRows

MixColumn

AddRoundKey

AddRoundKey

SubBytes

ShiftRows

AddRoundKey

CipherKey

RoundKey 10

RoundKey 1-9

Plaintext

Ciphertext

67

VIII. Mã hóa AES với VHDL (tiếp)

68

VIII. Mã hóa AES với VHDL (tiếp)

69

VIII. Mã hóa AES với VHDL (tiếp)

70

VIII. Mã hóa AES với VHDL (tiếp)

71

So sánh với Embedded CVi xử lý, vi điều khiển có sẵn tập lệnh

nên có thể dùng Embedded C để lập trình, các lệnh C sẽ được dịch sang ngôn ngữ máy ở dạng nhị phân.

FPGA chỉ bao gồm các phần tử Logic cơ bản nên phải sử dụng VHDL để mô phỏng và tổng hợp dưới dạng ghép nối các phần tử logic.

Làm việc với VHDL đòi hỏi hiểu sâu hơn về cấu trúc và hoạt động của vi mạch.

72

So sánh với VerilogGiống nhau:

Cùng là ngôn ngữ mô phỏng và tổng hợp phần cứng. Có thể so sánh như C++ và Java.

Khác nhau: VHDL yêu cầu cấu trúc chặt chẽ hơn (đặc biệt

về kiểu dữ liệu) nên dễ phát hiện lỗi hơn, tuy nhiên lại thường dài dòng hơn và khó phân tích mã nguồn hơn.

VHDL được dùng nhiều ở Châu Âu, Verilog được dùng nhiều ở Mỹ (mặc dù cả 2 đều sinh ra ở Mỹ)

73

Tài liệu tham khảoVHDL Programming by Examples,

Douglas L.Perry, McGraw Hill.Circuit Design with VHDL, Volnei

A.Pedroni, MIT Press.1076 IEEE Standard VHDL Reference

Manual, IEEE Computer Society.

74

top related