电子说
使用Verilog设计电路模块时,为什么推荐使用register out的方式?
在进行design partition时,相比register in更推荐register out,请问为什么呢?如果前后两个模块时钟域不同,register in会有什么问题?
@0431大小回:
1.为了logic level可控:因为一般大一点的工程都是多人负责的模块化设计,如果你的输出不是寄存器输出,而是组合逻辑直接输出,这样别人在衔接你这个模块的时候,根本不知道你的输出前有多少级组合逻辑级数。如果在输入的时候寄存也可以,但是这样就相当于我们把自己该做好的事情让别人来做了,所以这个时候就约定俗成的让输出都寄存。这样可以在写或者修改该模块的设计者能掌握好自己设计的逻辑级数.
2.为了约束:以FPGA设计为例,在后续做implementation的时候,有的时候发现wns比较差是因为fanout比较高,比如某些关键使能信号驱动了多个大位宽数据。这个时候可以在顶层模块例化连接找到这个信号,显式限制(max_fanout = xxx)。但是在vivado里这个语句只适用于寄存器,而不适用于wire形变量,所以我猜测还有一些其他的显示约束方法对寄存器输出有强需求。
@顽猴溜溜:
你这个问题,必须从物理实现的角度来解释。
1.如果fanout目标一个在东、一个在西,那么register out很容易clone成东西两个register,来优化布线,且不会引入任何额外的延时。register in的优化就没这么简单了。
2.如果fanout目标成千上万(high fanout),那么register out很容易clone成多组register,来降低fanout优化布线,且不会引入任何额外的延时。register in的优化就没这么简单了。
3.如果连线过长需要引入额外的延时,那么register out很容易插入repeater或pipeline,而register in的处理相对更困难。
4.register out的时序行为更容易描述,且不会出现毛刺,所以工艺迁移更容易,标准IP也更喜欢。
全部0条评论
快来发表一下你的评论吧 !