Tải bản đầy đủ (.docx) (59 trang)

BÁO CÁO THIẾT KẾ HỆ THỐNG SỐ KC102 THỰC HÀNH TRÊN BOARD DE2

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (12.94 MB, 59 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ

------------

BÁO CÁO THIẾT KẾ HỆ THỐNG
SỐ KC102 THỰC HÀNH TRÊN
BOARD DE2

Giảng viên hướng dẫn: NGUYỄN

Sinh viên thực hiện:

1

CAO QUÍ


BÁO CÁO THỰC HÀNH THIẾT KẾ HỆ
THỐNG SỐ KC102
Bài 1: Giới thiệu BOARD ALTERA DE2-115,
Phần mềm QUARTUS II và MODELSIM
-Code mô phỏng:
module BAI1(
output Y,
input X);
assign Y=X;
endmodule
module BAI1_test(
output wire [0:0]LEDR,


input wire [0:0]SW);
BAI1 DUT(
.Y (LEDR[0]),
.X(SW[0]));
endmodule
-Tiến hành biên dịch và gán chân cho hệ thống. Vào Processing →Start
compilation, đợi quá trình biên dịch kết thúc và báo thành cơng. Sau đó
vào Assignment →Pin Planner
-Chúng ta chọn SW0 làm ngõ vào và LEDR0 để hiển thị:

2


Kết quả: Bật SW0 thì LEDR0 sáng.

3


BÀI 2: MẠCH TỔ HỢP
I. Cổng AND
Bảng trạng thái cổng AND
A
0
0
1
1

B
0
1

0
1

Y=A.B
0
0
0
1

-Code mô phổng:
module BAI2A (
output wire Y,
input wire A,
input wire B);
assign Y=A&B;
endmodule
module BAI2A_test(
output wire [1:0]LEDR,
output wire [0:0]LEDG,
input wire [1:0]SW);
assign LEDR[1:0] = SW[1:0];
BAI2A DUT(
4


.Y(LEDG[0]),
.A(SW[0]),
.B(SW[1]));
endmodule
-Tiến hành biên dịch và gán chân cho hệ thống. Vào Processing →Start

compilation, đợi quá trình biên dịch kết thúc và báo thành cơng. Sau đó
vào Assignment →Pin Planner
Ở đây chúng ta chọn SW0 SW1 làm 2 ngõ vào, LEDR0 và LEDR1 hiển
thị , Output LEDG0:

Xem thiết kế BAI2A_test ở mức thanh ghi- vận chuyển bằng cách vào
Tools→ Netlist Viewers → RTL Viewer.

5


Kết quả: Bật SW0 và SW1 , LEDR0 VÀ LEDR1 sáng, Output LEDG8
sáng. Cổng AND thực hiện những trạng thái đúng với bảng trạng thái
ban đầu mà thiết kế mong muốn có được.

6


II. Cổng OR
Bảng trạng thái cổng OR
A
0
0
1
1

B
0
1
0

1

-Code mô phổng:
module BAI2B(
output wire Y,
input wire A,
input wire B);
assign Y=A|B;
endmodule
module BAI2B_test(
output [1:0] LEDR,
output [0:0] LEDG,
input [1:0] SW);
assign LEDR[1:0] = SW [1:0];
BAI2 DUT (
.Y(LEDG[0]),
.A(SW[0]),
.B(SW[1]));
7

Y=A+B
0
1
1
1


endmodule
Tiến hành biên dịch và gán chân cho hệ thống. Vào Processing →Start
compilation, đợi quá trình biên dịch kết thúc và báo thành cơng. Sau đó

vào Assignment →Pin Planner
-Ở đây chúng ta chọn SW0 SW1 làm ngõ vào, LEDR0 LEDR1 hiển thị,
LEDG0 làm ngõ ra.

Xem thiết kế BAI2B_test ở mức thanh ghi- vận chuyển bằng cách vào
Tools→ Netlist Viewers → RTL Viewer.

8


Kết quả: Mạch được thiết kế hoạt động với các trạng thái đúng với trạng
thái của cổng OR.

9


III. Mạch kiểm tra chẵn lẻ
-Code mô phổng:
module BAI2C(
output wire Y,
input wire A,
input wire B,
input wire C,
input wire D);
assign Y=((A^B)^(C^D));
endmodule
module BAI2C_test(
output [0:3] LEDR,
output [0:0] LEDG,
input [0:3] SW);

assign LEDR[0:3] = SW[0:3];
BAI2C DUT(
.Y(LEDG[0]),
.A(SW[0]),
.B(SW[1]),
.C(SW[2]),
.D(SW[3]));
endmodule

10


-Tiến hành biên dịch và gán chân cho hệ thống. Vào Processing →Start
compilation, đợi quá trình biên dịch kết thúc và báo thành cơng. Sau đó
vào Assignment →Pin Planner
-Ở đây ngõ vào là SW0,1; LEDR0,1,2,3 hiển thị ; LEDG0,1,2,3 là ngõ ra

Xem thiết kế BAI2B_test ở mức thanh ghi- vận chuyển bằng cách vào
Tools→ Netlist Viewers → RTL Viewer.

11


12




BÀI 3 : MẠCH TỔ HỢP
3A : MẠCH CỘNG BÁN PHẦN

module BAI3A (
output wire SUM,
output wire CARRY,
input wire A,
input wire B);
assign SUM = A ^ B;
assign CARRY = A & B;
endmodule
Kiểm tra và thiết kế 3A_test với nội dung sau:
module BAI3A_test(
output [1:0] LEDR,
output [1:0] LEDG,
input [1:0] SW);
assign LEDR [1:0] = SW[1:0];
BAI3A DUT(
.SUM ( LEDG[1] ),
.CARRY (LEDG[0]),
.A (SW[0]),
.B (SW[1]));
endmodule
Thực hiện :
Người học sử dụng SW0 và SW1 để nhập 2 số hạng A và B. Giá trị của 2
số hạng hiển thị trên 2 LED đơn màu đỏ LEDR0 và LEDR1 tương ứng.
13


Các LED đơn àu xanh LEDG1 và LEDG0 sáng tương ứng với giá trị bit
bằng 1 và ngược lại tương ứng với giá trị bit 0.

14



3B: Mạch cộng toàn phần :
module BAI3B(
output wire SUM,
output wire CARRY,
input wire A,
input wire B,
15


input wire C);
wire HALF_SUM1, HALF_CARRY1, HALF_CARRY2;
BAI3 HA1 (HALF_SUM1, HALF_CARRY1,A,B);
BAI3A HA2(SUM, HALF_CARRY2, HALF_CARRY2 ;
endmodule
Kiểm tra và thiết kế 3B_test với nội dung sau:
module BAI3B_test (
output [2:0] LEDR ,
output [1:0] LEDG ,
input [2:0] SW);
assign LEDR[2:0] = SW[2:0];
BAI3B DUT(
.SUM(LEDG[0]),
.CARRY(LEDG[1]),
.A(SW[2]),
.C(SW[0]));
endmodule
Thực hiện : Người học sử dụng các SW2,SW1,và SW0 để nhập các giá
trị tương ứng A,B và C. Tổng (Sum) và số tràn (Carry) của phép cộng

toàn phần đươc hiển thị bởi LED đơn màu xanh lá LEDG1 và LEDG0.

16


17


Mã hóa ưu tiên 8 sang 3 đường:
module BAI3C(
output reg [2:0] Y,
input wire [7:0] X,
input wire En);
always@(X,En);
begin
if (En)
casex (X)
8’b 00000000: Y=3’bzzz;
8’b 00000001: Y=3’b000;
8’b 0000001x: Y=3’b001;
18


8’b 000001xx: Y=3’b010;
8’b 00001xxx: Y=3’b011;
8’b 0001xxxx: Y=3’b100;
8’b 001xxxxx: Y=3’b101;
8’b 01xxxxxx: Y=3’b110 ;
8’b 1xxxxxxx: Y=3’b111;
default:


Y=3’bzzz;

endcase
end
endmodule
Kiểm tra và thiết kế 3C_test với nội dung sau:
module BAI3C_test(
output [8:0] LEDR,
output [2:0] LEDG,
input [8:0] SW) ;
assign LEDR[8:0] = SW[8:0];
BAI3C DUT(
.Y(LEDG[2:0]),
.X(SW[7:0]),
. En (SW[8])) ;
endmodule
Thực hiện :
Kiểm tra kết quả thiết kế trực tiếp trên board và cho nhận xét kết quả
mạch được kết quả mạch mã hóa 8 sang 3. SW8 sẽ cung cấp tín hiệu cho
phép mạch hoạt động (Enable), các SW7 đến SW0 là các ngõ vào tương
ứng X7…X0. Các LED đơn màu đỏ LEDR7…LEDR0 hiển thị giá trị
tương ứng của các ngõ X7…X0 ; các LED đơn màu xanh hiển thị giá trị
19


tương ứng của các ngõ vào X7…X0 ; các LED đơn màu xanh
lá(LEDG2…LEDG0) hiển thị giá trị các ngõ ra tương ứng Y2…Y0.

20



Bài 4 : MẠCH TUẦN TỰ
Mô phỏng Flip-Flop D :
module BAI4A(
output reg Q,
output wire Qbar,
input wire D,
input wire clk,
input wire rst);
assign Qbar = ~Q;
always @ (posedge clk)
begin
if (~rst)
21


Q = 1’b0;
else
Q = D;
end
endmodule
Kiểm tra và thiết kế 4A_test với nội dung sau:
module BAI4A_test(
output [0:0] LEDR,
output [1:0] LEDG,
input [0:0] SW,
input [1:0] KEY);
assign LEDR [0] = SW[0];
BAI4A DUT(

.Q(LEDG[1]),
.Qbar(LEDG[0]),
.D(SW[0]),
.clk (KEY[1]),
.rst (KEY[0]));
endmodule
Thực hiện: Người học sử dụng SW0 để nhập giá trị ngõ vào D; giá trị
được hiển thị bởi LED đơn màu đỏ LEDR0. Ngõ ra Q và Qbar được hiển
thị trên các LED đơn màu xanh tương ứng là LEDG1 và LEDG0. Các
KEY1 và KEY0 sẽ có vai trị cấp xung clock (Clk) và tín hiệu xáo
(Reset).

22


23


2.Mạch dịch trái
module BAI4B(
output reg [3:0] Q,
input wire D,
input wire clk,
input wire rst);
always @ (posedge clk)
24


If (~rst)
Q <= 4’b0 ;

else
Q <= {Q[2:0], D};
endmodule
Kiểm tra và thiết kế 4B_test với nội dung sau:
module BAI4B_test(
output [0:0] LEDR,
output [3:0] LEDG,
input [0:0] KEY);
assign LEDR[0] = SW[0];
BAI4B DUT(
.Q ( LEDG[3:0] ),
.clk ( KEY[1] ),
.rst ( KEY[0] ),
.D ( SW[0] ) );
endmodule
Thực hiện : Các SW0 thực hiện nhập 1 bit dữ liệu ngõ vào D và LED
đơn màu đỏ (LEDR0) hiển thị trạng thái tương ứng. KEY0 được sử dụng
cho chức năng reset ( xóa về giá trị 0 ) các ngõ ra Q3 đến Q0 được hiển
thị lần lượt bởi ngõ vào cấp xung clk. Giá trị các ngõ ra Q3 đến Q0 được
hiển thị lần lượt bởi 4 LED xanh lá LEDG0. Người học kiểm tra mạch
được thiết kế đúng với yêu cầu đặt ra.

25


×