目录
1.参数化设计实现:4个(8个)LED灯分别以0.1s 0.2s 0.3s 0.4s闪烁
前言
1.参数化设计实现:4个(8个)LED灯分别以0.1s 0.2s 0.3s 0.4s闪烁
2.语法总结
一、4个LED灯不同频率闪烁设计实现
1.一个LED灯设计输入
`timescale 1ns / 1ns
module led_flash(
Clk,
Reset_n,
Led
);
input Clk;
input Reset_n;
output reg Led;
parameter MCNT = 24999999;
reg[24:0] counter;
always@(posedge Clk or negedge Reset_n)
if(!Reset_n)
counter <= 0;
else if(counter == MCNT)//counter=0也是一个周期
counter <= 0;
else
counter <= counter+1'd1;
always@(posedge Clk or negedge Reset_n)
if(!Reset_n)
Led <= 0; //此定义复位时led灭
else if(counter == MCNT)
Led <= !Led;//取反一次
endmodule
2.4个LED灯设计输入
`timescale 1ns / 1ns
module led_run8(
Clk,
Reset_n,
Led
);
input Clk;
input Reset_n;
output [3:0] Led;
led_flash led_flash_inst0(
.Clk(Clk),
.Reset_n(Reset_n),
.Led(Led[0])
);
defparam led_flash_inst0.MCNT = 2499999;
led_flash led_flash_inst1(
.Clk(Clk),
.Reset_n(Reset_n),
.Led(Led[1])
);
defparam led_flash_inst1.MCNT = 4999999;
led_flash led_flash_inst2(
.Clk(Clk),
.Reset_n(Reset_n),
.Led(Led[2])
);
defparam led_flash_inst2.MCNT = 7499999;
led_flash led_flash_inst3(
.Clk(Clk),
.Reset_n(Reset_n),
.Led(Led[3])
);
defparam led_flash_inst3.MCNT = 9999999;
endmodule
3.4个LED灯模拟测试代码
`timescale 1ns / 1ns
module led_run_tb;
reg Clk;
reg Reset_n;
wire [3:0]Led;
led_run8 led_run8inst_0(
.Clk(Clk),
.Reset_n(Reset_n),
.Led(Led)
);
initial Clk = 1;
always#10 Clk = !Clk;//时钟信号写法
initial begin
Reset_n = 0;
#201;//观察复位信号 避免时钟上升沿重合
Reset_n = 1;
#1000000000;//持续2s钟
$stop;
end
endmodule
5.4个LED灯模拟
二、语法总结
1.参数化
parameter MCNT = 24999999;
2.模块调用
led_flash led_flash_inst0(
.Clk(Clk),
.Reset_n(Reset_n),
.Led(Led[0])
);
defparam led_flash_inst0.MCNT = 2499999;
或者
led_flash
# (
.MCNT(2499999)
)
led_flash_inst0(
.Clk(Clk),
.Reset_n(Reset_n),
.Led(Led[0])
);
// defparam led_flash_inst0.MCNT = 2499999;