老会计手把手教做帐官方网站,网站开发在线教程,目录排版设计,东莞连衣裙 东莞网站建设一、前言
在知乎发现“reg有没有必要全部赋初值”这个问题#xff0c;与自己近期对Verilog reg的进一步学习相契合#xff0c;此文对这个问题进行总结。
二、reg的初值赋值方式
就语法意义赋初值而言#xff0c;就是在声明reg时对其赋值。在工程中#xff0c;对于数字系…一、前言
在知乎发现“reg有没有必要全部赋初值”这个问题与自己近期对Verilog reg的进一步学习相契合此文对这个问题进行总结。
二、reg的初值赋值方式
就语法意义赋初值而言就是在声明reg时对其赋值。在工程中对于数字系统的初始化一般是在上电后使用全局复位变量来实现的也即利用复位信号来赋初值。
三、reg是否有必要全部赋初值
由于verilog不仅用于ASIC还用于FPGA关于reg是否需要全部赋初值又与这两个应用方向二存在差异。
3.1 FPGA场景下reg赋初值
3.1.1 FPGA reg赋初值方式选择
在声明reg变量时对其赋初值寄存器初值可以靠上电时给对应存储单元置位可以做初值置位。此外也可以通过复位来赋初值。
但如果只靠声明时赋初值而不用复位赋初值时整个系统需要复位重启时这时FPGA只能通过重新上电来获取处置这是比直接拉复位信号麻烦的甚至在某些系统中不可实现的。
如果用复位赋初值则声明变量时赋初值则完全没必要因为数字系统一般上电后紧接着就是给一个复位信号。
因此fpga场景下最好还是采用复位赋初值的方式来实现。
3.1.2 reg是否需要全部赋初值
此处对reg是否全部赋初值等价是否全部的reg都需要复位逻辑。我在之前自己编写的代码中基本上是全部都写了复位逻辑但最近也看到了别人写不复位的寄存器因此引发了对是否需要对全部reg赋初值的思考。
首先全部复位是完全可以的如果FPGA资源时序允许的话这样电路复位后的状态是完全可知的可以避免电路刚上电是出现X态。
其次控制流需要复位数据流不进行复位保证所有数据寄存器在使用前被正确数据覆盖也是可以的。这时上电带来的随机值X态对电路功能并没有影响而且当电路设计错误时保留X态的传播可以让开发者在波形上更快的发现错误加快调试进程。另一方面没有复位逻辑的寄存单元也可以减少复位信号的扇出对功耗面积布线都是好处的。
至于具体是否需要全部编写复位逻辑可以根据具体的应用场景需求和可用资源而决定。
3.2 ASIC场景下reg赋初值
3.2.1 ASIC reg赋初值方式
对于ASIC来说在声明reg时赋初值毫无意义不同于FPGA查找表方式数字电路并没有某种机制让这个寄存器在一开始确定为某个值。在声明reg时赋初值虽然不算不可综合但是也没哪家的cell上能生效。因此对于ASIC而言都是通过上电复位来实现赋初值的。
3.2.2 reg 是否需要全部赋初值
这点与FPGA场景下的思路是一致的。
四、参考资料
Verilog reg有没有必要全部初始赋值 - 知乎 (zhihu.com)