2013-05-02 86 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位。这可以用于错误检查。读指针在读取域上,写指针在写域上。也许将每个指针交叉到相反的域以进行全面和空的检查?