Lập trình đồng hồ số trong Verilog

Bài viết này chúng ta cùng tạo lập trình đồng hồ số bằng verilog nhé! Mình chỉ tập trung vào module điều khiển để xuất ra giờ, phút, giây cho module hiển thị thôi, trên thực tế gồm module chia tần (frequency division), module điều khiển (controller), module hiển thị (display), ... Bắt đầu thôi.............

Module controller: đầu vào là xung clock và tín hiệu reset, đầu ra gồm hours (0 -> 23), minutes (0 -> 59), seconds (0 -> 59).

module controller(clk, rst, h, m, s);
input clk, rst;
output h, m, s;
reg[4:0] h;
reg[5:0] m, s;

always@(posedge clk or negedge rst) begin
if(!rst) begin
	h <= 0;
	m <= 0;
	s <= 0;
end
else if(h == 23 && m == 59 && s == 59) begin
	h <= 0;
	m <= 0;
	s <= 0;
end
else if(m == 59 && s == 59) begin
	h <= h + 1;
	m <= 0;
	s <= 0;
end
else if(s == 59) begin
	m <= m + 1;
	s <= 0;
end
else
	s <= s + 1;
end
endmodule

Ta viết code testbench xem sao nhé!

`timescale 10s/1s
module tb_digital_clock;
reg clk, rst;
wire[4:0] h;
wire[5:0] m, s;

controller c(.clk(clk), .rst(rst), .h(h), .m(m), .s(s));

initial begin
	rst = 0;
	#10 rst = 1;
	clk = 0;
	forever #0.5 clk = ~clk;
end
endmodule

testbench-digital-clockHẹn gặp lại các bạn ở bài viết khác nhé!

Web hosting by Somee.com