在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 29084|回复: 13

[求助] verilog定义reg时的初值问题

[复制链接]
发表于 2012-9-17 14:28:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
想定义一个reg,但不希望这个信号被全局复位,这时它的初值该怎么赋值?我同事中有两种说法,

第一种是在定义的时候就给初值,如:

reg temp_r = 4'h1;

always @ (posedge i_clk)
    temp_r <= 一堆运算;

另一种说不管在初始定义是什么,上电后的初值都是0,无法去定义其他的初值。

请问,究竟哪种说法是正确的呢?根据是什么?
发表于 2012-9-17 15:08:12 | 显示全部楼层
就你上面的两种说法第一种还靠谱点,REG的初始值是你在代码中赋予的,复位后不都是0, 你可以给定是0活着1,如果不给定初始值, 复位后就是不定态,这个不定态就会在复位后逐级传递到后面。
发表于 2012-9-17 16:01:53 | 显示全部楼层
只能复位时给初值。
always @( posedge clk )
if(rst)
a <= 123;
else
a<= ...;

FPGA不是软件,定义时给的初值只在仿真时有意义。
 楼主| 发表于 2012-9-17 16:24:37 | 显示全部楼层
持第一观点的同事告诉我,他在之前用xilinx的器件的时候直接赋值的,在上板后测试的时候,该寄存器确实是这个值。
我使用的lattice的FPGA器件,刚刚我用diamond生成了后仿用的.vo文件,仿真的结果也是在上电后就保持我赋的初值。

这是怎么回事呢?
发表于 2012-9-17 17:04:51 | 显示全部楼层
回复 4# toneytang

对FPGA来说, 初始化语句是可以被综合到网表里的,不过会增加一些逻辑资源去实现。好像在Altera的手册里看到过,没有复位和初始化的寄存器上电后默认为0。
发表于 2012-9-17 18:44:31 | 显示全部楼层
FPGA上电之后有个初始化,所有的模块都会赋值为0 。另外如果你的代码中定义reg a = VALUE 的,也可以。
发表于 2012-9-17 18:45:25 | 显示全部楼层
xilinx的器件:
可以实现reg [3:0] temp_r = 4'h1;
因为他们的器件有GSR网络可以来配置INT0,INT1。确定在逻辑加成完成后,reg的初始值是什么。
altera的器件:没研究过,暂时不能回答。
发表于 2012-9-17 19:19:45 | 显示全部楼层
所有FPGA都可以通过Initial赋上电后的初值,不会增加逻辑。不过赋了初值之后不能通过异步复位赋一个相反的值了。

比如:

reg dff=1;

always@(posedge clk or negedge rstn)
if(!rstn)
   dff<=0;
  else
.......

这样就不行了,至少赋的初值会被Ignore掉,并报Warning。
发表于 2012-9-17 20:39:28 | 显示全部楼层
3楼正解,硬件电路,复位前的状态都是不定态
发表于 2012-9-17 22:39:23 | 显示全部楼层
学习了,FPGA是可以声明的时候赋初值的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 19:44 , Processed in 0.024607 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表