我知道在使用这些输入之前,需要将所有输入同步到FPGA,以避免亚稳态。我还意识到需要在一个FPGA中同步跨时钟域的信号。这个问题与跨越时钟域无关。
我的问题是,在设计中常规地注册的所有输入和输出的,每个的内部硬件模块是否是一个好主意。其基本原理是,为了提高时钟速率,我们要打破组合逻辑的长链,以便满足所选时钟速率的定时约束。这将增加与信号必须交叉的模块数量成比例的额外延迟周期。这是个好主意还是坏主意?应该只登记输入而不是输出吗?
答案摘要
经验法则:注册所有内部FPGA核心的输出,不需要注册输入。如果输出已经来自寄存器,例如状态机的状态寄存器,那么就不需要再次注册。
发布于 2011-12-19 22:37:38
很难给出一个严格而快速的规则。它确实取决于许多因素.
它可以:
它不会神奇地解决关键路径的时间问题。如果在一个主要的“块”中有一条关键路径,那么它仍然是您的关键路径。
此外,您可能会遇到更多的问题,这取决于您的设计在目标部分的充分程度。
这些都说明,我只倾向于注册输出。
发布于 2011-12-19 22:08:56
在FPGA设计中注册每个内部硬件模块的所有输入和输出都有点过分。如果输出寄存器输入寄存器之间没有逻辑,则消耗所需寄存器的2倍。当然,除非你在做逻辑路径平衡。
在FPGA设计中,只记录每个内部硬件模块的输入而不是输出是一种保守的设计方法。如果设计满足其性能和资源利用需求,那么这是一种有效的方法。
如果设计不能满足其性能/利用率要求,则必须进行额外的时序分析,以减少FPGA内给定逻辑路径中的寄存器。
发布于 2011-12-20 09:39:22
我的问题是,在FPGA设计中常规地注册每个内部硬件模块的所有输入和输出是否是一个好主意。
不,照例引入这样的寄存器不是个好主意。
同时执行输入和输出的
的基本原理是,为了提高时钟速率,我们要打破组合逻辑的长链,以便满足所选时钟速率的定时约束。这将增加与信号必须交叉的模块数量成比例的额外延迟周期。这是个好主意还是坏主意?
在这种情况下,听起来您必须引入寄存器,而不应该将前面的几点读为“不要这样做”。只是不要盲目地去做。想想寄存器周围的控制逻辑和逻辑的(现在)多周期性质。你现在正在建造一条“管道”。当输出不能写入时,能够正确地阻塞管道是bug的一个巨大来源。
想象一下在路上行驶的汽车。如果一辆车停了刹车,后面所有的车都需要刹车和刹车。如果第一辆汽车的刹车灯不工作,下一辆车将无法获得刹车信号,它将坠毁。类似地,管道中的每一个阶段都需要告诉前一个阶段,它停止了一会儿。
您可以发现的是,在计算路径上没有长时间路径从输入到输出,而是在启用时使用长时间路径来控制从输出到输入的所有这些寄存器阶段。
https://stackoverflow.com/questions/8567900
复制相似问题