簡體   English   中英

VHDL 中具有 2 個時鍾的 FIFO

[英]FIFO with 2 clocks in VHDL

我有一個 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 synthesized)

有任何想法嗎?

感謝致敬

向我們展示它實際抱怨的代碼可能是個好主意!

跨時鍾域的 FIFO 很棘手,不能輕易嘗試......

話雖如此 - 因為它看起來像是一項家庭作業,所以可以在這里找到一本很好的讀物:

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

(其中一位作者是已故的偉大的 Peter Alfke——他在 1969 年設計了第一個 FIFO 芯片,並被廣泛認為是 FIFO 大師,甚至FIFO 大師)

您可以查看這些可用的 FIFO 內核,特別是 fifo 的雙時鍾版本的 opencores。 它會給你一個同步指針的好主意

http://opencores.org/project,generic_fifos

我認為您將需要一個以 64 為模的讀指針和寫指針,以便 fifo 基本上是一個循環緩沖區。 使用格雷編碼進行尋址,因為格雷編碼數字僅在相鄰值之間改變 1 位。 這可用於錯誤檢查。 讀指針在讀域,寫指針在寫域。 也許將每個指針交叉到相反的域以進行完整和空檢查?

您可以在此處找到 GitHub 項目的 pdf,同時您可以對整個項目使用此鏈接

可以通過此鏈接找到另一個不錯的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM