代码如下所示
module counter_led_1(
Clk,
Reset_n,
Led
);
input Clk;
input Reset_n;
output reg Led;
reg [25:0]counter1;
parameter MCNT=50000000;
always@(posedge Clk or negedge Reset_n)
if(!Reset_n)
counter1 <= 0;
else if(counter1 == MCNT-1)
counter1 <= 0;
else
counter1 <= counter1 + 1'b1;
always@(posedge Clk or negedge Reset_n)
if(!Reset_n)
Led <= 0;
else if(counter1 == (MCNT/2)+(MCNT/4)-1) //将1秒四等分的意思
Led <= 1;
else if(counter1 == MCNT-1)
Led <= 0;
endmodule
将一秒分为四等分,等到0.75秒的时候先亮0.25秒,然后再依次循环即可。
模拟仿真代码如下:
`timescale 1ns/1ns
module counter_led_0_tb();
reg Clk_0;
reg Reset_n_0;
wire Led_0;
counter_led_1 counter_led_0_inst0(
.Clk(Clk_0),
.Reset_n(Reset_n_0),
.Led(Led_0)
);
initial Clk_0=1;
always #10 Clk_0 =!Clk_0;
defparam counter_led_1.MCNT=50000;
initial begin
Reset_n_0 <= 0;
#201;
Reset_n_0 <=1;
#400000000;
$stop;
end
endmodule