既然FPGA在信号定义时可以赋初值,那为何设计中还需要复位信号?
RT,最近写代码想到一个很有意思的问题:既然FPGA在信号定义时可以赋初值,那为何设计中还需要全局复位信号?因为在我的理解中,上电复位信号的目的是给设计内的信号一个明确的初始值(当然有些没有初始值也无所谓了),既然在信号定义时可以赋初值,加复位信号岂不是多此一举?
---------------------------------------------------------------------------------------
看到回复中有提到“信号声明时不推荐赋值”或者“通常仿真时才会这么用”,因此补充一下个人观点:先前我也同样持有上面同样的观点,但后来看Xilinx的XST文档时发现如下描述:
[attach]674613[/attach]

因此,我认为给信号赋初值显然是合理的,同时综合工具也允许如此操作。至于设计中的上电复位信号是否还有其他考虑(诸如方便调试什么的),还请路过的大神们指点迷津。拜谢!
方便调试
每种综合工具对语言的支持都不完全一样吧,代码里最好还是不要出现这种依赖于综合工具的设计。你说的这种,好像一般的综合工具直接干掉了,相当于没有赋值。
学习一下!
硬件描述语言在信号定义时赋值,只在仿真情况下有效,综合工具会忽略的,只能通过复位信号给确定的初始值。
说说我遇到的状况。
1 定义状态机没有默认初始态的时候,仿真显示状态机为XXXXX;后续的流程更加无法执行。所以我认为定义寄存器赋予初始值是很有必要的。
2 复位问题。你定义的寄存器类型,在定义的时候赋值,之后没有赋值就保持在当前状态。有时候下板测试,没有复位端你要重新上电掉电测么……
3 对于小白来说,在结果未知的情况下,还是先把可能出错的地方解决掉吧。
xilinx 本来就不推荐全局复位设计,FPGA上电时就会对所有的RAM,LUT进行复位,即使你不赋初始值,同样可以不加复位
不错,不错,受教了。
嗯嗯,从这个角度考虑,通过复位赋初值确实有这个必要
多谢了!
好的coding style能够适配的几乎所有的综合工具,直接对寄存器赋值可能在某些综合工具上获得支持,但是代码移植到别的综合工具上可能失败!硬件描述语言主要是要用语言表达设计思想,在常规情况下,大家都会把寄存器直接赋值认为是RTL仿真时候的初值而已。
挺好的参考资料,谢谢小编的分享!
我想对信号赋初值的过程,只会编译的时候进行一次,而对信号复位的进程会在程序运行过程中不断进行,这样在程序跑飞的时候,进行复位操作。
先顶一个
您是指“想一想代码的实际硬件意义”还是指“诸如复位方便实际硬件调试等类似的考虑”?前者确实没有特别刻意区想过,也是目前短板之一,主要代码量太大不知如何入手(欢迎经验分享)~
另,更新了一下帖子,有时间的话麻烦看一下,一起讨论讨论
有的时候还是要想一下硬件实现的。
信号赋初值综合时被忽略掉,那些是不可综合的成分。
信号定义时一般是不推荐赋初值的,通常仿真的时候才这么写。
