【发布时间】:2016-06-03 08:24:46
【问题描述】:
如何在使用 Xilinx 软件的 VHDL 编程中检测 2 个不同时钟(不同频率)的上升沿同步?
有一个频率为 31.845 Mhz 的主时钟和另一个频率为 29.972 Mhz 的时钟。因此,基本目标是在 2 个时钟的上升沿之间存在同步时触发动作。我们尝试使用触发器来实现它,但我们只能实现 Level 同步,而不是 Edge 同步。
而且我们无法在 vhdl 中的 IF 和 WAIT 等语句中比较 2 个不同时钟的上升沿,所以这是毫无疑问的。
我们正在尝试使用计数器对脉冲进行计数。为此,我们需要在边匹配发生时停止计数。我们正在尝试实现一种称为“游标插值”的方法。
-
最初,我们使用以下语句代码,但由于无法在
IF语句中比较 2 个不同时钟(clk0、clk1)的上升沿,我们不得不放弃它。if(rising_edge(clk0)=rising_edge(clk1)) then wait; 然后我们尝试使用
WAIT语句 (wait until) 但失败了。- 然后我们尝试使用触发器和延迟电路(D 触发器),但结果是电平同步,而不是边缘同步。
【问题讨论】:
-
您的总体目标是什么,时钟的频率范围是多少。
-
有一个频率为 31.845 Mhz 的主时钟和另一个频率为 29.972 Mhz 的时钟。因此,基本目标是在 2 个时钟的上升沿之间存在同步时触发动作。我们尝试使用触发器来实现它,但我们只能实现 Level 同步,不能实现 Edge 同步。
-
而且我们无法在 vhdl 中的 IF 和 WAIT 等语句中比较 2 个不同时钟的上升沿,所以这是没有问题的。
-
当你说你正在寻找同步时,这里一定有一些宽容。您打算如何处理生成的信号?它是某种锁相环吗?这是问题本身真正应该包含的所有信息。
-
我想不出一个明显的答案,但如果你编辑你的问题以包含来自你的 cmets 的信息,它可能会让其他人更容易理解问题,也许会出现有一个解决方案。
标签: vhdl edge-detection xilinx-ise