我有两个进程A和B,每个进程都有自己的时钟输入.
时钟频率略有不同,因此不同步.
过程A从IC采样数据,该数据需要传递给过程B,然后过程B需要将该数据写入另一个IC.
我目前的解决方案是在进程A和B之间使用一些简单的握手信号.内存在进程A(非块内存)中被声明为分布式RAM(128Bytes作为std_logic_vector(7 downto 0)的数组).
我正在使用Xilinx的Spartan 3AN和ISE Webpack.
但这是正确的方法吗?
我在某地读到Spartan 3有双端口块存储器支持两个时钟,所以这会更正确吗?
我问的原因是因为我的设计行为不可预测,在这种情况下我只是讨厌魔术.:-)
除了非常特殊的例外情况,在两个独立时钟域之间移动数据的唯一正确方法是使用异步FIFO(也称为多速率FIFO).
在几乎所有FPGA(包括您正在使用的Xilinx器件)中,您都可以使用供应商创建的FIFO - 在Xilinx的情况下,您可以使用CoreGen工具生成自己的FIFO.
您也可以使用双端口RAM和适当的握手逻辑自己构建这样的FIFO,但是像大多数情况一样,除非您有充分的理由这样做,否则您不应该自己重新创建.
您还可以考虑您的设计是否确实需要具有多个时钟域.有时候,这是绝对必要的,但这是很多,MUCH少往往比大多数人刚刚开始相信.例如,即使您需要以多种速率运行的逻辑,您也可以通过使用单个时钟和适当生成的同步时钟使能来处理此问题.