Nội dung:
1.Giới thiệu VHDL
2. Cấu trúc lập trình
3. Các đối tượng
4. Các kiểu dữ liệu
5. Các phép toán
6. Các mệnh đề tuần tự
7. DES với VHDL
8. AES với VHDL
74 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 5576 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Bài giảng VHDL, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lập trình VHDL www.viethung-idt.com.vn 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 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 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 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 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. 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; 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; 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; 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. 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; 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; 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) 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 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ộ 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 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 III. Các đối tượng trong VHDL (tiếp) 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 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”; 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 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 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; 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; 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 IV. Các kiểu dữ liệu bit, 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 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 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ều TYPE 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; 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’)); 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, hr variable T : time; ... T := 1 ns; 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 , >= 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) 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); 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 ... WHEN giátrị2 => ... WHEN OTHERS => ... END CASE; process (A, B, C, D, Sel )begin case (Sel) is when “00” => S S S S S ...... 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. VI.2. Mệnh đề CASE (tiếp) Architecture Bad of MUX is Begin S = 0) loop C_Bus(i) <= A_Sig and B_Bus(i); i := i – 1; end loop; END PROCESS; 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ó. VI.4. Mệnh đề WAIT Mệ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; 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. 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 WAIT Process (A, B) Begin C <= A and B; End Process; -- Explicit WAIT Process Begin Wait on A, B; C <= A and B; End Process; Ví dụ 4: (câu hỏi) Xây dựng hệ dãy đoán nhận xâu “1101” (phần trả lời tham khảo mã nguồn kèm theo) Bài tập 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 VII. Mã hóa DES với VHDL DES = Data Encryption Standard Là 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) VIII. Mã hóa DES với VHDL (tiếp) VIII. Mã hóa DES với VHDL (tiếp) VIII. Mã hóa DES với VHDL (tiếp) 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 VIII. Mã hóa AES với VHDL AES = Advanced Encryption Standard Là 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. VIII. Mã hóa AES với VHDL (tiếp) VIII. Mã hóa AES với VHDL (tiếp) VIII. Mã hóa AES với VHDL (tiếp) VIII. Mã hóa AES với VHDL (tiếp) VIII. Mã hóa AES với VHDL (tiếp) So sánh với Embedded C Vi 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. So sánh với Verilog Giố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ỹ) Tài liệu tham khảo VHDL 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.
Các file đính kèm theo tài liệu này:
- Slide VHDL.ppt