跨时钟域异步处理方法

  • 信号分为电平信号和脉冲信号,也可以分为单比特信号和多比特信号。
  • 时序分析的基础在与同步电路(Synchronous Circuit),即时序分析是针对同步电路进行的。
  • 同步电路:电路设计中所有的寄存器,它的时钟都来自同一个时钟源,当电路的时序满足要求时,同一个时钟沿将会触发所有寄存器同时做出采样动作,因为这些寄存器是同步的。将此概念推而广之,假设设计中有些寄存器被同一个时钟驱动,而另一些寄存器被该时钟的分频时钟所驱动,仍然属于同步电路。eg. 假设寄存器AA和BB是由时钟clk驱动的,而CC和DD是由clk分频后的时钟clk_div驱动的。虽然CC和DD并不会对clk的每个采样沿都做出反应,但由于clk和clk_div两个时钟之间的相位关系固定,所以可看作同步电路
  • 凡是时钟相位有关系的电路,都可看作同步电路。
  • 数字设计从模拟电路中引入了两个时钟,分别为clk1和clk2。由于两个时钟在模拟电路中有相同的源头,因而相位关系是确定的,例如clk2的上升沿比clk1的上升沿晚了3n到达,那么同样也可知寄存器AA、BB与CC、DD输出的前后关系,因而也可以看作同步的。上述这些同步情况,都需要使用时序分析的方法对寄存器之间的路径进行分析,满足条件后才可以流片,称为时序SignOff.
  • 异步时钟:eg. 假设数字设计由3个时钟驱动,分别是clk1,clk2,clk3。clk3是来自芯片外界的输入,与clk1和clk2并无关联,因此它们不存在任何相位关系和频率关系,此时可以称clk3和clk1是异步时钟,寄存器EE受clk3驱动,可以称为EE处在clk3时钟域下,相应地,AA、BB处在clk1时钟域下,CC、DD处在clk2时钟域下。如果没法确定clk1和clk2的相位关系,在这种情况下clk1和clk2就无法在数字电路中进行精确的时序约束,因为它们输入的相位关系都不确定,进行时序约束将失去意义,此时,clk1和clk2也可以看作异步时钟。
  • 处在两个异步时钟域下的信号,也可以称为异步信号。 eg. 一个典型的异步时钟信号的例子是MCU(单片机)中常用的SWD时钟,它通过一个引脚进入芯片,与上面的clk3思路一样,与内部的时钟毫无关系,因此它驱动的一些调试访问端口(Debug Access Port, DAP)寄存器就与CPU的其它寄存器处于异步时钟域上。
  • cdc:两个异步时钟域下的信号并不会完全保持隔离,有时他们也需要进行交流。一个SoC系统中包含跨时钟处理的例子eg. CPU是由时钟clk1驱动的,相应的总线时钟虽然可以分频,但仍然处于clk1的时钟域内,在总线上挂着某设备,该设备需要CPU对它进行一些参数配置,以及当用户需要读取该设备时能从CPU读到,因而其内部包含一个配置模块,以总线时钟作为驱动。同时,该设备的功能需要由另一个时钟clk2驱动才能完成。==使用clk2而非clk1可能源于多种原因,例如clk1太慢,需要更高速的clk2以提高该设备的工作效率,或者考虑到当CPU休眠后clk1处于极低甚至没有时钟的情况下,由于clk2的存在,设备仍然能维持工作。==在这样的设计中,必然存在工作在clk1域的总线接口配置模块与工作在clk2域的设备功能核心模块之间的信号交互。
  • 异步时钟域上信号的相互流通,不能直接用金属线连接,因为时钟之间的关系是不确定的(可以认为是随机的),当寄存器采集异步信号后,其实际建立和保持时间无法保证符合要求,因此很可能在寄存器的输出端产生亚稳态。 亚稳态是一种不稳定的状态,一般数字信号只有0和1两种状态,而亚稳态的电平可能既非0又非1,而且在变化中,一段时间后,才能稳定在一个事先无法预知的状态上,因而这种信号的传播是危险的。亚稳态并不是必然会发生的,大多数情况下,异步信号可以侥幸地在寄存器的采样窗口内不变,因为采样采样窗口很短,维持不变是大概率事件,不会产生亚稳态,但是只要有概率产生,就是芯片的不稳定因素。例如,某寄存器的每次采样后,输出亚稳态的概率是千分之一,如果它的时钟在10Mhz上,则1s会出现10000次亚稳态,看似小概率的事件会演变成经常出现的事故,而且,亚稳态还会随着线路进行传播,导致更大范围的亚稳态发生,因此,异步信号跨时钟需要特殊处理,常称为跨时钟域(Clock Domain Crossing, CDC)处理。

你可能感兴趣的:(SoC/ASIC设计原理,#,lint,SpyGlass,CDC,Questa_CDC,硬件架构,嵌入式硬件)