一、设计目标
使8个led灯分别按照0.1s、0.2s、0.3s、...、0.8s的闪烁周期闪烁
二、设计方法
调用单个led闪烁模块,重定义参数
三、led_run8.v代码
其中led_flash.v代码在上一篇文章已经讲述,故不赘述。
module led_run8(
clk,
reset_n,
led
);
parameter WIDTH=8;
input clk;
input reset_n;
output [WIDTH-1:0]led;
//例化调用模块
led_flash2 led_flash2_inst0(
.reset_n(reset_n),
.clk(clk),
.led(led[0])
);
defparam led_flash2_inst0.MCNT=2499999;
led_flash2 led_flash2_inst1(
.reset_n(reset_n),
.clk(clk),
.led(led[1])
);
defparam led_flash2_inst1.MCNT=4999999;
led_flash2 led_flash2_inst2(
.reset_n(reset_n),
.clk(clk),
.led(led[2])
);
defparam led_flash2_inst2.MCNT=7499999;
led_flash2 led_flash2_inst3(
.reset_n(reset_n),
.clk(clk),
.led(led[3])
);
defparam led_flash2_inst3.MCNT=9999999;
led_flash2 led_flash2_inst4(
.reset_n(reset_n),
.clk(clk),
.led(led[4])
);
defparam led_flash2_inst4.MCNT=12499999;
led_flash2 led_flash2_inst5(
.reset_n(reset_n),
.clk(clk),
.led(led[5])
);
defparam led_flash2_inst5.MCNT=14999999;
led_flash2 led_flash2_inst6(
.reset_n(reset_n),
.clk(clk),
.led(led[6])
);
defparam led_flash2_inst6.MCNT=17499999;
led_flash2 led_flash2_inst7(
.reset_n(reset_n),
.clk(clk),
.led(led[7])
);
defparam led_flash2_inst7.MCNT=19999999;
endmodule
四、led_run8_tb.v代码
`timescale 1ns / 1ns
module led_run8_tb;
reg clk;
reg reset_n;
wire [7:0]led;
led_run8 led_run8(
.clk(clk),
.reset_n(reset_n),
.led(led)
);
initial clk = 1; //定义初始时钟信号
always #10 clk = ~clk;
initial begin
reset_n = 0;
#201;
reset_n = 1;
#2000000000;
$stop;
end
endmodule
五、仿真波形
从波形可以看出,led各个翻转周期均与设计一致,故设计完成。