You are on page 1of 20

BÀI THÍ NGHIỆM 1

MỤC TIÊU:
Sinh viên cần tìm hiểu về KIT DE2, các sử dụng công cụ Quartus, và cách cài đặt chương
trình trên KIT Altera DE2 FPGA dùng Programmer.

TIẾN HÀNH THÍ NGHIỆM:


I. THÍ NGHIỆM 1.1 TUTORIAL:

Sinh viên đọc phần III của bài thí nghiệm 0 và thực hiện chương trình Test01 theo từng
bước đã được đưa ra.
Giáo viên hướng dẫn sẽ kiểm tra kết quả thực hiện của sinh viên thông qua kết quả mô
phỏng.
Các bước thực hiện:
Step 1: Trên thanh menu chọn File/New Project Wizard để bắt đầu quá trình tạo project.
Step 2: Đặt tên project và thiết lập đường dẫn đến thư mục làm việc của project.
Step 3: Add Files
Step 4: Chọn device cho project muốn thiết kế
Step 5: Tạo file thiết kế cho project.
Step 6: Viết code chương trình cho thiết kế bằng ngôn ngữ VHDL
Step 7: Tiến hành gán pin cho thiết kế bằng cách import Assignments
Step 8: Tiến hành biên dịch chương trình
1. Code VHDL:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity test01 is
port (
SW : in std_logic_vector (1 downto 0);
LEDR : out std_logic_vector (1 downto 0));
end entity;
architecture behavior of test01 is
begin
LEDR (1 downto 0) <= SW (1 downto 0);
end architecture;
2. Công cụ RTL Viewer:
3. Mô phỏng:

4. Kết quả thực hiện trên KIT DE2:

SW[0] SW[1] LEDR[0] LEDR[1]


Tắt Tắt Tắt Tắt
Tắt Bật Tắt Sáng
Bật Tắt Sáng Tắt
Bật Bật Sáng Sáng

II. THÍ NGHIỆM 1.2:


1. Yêu cầu:

Thực hiện và mô phỏng các cổng logic.


2. Thiết kế:
a. Sơ đồ khối (Block Diagram):
b. Sơ đồ mạch Logic (Logic Diagrams):

- Mô phỏng trên Proteus các cổng logic:


c. Bảng chân trị:

Inputs Outputs
a_in b_in Not_op And_op Nand_op Or_op Nor_op Xor_op Xnor_op
(a_in)
0 0 1 0 1 0 1 0 1
0 1 1 0 1 1 0 1 0
1 0 0 0 1 1 0 1 0
1 1 0 1 0 1 0 0 1
d. VHDL code:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity gates is
port (a_in,b_in: in std_logic;
not_op,and_op,nand_op,or_op,nor_op,xor_op,xnor_op: out std_logic);
end gates;
architecture dataflow of gates is
begin
not_op <= not a_in;
and_op <= a_in and b_in;
nand_op <= a_in nand b_in;
or_op <= a_in or b_in;
nor_op <= a_in nor b_in;
xor_op <= a_in xor b_in;
xnor_op <= a_in xnor b_in;
end dataflow;
e. kết quả mô phỏng trên ModelSim/VWF:

f. Kết quả thực hiện trên KIT DE2:


- Gán ngõ vào a_in và b_in vào SW[0] và SW[1], các ngõ ra vào LEDG[0]-[6].

Input Output
SW[0] SW[1] LEDG[0] LEDG[1] LEDG[2] LEDG[3] LEDG[4] LEDG[5] LEDG[6]
Tắt Tắt Sáng Tắt Sáng Tắt Sáng Tắt Sáng
Tắt Bật Sáng Tắt Sáng Sáng Tắt Sáng Tắt
Bật Tắt Tắt Tắt Sáng Sáng Tắt Sáng Tắt
Bật Bật Tắt Sáng Tắt Sáng Tắt Tắt Sáng
BÀI THÍ NGHIỆM 2
MỤC TIÊU:
Nắm được phương pháp thiết kế mạch tổ hợp cơ bản bằng ngôn ngữ VHDL và thực hiện
trên kit FPGA.

