我想知道什么是“最好的”或者至少是一个“好”的方法来实现一个在总线或通信时钟上同时作用于两个进程的进程。
假设您想为一个可以发送和接收数据的FiFo提供服务。通常,接收到的数据在其总线"com_clk“的”下降“沿被分配,其中被发送的数据需要在"com_clk”的上升沿被更新,以便在对方在下降沿分配数据时最稳定。
我的方法看起来像这样,当然是使用通常的框架:
方法1:
wait until rising_edge(com_clk);
if reading='1' then
wait until com_clk='0';
internal_mem <= bus_data; --read the data from the bus
else
bus_data <= internal_mem ; --write the data to the bus
end if;方法2:
wait until rising_edge(sys_clk); --should be much faster than "clk" i guess about 10x(?)
if reading='1' then
wait until com_clk='0'; --wait for the com_clk to become '0'
internal_mem <= bus_data; --read the data from the bus
else
wait until com_clk='1'; --wait for the com_clk to become '1'
bus_data <= internal_mem ; --write the data to the bus
end if;解决方案2的一个派生方法是为"com_clk“构建一个边缘检测器,并将该信号用于”等待“或”if子句“中。那么,什么是“好的”或“最好的”方法来处理com_clk信号的两个边缘,我如何评估它呢?
发布于 2020-04-24 13:40:48
实际上,您希望在FPGA上实现双倍数据速率。
可怕的方式:你可以做两个进程,一个在上升沿工作,另一个在下降沿工作。这可能会合成,也可能不会合成,这取决于您的技术,它可能会合成,也可能不会合成,以使用硬件触发器。
的坏方法:你不能使用你的时钟和上升沿两者。在这里,您实际上是在使用两个时钟域。如果你的时机错了,你可能会得到亚稳态。你需要在这里做通常的亚稳态处理电路。
更好的方式:生成一个较慢的时钟。从时钟创建上升沿和下降沿脉冲。这些脉冲将被馈送到触发器的使能端口。
https://stackoverflow.com/questions/61385614
复制相似问题