【【深入浅出跨时钟域异步处理方法】】

【【深入浅出跨时钟域异步处理方法】】

两个异步跨时钟域下的信号并不会完全保持隔离,有时候也需要交流。所以怎么处理好两个时钟域下的时序问题就显得尤为关键。
这就需要用到一种名为跨时钟域处理的方法( Clock Domain Crossing CDC ) 处理
信号可以分为电平信号和脉冲信号,也可以分为单比特信号和总线信号。

单比特电平信号的跨时钟域处理方法 : 背靠背跨时钟域处理方法

将一个信号分别打了两拍 :

对于单比特脉冲信号的跨时钟域处理,需要比较源时钟和目的时钟的时钟快慢关系。

一 : 如果源时钟相比目的时钟慢,则源时钟的脉冲信号相比目的时钟来说是一个电平信号。这种跨时钟域的处理处理先按照上述的方法进行背靠背结构将脉冲信号打进来,然后再取得这样一个信号的上升沿或下降沿,就能转变成目的时钟域的脉冲信号 。

assign a_fall = (~a_latch) &  a_latch_r    ;   // 采样下降沿 新为0 旧为1 
assign a_rise = (a_latch)  & (~a_latch_r)  ;   // 采样上升沿 新为1 旧为0 

二 : 若源时钟要比目的时钟快,则源时钟上的脉冲信号,在目的时钟看来可能会变成一个毛刺,因此为了处理这样的问题,需要进行如下的操作
下面附上这里的代码


```c

```c

```c
module clk1toclk2(   //  怎么系统的把一个时钟域下的a 转化成另一个时钟域下的b
    input            clk1    ,
    input            clk2    ,
    input            a       ,
    input            rst1_n  ,
    input            rst2_n  ,
    output           b       ,
    output           busy
  );

  reg          a_latch          ;
  reg          b_latch          ;
  reg          b_latch_r        ;
  reg          b_latch_2r       ;
  reg          b_feedback_latch ;
  reg          c_latch          ;
  reg          c_latch_r        ;
  

  //  ----------------------------------
  always@(posedge clk1 or negedge rst1_n)
  begin
    if(rst1_n == 0)
      a_latch   <=  0 ;
    else if(a 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值