复位或者置位的作用是将触发器设定到给定的状态即输出为0或1。如果只是上电复位或置位,那么这个复位或置位操作是没有必要的。这是因为对于初始值,可直接在RTL代码中写入。从仿真角度而言,这也避免了仿真起始阶段输出为未知状态。事实上,去除不必要的复位也是减少全局复位扇出过大的一个方法。例如,数据路径上的流水寄存器的复位是可以去除的,但控制路径上寄存器的复位是否可以去除则要根据系统功能需求加以辨别。
相应的RTL代码描述如下图所示。VHDL代码第11行和System Verilog代码第11行给寄存器赋初始值为1,这种写法是可综合的(注:System Verilog中的’1表示对所有位均赋值为1)。打开综合后的网表文件,选中触发器,在Property窗口中找到INIT可查看其初始值。
结论:
-避免不必要的复位,如上电复位,数据路径上对流水寄存器的复位
-触发器的初始值是可设定