vhdl
DESCRIPTION
Đây là phần đầu giáo trình Thiết kế nhờ máy tính của giảng viên Nguyễn Thành Kiên dùng cho sinh viên năm thứ 5, chuyên ngành Kỹ thuật Máy tính, khoa CNTT trường ĐHBKHNTRANSCRIPT
![Page 1: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/1.jpg)
Thiết kế nhờ máy tính
Nguyễn Thành KiênBộ môn Kỹ thuật Máy tính
Khoa Công nghệ thông tin, ĐH BKHN
![Page 2: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/2.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 3: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/3.jpg)
Copyright © by N.T.K - 8/2008
Phần mềm học tập
Active-HDL 7.1.sp2 Quartus (for Altera FPGAs) ISE (for Xilinx FPGAs)
www.opencores.org
![Page 4: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/4.jpg)
Copyright © by N.T.K - 8/2008
Giảng viên
Nguyễn Thành Kiên Giảng viên Bộ môn Kỹ thuật Máy
tínhKhoa CNTT, ĐHBKHN. Mobile: +84983588135 Email: [email protected]
![Page 5: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/5.jpg)
Copyright © by N.T.K - 8/2008
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%
![Page 6: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/6.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 7: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/7.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 8: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/8.jpg)
Copyright © by N.T.K - 8/2008
1. Giới thiệu ngôn ngữ VHDL.
Phương pháp
thiết kế bằng HDL
Phương pháp
thiết kếtruyền
thống
![Page 9: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/9.jpg)
Copyright © by N.T.K - 8/2008
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
![Page 10: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/10.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 11: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/11.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 12: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/12.jpg)
Copyright © by N.T.K - 8/2008
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)
![Page 13: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/13.jpg)
Copyright © by N.T.K - 8/2008
Quy trình thiết kế mạch dựa trên VHDL
![Page 14: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/14.jpg)
Copyright © by N.T.K - 8/2008
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).
![Page 15: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/15.jpg)
Copyright © by N.T.K - 8/2008
Một ví dụ VHDL đơn giản
![Page 16: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/16.jpg)
Copyright © by N.T.K - 8/2008
Một ví dụ VHDL đơn giản
![Page 17: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/17.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 18: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/18.jpg)
Copyright © by N.T.K - 8/2008
Code structure
library IEEE; use IEEE.std_logic_1164.all;
ENTITY full_adder ISPORT (a,b,cin: in bit;s,cout:out bit);
END full_adder;
Architecture dataflow of full_adder isbegin
s <= a xor b xor cin;cout <= (a and b) or (a and
cin) or (b and cin);
end dataflow;
![Page 19: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/19.jpg)
Copyright © by N.T.K - 8/2008
Cấu trúc code
Thư viện LIBRARY ENTITY ARCHITECTURE
![Page 20: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/20.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 21: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/21.jpg)
Copyright © by N.T.K - 8/2008
Thư viện LIBRARY
Khai báo thư viện:
![Page 22: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/22.jpg)
Copyright © by N.T.K - 8/2008
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 doubleUSE std.standard.all; -- dash (--) indicates acomment.
LIBRARY work;USE work.all;
![Page 23: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/23.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 24: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/24.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 25: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/25.jpg)
Copyright © by N.T.K - 8/2008
Cấu trúc code
Thư viện LIBRARY ENTITY ARCHITECTURE
![Page 26: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/26.jpg)
Copyright © by N.T.K - 8/2008
ENTITY ENTITY là danh sách đặc tả của các cổng
vào ra (input/output pins) của mạch.
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.
BLACK_BOX
rst
d[7:0]
clk
q[7:0]
co
![Page 27: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/27.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 28: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/28.jpg)
Copyright © by N.T.K - 8/2008
ENTITYChế độ signal_mode cho biết chiều dữ liệu được truyền
nhận:
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
Entity
![Page 29: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/29.jpg)
Copyright © by N.T.K - 8/2008
Ví dụ về ENTITY
ENTITY mux ISPORT (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;
![Page 30: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/30.jpg)
Copyright © by N.T.K - 8/2008
Cấu trúc code
Thư viện LIBRARY ENTITY ARCHITECTURE
![Page 31: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/31.jpg)
Copyright © by N.T.K - 8/2008
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ều ARCHITECTURE khác nhau
![Page 32: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/32.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 33: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/33.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 34: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/34.jpg)
Copyright © by N.T.K - 8/2008
VD1: Full_adder
Bộ cộng hai số 1bit đầy đủlibrary IEEE; use IEEE.std_logic_1164.all;
ENTITY full_adder ISPORT (a,b,cin: in std_logic;s,cout:out std_logic);
END full_adder;
Architecture dataflow of full_adder isbegin
s <= a xor b xor cin;cout <= (a and b) or (a and cin)
or (b and cin);end dataflow;
Adder
A(7:0)
B(7:0)
C(7:0)
![Page 35: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/35.jpg)
Copyright © by N.T.K - 8/2008
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;
Architecture dataflow of adder isbegin
C <= A+B;end dataflow;
Adder
A(7:0)
B(7:0)
C(7:0)
![Page 36: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/36.jpg)
Copyright © by N.T.K - 8/2008
VD2: D Flip-flop, asyn reset
D flip-flop tích cực theo sườn dương của xung đồng hồ clk với tín hiệu reset không đồng bộ.Hoạt động: + rst = ‘1’ => q<=‘0’ không phụ thuộc clk. + rst = ‘0’, sườn dương clk => q<=d.
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 ISBEGIN
PROCESS (rst, clk)BEGIN
IF (rst='1') THEN q <= '0'; ELSIF (clk'EVENT AND
clk='1') THEN q <= d;
END IF;END PROCESS;
END behavior;DEMO
![Page 37: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/37.jpg)
Copyright © by N.T.K - 8/2008
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ộ.
![Page 38: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/38.jpg)
Copyright © by N.T.K - 8/2008
VD2: RS Flip-flop, asyn resetLIBRARY 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 ISBEGIN
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;
![Page 39: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/39.jpg)
Copyright © by N.T.K - 8/2008
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; PROCESS (clk) BEGIN IF (clk'EVENT AND clk='1') THEN q<=temp; END IF; END PROCESS; END example; ---------------------------------------
Sự kết hợp giữa mạch tổ hợp và mạch dãy
DEMO
![Page 40: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/40.jpg)
Copyright © by N.T.K - 8/2008
VD4: Bộ dồn kênh Multilpexor
a,b: hai kênh vào 8bitsel: các bit chọn kênhc: kênh ra 8bit
![Page 41: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/41.jpg)
Copyright © by N.T.K - 8/2008
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;
![Page 42: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/42.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 43: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/43.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 44: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/44.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 45: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/45.jpg)
Copyright © by N.T.K - 8/2008
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ố
![Page 46: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/46.jpg)
Copyright © by N.T.K - 8/2008
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
![Page 47: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/47.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 48: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/48.jpg)
Copyright © by N.T.K - 8/2008
3.1.1. Signal
External Signal & Internal Signal:
ExternalSignal
InternalSignal
Khai báo trong Entity
Khai báo trong Architecture
ENTITY myboard IS PORT ( [SIGNAL] a,b,c: inout bit; data,extbus,result: inout bit_vector(0 to 7));END myboard;
ARCHITECTURE structure OF myboard IS SIGNAL x,y: bit; SIGNAL intbus: bit_vector(0 to 7);BEGIN
![Page 49: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/49.jpg)
Copyright © by N.T.K - 8/2008
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
![Page 50: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/50.jpg)
Copyright © by N.T.K - 8/2008
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;
![Page 51: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/51.jpg)
Copyright © by N.T.K - 8/2008
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 đó.
![Page 52: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/52.jpg)
Copyright © by N.T.K - 8/2008
3.1.1. Signal
Ví dụ về phạm vi tác động của signal
A
B
C
DE F
![Page 53: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/53.jpg)
Copyright © by N.T.K - 8/2008
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
![Page 54: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/54.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 55: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/55.jpg)
Copyright © by N.T.K - 8/2008
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";
![Page 56: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/56.jpg)
Copyright © by N.T.K - 8/2008
Ví dụ về sử dụng variable trong VHDL
LIBRARY ieee;USE ieee.std_logic_1164.all;---------------------------------------ENTITY count_ones ISPORT ( din: IN STD_LOGIC_VECTOR (7 DOWNTO 0); ones: OUT INTEGER RANGE 0 TO 8);END count_ones;--------------------------------------- ARCHITECTURE ok OF count_ones IS BEGIN
PROCESS (din) VARIABLE temp: INTEGER RANGE 0 TO 8; BEGIN
temp := 0; FOR i IN 0 TO 7 LOOP IF (din(i)='1') THEN temp := temp + 1; END IF; END LOOP; ones <= temp;
END PROCESS; END ok;
![Page 57: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/57.jpg)
Copyright © by N.T.K - 8/2008
LIBRARY ieee;USE ieee.std_logic_1164.all;-----------------------------------------ENTITY mux ISPORT ( a, b, c, d, s0, s1: IN STD_LOGIC;
y: OUT STD_LOGIC);END mux;-----------------------------------------ARCHITECTURE not_ok OF mux IS SIGNAL sel : INTEGER RANGE 0 TO 3;BEGIN PROCESS (a, b, c, d, s0, s1) BEGIN sel <= 0; IF (s0='1') THEN sel <= sel + 1;END IF; IF (s1='1') THEN sel <= sel + 2;END IF; CASE sel IS WHEN 0 => y<=a; WHEN 1 => y<=b; WHEN 2 => y<=c; WHEN 3 => y<=d; END CASE; END PROCESS;END not_ok;
LIBRARY ieee;USE ieee.std_logic_1164.all;-----------------------------------------ENTITY mux ISPORT ( a, b, c, d, s0, s1: IN STD_LOGIC;7y: OUT STD_LOGIC);END mux;-----------------------------------------ARCHITECTURE ok OF mux ISBEGIN PROCESS (a, b, c, d, s0, s1) VARIABLE sel : INTEGER RANGE 0 TO 3; BEGIN sel := 0; IF (s0='1') THEN sel := sel + 1; END IF; IF (s1='1') THEN sel := sel + 2; END IF; CASE sel IS WHEN 0 => y<=a; WHEN 1 => y<=b; WHEN 2 => y<=c; WHEN 3 => y<=d; END CASE; END PROCESS;END ok;
![Page 58: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/58.jpg)
Copyright © by N.T.K - 8/2008
So sánh giữa Signal & Variable
![Page 59: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/59.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 60: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/60.jpg)
Copyright © by N.T.K - 8/2008
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'));
![Page 61: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/61.jpg)
Copyright © by N.T.K - 8/2008
3.2. Các kiểu dữ liệu VHDL
![Page 62: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/62.jpg)
Copyright © by N.T.K - 8/2008
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
![Page 63: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/63.jpg)
Copyright © by N.T.K - 8/2008
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 => +2,147,483,647
ARCHITECTURE test OF test ISBEGIN
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;
![Page 64: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/64.jpg)
Copyright © by N.T.K - 8/2008
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 => +1.0E+38.
ARCHITECTURE test OF test IS SIGNAL a : REAL;BEGIN
a <= 1.0; --Ok 1a <= 1; --error 2a <= -1.0E10; --Ok 3a <= 1.5E-20; --Ok 4a <= 5.3 ns; --error 5
END test;
![Page 65: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/65.jpg)
Copyright © by N.T.K - 8/2008
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.
TYPE bit IS ('0', '1');TYPE bit_vector IS ARRAY (NATURAL RANGE <>) OF BIT;
TYPE fourval IS ( ‘X’, ‘0’, ‘1’, ‘Z’ );TYPE state IS (idle, forward, backward, stop);TYPE color IS ( red, yellow, blue, green, orange );
Các kiểu dữ liệu
liệt kê đãđịnh nghĩa
trước
![Page 66: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/66.jpg)
Copyright © by N.T.K - 8/2008
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.
Kiểu dữ liệu liệt kê ENUMERATED
![Page 67: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/67.jpg)
Copyright © by N.T.K - 8/2008
ENTITY traffic_light IS PORT(sensor : IN std_logic; clock : IN std_logic; red_light : OUT std_logic; green_light : OUT std_logic; yellow_light : OUT std_logic);END traffic_light;------------------------------------------------------------ARCHITECTURE simple OF traffic_light ISTYPE t_state is (red, green, yellow);Signal present_state, next_state : t_state;BEGINPROCESS(present_state, sensor)BEGIN CASE present_state IS WHEN green => next_state <= yellow; red_light <= ‘0’; green_light <= ‘1’; yellow_light <= ‘0’; WHEN red => red_light <= ‘1’; green_light <= ‘0’; yellow_light <= ‘0’;
IF (sensor = ‘1’) THENnext_state <= green;ELSEnext_state <= red;END IF;WHEN yellow =>red_light <= ‘0’;green_light <= ‘0’;yellow_light <= ‘1’;next_state <= red;END CASE;END PROCESS;PROCESSBEGINWAIT UNTIL clock’EVENT and clock=‘1’;present_state <= next_state;END PROCESS;END simple;
![Page 68: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/68.jpg)
Copyright © by N.T.K - 8/2008
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 1000000000UNITSna; --nano ampsua = 1000 na; --micro ampsma = 1000 ua; --milli ampsa = 1000 ma; --ampsEND UNITS;
Primary unit
Secondary units
![Page 69: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/69.jpg)
Copyright © by N.T.K - 8/2008
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 2147483647UNITSfs; --femtosecondps = 1000 fs; --picosecondns = 1000 ps; --nanosecondus = 1000 ns; --microsecondms = 1000 us; --millisecondsec = 1000 ms; --secondmin = 60 sec; --minutehr = 60 min; --hourEND UNITS;
![Page 70: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/70.jpg)
Copyright © by N.T.K - 8/2008
PACKAGE example ISTYPE current IS RANGE 0 TO 1000000000UNITS
na; --nano ampsua = 1000 na; --micro ampsma = 1000 ua; --milli ampsa = 1000 ma; --amps
END UNITS; TYPE load_factor IS (small, med, big );
END example;----------------------------------------------------------------USE WORK.example.ALL;ENTITY delay_calc ISPORT ( out_current : OUT current;
load : IN load_factor; delay : OUT time);
END delay_calc;ARCHITECTURE delay_calc OF delay_calc ISBEGIN
delay <= 10 ns WHEN (load = small) ELSEdelay <= 20 ns WHEN (load = med) ELSEdelay <= 30 ns WHEN (load = big) ELSEdelay <= 10 ns;out_current <= 100 ua WHEN (load = small)ELSEout_current <= 1 ma WHEN (load = med) ELSEout_current <= 10 ma WHEN (load = big) ELSEout_current <= 100 ua;
END delay_calc;
![Page 71: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/71.jpg)
Copyright © by N.T.K - 8/2008
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)
![Page 72: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/72.jpg)
Copyright © by N.T.K - 8/2008
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:
1D1Dx1D 2D
![Page 73: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/73.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 74: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/74.jpg)
Copyright © by N.T.K - 8/2008
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 1Y := X(15); --line 2
![Page 75: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/75.jpg)
Copyright © by N.T.K - 8/2008
Kiểu mảng (Array Types)
Ví dụ về mảng 1Dx1D
Ví dụ về mảng 2D
TYPE row IS ARRAY (7 DOWNTO 0) OF STD_LOGIC; -- 1D arrayTYPE matrix IS ARRAY (0 TO 3) OF row; -- 1Dx1D arraySIGNAL x: matrix; -- 1Dx1D signal--------------------------------------------------------------------------------------------TYPE matrix IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0);
TYPE matrix2D IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC;-- 2D array
![Page 76: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/76.jpg)
Copyright © by N.T.K - 8/2008
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
![Page 77: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/77.jpg)
Copyright © by N.T.K - 8/2008
Ví dụ về mảng 1DPACKAGE 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 ISPORT ( data : IN data_bus;
start : IN INTEGER;data_out : OUT small_bus);
END extract;ARCHITECTURE test OF extract ISBEGIN
PROCESS(data, start)BEGIN
FOR i IN 0 TO 7 LOOP data_out(i) <= data(i + start);END LOOP;
END PROCESS;END test;
![Page 78: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/78.jpg)
Copyright © by N.T.K - 8/2008
Ví dụ về mảng 1Dx1D
LIBRARY IEEE; USE IEEE.std_logic_1164.ALL;PACKAGE memory ISCONSTANT width : INTEGER := 3;CONSTANT memsize : INTEGER := 7;TYPE data_out IS ARRAY(0 TO width)
OF std_logic;TYPE mem_data IS ARRAY(0 TO memsize)
OF data_out;END memory;LIBRARY IEEE; USE IEEE.std_logic_1164.ALL;USE WORK.memory.ALL;ENTITY rom ISPORT( addr : IN INTEGER;PORT( data : OUT data_out;PORT( cs : IN std_logic);END rom;
ARCHITECTURE basic OF rom ISCONSTANT z_state : data_out := (‘Z’, ‘Z’, ‘Z’, ‘Z’);CONSTANT x_state : data_out := (‘X’, ‘X’, ‘X’, ‘X’);CONSTANT rom_data : mem_data :=
( ( ‘0’, ‘0’, ‘0’, ‘0’),( ( ‘0’, ‘0’, ‘0’, ‘1’),( ( ‘0’, ‘0’, ‘1’, ‘0’),( ( ‘0’, ‘0’, ‘1’, ‘1’),( ( ‘0’, ‘1’, ‘0’, ‘0’),( ( ‘0’, ‘1’, ‘0’, ‘1’),( ( ‘0’, ‘1’, ‘1’, ‘0’),( ( ‘0’, ‘1’, ‘1’, ‘1’) );
BEGINASSERT addr <= memsizeREPORT “addr out of range”SEVERITY ERROR;data <= rom_data(addr) AFTER 10 ns WHEN cs = ‘1’ ELSEdata <= z_state AFTER 20 ns WHEN cs = ‘0’ ELSEdata <= x_state AFTER 10 ns;END basic;
![Page 79: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/79.jpg)
Copyright © by N.T.K - 8/2008
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;
![Page 80: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/80.jpg)
Copyright © by N.T.K - 8/2008
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;
![Page 81: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/81.jpg)
Copyright © by N.T.K - 8/2008
Ví dụ về khai báo subtypePACKAGE 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) THENFOR i IN 0 TO (val’LENGTH -2) LOOPresult(i) := result(i 1);END LOOP;result(val’LENGTH -1) := 0;ELSEresult(0) := 0;END IF;RETURN result;
END shift_right;END mypack;
![Page 82: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/82.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 83: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/83.jpg)
Copyright © by N.T.K - 8/2008
Kiểu bản ghi record
Ví dụ về kiểu bản ghi:
TYPE optype IS ( add, sub, mpy, div, jmp );TYPE instruction ISRECORD opcode : optype; src : INTEGER; dst : INTEGER;END RECORD;
![Page 84: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/84.jpg)
Copyright © by N.T.K - 8/2008
Kiểu bản ghi record
PROCESS(X) VARIABLE inst : instruction; VARIABLE source, dest : INTEGER; VARIABLE operator : optype;BEGIN source := inst.src; --Ok line 1 dest := inst.src; --Ok line 2 source := inst.opcode; --error line 3 operator := inst.opcode; --Ok line 4 inst.src := dest; --Ok line 5 inst.dst := dest; --Ok line 6 inst := (add, dest, 2); --Ok line 7 inst := (source); --error line 8END PROCESS;
TYPE optype IS ( add, sub, mpy, div, jmp );TYPE instruction ISRECORD opcode : optype; src : INTEGER; dst : INTEGER;END RECORD;
![Page 85: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/85.jpg)
Copyright © by N.T.K - 8/2008
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;TYPE addr_type ISRECORD source : INTEGER; key : INTEGER;END RECORD;TYPE data_packet ISRECORD addr : addr_type; data : t_word_array; checksum : INTEGER; parity : BOOLEAN;END RECORD;
PROCESS(X)VARIABLE packet : data_packet;BEGIN packet.addr.key := 5; --Ok packet.addr := (10, 20); --Ok packet.data(0) := (‘0’, ‘0’, ‘0’, ‘0’); packet.data(10)(4) := ‘1’; --error packet.data(10)(0) := ‘1’; --Ok END PROCESS;
![Page 86: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/86.jpg)
Copyright © by N.T.K - 8/2008
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”.
![Page 87: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/87.jpg)
Copyright © by N.T.K - 8/2008
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
![Page 88: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/88.jpg)
Copyright © by N.T.K - 8/2008
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”
![Page 89: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/89.jpg)
Copyright © by N.T.K - 8/2008
Ví dụ về truy cập file
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 ISBEGINPROCESS(addr, cs) VARIABLE rom_init : BOOLEAN := FALSE; --line 1 TYPE rom_data_file_t IS FILE OF INTEGER; --line 2 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 VARIABLE i : INTEGER := 0; --line 5BEGIN IF (rom_init = false) THEN --line 6 WHILE NOT ENDFILE(rom_data_file) --line 7 AND (i < 64) LOOP READ(rom_data_file, rom_data(i)); --line 8 i := i + 1; --line 9 END LOOP; rom_init := true; --line 10 END IF; IF (cs = ‘1’) THEN --line 11 data <= rom_data(addr); --line 12 ELSE data <= -1; --line 13 END IF;END PROCESS;END rom;
![Page 90: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/90.jpg)
Copyright © by N.T.K - 8/2008
Các kiểu DL có thể tổng hợp
![Page 91: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/91.jpg)
Copyright © by N.T.K - 8/2008
![Page 92: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/92.jpg)
Đề tài môn học Thiết kế nhờ MT
Nhóm: 6 người/nhóm
![Page 93: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/93.jpg)
Copyright © by N.T.K - 8/2008
Đề 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:
![Page 94: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/94.jpg)
Copyright © by N.T.K - 8/2008
Đề tài phần 2 (μC)1. 80512. PIC 16F84 – VHDL & Verilog3. 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).
![Page 95: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/95.jpg)
Copyright © by N.T.K - 8/2008
Đề tài phần 2 (others)
1. PCI Bridge.2. Ethernet MAC 10/100 Mbps3. 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.
![Page 96: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/96.jpg)
Copyright © by N.T.K - 8/2008
Chú ý: Nên làm cùng môn đồ án FPGA.
![Page 97: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/97.jpg)
Copyright © by N.T.K - 8/2008
Đề 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.
![Page 98: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/98.jpg)
Copyright © by N.T.K - 8/2008
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.
![Page 99: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/99.jpg)
Copyright © by N.T.K - 8/2008
Tài liệu tham khảo
Cách thiết kế 1 vđk bằng VHDL: MicroProcessor Design. VHDL Programming by Examples (4th).
Websites: www.opencores.org www.asics.ws
![Page 100: VHDL](https://reader033.vdocuments.pub/reader033/viewer/2022061117/54670df5b4af9ffd218b45de/html5/thumbnails/100.jpg)
Copyright © by N.T.K - 8/2008
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.