一、代码实现
设计定义:LED0以1HZ的频率闪烁,时间间隔为500ms;
LED1以2HZ的频率闪烁,时间间隔为250ms;
LED2以4HZ的频率闪烁,时间间隔为125ms;
LED3以10HZ的频率闪烁,时间间隔为50ms
1.通过对一个灯闪烁程序某块的调用,实现4个LED的闪烁。
通过设定parameter MCNT来控制每一个LED灯的闪烁频率。
`timescale 1ns / 1ns
module led_run8(
input clk ,
input rstn ,
output[3:0] led
);
led_flash#( //LED0以1HZ的频率闪烁,时间间隔为500ms
.MCNT(24_999_999) //500*10^6/20
)led_flash_inst0(
.clk (clk ) ,
.rstn (rstn) ,
.led (led[0])
);
led_flash#( //LED1以2HZ的频率闪烁,时间间隔为250ms
.MCNT(12_499_999) //250*10^6/20
)led_flash_inst1(
.clk (clk ) ,
.rstn (rstn) ,
.led (led[1])
);
led_flash#( //LED2以4HZ的频率闪烁,时间间隔为125ms
.MCNT(6_249_999) //125*10^6/20
)led_flash_inst2(
.clk (clk ) ,
.rstn (rstn) ,
.led (led[2])
);
led_flash#( //LED3以10HZ的频率闪烁,时间间隔为50ms
.MCNT(2_499_999) // 50*10^6/20
)led_flash_inst3(
.clk (clk ) ,
.rstn (rstn) ,
.led (led[3])
);
endmodule
2.一个灯的闪烁
代码详见led_flash;
3.RTL电路
二、仿真波形
`timescale 1ns / 1ns
module led_run_tb();
reg clk ;
reg rstn ;
wire[3:0] led ;
led_run8 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
运行时间截图为1s多,确保了4个LED灯能够实现一个周期的闪烁。