我记得前一段时间读过异步或同步复位在FPGA中更有效,因为触发器已有一个,但另一个需要额外的逻辑。
有谁知道这是哪条路?对于Xilinx,Altera,Other来说,这是一样的吗?
学习时,我曾经为每个FSM添加异步清除和同步复位,以防万一。对此有什么好处吗?
感谢您的反馈!
答案 0 :(得分:6)
直接回答这个问题 - 大多数FPGA现在可以在触发器中进行同步或异步复位。在添加异步清除和同步休息方面,我不确定你对此感到满意 - 添加设计功能所需的信号(可能包括对于某些触发器完全没有重置......)
一些进一步的建议......如果你使用异步复位,当你取消它时要非常小心。如果你设备上的这个“慢速”网络有很多偏差,你可能会发现一些触发器会在不同的时钟周期内复位到其他设备上。随之而来的是混乱!
为了避免这种情况,我倾向于创建一个顶层模块,它接收外部(可能非常异步)复位信号,将其与时钟同步并将其作为同步复位提供给所有触发器你想重置(在那个时钟域 - 你可能需要不止一个)。然后时序分析器会告诉您设备的偏斜是否太大,并且您将确保一次性完成所有重置。
Xilinx have a whitepaper关于这个问题,但它同样适用于其他FPGA。
对于某些应用程序,您可能需要在IO上进行异步声明的重置,以确保某些外部设备以您需要的方式工作 - 但仍然可以同步取消它。
(PS。当你提到FPGA时,如果你不知道,有一个与可编程逻辑相关的堆栈交换提议你可能会感兴趣http://area51.stackexchange.com/proposals/20632/)
答案 1 :(得分:2)
嗯,最好的办法是咨询您的特定FPGA供应商的文档和白皮书。在我参与过的大多数专业设计团队中,我们使用异步复位来保持最大程度的控制。然而,同步和异步复位之间的选择实际上取决于您的设计和应用。
顺便说一句,你可能会发现Sunburst Design的this paper on the topic of resets很有意思。虽然它主要涉及ASIC设计和Verilog,但它通常用于理解复位决策。
答案 2 :(得分:2)
Xilinx官方的立场是使用同步复位。它在whitepaper中进行了解释,也在上面的帖子中提到过。源代码附带的所有Xilinx IP内核(例如内存控制器)都使用同步重置。
我的团队尝试了不同的设计,发现在逻辑利用率提升方面使用同步复位的优势可以忽略不计。
使用异步重置的最大优点是更快的构建运行时,这对于大型设计来说非常重要。原因是同步时序约束不包括异步复位路径(如果需要,可以通过添加单独的约束来覆盖它们。)