TIẾN HÀNH THÍ NGHIỆM:


I. THÍ NGHIỆM 2.1 THIẾT KẾ BỘ CỘNG 2 SỐ 4-BIT:
1. Yêu cầu:
Thiết kế bộ cộng 2 số 4-bit sử dụng bộ cộng toàn phần (Full Adder).
2. Thiết kế:
a. Sơ đồ khối (Block Diagram):
b. Code VHDL:

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY adder4 IS
PORT ( Cin : IN STD_LOGIC;
a, b : IN STD_LOGIC_VECTOR(3 downto 0);
s : OUT STD_LOGIC_VECTOR(3 downto 0);
Cout : OUT STD_LOGIC);
END adder4;
ARCHITECTURE model OF adder4 IS
SIGNAL c : STD_LOGIC_VECTOR(1 to 3);
COMPONENT fulladder
PORT ( x , y , z : IN STD_LOGIC;
s , c : OUT STD_LOGIC);
END COMPONENT;
BEGIN
stage0: fulladder PORT MAP(a(0),b(0),Cin,s(0),c(1)) ;
stage1: fulladder PORT MAP(a(1),b(1),c(1),s(1),c(2)) ;
stage2: fulladder PORT MAP(a(2),b(2),c(2),s(2),c(3)) ;
stage3: fulladder PORT MAP(a(3),b(3),c(3),s(3),Cout) ;
END model;

c. Kết quả mô phỏng VWF:


d. Kết quả mô phỏng trên kit DE2:

Input
Output
a[3] a[2] a[1] a[0] b[3] b[2] b[1] b[0] C_in C_out s[3] s[2] s[1]
s[0]
LED LED LED LED
SW SW SW SW SW SW SW SW SW LEDR
R R R R
[7] [6] [5] [4] [3] [2] [1] [0] [8] [2]
[4] [3] [1] [0]

Tắt Tắt Tắt Bật Tắt Tắt Tắt Tắt Tắt Tắt Tắt Tắt Tắt Sáng

Tắt Tắt Tắt Bật Tắt Tắt Tắt Bật Tắt Tắt Tắt Tắt Sáng Tắt
Bật Bật Bật Bật Tắt Tắt Tắt Bật Tắt Bật Tắt Tắt Tắt Tắt
Bật Bật Bật Bật Tắt Tắt Bật Bật Tắt Bật Tắt Tắt Sáng Tắt
Bật Bật Bật Bật Bật Bật Bật Bật Tắt Bật Sáng Sáng Sáng Tắt

Mô phỏng trên Proteus dùng 7483:

A( A1:LSB)
II. THÍ NGHIỆM 2.2:
1. Yêu cầu:
Thiết kế bộ ALU (Arithmetic and Logic Unit) thực hiện 8 hàm tính toán số học và
logic đơn giản. Mã điều khiển và mô tả các phép toán tương ứng với các mã ấy được
trình bày trong Bảng 1.
Bộ ALU 4-bit có các ngõ vào sau:
 A, B: 4-bit input
 Cin: 1-bit input
 Output: 4-bit output
 Cout: 1-bit output
 Control: 3-bit control input
Bảng 1 Các ngõ vào và ngõ ra của ALU
Signal Signal Assigned
Type Name Port Comment
A SW[3..0]
4-bit input to be displayed on HEX6
Input B SW[7..4]
4-bit input to be displayed on HEX4
Cin SW[8]
1-bit input to be displayed on LEDR[0]
Control SW[17..15]
2-bit input to be displayed on LEDR[17..16]
ALU_out HEX0
4-bit output result to be displayed on HEX0
Output
Cout LEDG[0] 1-bit output result to be displayed on
LEDG[0]

