我知道在使用这些输入之前需要将所有输入同步到FPGA以避免亚稳态。我也意识到需要在单个FPGA内同步跨时钟域的信号。这个问题不是跨越时钟域。
我的问题是,在FPGA设计中定期注册所有内部硬件模块的所有输出和输出是否是个好主意。理由是我们想要打破长链组合逻辑以提高时钟速率,以便我们能够满足所选时钟速率的时序约束。这将增加与信号必须跨越的模块数量成比例的额外延迟周期。这是一个好主意还是一个坏主意?如果只注册输入而不是输出吗?
回答摘要
经验法则:注册内部FPGA内核的所有输出;无需注册输入。如果输出已经来自寄存器,例如状态机的状态寄存器,则无需再次注册。
答案 0 :(得分:5)
很难给出一个坚定而快速的规则。 这取决于很多因素。
它可以:
它不会神奇地解决关键路径计时问题。如果你的一个主要“块”内存在关键路径,那么它仍然是你的关键路径。
此外,您可能会遇到更多问题,具体取决于您的设计在目标部件上的完整程度。
这些事情说,我只倾向于注册输出。
答案 1 :(得分:2)
在FPGA设计中注册每个内部硬件模块的所有输入和输出有点过分。如果输出寄存器为输入寄存器供电,它们之间没有逻辑,则消耗所需寄存器的2倍。当然,除非您正在进行逻辑路径平衡。
在FPGA设计中仅注册每个内部硬件模块的输入而不是输出是一种保守的设计方法。如果设计满足其性能和资源利用率要求,那么这是一种有效的方法。
如果设计不满足其性能/利用率要求,那么您必须进行额外的时序分析,以减少FPGA内给定逻辑路径中的寄存器。
答案 2 :(得分:2)
我的问题是,在FPGA设计中定期注册每个内部硬件模块的所有输入和输出是否是个好主意。
不,例行引入这样的寄存器不是一个好主意。
理由是我们想要打破长链组合逻辑以提高时钟速率,以便我们能够满足所选时钟速率的时序约束。这将增加与信号必须跨越的模块数量成比例的额外延迟周期。这是一个好主意还是一个坏主意?
在这种情况下,听起来你必须引入寄存器,你不应该将之前的观点读作“不要这样做”。只是不要盲目地做。考虑寄存器周围的控制逻辑和逻辑的(现在)多周期特性。您现在正在构建“管道”。当输出无法写入时能够正确地停止管道是一个巨大的错误来源。
想想汽车在路上行驶。如果一辆汽车应用它的刹车和停止,所有后面的汽车也需要。如果第一辆汽车刹车灯没有工作,下一辆汽车将不会得到制动信号,它会崩溃。同样,管道中的每个阶段都需要告诉前一阶段它暂停一段时间。
你可以找到的是,不是在你的计算路径上有很长的时序路径从输入到输出,你最终会在你的启用上使用长时序路径来控制从输出到输入的所有寄存器阶段。
答案 3 :(得分:0)
您拥有的另一个选择是让工具为您服务。添加完整系统的末尾一堆寄存器(如果你想管道更多)并在你的综合工具重新定时激活。这将把寄存器(希望)移到最有用的逻辑之间。