【发布时间】:2015-03-23 07:06:11
【问题描述】:
我需要一些关于如何设计异步 FIFO 的建议。我了解将数据捕获到不同时钟域时的元稳定性问题,我的问题是使用两个触发器移位寄存器如何帮助同步写入指针和读取指针值以进行满标志和空标志计算。 当寄存器捕获不同域的数据时,它有可能进入亚稳态并稳定到未知值,那么您如何有效地解决这个问题。
谢谢
【问题讨论】:
-
对于 Altera FPGA,您可以使用 DCFIFO 宏功能 IP 内核。
-
看看Asynchronous FIFO Design自己写,除了空和满的指示应该只使用来自单个时钟域的信号生成,而不是像初始图所示的那样来自两者。跨度>
-
成对触发器仅适用于单个信号。对于位组,您必须使用不同的方案以确保您不会在不同时间捕获位。格雷码之间的转换是可行的,但会增加一些开销,从而增加关键路径(G 到 B 转换会产生很长的逻辑链),并且在这种用途上有美国专利。另一种选择是使用四阶段握手来传输指针。握手过程确保指针在时钟域之间安全移动。 VHDL 示例是available here。
-
嗨 Kevin 我同意你的观点,你需要一个 Xor 门链来进行二进制到灰色的转换。但是使用握手协议会增加数据传输的延迟。
标签: asynchronous verilog fpga digital asic