Vhdl 在Spartan 3中的进程之间移动数据
我有两个进程A和B,每个进程都有自己的时钟输入 时钟频率略有不同,因此不同步 进程A从一个IC采集数据,该数据需要传递给进程B,然后进程B需要将该数据写入另一个IC 我目前的解决方案是在进程A和进程B之间使用一些简单的握手信号。 内存已声明为进程A(非块内存)内的分布式RAM(128字节为std_逻辑_向量数组(7到0)) 我用的是Xilinx的斯巴达3AN和ISE网页 但这是正确的方法吗 我在某处读到斯巴达3有支持两个时钟的双端口块内存,那么这是否更正确Vhdl 在Spartan 3中的进程之间移动数据,vhdl,xilinx,Vhdl,Xilinx,我有两个进程A和B,每个进程都有自己的时钟输入 时钟频率略有不同,因此不同步 进程A从一个IC采集数据,该数据需要传递给进程B,然后进程B需要将该数据写入另一个IC 我目前的解决方案是在进程A和进程B之间使用一些简单的握手信号。 内存已声明为进程A(非块内存)内的分布式RAM(128字节为std_逻辑_向量数组(7到0)) 我用的是Xilinx的斯巴达3AN和ISE网页 但这是正确的方法吗 我在某处读到斯巴达3有支持两个时钟的双端口块内存,那么这是否更正确 我之所以这么问,是因为我的设计表现得不
我之所以这么问,是因为我的设计表现得不可预测,在这种情况下,我就是讨厌魔法。:-) 除了非常特殊的情况外,在两个独立的时钟域之间移动数据的唯一正确方法是使用异步FIFO(也更准确地称为多速率FIFO) 在几乎所有的FPGA(包括您正在使用的Xilinx部件)中,您都可以使用供应商创建的FIFO——在Xilinx的情况下,您可以通过使用CoreGen工具生成FIFO来实现这一点 您也可以使用双端口RAM和适当的握手逻辑自己构造这样的FIFO,但与大多数事情一样,除非您有很好的理由这样做,否则您不应该自行重新设计FIFO
<>你也可以考虑你的设计是否真的需要多个时钟域。有时这是绝对必要的,但这比大多数刚开始相信的要少得多。例如,即使您需要以多种速率运行的逻辑,您通常也可以通过使用单个时钟和适当生成的同步时钟来处理此问题。您正在体验的魔力很可能是因为您在合成中没有正确地约束您的设计,或者您没有正确地进行握手。您有两个选择: