原创 【博客大赛】【原创】跨时钟域的信号传递

2012-3-12 08:40 2034 8 12 分类: FPGA/CPLD

同频异相传递:

一种简单的解决办法是用两级寄存器pipe一下,第二级寄存器的输出Q基本上不会有亚稳态,但是这种办法并不能保证最后的输出结果一定是正确的,因为第一级可能发生亚稳态而产生了一个错误的采样值。

同频异相打两下.jpg

可靠的方法还是用双口RAM或者FIFO来缓存一下,由于是同频异相,因此吞吐速率一致,实现起来比较简单。

低频传递到高频:

在FPGA设计中经常会遇到这样的情况:一个异步的或者低频时钟域的信号要触发某个高频时钟域的动作,处理方法也是用两级寄存器pipe一下,然后用组合逻辑产生出高频时钟域的脉冲,这个脉冲可以作为消息传递去控制高频系统的相应动作。

低频传递到高频.jpg
高频传递到低频:
这个比较讨厌,不可能拿低频寄存器去采样高频信号,所以要另想办法。一种可行的办法如下:
高频传递到低频.jpg
另外,用异步FIFO来做也是一种选择。
PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

用户213742 2012-3-20 22:30

您的方法有个局限,a如果有两个脉冲,而且相距很近,那么就会产生一个很短的high_clk_signal_reg,而万一clk2实在太慢了,以致于根本采不到high_clk_signal_reg的电平变化,那么边沿就检测不到了。我觉得一个可行的方法是在clk2时钟域给clk1时钟域一个反馈,只有当我成功检测到上升沿了,你才把high_clk_signal_reg信号复位置低。

用户213742 2012-3-20 22:15

嗯,您考虑的很全面。CLK2很有可能采在Q1的上升沿上,造成亚稳态。我觉得可以再加一级FF来解决,就像同频异相中的那样。

用户1708388 2012-3-19 22:54

假如a的上升沿引起的Q1变高时刻正好处在CLK2的上升沿,会有什么情况发生? 或者假如a的上升沿正好处在CLK2的第3个上升沿之前某一“恰当”的时刻,又会有什么情况发生?

用户1660450 2012-3-19 12:05

对高速时钟的脉冲,可以锁存成电平。 reg high_clk_signal_reg ; always @ ( posedge high_clk ) begin if ( high_clk_signal == 1'b1 ) high_clk_signal_reg <= ~high_clk_signal_reg ; else high_clk_signal_reg <= high_clk_signal_reg ; end 然后,可以对这个电平检测上升沿或者下降沿。
相关推荐阅读
用户213742 2012-03-19 09:02
【博客大赛】【原创】我对FPGA的理解
    本人所在工作组主要跟FPGA平台打交道,但是某天突然被一个software的同事问道,FPGA是做什么的?可以跑操作系统吗?我楞了一下,一两句话不能表述清楚,就回答说,大概就像一堆74芯片...
用户213742 2012-03-12 08:40
【博客大赛】【原创】Cyclone-II驱动2.4寸TFT液晶显示彩条
网上买来的21EDA的CycloneII开发板,拿到手的第一件事就是兴致勃勃地驱动TFT,哎,老本行,虽然现在的工作已经跟显示技术无关了,但是兴趣还在的。 本以为驱动接口是RGB的,结果...
我要评论
4
8
关闭 站长推荐上一条 /3 下一条