【问题标题】:Asynchronous asymmmetric FIFO in VHDL synthesis issueVHDL综合问题中的异步不对称FIFO
【发布时间】:2013-07-15 12:32:35
【问题描述】:

我使用 VHDL 结构设计了一个异步非对称 fifo。它是具有深度和 prog_full 作为参数的通用 fifo。它具有 16 位输出数据宽度中的 32 位。 您可以找到fifo设计链接here
顶层 asymmetric fifo (fifo_wrapper.vhd),建立在 32 位 asynchronous fifo(async_fifo.vhd) 之上。这个内部先进先出 (async_fifo) 是使用开放内核 (http://opencores.org/project,generic_fifos) 上的通用 FIFO 的逻辑构建的。我添加了一个简单的测试台来试用这个 fifo 设计。
但是这种设计存在一些我无法弄清楚的问题。当我模拟它时,fifo 设计工作得非常好,但是当我合成它并将它与我在硬件上的其他设计一起运行时,我有时会得到一些错误的数据。可能有一些我无法模拟的极端情况还是其他原因?

这就是为什么我希望任何需要此设计的人尝试一下,如果他/她在模拟期间或综合后遇到任何问题,请告诉我。 谢谢

PS:如果有其他论坛可以让我将我的设计供公众使用,请告诉我。谢谢

【问题讨论】:

  • 您可以将代码托管在 github 之类的地方,它是免费的。

标签: vhdl fifo


【解决方案1】:

需要指出与此异步 FIFO 相关的许多问题 设计,基于写入和读取时钟完全的假设 异步。

  • 一个(也可能是)主要问题是写端指针(wp in async_fifo),这是一个普通的二进制计数器,被传输和同步 到没有任何格雷编码的读取侧时钟。所以不同的位 向量可能在读时钟域的不同时间到达,因此 写指针值可以(并且很可能会不时)不同 从写入端值。与读指针 (rp) 的比较将 因此没有意义。时钟传输的二进制值 域应在传输前进行格雷编码,并在到达时进行解码。还 使用两个触发器级别的同步。

  • 假定两个时钟(rd_clk 和 wr_clk)是异步的,但是 只是一次复位(rst),因此复位时可能会违反时序 置低,除非在时钟有一些额外的要求 重置解除的时间。

  • 与 clear 类似,其中只有一个信号用于两个 不同的时钟域。

  • 建议使用端口命名约定,其中时钟域 名称中指示的端口关系已清除,如命名所有 写时钟域 wr_* 中的端口(例如 wr_clk_i、wr_clk_we_i 等, 并将读取时钟域中的所有端口作为 rd_*。

  • 复位被断言为低电平,因此命名为 rst_n 会很好。

【讨论】:

    【解决方案2】:

    n'我无法访问您的代码(防火墙),所以我将仅提及设计它们的一般要点,这可能对您和其他人有所帮助。

    • 为了完全保证时钟安全,写入端应使用完全安全的异步握手方法将其指针交换到读取端,该方法使用 2 个亚稳定信号链。

    这个结构是一个双缓冲寄存器。

    1. 写入端将其写入指针注册到缓冲区中,并将有效信号置高。
    2. 亚稳定链将缓冲区有效信号重新计时到读取时钟域
    3. 在读时钟端,一旦在元链的输出看到转换为高电平有效,写端缓冲区中的数据将重新注册到读域上的另一个寄存器中。这没关系,因为已知缓冲区中的数据是稳定的。 (因为元链)。
    4. 读取域将 ack 信号置为高电平。
    5. 另一个亚稳定链将 ack 信号重新计时到写入时钟域。
    6. 写入端在元链的输出端等待 ack 信号的转换,一旦看到它就会取消断言其有效信号。
    7. 读取端等待元链输出端的有效信号转换为低电平,一旦看到它就会解除其确认信号。
    8. 写入端等待元链输出端的 ack 信号转换为低电平。循环现已完成。
    9. 当前的写指针可能已经移动了很多,现在可能会再次传输。

    采用类似的方法将读指针传输到写域。 可以看出,虽然这种方法会导致写/读端的写指针和读/写端的读指针之间存在延迟,但这种延迟永远不会导致溢出。相反,它会导致写入端过早地满,而读取端过早地清空,这最终将在下次交换指针时解决。

    这种方法是唯一一种完全时钟安全的先进先出设计,它不依赖于对时钟速度的先验知识。完全不需要格雷码。

    另外需要注意的是寻址/空/满等逻辑需要在每个时钟域上重复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多