Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 34

TRƯỜNG ĐẠI HỌC KHOA HỌC

KHOA ĐIỆN, ĐIỆN TỬ VÀ CÔNG NGHỆ VẬT LIỆU


---------------o0o---------------

BÁO CÁO
Thực hành
Chuyên ngành kỹ thuật điện tử

Giảng viên: Phan Hải Phong


Sinh viên thực hiện: Dương Tuấn Kiệt
Mã số sinh viên: 16T1051028

TP. HUẾ, THÁNG 1 NĂM 2021

1
MỤC LỤC:
1. Giới thiệu:..........................................................................................................4
1.1 Ngôn ngử mô tả phần cứng Verilog HDL:...............................................4
1.2 Board DE2:.................................................................................................4
2. Nội dung thực hành:.........................................................................................5
2.1. Lab 1: Bộ chuyển mạch,đèn và bộ ghép kênh............................................5
Part2:.................................................................................................................... 5
Hình 1.1 mạch điện mô tả lab 1 part 2.......................................................................6
Hình 1.2 kết quả test board DE2 lab 1 part 2.............................................................6
Part3:.................................................................................................................... 7
Hình 1.3 mô tả mạch điện lab 1 part 3.......................................................................7
Hình 1.4 viewer RTL code lab 1 part 3.....................................................................8
Hinh 1.5 kết quả test DE2 lab 1 part 3.......................................................................8
Part4:.................................................................................................................... 8
Hình 1.6 Mô tả mạch điện và bảng chân lí lab 1 part 4.............................................9
Hình 1.7 Viewer RTL code lab1 part 4......................................................................9
Hình 1.8 Kết quả test DE2 lab 1 part 4....................................................................10
Part 5:................................................................................................................. 10
Hình 1.9 Mô tả mạch điện và bảng chân lí lab 1 part 5...........................................10
Hình 1.10 Viewer RTL code lab 1 part 5.................................................................12
Hình 1.11 Kết quả test DE2 lab 1 part 5..................................................................12
Part 6:................................................................................................................. 12
Hình 1.12 Bảng chân lí lab 1 part 6........................................................................13
Hình 1.13 Viewer RTL code lab 1 part 6.................................................................15
Hình 1.14 Kết quả test DE2 lab 1 part 6..................................................................16
2.2 LAB 2: Số và hiển thị..................................................................................16
Part 1:................................................................................................................. 16

2
Hình 2.1 Viewer RTL code lab 2 part 1...................................................................18
Hình 2.2 Kết quả test DE2 lab 2 part 1....................................................................18
Part 2:................................................................................................................. 18
Hình 2.3 Mổ tả mạch điện và bảng chân lí lab 2 part 2...........................................19
Hình 2.4 Viewer RTL code lab 2 part 2...................................................................21
Hình 2.5 Kết quả test DE2 lab 2 part 2....................................................................21
Part 3:................................................................................................................. 21
Hình 2.6 Mô tả mạch điên và bảng chân lí lab 2 part 3...........................................22
Hình 2.7 Viewer RTL code lab 2 part 3...................................................................23
Hình 2.8 Kết quả test DE2 lab 2 part 3....................................................................23
Part 4:................................................................................................................. 23
Hình 2.9 Viewer RTL code lab 2 part 4...................................................................27
Hình 2.10 Kết quả test DE2 lab 2 part 4..................................................................27
Part 5:................................................................................................................. 27
Hình 2.11 Viewer RTL code lab 2 part 5.................................................................32
3. Kết luận:..........................................................................................................32
4. Tài liệu tham khảo:.........................................................................................33

3
1. Giới thiệu:
1.1 Ngôn ngử mô tả phần cứng Verilog HDL:
Verilog HDL là một chuẩn "ngôn ngữ mô tả phần cứng" của IEEE, là một
ngôn ngữ dạng text thuần túy được sử dụng để mô tả các mạch Số (thậm chí
các mạch Số này có thể được hiện thực thành phần cứng).
Verilog HDL được sử dụng để mô hình hóa phần cứng cho cả mục đích
synthesis (tổng hợp) và simulation (mô phỏng).
1.2 Board DE2:
Board DE2 là board mạch phục vụ cho việc nghiên cứu và phát triển về các
lĩnh vực luận lý số học (digital logic), tổ chức máy tính (computer organization) và
FPGA.
Board DE2 cung cấp khá nhiều tính năng hỗ trợ cho việc nghiên cứu và phát
triển, dưới đây là thông tin chi tiết của một board DE2:

 FPGA:

