打印

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

[复制链接]
4862|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lichenprivate|  楼主 | 2013-10-8 11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人刚入门,想点亮一个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,请大家帮我分析分析,非常感谢!


相关帖子

沙发
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图看的,不能想当然
有些电路根本就综合不出来,当然无法实现你要的功能了。

使用特权

评论回复
5
GoldSunMonkey| | 2013-10-8 23:02 | 只看该作者
大家说的很明白了

使用特权

评论回复
6
GoldSunMonkey| | 2013-10-8 23:02 | 只看该作者
希望以后多注意啊

使用特权

评论回复
7
lichenprivate|  楼主 | 2013-10-9 22:14 | 只看该作者
aikimi7 发表于 2013-10-8 17:06
第一种行为级用于仿真的,你那个是不能综合的。此外,第二种方法中,目前initial可以综合,太复杂的不确定 ...

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

使用特权

评论回复
8
lichenprivate|  楼主 | 2013-10-9 22:16 | 只看该作者
GoldSunMonkey 发表于 2013-10-8 23:02
希望以后多注意啊

恩 谢谢版主啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

90

帖子

2

粉丝