本人刚入门,想点亮一个led灯间隔200ms闪烁,用了两种方法,重点是always语句后面有不同。但只有一种方法能够实现。
方法一: always后面直接加延时时间,200ms(行为级仿真没有问题,但是用modelsim后仿led显示为红色即stx状态,未知电平),下载进去led不亮module led_test(clk,led);
input clk;
output led;
wire led;
reg data;
initial data=1'b0;
always #200000000
data=~data;
assign led=data;
endmodule
方法二:always后面采用clk的边沿触发 ,定义一个数据变量data用于计时,clk为50Mhz——20ns,一个周期记数一次,间隔也为200ms。前仿后仿都没问题,下载led也闪烁。
module led_test(clk,led);
input clk;
output led;
reg led;
reg [31:0]data;
initial
begin
led=1'b1;
data=0;
end
always @(posedge clk)
begin
if(data==10000000)
begin
led=~led;
data=0;
end
else data=data+1;
end
endmodule
以上就是我的两种方法。第二种成功,而第一种失败。引脚分配ok,请大家帮我分析分析,非常感谢!
|