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
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.
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
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ính
Khoa CNTT, ĐHBKHN.
 Mobile: +84983588135
 Email: 
[email protected]
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%
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.
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.
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
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
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.
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.
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)
Copyright © by N.T.K - 8/2008
Quy trình thiết kế mạch dựa trên 
VHDL
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).
Copyright © by N.T.K - 8/2008
Một ví dụ VHDL đơn giản
Copyright © by N.T.K - 8/2008
Một ví dụ VHDL đơn giản
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.
Copyright © by N.T.K - 8/2008
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
Cấu trúc code
 Thư viện LIBRARY
 ENTITY
 ARCHITECTURE
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.
Copyright © by N.T.K - 8/2008
Thư viện LIBRARY
 Khai báo thư viện:
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 double
USE std.standard.all; -- dash (--) indicates 
acomment.
LIBRARY work;
USE work.all;
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.
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.
Copyright © by N.T.K - 8/2008
Cấu trúc code
 Thư viện LIBRARY
 ENTITY
 ARCHITECTURE
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
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.
Copyright © by N.T.K - 8/2008
ENTITY
Chế độ 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
Copyright © by N.T.K - 8/2008
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
Cấu trúc code
 Thư viện LIBRARY
 ENTITY
 ARCHITECTURE
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
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.
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.
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 IS
PORT (a,b,cin: in std_logic;
s,cout:out std_logic);
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;
Adder
A(7:0)
B(7:0)
C(7:0)
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 is
begin
C <= A+B;
end dataflow;
Adder
A(7:0)
B(7:0)
C(7:0)
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 IS
BEGIN
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
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ộ.
Copyright © by N.T.K - 8/2008
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
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
Copyright © by N.T.K - 8/2008
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
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
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
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
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
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
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
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
3.1.1. Signal
 External Signal & Internal Signal:
External
Signal
Internal
Signal
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
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
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;
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 đó.
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
D E F
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
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.
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";
Copyright © by N.T.K - 8/2008
Ví dụ 
về sử 
dụng 
variabl
e 
trong 
VHDL
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);
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;
Copyright © by N.T.K - 8/2008
LIBRARY ieee;
USE ieee.std_logic_1164.all;
-----------------------------------------
ENTITY mux IS
PORT ( 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 IS
PORT ( a, b, c, d, s0, s1: IN STD_LOGIC;
7y: OUT STD_LOGIC);
END mux;
-----------------------------------------
ARCHITECTURE ok OF mux IS
BEGIN
 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;
Copyright © by N.T.K - 8/2008
So sánh giữa Signal & 
Variable
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.
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'));
Copyright © by N.T.K - 8/2008
3.2. Các kiểu dữ liệu VHDL
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
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 IS
BEGIN
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
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 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
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