[英]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。 它會給你一個同步指針的好主意
我認為您將需要一個以 64 為模的讀指針和寫指針,以便 fifo 基本上是一個循環緩沖區。 使用格雷編碼進行尋址,因為格雷編碼數字僅在相鄰值之間改變 1 位。 這可用於錯誤檢查。 讀指針在讀域,寫指針在寫域。 也許將每個指針交叉到相反的域以進行完整和空檢查?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.