Bài giảng Thiết kế nhờ máy tính

ppt 100 trang phuongnguyen 7340
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Thiết kế nhờ máy tính", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_thiet_ke_nho_may_tinh.ppt

Nội dung text: Bài giảng Thiết kế nhờ máy tính

  1. Thiết kế nhờ máy tính Nguyễn Thành Kiên Bộ môn Kỹ thuật Máy tính Khoa Công nghệ thông tin, ĐH BKHN
  2. Tài liệu tham khảo ◼ Text Book: ◼ Circuit Design with VHDL, Volnei A.Pedroni, MIT press. ◼ VHDL Programming by Examples, Douglas L.Perry, McGraw Hill. ◼ Reference Books: ◼ 1076 IEEE Standard Vhdl Language Reference Manual 2002, IEEE Computer Society. ◼ Microprocessor Design Principles and Practices with VHDL, Enoch O. Hwang. ◼ HDL Chip Design- A Practical Guide for Designing, Synthesizing and Simulating ASICs and FPGAs using VHDL or Verilog, Douglas J.Smith. Copyright © by N.T.K - 8/2008
  3. Phần mềm học tập ◼ Active-HDL 7.1.sp2 ◼ Quartus (for Altera FPGAs) ◼ ISE (for Xilinx FPGAs) ◼ www.opencores.org Copyright © by N.T.K - 8/2008
  4. Giảng viên ◼ Nguyễn Thành Kiên ◼ Giảng viên Bộ môn Kỹ thuật Máy tính Khoa CNTT, ĐHBKHN. ◼ Mobile: +84983588135 ◼ Email: kiennt-fit@mail.hut.edu.vn Copyright © by N.T.K - 8/2008
  5. Yêu cầu môn học ◼ Tham gia >75% số giờ học. ◼ Nghỉ ≥ 5 buổi => Học lại. ◼ Nghỉ ≥ 3 buổi => Không thi lần 1. ◼ Cách tính điểm: ◼ Bài kiểm tra giữa kỳ: 20% ◼ Bài tập lớn: 20% ◼ Bài kiểm tra cuối kỳ: 60% Copyright © by N.T.K - 8/2008
  6. Nội dung môn học ◼ I. Thiết kế mạch với ngôn ngữ VHDL. ◼ 1. Giới thiệu VHDL. ◼ 2. Cấu trúc code. ◼ 3. Các kiểu dữ liệu. ◼ 4. Các phép toán và thuộc tính. ◼ 5. Code song song/Code tuần tự. ◼ 6. Tín hiệu và biến. ◼ 7. Máy hữu hạn trạng thái. ◼ 8. Phương pháp thiết kế đa cấp (Packages,Components,Subprogram) ◼ 9. Attibutes & Configurations. ◼ 10. Tổng hợp mã VHDL. ◼ II. Thiết kế CPU. ◼ 1. Nguyên tắc thiết kế CPU. ◼ 2. Các thành phần của CPU. ◼ 3. Tối ưu hóa, mô phỏng, tổng hợp và triển khai CPU. Copyright © by N.T.K - 8/2008
  7. Nội dung môn học ◼ I. Thiết kế mạch với ngôn ngữ VHDL. ◼ 1. Giới thiệu VHDL. ◼ 2. Cấu trúc code. ◼ 3. Các kiểu dữ liệu. ◼ 4. Các phép toán và thuộc tính. ◼ 5. Code song song/Code tuần tự. ◼ 6. Tín hiệu và biến. ◼ 7. Máy hữu hạn trạng thái. ◼ 8. Phương pháp thiết kế đa cấp (Packages, Components, Subprogram). ◼ 9. Attibutes & Configurations. ◼ II. Thiết kế CPU. Copyright © by N.T.K - 8/2008
  8. 1. Giới thiệu ngôn ngữ VHDL. Phương pháp Phương pháp thiết kế thiết kế bằng HDL truyền thống Copyright © by N.T.K - 8/2008
  9. 1. Giới thiệu ngôn ngữ VHDL. ◼ VHDL là gì? ◼ Một ngôn ngữ mô tả phần cứng: ◼ VHDL - VHSIC Hardware Description Language. ◼ VHSIC - Very High Speed Integrated Circuits. ◼ Là chuẩn do Bộ QP Mỹ phát triển từ thập niên 70. Dựa trên ngôn ngữ lập trình ADA, nhằm tạo ra tài liệu mô tả hoạt động của các mạch điện tử. ◼ 1987 được IEEE chuẩn hóa trong IEEE 1076-1987. ◼ 1993 hoàn thiện lại thành IEEE 1076-1993. ◼ 2002 giải quyết vấn đề protected types=>IEEE 1076-2002 Copyright © by N.T.K - 8/2008
  10. 1. Giới thiệu ngôn ngữ VHDL. ◼ VHDL là chuẩn độc lập mô tả hệ thống: ◼ Các nhà phát triển hệ thống dựa trên VHDL để mô tả, thiết kế hệ thống. ◼ Các phần mềm mô phỏng có thể thực hiện mô phỏng hoạt động của hệ thống mô tả. ◼ Các phần mềm tổng hợp có thể thực hiện tổng hợp sinh ra mạch thực để thực hiện hệ thống. ◼ Mạch sau khi tổng hợp có thể được nạp xuống chip để thực hiện chức năng mô tả. ◼ Chức năng: mô tả hoạt động của các hệ thống hoặc mạch điện tử nhằm thực hiện các hệ thống hoặc mạch này trên linh kiện thực. Copyright © by N.T.K - 8/2008
  11. 1. Giới thiệu ngôn ngữ VHDL. ◼ Ưu điểm của VHDL: ◼ Cho phép hoạt động của hệ thống được mô tả (modeled) và kiểm thử (simulated) trước khi các công cụ tổng hợp “dịch” thiết kế sang phần cứng thực tế (gates and wires). ◼ Cho phép mô tả hệ thống song song. ◼ Khi các mô hình VHDL được “dịch” sang “gates and wires” thì nó có thể được nạp lên phần cứng CPLD và FPGA để thực thi. Copyright © by N.T.K - 8/2008
  12. 1. Giới thiệu ngôn ngữ VHDL. ◼ Hai ứng dụng chính của VHDL là: ◼ PLD (Programmable Logic Device): ◼ CPLD (Complex PLD) ◼ FPGA (Field Programmable Gate Array). ◼ ASIC (Application-Specific IC) Copyright © by N.T.K - 8/2008
  13. Quy trình thiết kế mạch dựa trên VHDL Copyright © by N.T.K - 8/2008
  14. Các công cụ thiết kế VHDL ◼ Bộ công cụ của nhà sản xuất chip: ◼ Quartus/Maxplus => tổng hợp VHDL code lên chip CPLD/FPGA của Altera. ◼ ISE => tổng hợp VHDL code lên chip CPLD/FPGA của Xilinx. ◼ Một số công cụ của các hãng thứ ba: ◼ ActiveHDL ◼ Leonardo Spectrum (Mentor Graphics). ◼ Synplify (Synplicity). ◼ ModelSim (Mentor Graphics). Copyright © by N.T.K - 8/2008
  15. Một ví dụ VHDL đơn giản Copyright © by N.T.K - 8/2008
  16. Một ví dụ VHDL đơn giản Copyright © by N.T.K - 8/2008
  17. Nội dung môn học ◼ I. Thiết kế mạch với ngôn ngữ VHDL. ◼ 1. Giới thiệu VHDL. ◼ 2. Cấu trúc code. ◼ 3. Các kiểu dữ liệu. ◼ 4. Các phép toán và thuộc tính. ◼ 5. Code song song/Code tuần tự. ◼ 6. Tín hiệu và biến. ◼ 7. Máy hữu hạn trạng thái. ◼ 8. Phương pháp thiết kế đa cấp (Packages, Components, Subprogram). ◼ 9. Attibutes & Configurations. ◼ II. Thiết kế CPU. Copyright © by N.T.K - 8/2008
  18. Code structure library IEEE; use IEEE.std_logic_1164.all; ENTITY full_adder IS PORT (a,b,cin: in bit; s,cout:out bit); END full_adder; Architecture dataflow of full_adder is begin s <= a xor b xor cin; cout <= (a and b) or (a and cin) or (b and cin); end dataflow; Copyright © by N.T.K - 8/2008
  19. Cấu trúc code ◼ Thư viện LIBRARY ◼ ENTITY ◼ ARCHITECTURE Copyright © by N.T.K - 8/2008
  20. Thư viện LIBRARY ◼ A LIBRARY là một tập các đoạn mã thường được sử dụng. Đặt các đoạn mã thường sử dụng vào thư viện cho phép chúng có thể được tái sử dụng hoặc chia sẻ giữa các thiết kế khác nhau. Copyright © by N.T.K - 8/2008
  21. Thư viện LIBRARY ◼ Khai báo thư viện: Copyright © by N.T.K - 8/2008
  22. Thư viện LIBRARY ◼ Các thư viện thường sử dụng: ◼ ieee.std_logic_1164 (from the ieee library), ◼ standard (from the std library), and ◼ work (work library). LIBRARY ieee; A semi-colon (;) indicates USE ieee.std_logic_1164.all; the end of a statement or LIBRARY std; declaration, while a double USE std.standard.all; dash ( ) indicates acomment. LIBRARY work; USE work.all; Copyright © by N.T.K - 8/2008
  23. Thư viện LIBRARY ◼ std_logic_1164 ◼ Gói của thư viện IEEE hỗ trợ multi-level logic. ◼ std ◼ Gói thư viện tài nguyên (kiểu dữ liệu, text IO ) cho môi trường thiết kế VHDL. ◼ work ◼ Gói thư viện chứa các thiết kế của người dùng mới tạo ra. Copyright © by N.T.K - 8/2008
  24. Thư viện LIBRARY ◼ Thư viện IEEE: ◼ std_logic_1164 ◼ std_logic (8 mức logic),std_ulogic (9 mức logic) ◼ std_logic_arith ◼ Thực hiện các phép toán số học và so sánh. ◼ std_logic_signed ◼ Thực hiện các phép toán với kiểu DL std_logic_vector, dữ liệu coi là có dấu ◼ std_logic_unsigned ◼ Thực hiện các phép toán với kiểu DL std_logic_vector, dữ liệu coi là không dấu. Copyright © by N.T.K - 8/2008
  25. Cấu trúc code ◼ Thư viện LIBRARY ◼ ENTITY ◼ ARCHITECTURE Copyright © by N.T.K - 8/2008
  26. ENTITY ◼ ENTITY là danh sách đặc tả của các cổng vào ra (input/output pins) của mạch. BLACK_BOX rst q[7:0] d[7:0] co clk ◼ PORT là giao diện của mạch với các mạch bên ngoài khác, PORT thường là các chân pin. Copyright © by N.T.K - 8/2008
  27. ENTITY ◼ signal_mode: chiều truyền dữ liệu ◼ IN, OUT, INOUT (2chiều), BUFFER (khi tín hiệu ra được dùng cho các tín hiệu khác bên trong). ◼ signal_type: ◼ bit, std_logic, integer ◼ Port_name: ◼ Đặt tên theo quy tắc đặt tên chuẩn, tránh các từ khóa. Copyright © by N.T.K - 8/2008
  28. ENTITY Chế độ signal_mode cho biết chiều dữ liệu được truyền nhận: Entity ◼ IN Dữ liệu chỉ đi vào ENTITY ◼ OUT Dữ liệu chỉ đi ra khỏi ENTITY (và không được sử dụng bên trong) ◼ INOUT Dữ liệu là hai chiều (đi vào và ra) ◼ BUFFER Dữ liệu đi ra khỏi ENTITY và cũng được đưa quay trở lại vào trong Copyright © by N.T.K - 8/2008
  29. Ví dụ về ENTITY ENTITY mux IS PORT (a, b: IN std_logic_vector(7 downto 0); sel: IN STD_LOGIC_VECTOR(0 to 1); c: OUT STD_LOGIC_VECTOR(7 downto 0)); END mux; Copyright © by N.T.K - 8/2008
  30. Cấu trúc code ◼ Thư viện LIBRARY ◼ ENTITY ◼ ARCHITECTURE Copyright © by N.T.K - 8/2008
  31. ARCHITECTURE ◼ Phần ARCHITECTURE mô tả mạch hoạt động như thế nào. Một ARCHITECTURE luôn gắn với một ENTITY và mô tả hoạt động của ENTITY đó. Một ARCHITECTURE chỉ gắn với một ENTITY nhưng Một ENTIY có thể có nhiềuCopyright ©ARCHITECTURE by N.T.K - 8/2008 khác nhau
  32. ARCHITECTURE ◼ ARCHITECTURE có hai phần: ◼ Phần khai báo (optional) ◼ Khai báo tín hiệu và biến. ◼ Phần mã code: ◼ Mô tả cách kết nối, hoạt động của mạch. Copyright © by N.T.K - 8/2008
  33. ARCHITECTURE ◼ Ví dụ về mạch NAND: Mô tả kết nối mạch: Mạch thực hiện thao tác NAND trên 2 đầu vào (a,b) và gán (<=) kết quả cho đầu ra x. Copyright © by N.T.K - 8/2008
  34. VD1: Full_adder ◼ Bộ cộng hai số 1bit đầy đủ library IEEE; use IEEE.std_logic_1164.all; ENTITY full_adder IS PORT (a,b,cin: in std_logic; s,cout:out std_logic); END full_adder; A(7:0) Architecture dataflow of full_adder is C(7:0) begin B(7:0) Adder s <= a xor b xor cin; cout <= (a and b) or (a and cin) or (b and cin); end dataflow; Copyright © by N.T.K - 8/2008
  35. library IEEE; use IEEE.std_logic_1164.all; ENTITY adder IS PORT (A,B: IN std_logic_vector(7 downto 0); C: OUT std_logic_vector(7 downto 0)); END adder; A(7:0) Architecture dataflow of adder is C(7:0) begin B(7:0) Adder C <= A+B; end dataflow; Copyright © by N.T.K - 8/2008
  36. VD2: D Flip-flop, asyn reset LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY dff IS PORT ( d, clk, rst: IN STD_LOGIC; q: OUT STD_LOGIC); END dff; ARCHITECTURE behavior OF dff IS BEGIN PROCESS (rst, clk) D flip-flop tích cực theo sườn dương của xung BEGIN đồng hồ clk với tín hiệu reset không đồng bộ. IF (rst='1') THEN Hoạt động: q q q<=d. q <= d; END IF; END PROCESS; DEMO END behavior; Copyright © by N.T.K - 8/2008
  37. VD2: RS Flip-flop, asyn reset ◼ Bài tập tại lớp: ◼ Viết VHDL code mô tả flip-flop RS đồng bộ theo sườn âm với tín hiệu reset không đồng bộ. Copyright © by N.T.K - 8/2008
  38. VD2: RS Flip-flop, asyn reset LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY RSff IS PORT ( r,s,clk,rst: IN STD_LOGIC; q: OUT STD_LOGIC); END RSff; ARCHITECTURE behavior OF RSff IS BEGIN PROCESS (rst, clk) BEGIN IF (rst='1') THEN q <= '0'; ELSIF (clk'EVENT AND clk=‘0') THEN if (r='0' and s='1')then q<= '1'; elsif (r='1' and s='0') then q<='0'; elsif (r='1' and s='1') then q<= '-'; end if; END IF; END PROCESS; END behavior; Copyright © by N.T.K - 8/2008
  39. VD3: asyn-reset DFF & NAND ENTITY example IS PORT ( a, b, clk: IN BIT; q: OUT BIT); END example; ARCHITECTURE example OF example IS SIGNAL temp : BIT; BEGIN temp <= a NAND b; Sự kết hợp giữa mạch PROCESS (clk) BEGIN tổ hợp và mạch dãy IF (clk'EVENT AND clk='1') THEN q<=temp; END IF; END PROCESS; END example; DEMO Copyright © by N.T.K - 8/2008
  40. VD4: Bộ dồn kênh Multilpexor a,b: hai kênh vào 8bit sel: các bit chọn kênh c: kênh ra 8bit Copyright © by N.T.K - 8/2008
  41. VD4: Bộ dồn kênh Multilpexor LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY mux IS PORT ( a,b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); sel : IN STD_LOGIC_VECTOR(1 DOWNTO 0); c : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END ENTITY mux; ARCHITECTURE example OF mux IS BEGIN PROCESS (a, b, sel) BEGIN IF (sel = "00") THEN c <= "00000000"; ELSIF (sel=“01”) THEN c <= a; ELSIF (sel = "10") THEN c <= b; ELSE c <= “ZZZZZZZZ”; END IF; END PROCESS; END example; Copyright © by N.T.K - 8/2008
  42. Demostration ◼ Sử dụng phần mềm ActiveHDL thiết kế và mô phỏng bộ cộng đầy đủ: ◼ Tạo workspace làm việc. ◼ Tạo một mạch thiết kế design. ◼ Viết VHDL source code. ◼ Thêm file vào design. ◼ Dịch workspace. ◼ Đưa tín hiệu vào dạng waveform mô phỏng. Copyright © by N.T.K - 8/2008
  43. Nội dung môn học ◼ I. Thiết kế mạch với ngôn ngữ VHDL. ◼ 1. Giới thiệu VHDL. ◼ 2. Cấu trúc code. ◼ 3. Các kiểu dữ liệu. ◼ 4. Các phép toán và thuộc tính. ◼ 5. Code song song/Code tuần tự. ◼ 6. Tín hiệu và biến. ◼ 7. Máy hữu hạn trạng thái. ◼ 8. Phương pháp thiết kế đa cấp (Packages, Components, Subprogram). ◼ 9. Attibutes & Configurations. ◼ II. Thiết kế CPU. Copyright © by N.T.K - 8/2008
  44. 3. Các kiểu dữ liệu. ◼ 3.1. Các kiểu đối tượng. ◼ 3.1.1. Signal ◼ 3.1.2. Variable ◼ 3.1.3. Constant ◼ 3.2. Các kiểu dữ liệu. Copyright © by N.T.K - 8/2008
  45. 3.1. Các kiểu đối tượng ◼ Một đối tượng VHDL bao gồm 1 trong các loại sau: ◼ Signal: biểu diễn cho dây kết nối giữa các cổng của các thành phần trong hệ thống. ◼ Variable: được sử dụng lưu trữ dữ liệu nội bộ tạm thời, chỉ visible bên trong process. ◼ Constant: hẳng số Copyright © by N.T.K - 8/2008
  46. 3.1.1. Signal ◼ Các đối tượng signal được sử dụng để kết nối - truyền thông giữa các entity nhằm tạo nên hệ thống. Signal Copyright © by N.T.K - 8/2008
  47. 3.1.1. Signal ◼ Phân loại: ◼ External Signal: là các tín hiệu kết nối hệ thống với bên ngoài, tạo nên giao diện ghép nối của hệ thống với các hệ thống khác. ◼ Internal Signal: là các tín hiệu chỉ nhúng bên trong hệ thống, không nhìn thấy từ bên ngoài, tạo ra sự truyền thông giữa các thành phần bên trong hệ thống. Copyright © by N.T.K - 8/2008
  48. 3.1.1. Signal ◼ External Signal & Internal Signal: External Internal Signal Signal Khai báo Khai báo trong Entity trong Architecture ENTITY myboard IS ARCHITECTURE structure OF myboard IS PORT ( [SIGNAL] a,b,c: inout bit; SIGNAL x,y: bit; data,extbus,result: inout bit_vector(0 to 7)); SIGNAL intbus: bit_vector(0 to 7); END myboard; Copyright ©BEGIN by N.T.K - 8/2008
  49. 3.1.1. Signal ◼ Vị trí khai báo signal: ◼ Phần khai báo của ENTITY ◼ Phần khai báo của ARCHITECTURE ◼ Phần khai báo của PACKAGE ◼ Khai báo signal: SIGNAL name: mode type [:=initial_value] Không cần trong ENTITY Chỉ cần trong ENTITY Copyright © by N.T.K - 8/2008
  50. 3.1.1. Signal ◼ Ví dụ khai báo signal trong package: LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; PACKAGE sigdecl IS TYPE bus_type IS ARRAY(0 to 7) OF std_logic; SIGNAL vcc : std_logic := ‘1’; SIGNAL ground : std_logic := ‘0’; FUNCTION magic_function( a : IN bus_type) RETURN bus_type; END sigdecl; => USE WORK.sigdecl.ALL; Copyright © by N.T.K - 8/2008
  51. 3.1.1. Signal ◼ Phạm vi tác động của khai báo signal: ◼ Một signal được khai báo trong PACKAGE thì sử dụng được (visible) trong tất cả các thiết kế sử dụng gói package này. ◼ Một signal được khai báo trong ENTITY thì sử dụng được (visible) trong tất cả các ARCHITECTURE gắn với ENTITY này. ◼ Một signal được khai báo trong phần khai báo của ARCHITECTURE thì chỉ sử dụng được trong architecture này. ◼ Một signal được khai báo trong 1 khối (block) bên trong ARCHITECTURE thì chỉ sử dụng được bên trong khối đó. Copyright © by N.T.K - 8/2008
  52. 3.1.1. Signal ◼ Ví dụ về phạm vi tác động của signal C A B E D F Copyright © by N.T.K - 8/2008
  53. 3.1.1. Signal ◼ Một đặc điểm quan trọng của signal khi được sử dụng bên trong một phần của mã tuần tự (vd PROCESS, FUNCTION, PROCEDURE) là: ◼ Giá trị không được cập nhật ngay lập tức sau câu lệnh, mà phải đến kết thúc đoạn mã tuần tự đó. Về nhà tìm hiểu, hôm sau hỏi Copyright © by N.T.K - 8/2008
  54. 3.1.2. Biến (variable) ◼ Biến variable chỉ biểu diễn các dữ liệu nội bộ, chỉ có thể sử dụng bên trong PROCESS, FUNCTION, hoặc PROCEDURE. ◼ Giá trị của biến variable không thể truyền ra ngoài trực tiếp. ◼ Giá trị của biến được cập nhật trực tiếp sau từng dòng mã lệnh. Copyright © by N.T.K - 8/2008
  55. 3.1.2. Biến (variable) ◼ Khai báo biến: ◼ VARIABLE name: type [range] [:= init_value]; VARIABLE control: BIT := '0'; VARIABLE count: INTEGER RANGE 0 TO 100; VARIABLE y: STD_LOGIC_VECTOR (7 DOWNTO 0) := "10001000"; Copyright © by N.T.K - 8/2008
  56. LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY count_ones IS PORT ( din: IN STD_LOGIC_VECTOR (7 DOWNTO 0); ones: OUT INTEGER RANGE 0 TO 8); Ví dụ END count_ones; ARCHITECTURE ok OF count_ones IS về sử BEGIN PROCESS (din) dụng VARIABLE temp: INTEGER RANGE 0 TO 8; BEGIN temp := 0; variable FOR i IN 0 TO 7 LOOP IF (din(i)='1') THEN trong temp := temp + 1; END IF; VHDL END LOOP; ones <= temp; END PROCESS; END ok;Copyright © by N.T.K - 8/2008
  57. LIBRARY ieee; LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_1164.all; ENTITY mux IS ENTITY mux IS PORT ( a, b, c, d, s0, s1: IN STD_LOGIC; PORT ( a, b, c, d, s0, s1: IN STD_LOGIC; y: OUT STD_LOGIC); 7y: OUT STD_LOGIC); END mux; END mux; ARCHITECTURE not_ok OF mux IS ARCHITECTURE ok OF mux IS SIGNAL sel : INTEGER RANGE 0 TO 3; BEGIN BEGIN PROCESS (a, b, c, d, s0, s1) PROCESS (a, b, c, d, s0, s1) VARIABLE sel : INTEGER RANGE 0 TO 3; BEGIN BEGIN sel y y y y y y y y<=d; END CASE; END CASE; END PROCESS; END PROCESS; END not_ok; Copyright © ENDby N.T.K ok; - 8/2008
  58. So sánh giữa Signal & Variable Copyright © by N.T.K - 8/2008
  59. 3.1.3. Hằng số (Constant) ◼ Hằng số Constant là các tên được gán cho các giá trị cụ thể của 1 kiểu DL. Sử dụng hằng số cho phép người thiết kế xây dựng mô hình dễ hiểu (better-documented) và dễ thay đổi. ◼ Khai báo hằng số: ◼ CONSTANT name : type := value; ◼ Hằng số có thể khai báo trong package, entity hoặc architecture. Phạm vi tác động giống như tín hiệu signal. Copyright © by N.T.K - 8/2008
  60. 3.1.3. Hằng số (Constant) ◼ Ví dụ về khai báo hằng số: CONSTANT set_bit : BIT := '1'; CONSTANT pi: REAL := 3.1414; CONSTANT datamemory : memory := ( ('0','0','0','0'), ('0','0','0','1'), ('0','0','1','1')); Copyright © by N.T.K - 8/2008
  61. 3.2. Các kiểu dữ liệu VHDL Copyright © by N.T.K - 8/2008
  62. 3.2.1. Kiểu dữ liệu vô hướng ◼ Kiểu dữ liệu vô hướng (Scalar Types): ◼ Integer types ◼ Real types ◼ Enumerated types ◼ Physical types Copyright © by N.T.K - 8/2008
  63. Kiểu số nguyên Integer ◼ Kiểu dl số nguyên 32 bit, synthesizable. ◼ Hỗ trợ các phép tóan: +, -, *, / ◼ Dải giá trị biểu diễn được: ◼ -2,147,483,647 ARCHITECTURE test OF test IS BEGIN ◼ => +2,147,483,647 PROCESS(X) VARIABLE a : INTEGER; VARIABLE b : int_type; BEGIN a := 1; Ok 1 a := -1; Ok 2 a := 1.0; error 3 END PROCESS; END test; Copyright © by N.T.K - 8/2008
  64. Kiểu số thực Real ◼ Kiểu dl số thực, un-synthesizable. ◼ Dải giá trị biểu diễn được: ◼ -1.0E+38 ARCHITECTURE test OF test IS ◼ => +1.0E+38. SIGNAL a : REAL; BEGIN a <= 1.0; Ok 1 a <= 1; error 2 a <= -1.0E10; Ok 3 a <= 1.5E-20; Ok 4 a <= 5.3 ns; error 5 END test; Copyright © by N.T.K - 8/2008
  65. Kiểu dữ liệu liệt kê ENUMERATED ◼ Kiểu dữ liệu liệt kê rất hữu ích cho việc mô hình hóa trừu tượng, biểu diễn chính xác các giá trị cần cho tính toán. Các kiểu dữ liệu TYPE bit IS ('0', '1'); liệt kê đã TYPE bit_vector IS ARRAY (NATURAL RANGE <>) OF BIT; định nghĩa trước TYPE fourval IS ( ‘X’, ‘0’, ‘1’, ‘Z’ ); TYPE state IS (idle, forward, backward, stop); TYPE color IS ( red, yellow, blue, green, orange ); Copyright © by N.T.K - 8/2008
  66. Kiểu dữ liệu liệt kê ENUMERATED ◼ Việc mã hóa các dữ liệu liệt kê được thực hiện tuần tự và tự động. Ví dụ: ◼ TYPE color IS (red, green, blue, white); ◼ Có 4 dữ liệu liệt kê, dùng 2 bit biểu diễn, gán “00”=>red, “01”=>green, “10”=>blue, “11”=>white. Copyright © by N.T.K - 8/2008
  67. ENTITY traffic_light IS PORT(sensor : IN std_logic; clock : IN std_logic; red_light : OUT std_logic; IF (sensor = ‘1’) THEN green_light : OUT std_logic; next_state TYPE t_state is (red, green, yellow); red_light PROCESS next_state END simple; red_light <= ‘1’; green_light <= ‘0’; yellow_light <= ‘0’; Copyright © by N.T.K - 8/2008
  68. Kiểu dữ liệu PHYSICAL ◼ Kiểu dữ liệu Physical được dùng để biểu diễn các đại lượng vật lý như khoảng cách, thời gian, dòng điện ◼ Kiểu dữ liệu Physical không chỉ chỉ ra đối tượng mà còn chỉ ra cả các đơn vị mà đối tượng đó có thể có. TYPE current IS RANGE 0 to 1000000000 UNITS Primary unit na; nano amps ua = 1000 na; micro amps Secondary units ma = 1000 ua; milli amps a = 1000 ma; amps ENDCopyright UNITS; © by N.T.K - 8/2008
  69. Kiểu dữ liệu PHYSICAL ◼ VHDL chuẩn đã định nghĩa sẵn một kiểu dữ liệu physical đó là time: TYPE TIME IS RANGE -2147483647 to 2147483647 UNITS fs; femtosecond ps = 1000 fs; picosecond ns = 1000 ps; nanosecond us = 1000 ns; microsecond ms = 1000 us; millisecond sec = 1000 ms; second min = 60 sec; minute hr = 60 min; hour END UNITS; Copyright © by N.T.K - 8/2008
  70. PACKAGE example IS TYPE current IS RANGE 0 TO 1000000000 UNITS na; nano amps ua = 1000 na; micro amps ma = 1000 ua; milli amps a = 1000 ma; amps END UNITS; TYPE load_factor IS (small, med, big ); END example; USE WORK.example.ALL; ENTITY delay_calc IS PORT ( out_current : OUT current; load : IN load_factor; delay : OUT time); END delay_calc; ARCHITECTURE delay_calc OF delay_calc IS BEGIN delay <= 10 ns WHEN (load = small) ELSE delay <= 20 ns WHEN (load = med) ELSE delay <= 30 ns WHEN (load = big) ELSE delay <= 10 ns; out_current <= 100 ua WHEN (load = small)ELSE out_current <= 1 ma WHEN (load = med) ELSE out_current <= 10 ma WHEN (load = big) ELSE out_current <= 100 ua; END delay_calc; Copyright © by N.T.K - 8/2008
  71. 3.2.2. Kiểu dữ liệu tổng hợp ◼ Kiểu dữ liệu tổng hợp(CompositeTypes) ◼ Kiểu mảng (Array Types) ◼ Kiểu bản ghi (Record Types) Copyright © by N.T.K - 8/2008
  72. Kiểu mảng (Array Types) ◼ Kiểu dữ liệu mảng nhóm các phần tử cùng kiểu với nhau như là 1 đối tượng đơn. Các phần tử trong mảng được truy nhập bằng chỉ số. ◼ Ba loại mảng hay dùng: 1D 1Dx1D 2D Copyright © by N.T.K - 8/2008
  73. Kiểu mảng (Array Types) ◼ Thực tế, các kiểu dữ liệu định nghĩa sẵn trong VHDL chỉ bao gồm kiểu vô hướng và vector (mảng một chiều của các bit). ◼ Các kiểu DL định nghĩa sẵn có thể tổng hợp bao gồm: ◼ Scalars: BIT, STD_LOGIC, STD_ULOGIC, and BOOLEAN. ◼ Vectors: BIT_VECTOR, STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR, INTEGER, SIGNED, and UNSIGNED. Copyright © by N.T.K - 8/2008
  74. Kiểu mảng (Array Types) ◼ Khai báo mảng: ◼ TYPE name IS ARRAY (spec) OF data_type; ◼ Khai báo sử dụng kiểu mảng: ◼ SIGNAL/VARIABLE/CONSTANT signal_name: type_name [:= initial_value]; TYPE data_bus IS ARRAY(0 TO 31) OF BIT; VARIABLE X: data_bus; VARIABLE Y: BIT; Y := X(0); line 1 Y := X(15); line 2 Copyright © by N.T.K - 8/2008
  75. Kiểu mảng (Array Types) ◼ Ví dụ về mảng 1Dx1D TYPE row IS ARRAY (7 DOWNTO 0) OF STD_LOGIC; 1D array TYPE matrix IS ARRAY (0 TO 3) OF row; 1Dx1D array SIGNAL x: matrix; 1Dx1D signal TYPE matrix IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0); ◼ Ví dụ về mảng 2D TYPE matrix2D IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC; 2D array Copyright © by N.T.K - 8/2008
  76. Kiểu mảng (Array Types) ◼ Khởi tạo dữ liệu mảng: ◼ :="0001"; for 1D array ◼ :=('0','0','0','1') for 1D array ◼ :=(('0','1','1','1'), ('1','1','1','0')); for 1Dx1D or 2D array Copyright © by N.T.K - 8/2008
  77. Ví dụ về mảng 1D PACKAGE array_example IS TYPE data_bus IS ARRAY(0 TO 31) OF BIT; TYPE small_bus IS ARRAY(0 TO 7) OF BIT; END array_example; USE WORK.array_example.ALL; ENTITY extract IS PORT ( data : IN data_bus; start : IN INTEGER; data_out : OUT small_bus); END extract; ARCHITECTURE test OF extract IS BEGIN PROCESS(data, start) BEGIN FOR i IN 0 TO 7 LOOP data_out(i) <= data(i + start); END LOOP; END PROCESS; END test; Copyright © by N.T.K - 8/2008
  78. Ví dụ về mảng 1Dx1D ARCHITECTURE basic OF rom IS CONSTANT z_state : data_out := (‘Z’, ‘Z’, ‘Z’, ‘Z’); LIBRARY IEEE; CONSTANT x_state : data_out := (‘X’, ‘X’, ‘X’, ‘X’); USE IEEE.std_logic_1164.ALL; CONSTANT rom_data : mem_data := PACKAGE memory IS ( ( ‘0’, ‘0’, ‘0’, ‘0’), CONSTANT width : INTEGER := 3; ( ( ‘0’, ‘0’, ‘0’, ‘1’), CONSTANT memsize : INTEGER := 7; ( ( ‘0’, ‘0’, ‘1’, ‘0’), TYPE data_out IS ARRAY(0 TO width) ( ( ‘0’, ‘0’, ‘1’, ‘1’), OF std_logic; ( ( ‘0’, ‘1’, ‘0’, ‘0’), TYPE mem_data IS ARRAY(0 TO memsize) ( ( ‘0’, ‘1’, ‘0’, ‘1’), OF data_out; ( ( ‘0’, ‘1’, ‘1’, ‘0’), END memory; ( ( ‘0’, ‘1’, ‘1’, ‘1’) ); LIBRARY IEEE; BEGIN USE IEEE.std_logic_1164.ALL; ASSERT addr <= memsize USE WORK.memory.ALL; REPORT “addr out of range” ENTITY rom IS SEVERITY ERROR; PORT( addr : IN INTEGER; data <= rom_data(addr) AFTER 10 ns WHEN cs = ‘1’ ELSE PORT( data : OUT data_out; data <= z_state AFTER 20 ns WHEN cs = ‘0’ ELSE PORT( cs : IN std_logic); data <= x_state AFTER 10 ns; END rom; END basic; Copyright © by N.T.K - 8/2008
  79. Kiểu mảng không ràng buộc ◼ Kiểu mảng không ràng buộc về kích thước (Unconstrained arrays): ◼ Kích thước mảng không được chỉ ra khi khai báo. ◼ Kích thước mảng sẽ được chỉ ra khi khai báo signal/variable/constant sử dụng kiểu mảng này. TYPE BIT_VECTOR IS ARRAY(NATURAL RANGE <>) OF BIT; Copyright © by N.T.K - 8/2008
  80. Kiểu dữ liệu con subtype ◼ Khai báo kiểu dữ liệu con được sử dụng để định nghĩa các tập con của một kiểu dữ liệu. Tập con có thể chứa tòan bộ khoảng giá trị của kiểu cơ sở những cũng có thể chỉ chứa một phần. TYPE INTEGER IS -2,147,483,647 TO +2,147,483,647; SUBTYPE NATURAL IS INTEGER RANGE 0 TO +2,147,483,647; Copyright © by N.T.K - 8/2008
  81. Ví dụ về khai báo subtype PACKAGE mypack IS SUBTYPE eightbit IS BIT_VECTOR(0 TO 7); SUBTYPE fourbit IS BIT_VECTOR(0 TO 3); FUNCTION shift_right(val : BIT_VECTOR) RETURN BIT_VECTOR; END mypack; PACKAGE BODY mypack IS FUNCTION shift_right(val : BIT_VECTOR) RETURN BIT_VECTOR IS VARIABLE result : BIT_VECTOR(0 TO (val’LENGTH -1)); BEGIN result := val; IF (val’LENGTH > 1) THEN FOR i IN 0 TO (val’LENGTH -2) LOOP result(i) := result(i 1); END LOOP; result(val’LENGTH -1) := 0; ELSE result(0) := 0; END IF; RETURN result; END shift_right; END mypack; Copyright © by N.T.K - 8/2008
  82. Kiểu bản ghi record ◼ Kiểu dữ liệu bản ghi nhóm các đối tượng có kiểu khác nhau như một đối tượng duy nhất. ◼ Mỗi thành phần của bản ghi có thể được truy cập bằng tên trường của nó. ◼ Các thành phần của bản ghi có thể cùng kiểu hoặc khác kiểu dữ liệu. Kiểu dữ liệu có thể bao gồm cả mảng và bản ghi. Copyright © by N.T.K - 8/2008
  83. Kiểu bản ghi record ◼ Ví dụ về kiểu bản ghi: TYPE optype IS ( add, sub, mpy, div, jmp ); TYPE instruction IS RECORD opcode : optype; src : INTEGER; dst : INTEGER; END RECORD; Copyright © by N.T.K - 8/2008
  84. Kiểu bản ghi record PROCESS(X) VARIABLE inst : instruction; VARIABLE source, dest : INTEGER; TYPE optype IS ( add, sub, VARIABLE operator : optype; mpy, div, jmp ); BEGIN TYPE instruction IS source := inst.src; Ok line 1 RECORD dest := inst.src; Ok line 2 source := inst.opcode; error line 3 opcode : optype; operator := inst.opcode; Ok line 4 src : INTEGER; inst.src := dest; Ok line 5 dst : INTEGER; inst.dst := dest; Ok line 6 END RECORD; inst := (add, dest, 2); Ok line 7 inst := (source); error line 8 END PROCESS; Copyright © by N.T.K - 8/2008
  85. Kiểu bản ghi record TYPE word IS ARRAY(0 TO 3) OF std_logic; TYPE t_word_array IS ARRAY(0 TO 15) OF word; PROCESS(X) TYPE addr_type IS VARIABLE packet : data_packet; RECORD BEGIN source : INTEGER; packet.addr.key := 5; Ok key : INTEGER; packet.addr := (10, 20); Ok END RECORD; packet.data(0) := (‘0’, ‘0’, ‘0’, ‘0’); TYPE data_packet IS packet.data(10)(4) := ‘1’; error RECORD packet.data(10)(0) := ‘1’; Ok addr : addr_type; END PROCESS; data : t_word_array; checksum : INTEGER; parity : BOOLEAN; END RECORD; Copyright © by N.T.K - 8/2008
  86. Kiểu dữ liệu File ◼ Các file bao gồm các dãy tuần tự của một kiểu dữ liệu (có thể là INTEGER, record ) ◼ Cuối mỗi file được đánh dấu kết thúc bằng ký tự “End of file”. Copyright © by N.T.K - 8/2008
  87. Kiểu dữ liệu File ◼ Các thao tác thực hiện với file: ◼ READ (file, data)Procedure ◼ WRITE (file, data)Procedure ◼ ENDFILE (file)Function, returns boolean Copyright © by N.T.K - 8/2008
  88. Kiểu dữ liệu File ◼ Khai báo kiểu file: ◼ TYPE int_file IS FILE OF INTEGER; ◼ Khai báo đối tượng file: ◼ FILE myfile : int_file IS IN “/test/data_file” Copyright © by N.T.K - 8/2008
  89. LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; ENTITY rom IS PORT(addr : IN INTEGER; cs : IN std_logic; data : OUT INTEGER); END rom; ARCHITECTURE rom OF rom IS BEGIN PROCESS(addr, cs) VARIABLE rom_init : BOOLEAN := FALSE; line 1 TYPE rom_data_file_t IS FILE OF INTEGER; line 2 Ví FILE rom_data_file : rom_data_file_t IS IN “/dlp/test1.dat”; line 3 TYPE dtype IS ARRAY(0 TO 63) OF INTEGER; VARIABLE rom_data : dtype; line 4 dụ VARIABLE i : INTEGER := 0; line 5 BEGIN IF (rom_init = false) THEN line 6 về WHILE NOT ENDFILE(rom_data_file) line 7 AND (i < 64) LOOP READ(rom_data_file, rom_data(i)); line 8 truy i := i + 1; line 9 END LOOP; rom_init := true; line 10 cập END IF; IF (cs = ‘1’) THEN line 11 file data <= rom_data(addr); line 12 ELSE data <= -1; line 13 END IF; END PROCESS; END rom; Copyright © by N.T.K - 8/2008
  90. Các kiểu DL có thể tổng hợp Copyright © by N.T.K - 8/2008
  91. Copyright © by N.T.K - 8/2008
  92. Đề tài môn học Thiết kế nhờ MT Nhóm: 6 người/nhóm
  93. Đề tài môn học Thiết kế nhờ MT ◼ Đề tài có 2 phần: ◼ Phần 1: Nghiên cứu ví dụ về viết CPU trong tài liệu “VHDL Programming by Example 4th Ed” – Douglas L.Perry. ◼ Phần 2: Thực hiện 1 trong các đề tài sau: Copyright © by N.T.K - 8/2008
  94. Đề tài phần 2 (μC) 1. 8051 2. PIC 16F84 – VHDL & Verilog 3. AVR ATTiny64. 4. AVR AT90S1200. 5. AVR ATMega. 6. miniMIPS. 7. SuperH-2 (Aquarius). 8. MIPS I (YACC-Yet Another CPU) – Verilog. 9. Yellow Star (MIPS R3000) – Verilog. 10. OpenRISC 1000 (32/64bit RISC). Copyright © by N.T.K - 8/2008
  95. Đề tài phần 2 (others) 1. PCI Bridge. 2. Ethernet MAC 10/100 Mbps 3. VGA/LCD Controller. 4. PS2 Interfaces (y/c hardware). 5. UART Controller. 6. FPU (Floating Point Unit). 7. Mã hóa AES. 8. Mã hóa DES. Copyright © by N.T.K - 8/2008
  96. ◼ Chú ý: Nên làm cùng môn đồ án FPGA. Copyright © by N.T.K - 8/2008
  97. Đề tài phần 3 (ko làm) ◼ Nghiên cứu,tìm hiểu ngôn ngữ Verilog. ◼ Nghiên cứu,tìm hiểu ngôn ngữ VHDL-AMS. Copyright © by N.T.K - 8/2008
  98. Yêu cầu: ◼ Báo cáo: ◼ Tìm hiểu và xây dựng lại sơ đồ khối của vđk. Phân tích kỹ từng khối. Thực hiện test kiểm nghiệm hoạt động. ◼ Tìm hiểu hoạt động trong 1 chu kỳ đồng hồ. ◼ Nói rõ công việc từng người. Copyright © by N.T.K - 8/2008
  99. Tài liệu tham khảo ◼ Cách thiết kế 1 vđk bằng VHDL: ◼ MicroProcessor Design. th ◼ VHDL Programming by Examples (4 ). ◼ Websites: ◼ www.opencores.org ◼ www.asics.ws Copyright © by N.T.K - 8/2008
  100. ◼ Lịch bảo vệ: 17/11 ◼ 30% điểm – Không bảo vệ -> ko thi L1 ◼ Nếu làm tốt => +10 điểm vào bài thi ◼ Địa điểm: bộ môn KTMT C1-322. ◼ Thời gian: 8h – 17h ◼ Y/c: Mang slide + Mã nguồn + Tài liệu TK ◼ Khi báo cáo sẽ phải demo chương trình (chạy mô phỏng). ◼ Nếu ai demo phức tạp, tự đem máy tính. Copyright © by N.T.K - 8/2008