FPGA用verilog点亮一个led,用了两种方法有疑问求教!

2020-02-27 21:09发布

本人刚入门,想点亮一个led灯间隔200ms闪烁,用了两种方法,重点是always语句后面有不同。但只有一种方法能够实现。
方法一: always后面直接加延时时间,200ms(行为级仿真没有问题,但是用modelsim后仿led显示为红 {MOD}即stx状态,未知电平),下载进去led不亮
  1. module led_test(clk,led);
  2. input clk;
  3. output led;

  4. wire led;
  5. reg data;

  6. initial  data=1'b0;

  7. always #200000000
  8.                  data=~data;

  9. assign        led=data;

  10. endmodule
复制代码方法二:always后面采用clk的边沿触发 ,定义一个数据变量data用于计时,clk为50Mhz——20ns,一个周期记数一次,间隔也为200ms。前仿后仿都没问题,下载led也闪烁。
  1. module led_test(clk,led);
  2. input clk;
  3. output led;

  4. reg led;
  5. reg [31:0]data;

  6. initial
  7.         begin
  8.         led=1'b1;
  9.         data=0;
  10.         end
  11.        
  12. always @(posedge clk)
  13.         begin
  14.                  if(data==10000000)
  15.                         begin
  16.                                 led=~led;
  17.                                 data=0;
  18.                         end
  19.                  else data=data+1;
  20.         end

  21. endmodule
复制代码以上就是我的两种方法。第二种成功,而第一种失败。引脚分配ok,请大家帮我分析分析,非常感谢!


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。