设计一个LED,按照1毫秒的速率进行翻转
晶振:50MHZ;
周期:20ns;
计数次数:1ms=1000000ns/20ns -1=49_999次;
同时49_999次采用程序员计算机可知,需要一个16为的计数器。
module led_test(clk,rst_n,led);
input clk;
input rst_n;
output reg led;
reg [15:0] cnt;
always@(posedge clk or negedge rst_n)
if(!rst_n)
cnt <= 0;
else if(cnt == 49_999)
cnt <= 0;
else
cnt <= cnt + 1'b1;
always@(posedge clk or negedge rst_n)
if(!rst_n)
led <= 0;
else if(cnt == 49_999)
led <= ~led;
endmodule
testbench测试:
`timescale 1ns/1ns
module led_test_tb;
reg clk;
reg rst_n;
wire led;
led_test led_test(
.clk(clk),
.rst_n(rst_n),
.led(led)
);
initial clk = 1;
always #10 clk=~clk;
initial begin
rst_n=0;
#200;
rst_n = 1;
#10000000;//这里代表跑10ms
$stop;
end
endmodule
可以看出时间间隔正是1ms,所以实现了1ms翻转一次。
采用Grid&Timeline能够进行时间单位的修改。