Bảng 2 Tập lệnh của ALU


Control Instruction
Operation
000 Add Output <= A + B + Cin; Cout chứa số nhớ (carry)
001 Sub Output <= A – B – Cin; Cout chứa số mượn (borrow)
010 Or Output <= A or B
011 And Output <= A and B
100 Shl Output <= A(2 downto 0) & ’0’
101 Shr Output <= ‘0’ & A(3 downto 1)
110 Rol Output <= A(2 downto 0) & A(3)
111 Ror Output <= A(0) & A(3 downto 1)
Những điểm cần lưu ý:
 Sử dụng lệnh CASE (hoặc các câu lệnh thiết kế tương đương) kiểm tra ngõ
vào “Code”
 để xác định phép toán cần thực hiện.
 Với mạch tổ hợp, ngõ vào thay đổi sẽ làm ngõ ra thay đổi ngay lập tức.
 Có thể dùng các phép toán số học và logic trong thiết kế.
 Mô phỏng thiết kế sử dụng lệnh “force” và “run” trong cửa sổ Transcript để
thiết lập giá
 trị ngõ vào và quan sát giản đồ xung của ngõ ra ở cửa sổ Waveform.

2. Thiết kế:
a. Sơ đồ khối (Block Diagram):

b. Sơ đồ mạch Logic (Logic Diagrams):


3. VHDL code:
Library IEEE;
Use IEEE.STD_LOGIC_1164.ALL;
Use IEEE.NUMERIC_STD.ALL;
Entity Alu is
Port (
a_in : in std_logic_vector(3 downto 0);
b_in : in std_logic_vector(3 downto 0);
sel : in std_logic_vector(2 downto 0);
Cin: in std_logic;
Cout: out std_logic;
Seg_Result: out std_logic_vector(6 downto 0);
Seg_ain: out std_logic_vector(6 downto 0);
Seg_bin: out std_logic_vector(6 downto 0);
Sel_out: out std_logic_vector(2 downto 0)

);
End entity;
Architecture Behavioral of Alu is
signal Result: std_logic_vector(3 downto 0);
signal v1: std_logic_vector(3 downto 0);
signal v2: std_logic_vector(3 downto 0);
signal v3: std_logic_vector(3 downto 0);
signal v4: std_logic_vector(3 downto 0);
signal v5: std_logic_vector(3 downto 0);
signal v6: std_logic_vector(3 downto 0);
signal v7: std_logic_vector(3 downto 0);
signal v8: std_logic_vector(3 downto 0);
signal vout1: std_logic;
signal vout2: std_logic;

Component Sub4 is
Port(
Cin : IN STD_LOGIC;
a, b : IN STD_LOGIC_VECTOR(3 downto 0);
s : OUT STD_LOGIC_VECTOR(3 downto 0);
Cout : OUT STD_LOGIC
);
End Component;

