代码如下
module led_run8(
Reset_n,//复位端口,加_n是使用低电平复位
Clk,//时钟端口
Led
);
input Clk;
input Reset_n;
output reg Led;
parameter MCNT = 24999999;
reg [24:0]counter;
always@(posedge Clk or negedge Reset_n) //posedge Clk 为时序描述的标准格式
// <=是非阻塞赋值的意思
if(!Reset_n)
counter <= 0;
else if(counter == MCNT)
counter<=0;
else
counter <= counter+1'd1;
always@(posedge Clk or negedge Reset_n)
if(!Reset_n)
Led <= 0;
else if(counter == MCNT)
Led <=!Led;
endmodule
模拟仿真,代码内容如下
`timescale 1ns/1ns
module led_run8_tb();
reg Reset_n;
reg Clk;
wire [3:0]Led;
led_run8 led_run8_test0(
.Reset_n(Reset_n),//复位端口,加_n是使用低电平复位
.Clk(Clk),//时钟端口
.Led(Led[0])
);
defparam led_run8_test0.MCNT=24999;
led_run8 led_run8_test1(
.Reset_n(Reset_n),//复位端口,加_n是使用低电平复位
.Clk(Clk),//时钟端口
.Led(Led[1])
);
defparam led_run8_test1.MCNT=49999;
led_run8 led_run8_test2(
.Reset_n(Reset_n),//复位端口,加_n是使用低电平复位
.Clk(Clk),//时钟端口
.Led(Led[2])
);
defparam led_run8_test2.MCNT=74999;
led_run8 led_run8_test3(
.Reset_n(Reset_n),//复位端口,加_n是使用低电平复位
.Clk(Clk),//时钟端口
.Led(Led[3])
);
defparam led_run8_test3.MCNT=99999;
initial Clk=1;
always #10 Clk = !Clk;
initial begin
Reset_n=0;
#201;
Reset_n=1;
#40000000;
$stop;
end
endmodule
标签:Reset,LED,FPGA,Clk,run8,灯以,端口,Led,led
From: https://blog.51cto.com/u_16055951/7479583