LAB8
LAB8
module MUX8_1(
input wire KEY0, KEY1, KEY2,
input wire [7:0]SW,
output wire LED0
);
endmodule
CAU3//////////////
module MUX8_1 (
input wire clk_50MHz,
input wire KEY0, // Start/Pause (active-low)
input wire KEY1, // Reset (active-low)
output wire [0:6] HEX3, // Minutes tens
output wire [0:6] HEX2, // Minutes ones
output wire [0:6] HEX1, // Seconds tens
output wire [0:6] HEX0 // Seconds ones
);
// Edge detection
btn_start_prev <= btn_start_clean;
btn_reset_prev <= btn_reset_clean;
end
// Timer logic
reg [3:0] sec_ones, sec_tens, min_ones, min_tens;
reg is_running;
if (btn_reset_edge) begin
sec_ones <= 0;
sec_tens <= 0;
min_ones <= 0;
min_tens <= 0;
// Nếu đang chạy thì tiếp tục chạy, nếu đang dừng thì vẫn dừng
// Không thay đổi is_running
end else if (is_running && clk_1Hz) begin
// Dừng khi đạt 10:00
if (min_tens == 1 && min_ones == 0 && sec_tens == 0 && sec_ones == 0)
is_running <= 0;
else begin
sec_ones <= sec_ones + 1;
if (sec_ones == 9) begin
sec_ones <= 0;
sec_tens <= sec_tens + 1;
if (sec_tens == 5) begin
sec_tens <= 0;
min_ones <= min_ones + 1;
if (min_ones == 9) begin
min_ones <= 0;
min_tens <= min_tens + 1;
end
end
end
end
end
end
endmodule
CAU2///////////////////////////////////////
module serial_output (
input wire clk,
input wire reset,
output reg [7:0] data
);
endmodule
testbench////////////////////////////////////
`timescale 1ns/1ps
module tb_serial_output;
serial_output uut (
.clk(clk),
.reset(reset),
.data(data)
);
// Clock 10ns
always #5 clk = ~clk;
initial begin
clk = 0;
reset = 0;
// Test 3: Reset sau khi xuất > 1/2 chuỗi (sau 3 ký tự)
#30; // Thêm 3 chu kỳ nữa
reset = 1; #10;
reset = 0;
$finish;
end
endmodule