Component Full_Adder is
Port (
Cin : IN STD_LOGIC;
a, b : IN STD_LOGIC_VECTOR(3 downto 0);
s: OUT STD_LOGIC_VECTOR(3 downto 0);
Cout : OUT STD_LOGIC
);
End component;
Component Mux8to1 is
Port ( sel: in std_logic_vector(2 downto 0);
d1, d2, d3, d4, d5, d6, d7, d8: in std_logic_vector(3
downto 0);
Result :out std_logic_vector(3 downto 0) );
End component;
Component Shl is
Port (
a: in std_logic_vector(3 downto 0);
b: out std_logic_vector( 3 downto 0)
);
End component;
Component Shr is
Port (
a: in std_logic_vector(3 downto 0);
b: out std_logic_vector( 3 downto 0)
);
End component;
Component Roll is
Port (
a: in std_logic_vector(3 downto 0);
b: out std_logic_vector( 3 downto 0)
);
End component;
Component Rorr is
Port (
a: in std_logic_vector(3 downto 0);
b: out std_logic_vector( 3 downto 0)
);
End component;
Component Sel_vout is
Port (
Sel: in std_logic_vector(2 downto 0);
a: in std_logic;
b: in std_logic;
rel: out std_logic
);
End component;
Component Or_gate is
Port (
a: in std_logic_vector(3 downto 0);
b: in std_logic_vector(3 downto 0);
Re: out std_logic_vector( 3 downto 0)
);
End component;
Component And_gate is
Port (
a: in std_logic_vector(3 downto 0);
b: in std_logic_vector(3 downto 0);
Re: out std_logic_vector( 3 downto 0)
);
End component;
Component BCDto7seg is
Port (
bcd: in std_logic_vector(3 downto 0);
Seg: out std_logic_vector(6 downto 0)
);
End component;
Begin
Sel_out <= sel;
Stage0: BCDto7seg port map(a_in,Seg_ain);
Stage1: BCDto7seg port map(b_in,Seg_bin);
Satge2: Full_Adder port map(Cin, a_in ,b_in, v1,vout1);
Stage3: Sub4 port map(Cin, a_in, b_in, v2, vout2);
Stage4: Or_gate port map(a_in,b_in,v3);
Stage5: And_gate port map(a_in,b_in,v4);
Stage6: Shl port map(a_in,v5);
Stage7: Shr port map(a_in,v6);
Stage8: Roll port map(a_in,v7);
Stage9: Rorr port map(a_in,v8);
Stage10:Sel_vout port map(sel,vout1,vout2,Cout)
Stage11:Mux8to1 portmap(sel,v1,v2,v3,v4,v5,v6,v7,v8,Result);
Stage12:BCDto7seg portmap(Result,Seg_Result);
end Behavioral;
4. Kết quả mô phỏng trên VWF:

5. Kết quả mô phỏng trên kit DE2:

Input
Control Control Con
STT A[3] A[2] A[1] A[0] B[3] B[2] B[1] B[0] C_in [2] [1] trol[
0]
SW SW SW SW SW SW SW SW SW SW SW SW
[7] [6] [5] [4] [3] [2] [1] [0] [8] [9] [10] [11]
1 Bật Bật Bật Bật Bật Bật Bật Bật Tắt Tắt Tắt Tắt
2 Tắt Tắt Tắt Bật Tắt Tắt Bật Bật Bật Tắt Tắt Bật
3 Bật Bật Tắt Tắt Bật Tắt Bật Tắt X Tắt Bật Tắt
4 Bật Bật Tắt Tắt Bật Tắt Bật Tắt X Tắt Bật Bật
5 Bật Bật Tắt Bật Bật Bật Bật Bật X Bật Tắt Tắt
6 Bật Tắt Bật Bật X X X X X Bật Tắt Tắt
7 Tắt Bật Bật Bật X X X X X Bật Bật Tắt
8 Tắt Tắt Tắt Bật X X X X X Bật Bật Bật
Output
C_out ALU_OUT[3] ALU_OUT[2] ALU_OUT[1]
STT ALU_OUT[0]

LEDR LEDR LEDR LEDR


LEDR
[4] [3] [2] [1]
[0]

1 Sáng Sáng Sáng Sáng


Tắt
2 Sáng Sáng Sáng Tắt
Sáng
3 Tắt Sáng Sáng Sáng
Tắt
4 Tắt Sáng Tắt Tắt
Tắt
5 Tắt Sáng Tắt Sáng
Tắt
6 Tắt Tắt Sáng Tắt
Sáng
7 Tắt Sáng Sáng Sáng
Tắt
8 Tắt Sáng Tắt Tắt
Tắt

 Bộ Alu cộng trừ hai số bốn bit: mô phỏng trên proteus với ngõ điều khiển S0,
 S0=0 thực hiện A+B
 S0=1 thực hiên A-B

You might also like