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,请大家帮我分析分析,非常感谢!


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
chenkui456
1楼-- · 2020-02-28 00:45
第一种不能综合的
aikimi7
2楼-- · 2020-02-28 03:42
 精彩回答 2  元偷偷看……
huangxz
3楼-- · 2020-02-28 06:03
其实FPGA设计你是要综合RTL图看的,不能想当然
有些电路根本就综合不出来,当然无法实现你要的功能了。
GoldSunMonkey
4楼-- · 2020-02-28 11:06
大家说的很明白了
GoldSunMonkey
5楼-- · 2020-02-28 11:14
希望以后多注意啊
lichenprivate
6楼-- · 2020-02-28 12:27
aikimi7 发表于 2013-10-8 17:06
第一种行为级用于仿真的,你那个是不能综合的。此外,第二种方法中,目前initial可以综合,太复杂的不确定 ...

恩 我也觉得不太能综合,不符合硬件的工作方式。不过你的提醒还是很感谢啊!!非常感谢

一周热门 更多>