典型跨时钟域(CDC)信号处理

本篇主要是针对单bit信号的分析,关于多bit数据的CDC处理可参考异步fifo异步FIFO常用知识总结-CSDN博客

1.异步复位,同步释放 

        原理:复位信号同其他信号一样也有建立时间和维持时间的时序要求,称之为移除时间恢复时间recovery time(恢复时间)描述的是非复位信号在时钟上升沿到来前需要保持的最小时间;removal time(移除时间)描述的是复位信号在上升沿到来之后需要保持的最小时间。

        由此可知,当复位信号不在时钟有效边沿变化时,可以保证电路的复位和恢复信号能被准确采样到。在实际设计中,有的模块先复位再给模块供应时钟,保证了复位信号与时钟错开,避免出现recovery 和removal违例的问题。

Q:为什么需要异步复位同步释放?

        异步复位信号可以直接作为管脚引出,节约资源,时延缩短。在对于复位精度有高要求的电路,异步复位信号往往是需要的。当异步复位信号释放(即撤销复位),则有可能发生在时钟边沿附近,容易使寄存器输出出现亚稳态,因此必须对释放信号进行打拍同步处理。

module syn(
input clk,
input rstn,
output syn_rstn
);

reg rstn_r,rstn_rr;  //寄存一拍和两拍
always@(posedge clk or negedge rstn)  begin
if(!rstn)  begin
    rstn_r<=0;
    rstn_rr<=0;
end
else  begin
    rstn_r<=rstn;
    rstn_rr<=rstn_r;
end
assign syn_rstn = rstn_rr;

endmodule

Q:为什么是打两拍?

        因为若出现亚稳态,打一拍过后仍然有输出亚稳态的风险,但在两拍过后,这种可能性非常低,也很少有需要打三拍的情况,因此打两拍处理是最常用的。

优点缺点
同步复位利于仿真;利于时序分析;不会有复位毛刺占用资源;在输入输出端口插入组合逻辑
异步复位异步复位端口节约资源;时延低

异步逻辑易出现亚稳态;增加静态时序分析困难

2.门控时钟

        在应用中,可能出现一段时间我们并不需要时钟,因此可以通过门控的方式将时钟信号置0,等待需要时再拉高,这能在很大程度上降低整体电路的功耗,节省资源。

        时钟出现斩断/毛刺的原因:在时钟的高电平期间使能信号拉低,造成了斩断,如果下级电路对毛刺敏感,比如异步复位,就会影响电路工作的稳定性、可靠性,严重时会导致整个数字系统的逻辑紊乱。因此我们需要保证使能信号的跳变出现在时钟的低电平范围内,同理,需要对时钟的使能信号进行同步处理。

        解决办法:加入下降沿敏感的触发器对使能信号同步。为什么是下降沿敏感呢?正如前面说的,我们要保证使能信号的跳变出现在时钟的低电平处,这样无论使能信号怎么变化,时钟的高电平处不会受到破坏。这样,电路的处理也很简单,在使能信号EN与clk相与之前,先让EN通过一个触发器同步到clk时域,再经过一个下降沿敏感的触发器后再和clk相与。这样就获得了一个尽可能消除亚稳态并且沿clk下降沿变化的EN信号,我们的门控时钟可靠性也得到了提高。

module steadyclk(
input clk,
input rstn,
input en,
output clko
);

reg en_r,en_rr;

always@(posedge clk or negedge rstn)
if(!rstn)
    begin
    en_r = 0;
    en_rr = 0;
    clko=0;
    end
else
    en_r = en;
end

always@(negedge clk or negedge rstn)
if(!rstn)
    begin
    en_rr = 0;
    clko = 0;
    end
else
    en_rr = en_r;
end
assign clko=clk&en_rr;

endmodule
    

Q:能不能第一个DFF也设计成下降沿敏感呢?

        可以,EN同步的关键在于第二个DFF一定要是下降沿敏感的,第一个DFF的作用是将EN先拉到clk时域,所以不管是上升沿还是下降沿都可以。

3.无毛刺时钟切换

        有了之前的分析后,无毛刺时钟切换的方法也跃然纸上:让选择信号SEL通过两个寄存器同步(其中后一个是下降沿敏感)后再与对应clk相与,对应电路如下:

        注意:clk0和clk1是不同频的信号,同步时我们至多只能让它同步到其中一个时钟域。并且因为同步打拍延时的引入,当时钟选择切换后,也不是马上跳转为高电平。

Q:为什么第二级DFF的Q非需要接入输入?

        Q非以负反馈的形式接回了输入,取与逻辑构建起clk0和clk1的关系,代表时钟切换前需要等一阵子,避免毛刺。

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值