- Vi mạch FPGA Altera Cyclone IV.


- Vi mạch Altera Serial Configuration – EPCS16.

 Các thiết bị xuất nhập:

- USB Blaster cho lập trình và điểu khiển API của người dung; hỗ trợ cả 2 chế
độ lập trình JTAG và AS.
- Bộ điều khiển Cổng 10/100 Ethernet.
- Cổng VGA-out.
- Bộ giải mã TV và cổng nối TV-in.
- Bộ điều khiển USB Host/Slave với cổng USB kiểu A và kiểu B.
- Cổng nối PS/2 chuột/bàn phím.
- Bộ giải mã/mã hóa âm thanh 24-bit chất lượng đĩa quang với jack cắm line-in,
line-out, và microphone.
- 2 Header mở rộng 40-pin với lớp bảo vệ diode.
- Cổng giao tiếp RS-232 và cổng nối 9-pin.
- Cổng giao tiếp hồng ngoại.

4
 Bộ nhớ:

- SRAM 512-Kbyte.
- SDRAM 8-Mbyte.
- Bộ nhớ cực nhanh 4-Mbyte (1 số mạch là 1-Mbyte).
- Khe SD card.

 Switch, các đèn led, LCD, xung clock

- 4 nút nhấn, 18 nút gạt.


- 18 LED đỏ, 9 LED xanh, 8 Led 7 đoạn
- LCD 16x2
- Bộ dao động 50-MHz và 27-MHz cho đồng hồ nguồn.

2. Nội dung thực hành:


2.1. Lab 1: Bộ chuyển mạch,đèn và bộ ghép kênh
Mục đích:
Tìm hiểu cách kết nối các thiết bị đầu vào và đầu ra đơn giản với chip
FPGA và thực hiện một mạch sử dụng các thiết bị này. Sử dụng các công tắc
SW170 trên bảng DE2 làm đầu vào cho mạch. Sử dụng diode phát quang (đèn
LED) và led 7 đoạn để hiển thị kết quả đầu ra.

Part2:
 Nội dung: Thực hiện bộ ghép kênh 1 đầu điều khiển, 2 đầu vào 8 bit X, Y và
1 đầu ra 8 bit Y. Sử dụng công tắc SW 17 trên bảng DE2 làm đầu vào s,
chuyển SW70 làm đầu vào X và SW158 làm đầu vào Y. Kết nối các
công tắc SW với đèn LEDR (đèn đỏ) và kết nối đầu ra M với LEDG70
(đèn xanh). Sử dụng Quartus II tạo file Verilog.

5
Hình 1.1 mạch điện mô tả lab 1 part 2.

-code:

Hình 1.2 kết quả test board DE2 lab 1 part 2.

6
Part3:
 Nội dung: Bộ ghép kênh 3 đầu điều khiển, 5 đầu vào và 1 đầu ra độ rộng 3
bit. Kết nối các đầu điều khiển với các công tắc SW1715 và sử dụng 15
công tắc SW140 còn lại để cung cấp năm đầu vào 3 bit U đến Y. Kết nối
công tắc SW với đèn LEDR (đèn đỏ) và kết nối đầu ra M với LEDG2−0 (đèn
xanh).

Hình 1.3 mô tả mạch điện lab 1 part 3.

