一、代码实现
设计定义:实现8个灯,每个灯亮0.5秒,循环闪烁。
设计代码:
`timescale 1ns / 1ns
module led_run(
input clk ,
input rstn ,
output[7:0] led
);
reg[7:0] r_led;
assign led = r_led;
reg[24:0] cnt ;
always @(posedge clk or negedge rstn) begin
if(!rstn)
cnt <= 0;
else if(cnt == 25_000_000-1)
cnt <= 0;
else
cnt <= cnt + 1'd1;
end
always @(posedge clk or negedge rstn) begin
if(!rstn)
r_led <= 8'b0000_0001;
else if(cnt == 25_000_000-1)
r_led <= {r_led[6:0],r_led[7]};
else
r_led <= r_led;
end
endmodule
二、仿真
`timescale 1ns / 1ns
module led_run_tb();
reg clk ;
reg rstn ;
wire[7:0] led ;
led_run inst0(
.clk (clk ) ,
.rstn (rstn ) ,
.led (led )
);
initial clk = 1;
always #10 clk = ~clk;
initial begin
rstn = 0;
#201;
rstn = 1;
#2000_000_000;//#4000_000_000超过数额范围
#2000_000_000
#500_000_000
$stop;
end
endmodule
仿真时间为:0.5*9=4.5s.
ps:在实际仿真时,可以不必要完全实现0.5s的时间要求,可以实现0.05s,0.005s来缩短仿真时间,但是功能仿真效果图差不多,注意最后上板调试必须是0.5s的时间。