THÍ NGHIỆM 1Mục tiêu: Nắm được các thức mô tả mạch tính giá trị tuyệt đối của một số 4 bit sử dụng ngôn ngữ systemverilog và thực hiện kiểm tra hoạt động trên kit FPGA.. THÍ NGHIỆM 2Mục
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN KỸ THUẬT ĐIỆN TỬ
BÁO CÁO LAB 4
KỸ THUẬT SỐ (TN) (EE1010)
GVHD: Vũ Quang Thời Lớp DT04 – Nhóm 03
TP HỒ CHÍ MINH, 2023
Trang 3Trường hợp Input = 101
Trường hợp Input = 100
Trang 4THÍ NGHIỆM 1
Mục tiêu: Nắm được các thức mô tả mạch tính giá trị tuyệt đối của một số 4 bit sử dụng
ngôn ngữ systemverilog và thực hiện kiểm tra hoạt động trên kit FPGA
Yêu cầu: Sinh viên thực hiện mô tả mạch tính giá trị tuyệt đối của một số 4 bit (số ngõ
vào lần lượt là A, ngõ ra là S)
Kiểm tra:
➢ Sinh viên trình bày ý tưởng của thiết kế (Sinh viên có thể vẽ sơ đồ khối và/hoặc diễn giải để giáo viên hiểu được ý tưởng của mình)
+ Dùng câu lệnh if else để đảo giá trị của ngõ vào
➢ Chương trình mô tả hoạt động của thiết kế
if (A[3]== 1'b0)S=A;
else S=-A;
endendmodule
➢ Kết quả RTL viewer
➢ Sinh viên thực hiện gán chân theo yêu cầu và sau đó đổ lên kit FPGA DE2 Sau đó ghi nhận kết quả
Trang 5Chân A[3:0] được nối với SW0-SW3 và LEDR[3:0] (để kiểm tra mức tín hiệu khi bật SW) Chân S[3:0] được nối với LEDG[3:0]
Trường hợp A = 1101 (-3) => S = 0011 (3)
Trường hợp A =0 001 (1) => S = 0001 (1)
Trang 6THÍ NGHIỆM 2
Mục tiêu: Nắm được các thức mô tả khối ALU (bộ tính toán) có chức năng đơn giản sử
dụng systemverilog và thực hiện kiểm tra hoạt động trên kit FPGA
Yêu cầu: Sinh viên thực hiện mô tả mạch cho mạch thực hiện bộ ALU tính toán 2 số 4
bit (hai số ngõ vào lần lượt là A và B, ngõ ra là S, cờ nhớ Ci và Co) thông qua ngõ vào điều khiển 2 bit Sel
- Nếu Sel=00: S=A+B
- Nếu Sel=01: S=A-B
- Nếu Sel=10: S=A AND B
- Nếu Sel=11: S=A OR B
Trang 7Kết quả nối kit:
B = LEDR[3:0]
A = LEDR[7:4]
Sel = LEDR[17:16]
S = LEDG[3:0]
Trường hợp sel = 00, A=3, B=1 => S=4
Trường hợp sel = 01, A=3, B=1 => S=2
Trang 8Trường hợp sel = 10, A=0011, B=0001 => S=0001
Trường hợp sel = 11, A=0011, B=0001 => S=0011
Trang 9THÍ NGHIỆM 3
Mục tiêu: Nắm được các thức mô tả mạch đếm đầy đủ sử dụng ngôn ngữ systemverilog
và thực hiện kiểm tra hoạt động trên kit FPGA
Yêu cầu: Sinh viên thực hiện thiết kế mô tả mạch đếm xuống 3 bit đầy đủ sử dụng ngôn
ngữ system verilog Giá trị đếm thay đổi sau mỗi 1s Ngõ ra được kết nối với LED 7 đoạnloại anode chung Ngoài ra, bộ đếm còn có chân RST (tích cực cao) dùng để reset trạngthái bộ đếm về 0
Gợi ý:
- Tín hiệu clock được tạo từ bộ chia tần số từ 50MHz sang 1s
- Sinh viên sử dụng chương trình chuyển từ mã BCD sang LED 7 đoạn trong PRELAB,kết nối ngõ ra của bộ đếm với ngõ vào của bộ chuyển đổi
Trang 11input logic clk_i,
input logic rst_ni,
output logic clk_o
Trang 12module bcd2hex (
input logic [3:0] bcd_i,
output logic [6:0] led_o
);
always_comb begin
case(bcd_i)
4'b0000: led_o = 7'b1000000; // 0 4'b0001: led_o = 7'b1111001; // 1 4'b0010: led_o = 7'b0100100; // 2 4'b0011: led_o = 7'b0110000; // 3 4'b0100: led_o = 7'b0011001; // 4 4'b0101: led_o = 7'b0010010; // 5 4'b0110: led_o = 7'b0000010; // 6 4'b0111: led_o = 7'b1111000; // 7 4'b1000: led_o = 7'b0000000; // 8 4'b1001: led_o = 7'b0010000; // 9 4'b1010: led_o = 7'b0001000; // A 4'b1011: led_o = 7'b0000011; // B 4'b1100: led_o = 7'b1000110; // C 4'b1101: led_o = 7'b0100001; // D 4'b1110: led_o = 7'b0000110; // E 4'b1111: led_o = 7'b0001110; // F default: led_o = 7'b1111111; // blank endcase
end
endmodule : bcd2hex
Đếm bằng nút, ấn nút thì chạy:
Trang 13module on_tap (
input Res,
input wire Clk_in, // Ngõ vào và xung Clock 50MHz
output reg Clk_out, // Ngõ ra là xung Clock 1Hz sau khi qua bộ xử lý output reg [2:0] I, // Biến đếm
output [6:0] LED_1
);
integer i = 0; // Biến đếm cho xung Clock
// Khởi tạo giá trị biến đếm và xung Clock 1Hz
initial begin
Clk_out = 0;
I = 3'b111; // Bắt đầu đếm từ 5
end
// Kiểm tra nút reset và đếm
always_ff @(posedge Clk_in or posedge Res) begin
if (Res) begin
I <= 3'b111; // Reset về giá trị 7
end else if (I == 3'b000) begin
I <= 3'b111; // Nếu đạt giá trị 0, quay lại giá trị 7
end else begin
I <= I - 1; // Giam giá trị đếm
end
end
// Bộ chuyển đổi xung từ 50MHz còn 1Hz
always_ff @(posedge Clk_in) begin
Trang 14LED_1 = 7'b1111_001; // Số 1
end3'b010: begin LED_1 = 7'b0100_100; // Số 2
end 3'b011: begin
LED_1 = 7'b0110_000; // Số 3
end3'b100: begin LED_1 = 7'b0011_001; // Số 4
end3'b101: begin LED_1 = 7'b0010_010; // Số 5
end3'b110: begin
Trang 15LED_1 = 7'b0000_010; // Số 6
end3'b111: begin LED_1 = 7'b1111_000; // Số 7
end default: begin
Trang 16 Kết quả mô phỏng dạng sóng.
Trang 17 Kết quả RTL viewer.
Sinh viên thực hiện gán chân theo yêu cầu và sau đó đổ lên kit FPGA DE2 Sau đóghi nhận kết quả
Gán chân theo mẫu sau:
LED 7 đoạn là HEX0
Chân RST là SW0
Trang 18THÍ NGHIỆM 4
Mục tiêu: Nắm được các thức mô tả mạch đếm đầy đủ sử dụng ngôn ngữ systemverilog
và thực hiện kiểm tra hoạt động trên kit FPGA
Yêu cầu: Sinh viên thực hiện thiết kế mô tả mạch đếm lên 4 bit từ 5 đến 14 sử dụng
ngôn ngữ system verilog Giá trị đếm thay đổi sau mỗi 1s Ngõ ra 4 bit được kết nối với 2LED 7 đoạn loại anode chung Ngoài ra, bộ đếm còn có chân RST (tích cực cao) dùng đểreset trạng thái bộ đếm về 0
Gợi ý:
- Tín hiệu clock được tạo từ bộ chia tần số từ 50MHz sang 1s
- Sinh viên sử dụng chương trình chuyển từ mã BCD sang LED 7 đoạn trong PRELAB,kết nối ngõ ra của bộ đếm với ngõ vào của bộ chuyển đổi
- Sinh viên cần viết thêm bộ chuyển đổi từ số 4 bit sang số BCD
Trang 19led_u(HEX1) );
end else begin
if (i_1 == 4'd0 && i_2 == 4'd1) begin
i_1 <= 4'd9;
i_2 <= 4'd0;
end else begin
if (i_1 == 4'd0 && i_2 == 4'd0) begin i_1 <= 4'd5;
i_2 <= 4'd1;
end else begin
i_1 <= i_1 - 4'd1; end
end
Trang 20end
end
endmodule : tn4
module clock_generate (
input logic clk_i,
input logic rst_ni,
output logic clk_o
Trang 21input logic [3:0] bcd_i,
input logic [3:0] bcd_u,
output logic [6:0] led_o,
output logic [6:0] led_u
);
always_comb begin
case(bcd_i)
4'b0000: led_o = 7'b1000000; // 0 4'b0001: led_o = 7'b1111001; // 1 4'b0010: led_o = 7'b0100100; // 2 4'b0011: led_o = 7'b0110000; // 3 4'b0100: led_o = 7'b0011001; // 4 4'b0101: led_o = 7'b0010010; // 5 4'b0110: led_o = 7'b0000010; // 6 4'b0111: led_o = 7'b1111000; // 7 4'b1000: led_o = 7'b0000000; // 8 4'b1001: led_o = 7'b0010000; // 9 default: led_o = 7'b1111111; // blank endcase
end
always_comb begin
case(bcd_u)
4'b0000: led_u = 7'b1000000; // 0 4'b0001: led_u = 7'b1111001; // 1 default: led_u = 7'b1111111; // blank endcase
end
Trang 22endmodule : bcd2hex
Đếm bằng tay (từ 0-7):
module on_tap (
input Res,
input wire Clk_in, // Ngõ vào và xung Clock 50MHz
output reg Clk_out, // Ngõ ra là xung Clock 1Hz sau khi qua bộ xử lý output reg [2:0] I, // Biến đếm
output [6:0] LED_1
);
integer i = 0; // Biến đếm cho xung Clock
// Khởi tạo giá trị biến đếm và xung Clock 1Hz
initial begin
Clk_out = 0;
I = 3'b000;
end
// Kiểm tra nút reset và đếm
always_ff @(posedge Clk_in or posedge Res) begin
Trang 23// Bộ chuyển đổi xung từ 50MHz còn 1Hz
always_ff @(posedge Clk_in) begin
LED_1 = 7'b1111_001; // Số 1
end3'b010: begin
LED_1 = 7'b0100_100; // Số 2
end 3'b011: begin
LED_1 = 7'b0110_000; // Số 3
end3'b100: begin
LED_1 = 7'b0011_001; // Số 4
end3'b101: begin
Trang 24LED_1 = 7'b0010_010; // Số 5
end3'b110: begin
LED_1 = 7'b0000_010; // Số 6
end3'b111: begin
LED_1 = 7'b1111_000; // Số 7
end default: begin
Gán chân theo mẫu sau:
Hai LED 7 đoạn là HEX1 (trọng số cao) và HEX0 (trọng số thấp)
Chân RST là SW0
Trang 25THÍ NGHIỆM 5
Mục tiêu: Nắm được các thức mô tả máy trạng thái sử dụng ngôn ngữ systemverilog và
thực hiện kiểm tra hoạt động trên kit FPGA
Yêu cầu: Sinh viên tiến hành mô tả hệ tuần tự sau bằng VHDL sau đó nạp chương trình
xuống kit DE2 để kiểm tra hoạt động:
Hệ tuần tự có 1 ngõ vào (X) và 1 ngõ ra (Z) Ngõ ra Z = 1 nếu tổng số bit 1 nhận đượcchia hết cho 3 (quy ước 0, 3, 6, 9, … là các số chia hết cho 3 ) và tổng số bit 0 nhận được
là 1 số chẵn (lớn hơn 0)
Ghi chú: Sinh viên có thể lựa chọn thiết kế theo máy trạng thái kiểu Mealy hoặc Moore Gán chân theo mẫu sau:
Ngõ vào X được nối với SW0
Tín hiệu CLK được nối với xung clock 1Hz (Trong bài PRELAB)
Ngõ ra Z được nối với LED0
Trang 27THÍ NGHIỆM 6
Mục tiêu: Nắm được các thức mô tả máy trạng thái sử dụng ngôn ngữ systemverilog và
thực hiện kiểm tra hoạt động trên kit FPGA
Yêu cầu: Sinh viên tiến hành mô tả hệ tuần tự sau bằng VHDL sau đó nạp chương trình
xuống kit DE2 để kiểm tra hoạt động:
Một hệ thống cung cấp thức ăn và nước uống tự động cho thú cưng gồm 2 ngõ vào là 2
- Ở mỗi thời điểm, chỉ có 1 nút nhấn
- Các nút nhấn cần phải được tác động liên tiếp, nếu có 1 nút sai trình tự, máy trạng tháisẽ
quay trở về trạng thái ban đầu (ví dụ: khi các nút nhấn được tác động theo trình tự (RED,RED, BLUE), máy trạng thái quay về trạng thái đầu reset)
Ghi chú: Sinh viên có thể lựa chọn thiết kế theo máy trạng thái kiểu Mealy hoặc Moore Gán chân theo mẫu sau:
Ngõ vào RED và BLUE lần lượt được nối với SW0 và SW1
Tín hiệu CLK được nối với xung clok 1Hz (Trong bài PRELAB)
Ngõ ra FOOD và WATER lần lượt được nối với LED0 và LED1
Kiểm tra:
Trang 28 Sinh viên trình bày ý tưởng của thiết kế (Sinh viên có thể vẽ sơ đồ khối (máytrạng thái) và/hoặc diễn dãi để giáo viên hiểu được ý tưởng của mình)
Chương trình mô tả hoạt động của thiết kế