2013-05-02 93 views
1

我有一個vhdl任務的問題。我需要在一個500MHz的總線和另一個30MHz的總線之間創建一個FIFO緩衝區。FIFO中有2個時鐘的VHDL

我設計了

inputs: Data_in, Write_EN, CLK_500, Read_EN, CLK_30, FlushFIFO.

outputs: Data_out, FULL, EMPTY.

這個緩衝區是使用二維數組設計了一個基本的FIFO緩衝器:

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

的問題是:我應該如何寫進程和維護他們之間的指針進行同步?用我試過的方法,代碼將不會合成(錯誤:XST:827信號ptr不能合成)

任何想法?

感謝和問候

回答

5

這可能是一個想法,我們表明,它實際上抱怨代碼!跨時鐘域

FIFO中有貓膩,不要輕易嘗試...

話雖如此 - 因爲它看起來像一個家庭作業,很好看的可以在這裏找到:

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

(一個作者是已故的偉大,彼得Alfke - 他設計的第一個FIFO芯片,在1969年,被廣泛視爲,甚至,FIFO導師)

1

的公平的想法,我認爲你需要一個讀指針和寫指針均爲模64,使FIFO基本上是一個循環緩衝區。使用灰色編碼進行尋址,因爲灰色編碼數字只在相鄰值之間變化1位。這可以用於錯誤檢查。讀指針在讀取域上,寫指針在寫域上。也許將每個指針交叉到相反的域以進行全面和空的檢查?

相關問題