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


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

    1.异步复位,同步释放 

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

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

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

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

    1. module syn(
    2. input clk,
    3. input rstn,
    4. output syn_rstn
    5. );
    6. reg rstn_r,rstn_rr; //寄存一拍和两拍
    7. always@(posedge clk or negedge rstn) begin
    8. if(!rstn) begin
    9. rstn_r<=0;
    10. rstn_rr<=0;
    11. end
    12. else begin
    13. rstn_r<=rstn;
    14. rstn_rr<=rstn_r;
    15. end
    16. assign syn_rstn = rstn_rr;
    17. endmodule

    Q:为什么是打两拍?

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

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

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

    2.门控时钟

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

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

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

    1. module steadyclk(
    2. input clk,
    3. input rstn,
    4. input en,
    5. output clko
    6. );
    7. reg en_r,en_rr;
    8. always@(posedge clk or negedge rstn)
    9. if(!rstn)
    10. begin
    11. en_r = 0;
    12. en_rr = 0;
    13. clko=0;
    14. end
    15. else
    16. en_r = en;
    17. end
    18. always@(negedge clk or negedge rstn)
    19. if(!rstn)
    20. begin
    21. en_rr = 0;
    22. clko = 0;
    23. end
    24. else
    25. en_rr = en_r;
    26. end
    27. assign clko=clk&en_rr;
    28. endmodule

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

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

    3.无毛刺时钟切换

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

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

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

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

  • 相关阅读:
    京东销售码洋与广告投入及销量预测【数据集+完整代码】
    多路并归,贪心:《信息学奥赛一本通》:池塘钓鱼
    深度解析自然语言处理之篇章分析
    C. Minimum Varied Number
    2--Linux:基础命令
    深度学习(PyTorch)——循环神经网络(RNN)基础篇五
    【毕业设计】医学大数据分析 - 心血管疾病分析
    国庆节,零代码帮你搞定假期美食菜单
    武汉便宜的ov通配符https证书
    flutter iOS 视频mov格式转MP4格式
  • 原文地址:https://blog.csdn.net/zangzangbupei/article/details/139782661