-Code:
module phan3(SW,LEDR,LEDG);
input [17:0]SW;
output [17:0]LEDR;
output [2:0]LEDG;
assign LEDR = SW;
assign LEDG[2:0] = (SW[17:15] == 3'b000 )? SW[2:0]:
(SW[17:15] == 3'b001 )? SW[5:3]:
(SW[17:15] == 3'b010 )? SW[8:6]:
(SW[17:15] == 3'b011 )? SW[11:9]:SW[14:12] ;
Endmodule

7
Hình 1.4 viewer RTL code lab 1 part 3.

Hinh 1.5 kết quả test DE2 lab 1 part 3.

Part4:
 Nội dung: Bộ giải mã 7 đoạn. Kết nối đầu vào c2 c1 c0 với công tắc SW20
và kết nối đầu ra của bộ giải mã với màn hình HEX0 trên bo mạch DE2. Các
đoạn trong màn hình này được gọi là HEX00, HEX01, ..., HEX06

Hình 1.6 Mô tả mạch điện và bảng chân lí lab 1 part 4.

-Code:
8
module phan4 (sel,HEX0) ;
input [2:0] sel ;
output [6:0] HEX0 ;
assign HEX0= (sel[2:0] == 3'b000 )? 7'b0001001: // H
(sel[2:0] == 3'b001 )?7'b0000110: //E
(sel[2:0] == 3'b010 )?7'b1000111: //L
(sel[2:0] == 3'b011 )?7'b1000000:7'b1111111 ; // 0
Endmodule

Hình 1.7 Viewer RTL code lab1 part 4.

9
Hình 1.8 Kết quả test DE2 lab 1 part 4.

Part 5:
 Nội dung: Sử dụng bộ ghép kênh 5-1 độ rộng 3 bit để hiển thị màn hình 7
đoạn. Kết nối các công tắc SW 1715 với các đầu điều khiển. Đồng thời kết
nối SW 140 các đầu vào của bộ ghép kênh theo yêu cầu để tạo ra các mẫu
ký tự. Kết nối đầu ra của năm bộ ghép kênh với màn hình 7 đoạn HEX4,
HEX3, HEX2, HEX1 và HEX0.

Hình 1.9 Mô tả mạch điện và bảng chân lí lab 1 part 5.

-code:
module phan5(SW, HEX4,HEX3,HEX2,HEX1,HEX0);
input [17:0] SW;
output [6:0]HEX4,HEX3,HEX2,HEX1,HEX0;
wire [2:0] M4,M3,M2,M1,M0;
mux_3bit_5to1 m4(SW[17:15], SW[14:12], SW[11:9], SW[8:6], SW[5:3],
SW[2:0], M4);

10
mux_3bit_5to1 m3(SW[17:15], SW[11:9], SW[8:6], SW[5:3], SW[2:0],
SW[14:12], M3);
mux_3bit_5to1 m2(SW[17:15], SW[8:6], SW[5:3] , SW[2:0], SW[14:12],
SW[11:9], M2);
mux_3bit_5to1 m1(SW[17:15], SW[5:3], SW[2:0], SW[14:12], SW[11:9],
SW[8:6],M1);
mux_3bit_5to1 m0(SW[17:15], SW[2:0], SW[14:12], SW[11:9], SW[8:6],
SW[5:3], M0);
char_7seg h4(M4, HEX4);
char_7seg h3(M3, HEX3);
char_7seg h2(M2, HEX2);
char_7seg h1(M1, HEX1);
char_7seg h0(M0, HEX0);
endmodule
module mux_3bit_5to1(S, U, V, W, X, Y, M);
input [2:0] S, U, V, W, X, Y;
output [2:0] M;
assign M = (S== 3'b000 )? U:
(S == 3'b001 )? V:
(S == 3'b010 )? W:
(S == 3'b011 )? X:Y ;
endmodule
module char_7seg(sw,hex);
input [2:0]sw;
output [6:0]hex;
assign hex= (sw[2:0] == 3'b000 )? 7'b0001001:
(sw[2:0] == 3'b001 )?7'b0000110:
(sw[2:0] == 3'b010 )?7'b1000111:
(sw[2:0] == 3'b011 )?7'b1000000:7'b1111111 ;
endmodule

11
Hình 1.10 Viewer RTL code lab 1 part 5.

Hình 1.11 Kết quả test DE2 lab 1 part 5.

Part 6:
 Nội dung: Hiện thị lên 8 màn hình 7 đoạn. Sử dụng tương tự bài trên

12
Hình 1.12 Bảng chân lí lab 1 part 6.

-Code:
module phan6(SW, HEX7,HEX6,HEX5 ,HEX4,HEX3,HEX2,HEX1,HEX0);
input [17:0] SW;
output [6:0]HEX7,HEX6,HEX5 ,HEX4,HEX3,HEX2,HEX1,HEX0;
wire [2:0] M7,M6,M5,M4,M3,M2,M1,M0;
wire [2:0]sw2,sw1,sw0 ;
assign sw2 =3'b111;
assign sw1 =3'b111;
assign sw0 =3'b111;
mux_3bit_8to1 m7(SW[17:15],sw2 ,sw1 , sw0 , SW[14:12], SW[11:9], SW[8:6],
SW[5:3], SW[2:0], M7);
mux_3bit_8to1 m6(SW[17:15],sw1 , sw0 , SW[14:12], SW[11:9], SW[8:6],
SW[5:3], SW[2:0], sw2 ,M6);
mux_3bit_8to1 m5(SW[17:15],sw0 , SW[14:12], SW[11:9], SW[8:6], SW[5:3],
SW[2:0], sw2 ,sw1 , M5);
mux_3bit_8to1 m4(SW[17:15],SW[14:12], SW[11:9], SW[8:6], SW[5:3],
SW[2:0], sw2 ,sw1 ,sw0, M4);
mux_3bit_8to1 m3(SW[17:15],SW[11:9], SW[8:6], SW[5:3], SW[2:0], sw2
,sw1 ,sw0,SW[14:12], M3);
mux_3bit_8to1 m2(SW[17:15],SW[8:6], SW[5:3], SW[2:0], sw2 ,sw1
,sw0,SW[14:12],SW[11:9], M2);
mux_3bit_8to1 m1(SW[17:15], SW[5:3], SW[2:0], sw2 ,sw1
,sw0,SW[14:12],SW[11:9],SW[8:6], M1);

13
mux_3bit_8to1 m0(SW[17:15],SW[2:0], sw2 ,sw1
,sw0,SW[14:12],SW[11:9],SW[8:6], SW[5:3], M0);
hienthi h7(M7, HEX7);
hienthi h6(M6, HEX6);
hienthi h5(M5, HEX5);
hienthi h4(M4, HEX4);
hienthi h3(M3, HEX3);
hienthi h2(M2, HEX2);
hienthi h1(M1, HEX1);
hienthi h0(M0, HEX0);

endmodule
module mux_3bit_8to1(S, U, V, W, X, Y, J,K,L,M);
input [2:0] S, U, V, W, X, Y,J,K,L;
output [2:0] M;
assign M = (S== 3'b000 )? U:
(S == 3'b001 )? V:
(S == 3'b010 )? W:
(S == 3'b011 )? X:
(S == 3'b100 )? Y:
(S == 3'b101 )? J:
(S == 3'b110 )? K:L ;
endmodule

module hienthi(sw,Hex);
input [2:0]sw;
output [6:0]Hex;

assign Hex= (sw[2:0] == 3'b000 )? 7'b0001001: // H


(sw[2:0] == 3'b001 )?7'b0000110: //E
(sw[2:0] == 3'b010 )?7'b1000111: //L

14
(sw[2:0] == 3'b011 )?7'b1000000:7'b1111111 ; // 0
Endmodule

Hình 1.13 Viewer RTL code lab 1 part 6.

15
Hình 1.14 Kết quả test DE2 lab 1 part 6.

2.2 LAB 2: Số và hiển thị


Mục đích: Thiết kế mạch tổ hợp có thể thực hiện chuyển đổi số nhị phân
sang thập phân và cộng mã nhị phân sang thập phân (BCD).
Part 1:
 Nội dung: Hiển thị các số từ 09. Sử dụng màn hình 7 đoạn HEX3 đến
HEX0, các công tắc SW 150.

-Code:
module phan1(SW, HEX3,HEX2,HEX1,HEX0);
input [15:0] SW;
output [6:0]HEX3,HEX2,HEX1,HEX0;
char_7seg h3(SW[15:12],HEX3);
char_7seg h2(SW[11:8],HEX2);
char_7seg h1(SW[7:4],HEX1);
char_7seg h0(SW[3:0],HEX0);
endmodule
module char_7seg(sw,hex);
input [3:0]sw;
output [6:0]hex;
assign hex= (sw[3:0] == 4'b0000 )? 7'b0000000:
(sw[3:0] == 4'b0001 )? 7'b1111001:
(sw[3:0] == 4'b0010 )? 7'b0100100:

16
(sw[3:0] == 4'b0011 )? 7'b0110000:
(sw[3:0] == 4'b0100 )? 7'b0011001:
(sw[3:0] == 4'b0101 )? 7'b0010010:
(sw[3:0] == 4'b0110 )? 7'b0000010:
(sw[3:0] == 4'b0111 )? 7'b1111000:
(sw[3:0] == 4'b1000 )? 7'b0000000:
(sw[3:0] == 4'b1001 )? 7'b0010000: 7'b1111111;
endmodule

17
Hình 2.1 Viewer RTL code lab 2 part 1.

Hình 2.2 Kết quả test DE2 lab 2 part 1.

Part 2:
 Nội dung: Chuyển đổi 4 chữ số nhị phân thành 2 số thập phân. Biên dịch
mạch và sử dụng mô phỏng chức năng để xác minh hoạt động chính xác của
bộ so sánh, bộ ghép kênh và mạch A. Bổ sung mã Verilog của bạn để bao
gồm mạch B cũng như bộ giải mã 7 đoạn. Thay đổi đầu vào và đầu ra của mã
của bạn để sử dụng công tắc SW30 trên bảng DE2 để biểu diễn số nhị
phân V và màn hình hiển thị HEX1 và HEX0 để hiển thị giá trị của các chữ
số thập phân d1 và d0. Đảm bảo đưa vào dự án của bạn các nhiệm vụ ghim
cần thiết cho bo mạch DE2.

18
Hình 2.3 Mổ tả mạch điện và bảng chân lí lab 2 part 2.

-Code:
module phan2 (SW, HEX0, HEX1, HEX2, HEX3);
input [17:0] SW;
output [0:6] HEX0, HEX1, HEX2, HEX3;
wire z;
wire [3:0] M, A;
assign A[3] = 0;
comparator C0 (SW[3:0], z);
mach_A A0 (SW[3:0], A[2:0]);
bo_phan_kenh M0 (z, SW[3:0], A, M);
mach_B B0 (z, HEX1);
b2d_7seg S0 (M, HEX0);
endmodule
module b2d_7seg (X, SSD);
input [3:0] X;
output [0:6] SSD;

assign SSD[0] = ((~X[3] & ~X[2] & ~X[1] & X[0]) | (~X[3] & X[2] & ~X[1] &
~X[0]));

19
assign SSD[1] = ((~X[3] & X[2] & ~X[1] & X[0]) | (~X[3] & X[2] & X[1] &
~X[0]));
assign SSD[2] = (~X[3] & ~X[2] & X[1] & ~X[0]);
assign SSD[3] = ((~X[3] & ~X[2] & ~X[1] & X[0]) | (~X[3] & X[2] & ~X[1] &
~X[0]) | (~X[3] & X[2] & X[1] & X[0]) | (X[3] & ~X[2] & ~X[1] & X[0]));
assign SSD[4] = ~((~X[2] & ~X[0]) | (X[1] & ~X[0]));
assign SSD[5] = ((~X[3] & ~X[2] & ~X[1] & X[0]) | (~X[3] & ~X[2] & X[1] &
~X[0]) | (~X[3] & ~X[2] & X[1] & X[0]) | (~X[3] & X[2] & X[1] & X[0]));
assign SSD[6] = ((~X[3] & ~X[2] & ~X[1] & X[0]) | (~X[3] & ~X[2] & ~X[1] &
~X[0]) | (~X[3] & X[2] & X[1] & X[0]));
endmodule
module comparator (V, z);
input [3:0] V;
output z;
assign z = (V[3] & (V[2] | V[1]));
endmodule
module mach_A (V, A);
input [2:0] V;
output [2:0] A;
assign A[0] = V[0];
assign A[1] = ~V[1];
assign A[2] = (V[2] & V[1]);
endmodule
module mach_B (z, SSD);
input z;
output [0:6] SSD;
assign SSD[0] = z;
assign SSD[1:2] = 2'b00;
assign SSD[3:5] = {3{z}};
assign SSD[6] = 1;
endmodule
module bo_phan_kenh (s, U, V, M);
20
input s;
input [3:0] U, V;
output [3:0] M;
assign M = ({4{~s}} & U) | ({4{s}} & V);
endmodule

Hình 2.4 Viewer RTL code lab 2 part 2.

Hình 2.5 Kết quả test DE2 lab 2 part 2.

Part 3:
 Nội dung: Mạch cộng 4 bit. Sử dụng công tắc SW7−4 và SW3−0 để đại diện
cho các đầu vào A và B tương ứng. Sử dụng SW8 cho C_in bổ sung của bộ
cộng. Kết nối các công tắc SW với đèn LEDR (đèn đỏ) tương ứng của
chúng, và kết nối đầu ra của bộ cộng, C_out và S, với đèn LEDG (đèn xanh).

21
Hình 2.6 Mô tả mạch điên và bảng chân lí lab 2 part 3.

-Code:
module phan3 (SW, LEDG, LEDR);
input [17:0] SW;
output [8:0] LEDR, LEDG;
assign LEDR[8:0] = SW[8:0];
wire c1, c2, c3;
bo_cong A0 (SW[0], SW[4], SW[8], LEDG[0], c1);
bo_cong A1 (SW[1], SW[5], c1, LEDG[1], c2);
bo_cong A2 (SW[2], SW[6], c2, LEDG[2], c3);
bo_cong A3 (SW[3], SW[7], c3, LEDG[3], LEDG[4]);
endmodule
module bo_cong (a, b, ci, s, co);
input a, b, ci;
output co, s;
wire d;
assign d = a ^ b;
assign s = d ^ ci;
assign co = (b & ~d) | (d & ci);
endmodule

22
Hình 2.7 Viewer RTL code lab 2 part 3.

Hình 2.8 Kết quả test DE2 lab 2 part 3.

Part 4:
 Nội dung: Trong phần II, chúng ta đã thảo luận về việc chuyển đổi các số nhị
phân thành các chữ số thập phân. Đôi khi nó hữu ích để xây dựng các mạch
sử dụng phương pháp biểu diễn số thập phân này, trong đó mỗi chữ số thập
phân được biểu diễn bằng cách sử dụng bốn bit. Lược đồ này được gọi là
biểu diễn số thập phân được mã hóa nhị phân (BCD). Ví dụ, số thập phân giá
trị 59 được mã hóa ở dạng BCD là 0101 1001. Bạn phải thiết kế một mạch
có thêm hai chữ số BCD. Các đầu vào cho mạch là số BCDAandB, cộng với
hành lý, cin. Đầu ra phải là tổng BCD có hai chữ số S1S0. Lưu ý rằng tổng
lớn nhất cần phải là được xử lý bởi mạch này làS1S0 = 9 + 9 + 1 = 19. Thực
hiện các bước dưới đây.

-Code:
module phan4 (SW, LEDG, LEDR, HEX1, HEX0);

23
input [17:0] SW;
output [8:0] LEDR, LEDG;
output [0:6] HEX1, HEX0;
assign LEDR[8:0] = SW[8:0];
wire e1, e2;
comparator C0 (SW[3:0], e1);
comparator C1 (SW[7:4], e2);
assign LEDG[8] = e1 | e2;
wire c1, c2, c3;
wire [4:0] S;
bo_cong A0 (SW[0], SW[4], SW[8], S[0], c1);
bo_cong A1 (SW[1], SW[5], c1, S[1], c2);
bo_cong A2 (SW[2], SW[6], c2, S[2], c3);
bo_cong A3 (SW[3], SW[7], c3, S[3], S[4]);
assign LEDG[4:0] = S[4:0];
wire z;
wire [3:0] A, M;
comparator9 C2 (S[4:0], z);
mach_A AA (S[3:0], A);
muxtip M0 (z, S[3:0], A, M);
mach_B BB (z, HEX1);
b2d_7seg S0 (M, HEX0);
endmodule
module bo_cong (a, b, ci, s, co);
input a, b, ci;
output co, s;
wire d;
assign d = a ^ b;
assign s = d ^ ci;
assign co = (b & ~d) | (d & ci);
endmodule

24
module b2d_7seg (X, SSD);
input [3:0] X;
output [0:6] SSD;
assign SSD[0] = ((~X[3] & ~X[2] & ~X[1] & X[0]) | (~X[3] & X[2] & ~X[1] &
~X[0]));
assign SSD[1] = ((~X[3] & X[2] & ~X[1] & X[0]) | (~X[3] & X[2] & X[1] &
~X[0]));
assign SSD[2] = (~X[3] & ~X[2] & X[1] & ~X[0]);
assign SSD[3] = ((~X[3] & ~X[2] & ~X[1] & X[0]) | (~X[3] & X[2] & ~X[1] &
~X[0]) | (~X[3] & X[2] & X[1] & X[0]) | (X[3] & ~X[2] & ~X[1] & X[0]));
assign SSD[4] = ~((~X[2] & ~X[0]) | (X[1] & ~X[0]));
assign SSD[5] = ((~X[3] & ~X[2] & ~X[1] & X[0]) | (~X[3] & ~X[2] & X[1] &
~X[0]) | (~X[3] & ~X[2] & X[1] & X[0]) | (~X[3] & X[2] & X[1] & X[0]));
assign SSD[6] = ((~X[3] & ~X[2] & ~X[1] & X[0]) | (~X[3] & ~X[2] & ~X[1] &
~X[0]) | (~X[3] & X[2] & X[1] & X[0]));
endmodule
module comparator (V, z);
input [3:0] V;
output z;
assign z = (V[3] & (V[2] | V[1]));
endmodule
module comparator9 (V, z);
input [4:0] V;
output z;
assign z = V[4] | ((V[3] & V[2]) | (V[3] & V[1]));
endmodule
module mach_A (V, A);
input [3:0] V;
output [3:0] A;
assign A[0] = V[0];
assign A[1] = ~V[1];
assign A[2] = (~V[3] & ~V[1]) | (V[2] & V[1]);
25
assign A[3] = (~V[3] & V[1]);
endmodule
module mach_B (z, SSD);
input z;
output [0:6] SSD;
assign SSD[0] = z;
assign SSD[1:2] = 2'b00;
assign SSD[3:5] = {3{z}};
assign SSD[6] = 1;
endmodule
module muxtip (s, U, V, M);
input s;
input [3:0] U, V;
output [3:0] M;
assign M = ({4{~s}} & U) | ({4{s}} & V);
endmodule
-Viewer RTL code:

26
Hình 2.9 Viewer RTL code lab 2 part 4.

Hình 2.10 Kết quả test DE2 lab 2 part 4.

Part 5:
 Nội dung: Thiết kế một mạch có thể cộng hai số BCD có 2 chữ số, A1A0 và
B1 B0 để tạo ra tổng BCD có ba chữ số S2S1S0. Sử dụng hai phiên bản
mạch của bạn từ phần IV để xây dựng bộ cộng BCD hai chữ số này. Thực
hiện các bước phía dưới:

-Code:
module phan51(in, HEX0);
input [3:0] in;
output reg [6:0] HEX0;
always @(*) begin
case(in)
4'b0000 : HEX0 = 7'b1000000;
4'b0001 : HEX0 = 7'b1111001;
4'b0010 : HEX0 = 7'b0100100;
4'b0011 : HEX0 = 7'b0110000;
4'b0100 : HEX0 = 7'b0011001;
27
4'b0101 : HEX0 = 7'b0010010;
4'b0110 : HEX0 = 7'b0000010;
4'b0111 : HEX0 = 7'b1111000;
4'b1000 : HEX0 = 7'b0000000;
4'b1001 : HEX0 = 7'b0010000;
default HEX0 = 7'b1111111;
endcase
end
endmodule
module phan52(b,a,cin,s,cout);
input b, a, cin;
output s;
output reg cout;
wire m;
assign m = a^b;
assign s = cin^m;
always @(*) begin
if(m == 0) cout <= b;
else cout <= cin;
end
endmodule
module phan53(in, HEX0);
input [4:0] in;
output reg [6:0] HEX0;
always @(*) begin
case(in)
5'b00000 : HEX0 = 7'b1000000;
5'b00001 : HEX0 = 7'b1111001;
5'b00010 : HEX0 = 7'b0100100;
5'b00011 : HEX0 = 7'b0110000;
5'b00100 : HEX0 = 7'b0011001;

28
5'b00101 : HEX0 = 7'b0010010;
5'b00110 : HEX0 = 7'b0000010;
5'b00111 : HEX0 = 7'b1111000;
5'b01000 : HEX0 = 7'b0000000;
5'b01001 : HEX0 = 7'b0010000;
5'b01010 : HEX0 = 7'b1000000;
5'b01011 : HEX0 = 7'b1111001;
5'b01100 : HEX0 = 7'b0100100;
5'b01101 : HEX0 = 7'b0110000;
5'b01110 : HEX0 = 7'b0011001;
5'b01111 : HEX0 = 7'b0010010;
5'b10000 : HEX0 = 7'b0000010;
5'b10001 : HEX0 = 7'b1111000;
5'b10010 : HEX0 = 7'b0000000;
5'b10011 : HEX0 = 7'b0010000;
default HEX0 = 7'b1111111;
endcase
end
endmodule

module phan54(c_out, s);


input c_out;
output reg s;
always @(*) begin
if(c_out == 0) s <= 0;
else s <= 1;
end
endmodule
module phan55(s0, s);
input [4:0] s0;
output reg [4:0] s;

29
always @(*) begin
case(s0)
5'b00000 : s = 5'b00000;
5'b00001 : s = 5'b00001;
5'b00010 : s = 5'b00010;
5'b00011 : s = 5'b00011;
5'b00100 : s = 5'b00100;
5'b00101 : s = 5'b00101;
5'b00110 : s = 5'b00110;
5'b00111 : s = 5'b00111;
5'b01000 : s = 5'b01000;
5'b01001 : s = 5'b01001;
5'b01010 : s = 5'b00000;
5'b01011 : s = 5'b00001;
5'b01100 : s = 5'b00010;
5'b01101 : s = 5'b00011;
5'b01110 : s = 5'b00100;
5'b01111 : s = 5'b00101;
5'b10000 : s = 5'b00110;
5'b10001 : s = 5'b00111;
5'b10010 : s = 5'b01000;
5'b10011 : s = 5'b01001;
default s = 5'b00000;
endcase
end
endmodule

module phan5(b,a,cin,hex7,hex6,hex5,hex4,hex2,hex1,hex0,ledg8);
input [7:0] b, a;
input cin;
wire cout0,cout1,cout2,cout3,cout4,cout5,cout6,cout;

30
wire [4:0] s0, s1, S0;
reg [5:0] S1;
wire s_du;
output [6:0] hex7,hex6,hex5,hex4,hex1,hex0;
output reg [6:0] hex2;
output reg ledg8;
phan52 p5_s00(b[0], a[0], cin, s0[0], cout0);
phan52 p5_s01(b[1], a[1], cout0, s0[1], cout1);
phan52 p5_s02(b[2], a[2], cout1, s0[2], cout2);
phan52 p5_s03(b[3], a[3], cout2, s0[3], cout3);
phan54 p5_1(cout3, s0[4]);
phan55 p5_3(s0, S0);
phan52 p5_s10(b[4], a[4], cout3, s1[0], cout4);
phan52 p5_s11(b[5], a[5], cout4, s1[1], cout5);
phan52 p5_s12(b[6], a[6], cout5, s1[2], cout6);
phan52 p5_s13(b[7], a[7], cout6, s1[3], cout);
phan54 p5_2(cout, s1[4]);
phan51 p5_a1(a[7:4], hex7);
phan51 p5_a0(a[3:0], hex6);
phan51 p5_b1(b[7:4], hex5);
phan51 p5_b0(b[3:0], hex4);
phan51 p5_h0(S0, hex0);
phan53 p5_h1(S1, hex1);
always @(*) begin
case(s0)
5'b01010 : S1 = s1 + 1;
5'b01011 : S1 = s1 + 1;
5'b01100 : S1 = s1 + 1;
5'b01101 : S1 = s1 + 1;
default S1 = s1;
endcase

31
if(a[7:4] > 4'b1001 || b[7:4] > 4'b1001 || a[3:0] > 4'b1001 || b[3:0] > 4'b1001)
ledg8 <= 1;
else ledg8 <= 0;
if(S1 < 5'b01010)
hex2 <= 7'b1000000;
else hex2 <= 7'b1111001;
end
endmodule
-Viewer RTL code:

Hình 2.11 Viewer RTL code lab 2 part 5.

3. Kết luận:
32
- Sau bài thực hành sinh viên có thể sử dụng được ngôn ngử Verilog
HDL để thiết kết một số mạch đợn giản.
- Biết cách sử dụng kit DE2.
- Nắm rõ được một số mạch đơn giản.
4. Tài liệu tham khảo:
Nguyễn Công Hà., “Giao trinh ngon ngu mo ta phan cung Verilog”,
https://tailieu.vn/doc/giao-trinh-ngon-ngu-mo-ta-phan-cung-verilog-dh-quoc-
gia-tp-hcm-1614261.html
Nguyễn H Việt., “Phần mềm Quartus II”,
https://baigiang.violet.vn/present/quartus-ii-749276.html
Altera., “Laboratory Exercise 1”, lab1_Verilog.pdf
Altera., “Laboratory Exercise 2”, lab2_Verilog.pdf
Vimach., “Phan mem Modelsim”, http://vimach.net/threads/huong-dan-su-
dung-modelsim.987/

33
NHẬN XÉT VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN

Nhận xét của GV:


………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
……………………………………………………………………………………
Điểm đánh giá của GV:
Bằng số: …………………….. Bằng chữ:
……………………………………………..

Tp. Huế, ngày 17 tháng 1 năm 2021.


Ký tên.

34

You might also like