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

[复制链接]
5420|7
 楼主| lichenprivate 发表于 2013-10-8 11:01 | 显示全部楼层 |阅读模式
本人刚入门,想点亮一个led灯间隔200ms闪烁,用了两种方法,重点是always语句后面有不同。但只有一种方法能够实现。
方法一: always后面直接加延时时间,200ms(行为级仿真没有问题,但是用modelsim后仿led显示为红色即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,请大家帮我分析分析,非常感谢!


chenkui456 发表于 2013-10-8 15:42 | 显示全部楼层
第一种不能综合的
aikimi7 发表于 2013-10-8 17:06 | 显示全部楼层
第一种行为级用于仿真的,你那个是不能综合的。此外,第二种方法中,目前initial可以综合,太复杂的不确定。如果你要赋初值的话,建议定义的时候赋值,比如reg led = 1'b1,或者加个复位也行。

评分

参与人数 1威望 +3 收起 理由
lichenprivate + 3 很给力!

查看全部评分

huangxz 发表于 2013-10-8 17:14 | 显示全部楼层
其实FPGA设计你是要综合RTL图看的,不能想当然
有些电路根本就综合不出来,当然无法实现你要的功能了。
GoldSunMonkey 发表于 2013-10-8 23:02 | 显示全部楼层
大家说的很明白了
GoldSunMonkey 发表于 2013-10-8 23:02 | 显示全部楼层
希望以后多注意啊
 楼主| lichenprivate 发表于 2013-10-9 22:14 | 显示全部楼层
aikimi7 发表于 2013-10-8 17:06
第一种行为级用于仿真的,你那个是不能综合的。此外,第二种方法中,目前initial可以综合,太复杂的不确定 ...

恩 我也觉得不太能综合,不符合硬件的工作方式。不过你的提醒还是很感谢啊!!非常感谢
 楼主| lichenprivate 发表于 2013-10-9 22:16 | 显示全部楼层
GoldSunMonkey 发表于 2013-10-8 23:02
希望以后多注意啊

恩 谢谢版主啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

90

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部