在不同的时钟将数据写入内存

时间:2019-04-24 05:10:27

标签: verilog ram

我想将数据写入来自不同时钟域的公共存储器中,该怎么办? 我有一个公共内存块,该内存块在具有频率clk的时钟上工作。现在,我想在来自不同时钟域的内存中写入数据,即clk1,clk2,clk3,clk4等。

我正在考虑对每个时钟域使用FIFO,即第一个FIFO具有输入时钟clk1并在clk输出(与内存相同),第二个FIFO将具有输入时钟clk2并在clk输出(与存储器相同),依此类推..但是,如果我使用大量的FIFO,似乎我的设计将超出规模。请告诉我正确的方法。

2 个答案:

答案 0 :(得分:1)

要在时钟域之间安全地传递数据单元(字节,字等),异步FIFO是唯一安全的解决方案。请注意,FIFO不必很深,但是在这种情况下,您可能需要流控制。
无论如何,您可能都需要流控制,因为您有许多资源都在访问同一内存。

  

但是,如果我使用大量的FIFO,那么我的设计似乎会过时。

那么您就有一个设计问题:FPGA的大小不足以实现您选择的解决方案。因此,要么选择更大的FPGA,要么找到根本不同的解决方案。

答案 1 :(得分:0)

RAM可以由时钟域A写入,并可以由时钟域B使用不同的时钟读取(双端口RAM):

http://www.asic-world.com/examples/verilog/ram_dp_ar_aw.html

某些控制器应将此RAM用作异步FIFO。

许多fpga具有专用的RAM组件,例如: UFM Altera,Xilnx BRAM,赛普拉斯Delta39K群集存储块等。

如果大FIFO有问题,请更换设备。