【问题标题】:FIFO with 2 clocks in VHDLVHDL 中具有 2 个时钟的 FIFO
【发布时间】:2013-05-02 10:40:38
【问题描述】:

我的 vhdl 分配有问题。我需要在一个 500MHz 的总线和另一个 30MHz 的总线之间创建一个 FIFO 缓冲区。

我已经设计了一个基本的 FIFO 缓冲区

输入:Data_in、Write_EN、CLK_500、Read_EN、CLK_30、FlushFIFO。

输出:Data_out、FULL、EMPTY。

这个缓冲区是使用二维数组设计的:

type fifo_arr is array (0 to 63) of std_logic_vector(39 downto 0);
signal FIFO : fifo_arr := (others => (others => '0'));

问题如下:我应该如何编写进程并在它们之间维护一个指针以进行同步?用我试过的方法,代码不会合成(ERROR:XST:827 Signal ptr cannot be synthesis)

有什么想法吗?

感谢和问候

【问题讨论】:

    标签: vhdl fifo clock-synchronization clock


    【解决方案1】:

    向我们展示它实际抱怨的代码可能是一个想法!

    跨时钟域的 FIFO 很棘手,不能轻易尝试......

    话虽如此 - 因为它看起来像家庭作业,所以可以在这里找到一个很好的阅读:

    http://eda.ee.nctu.edu.tw/jdhuang/courses/ipcd04/paper/alfke_final.pdf

    (其中一位作者是已故伟大的 Peter Alfke - 他在 1969 年设计了第一个 FIFO 芯片,并被广泛认为是 FIFO 大师,甚至是the

    【讨论】:

      【解决方案2】:

      您可以查看这些可用的 FIFO 内核,尤其是双时钟版本的 fifo。它会给你一个同步指针的公平想法

      http://opencores.org/project,generic_fifos

      【讨论】:

        【解决方案3】:

        我认为您将需要一个均以 64 为模的读指针和写指针,因此 fifo 基本上是一个循环缓冲区。使用格雷编码进行寻址,因为格雷编码的数字仅在相邻值之间更改 1 位。这可用于错误检查。读指针在读域上,写指针在写域上。也许将每个指针交叉到相反的域以进行完整和空检查?

        【讨论】:

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