zoukankan      html  css  js  c++  java
  • FPGA中信号的跨时钟域处理模板(一)

        在做项目的时,我们经常会使用到多个时钟。每一个时钟在FPGA内部都会形成一个时钟域,如果一个时钟域中要用到另外一个时钟域的信号,也就形成了跨时钟域的操作,这时候要格外小心。

    一、实际使用背景

          假设在项目中需要在clk_b时钟域中用到用到来自clk_a中的信号。那么此信号就需要从clk_a时钟域跨越到clk_b中因此我们要建立一个同步计数器,该设计器从clk_a 中获取信号,然后再clk_b中创建一个新的信号。并从作为输出。模型如下:

    在此设计中、我们假设输入的信号与clk_a和clk_b相比变化缓慢,那么需要做的就是使用两个触发器将信号从clk_a转移到clk_b。

    二、模板

    模块 Signal_CrossDomain(
         输入 clkA,//在该示例中我们实际上不需要clkA,但这是出于完整性的考虑,因为在其他示例中将需要它,
         输入 SignalIn_clkA,
         输入 clkB,
         输出 SignalOut_clkB
    );
    
    //我们使用两级移位寄存器将SignalIn_clkA同步到clkB时钟域
    reg [1:0] SyncA_clkB;
    总是 @(posedge CLKB)SyncA_clkB [0] <= SignalIn_clkA; //注意,我们使用CLKB
     总是 @(posedge CLKB)SyncA_clkB [1] <= SyncA_clkB [0]; //注意,我们使用clkB
    
    分配 SignalOut_clkB = SyncA_clkB [1]; //同步到新的信号(=准备中使用)CLKB域
     endmodule

     三、分析

         这两个触发器具有延迟信号的副作用,例如在一下波形中,可以看到俩个触发器将慢速运动的信号同步或者说是延迟到clk_b时钟域中。其实这种方法我们在同时钟域中也用过,经常用来数据对齐。

     

  • 相关阅读:
    Team Foundation Server操作说明
    SPSS二次开发
    EXT 组件一些属性与方法(Tree)
    win10经验总结
    for语句执行顺序
    数组快速生成range的方法
    切图技巧
    input和textarea区别
    hosts文件位置
    css3动画总结
  • 原文地址:https://www.cnblogs.com/lgy-gdeu/p/12356217.html
Copyright © 2011-2022 走看看