Professional Documents
Culture Documents
CuuDuongThanCong.com https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Phần mềm học tập
Active-HDL 7.1.sp2
Quartus (for Altera FPGAs)
ISE (for Xilinx FPGAs)
www.opencores.org
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Giảng viên
Nguyễn Thành Kiên
Giảng viên Bộ môn Kỹ thuật Máy tính
Email: kiennt-fit@mail.hut.edu.vn
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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%
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
1. Giới thiệu ngôn ngữ VHDL.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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ả.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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)
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Quy trình thiết kế mạch dựa trên VHDL
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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).
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Một ví dụ VHDL đơn giản
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Một ví dụ VHDL đơn giản
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Cấu trúc code
Thư viện LIBRARY
ENTITY
ARCHITECTURE
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Thư viện LIBRARY
Khai báo thư viện:
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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 work;
USE work.all;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Cấu trúc code
Thư viện LIBRARY
ENTITY
ARCHITECTURE
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Cấu trúc code
Thư viện LIBRARY
ENTITY
ARCHITECTURE
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
ARCHITECTURE
Phần ARCHITECTURE mô tả mạch hoạt
động như thế nào.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
ARCHITECTURE
Ví dụ về mạch NAND:
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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 <= '0';
ELSIF (clk'EVENT AND clk='1')
+ rst = „1‟ => q<=„0‟ không phụ thuộc clk. THEN
+ rst = „0‟, sườn dương clk => q<=d. q <= d;
END IF;
END PROCESS;
DEMO END behavior;
Copyright © by N.T.K - 8/2008
CuuDuongThanCong.com https://fb.com/tailieudientucntt
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ộ.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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 ---------------------------------------
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
VD4: Bộ dồn kênh Multilpexor
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
CuuDuongThanCong.com https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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ố
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
3.1.1. Signal
External Signal & Internal Signal:
External Internal
Signal Signal
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
3.1.1. Signal
Ví dụ về phạm vi tác động của signal
B E
D F
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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ự đó.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
3.1.2. Biến (variable)
Khai báo biến:
VARIABLE name: type [range] [:= init_value];
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------
ENTITY count_ones IS
PORT ( din: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
Ví dụ
ones: OUT INTEGER RANGE 0 TO 8);
END count_ones;
---------------------------------------
về sử ARCHITECTURE ok OF count_ones IS
BEGIN
BEGIN
VARIABLE temp: INTEGER RANGE 0 TO 8;
variable temp := 0;
FOR i IN 0 TO 7 LOOP
VHDL
END IF;
END LOOP;
ones <= temp;
END PROCESS;
END ok; Copyright © by N.T.K - 8/2008
CuuDuongThanCong.com https://fb.com/tailieudientucntt
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
BEGIN BEGIN
sel <= 0; sel := 0;
IF (s0='1') THEN sel <= sel + 1;END IF; IF (s0='1') THEN sel := sel + 1; END IF;
IF (s1='1') THEN sel <= sel + 2;END IF; IF (s1='1') THEN sel := sel + 2; END IF;
CASE sel IS CASE sel IS
WHEN 0 => y<=a; WHEN 0 => y<=a;
WHEN 1 => y<=b; WHEN 1 => y<=b;
WHEN 2 => y<=c; WHEN 2 => y<=c;
WHEN 3 => y<=d; WHEN 3 => y<=d;
END CASE; END CASE;
END PROCESS; END PROCESS;
END not_ok; Copyright © END
by N.T.Kok;
- 8/2008
CuuDuongThanCong.com https://fb.com/tailieudientucntt
So sánh giữa Signal & Variable
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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'));
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
3.2. Các kiểu dữ liệu VHDL
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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ê đã
định nghĩa
TYPE bit_vector IS ARRAY (NATURAL RANGE <>) OF BIT;
trước
TYPE fourval IS ( ‘X’, ‘0’, ‘1’, ‘Z’ );
TYPE state IS (idle, forward, backward, stop);
TYPE color IS ( red, yellow, blue, green, orange );
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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 <= green;
yellow_light : OUT std_logic); ELSE
END traffic_light; next_state <= red;
------------------------------------------------------------ END IF;
ARCHITECTURE simple OF traffic_light IS WHEN yellow =>
TYPE t_state is (red, green, yellow); red_light <= ‘0’;
Signal present_state, next_state : t_state; green_light <= ‘0’;
BEGIN yellow_light <= ‘1’;
PROCESS(present_state, sensor) next_state <= red;
BEGIN END CASE;
CASE present_state IS END PROCESS;
WHEN green => PROCESS
next_state <= yellow; BEGIN
red_light <= ‘0’; WAIT UNTIL clock’EVENT and clock=‘1’;
green_light <= ‘1’; present_state <= next_state;
yellow_light <= ‘0’; END PROCESS;
WHEN red => END simple;
red_light <= ‘1’;
green_light <= ‘0’;
yellow_light <= ‘0’;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008
https://fb.com/tailieudientucntt
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
CuuDuongThanCong.com
ENDCopyright
UNITS; © by N.T.K - 8/2008
https://fb.com/tailieudientucntt
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008
https://fb.com/tailieudientucntt
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)
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
CuuDuongThanCong.com https://fb.com/tailieudientucntt
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 c
PORT( data : OUT data_out; data <= z_state AFTER 20 ns WHEN cs = „0‟ E
PORT( cs : IN std_logic); data <= x_state AFTER 10 ns;
END rom; END basic;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Kiểu bản ghi record
Ví dụ về kiểu bản ghi:
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
dest := inst.src; --Ok line 2
RECORD
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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”.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Kiểu dữ liệu File
Khai báo kiểu file:
TYPE int_file IS FILE OF INTEGER;
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
truy
AND (i < 64) LOOP
READ(rom_data_file, rom_data(i)); --line 8
i := i + 1; --line 9
cập
END LOOP;
rom_init := true; --line 10
END IF;
ELSE
--line 11
data <= rom_data(addr); --line 12
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Đề tài môn học Thiết kế nhờ MT
Nhóm: 6 người/nhóm
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Đề 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:
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Đề 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).
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Đề 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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Chú ý:
Nên làm cùng môn đồ án FPGA.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
Đề 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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt
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.
CuuDuongThanCong.com
Copyright © by N.T.K - 8/2008 https://fb.com/tailieudientucntt