使用异步FIFO进行双向通信?

时间:2017-07-25 05:40:42

标签: synchronization xilinx fifo bidirectional

我正在尝试将模块(让它称之为main_module)与Xilinx CORE Generator生成的双端口Block RAM存储器连接。两个模块相互发送和接收数据,并以明显不同的时钟速度运行。为了满足接口所面临的同步问题,我决定使用异步FIFO(也是由Xilinx CORE Generator生成)。关于这一点,我有一些困惑:

  1. 如何有效地更改主要模块和BRAM之间双向通信的FIFO读写时钟分配?在存储器写入模式中,FIFO的WR_CLK将是main_module的WR_CLK,FIFO的RD_CLK将是BRAM模块的RD_CLK。在存储器读取模式中,时钟将被相反地分配。与DIN的DIN和DOUT引脚分配相同。通过输入信号选择读和写模式。
  2. 内存地址怎么样?它们将在main_module中生成,并且必须传递给BRAM。是否应该同步?如果是,那么最有效的方式是什么?
  3. Input and Output Data with an AFIFO

1 个答案:

答案 0 :(得分:1)

按优先顺序考虑三个选项:

1)切换到BRAM接口的AXI,并使用AXI组件和协议进行多主存储器访问。一开始看起来似乎有些过分,但无论你从头开始做什么,都需要在临时基础上努力实现类似的原则,这通常比使用专门构建的行业标准方法更耗时。

2)(重新)设计设计,以便不需要共享一个BRam端口。例如,复制数据,以便每个端口始终只有一个时钟,即写入两个BRams是双方需要的数据。

3)正如你所建议的那样,有一个Fifo用于本机端口未使用的时钟。您需要在此Fifo中同时拥有数据和地址。因此,写入非常紧张,但对于读取,您还需要用于返回通道的Fifo(或XMP时钟域交叉同步器)以及用于处理读取的一些协议。