摘要:介绍包含多个时钟的电路设计,相对于单时钟设计(同步设计)。本章涉及多个时钟的设计,以及在设计过程中所遇到的问题和处理的方法。
1、同步设计与多时钟域设计:
同步设计:
多时钟域:
类型:
根据时钟域的类型,信号传输方向,信号类型共存在2^3=8种可能的跨时钟域传输方式。
本文主要讨论跨时钟域的控制信号传输。相比于数据信号传输(多位数据的传输),控制信号一般是1位信号。
跨同步时钟域 | 快时钟域到慢时钟域 | 控制信号传输 |
跨异步时钟域 | 慢时钟域到快时钟域 | 数据信号传输 |
- 不同时钟频率
- 相同时钟频率,不同相位
2、同步电路与异步电路
同步电路与异步电路在跨时钟域中的定义与
一般定义:
同步电路:不同clock的周期有倍数关系并且相位关系时固定的。
异步电路:clock之间没有倍数关系,或者相互之间的相位关系不是固定的。
严格定义:
同步电路:
-
- 每一个电路元件都是寄存器或者组合电路;
- 至少有一个电路元件是寄存器;
- 所有寄存器都接收同一个时钟电路;
- 若有环路,则环路至少包含一个寄存器。
其他定义:
同步电路是有时序电路(寄存器和各种触发器)和组合逻辑电路构成的电路。同步时序逻辑电路的特点是各触发器的时钟端全部连在一起,并接在系统时钟端,只有当时钟脉冲到来时,电路的状态才会发生改变,改变后的状态一直保持到下一个时钟脉冲的到来,此时无论外部输入有无发生变化,状态表中的每一个状态都是稳定的。
3、同步器
同步器不能存在任何组合逻辑。
作用:双D触发器(触发器链)只能一直亚稳态往下传输(或减小亚稳态传输的概率),并不一定能正确同步控制信号的值。
4、难点:
1、违背建立时间与保持时间:
建立时间与保持时间都是相对于时钟边沿到达寄存器而言,其定义如图所示:
建立时间与保持时间在同步设计中容易实现,但是在多时钟域下可能出现一个时钟域的输出在另一个时钟域中的时钟有效沿到来时发生改变的现象,可能会导致第二个时钟域触发器输出处于亚稳态。
如下图所示,xclk_output1在yclk上升沿期间发生变化,违背了建立时间与保持时间,可能导致依赖xclk_output1的信号进入亚稳态;
而xclk_output2在yclk上升沿期间未发生变化,则依赖xclk_output2的信号不会受到影响。
2、进入亚稳态
见《硬件架构的艺术——亚稳态》
多时钟处理方法
1、时钟命名
对属于同一时钟域的信号通常在命名期间使用相同前缀以方便根据信号名确定时钟域,具体命名方法根据设计要求。
2、分块化设计
内容:
- 每个模块只在单个时钟下工作;
- 在信号跨时钟域传输时,使用同步器模块将信号从当前时钟域传递到目标时钟域,从而使所有信号在进入某个时钟域内模块时与该模块的时钟保持同步;
- 同步器模块要尽可能小;
要求:满足保持时间的要求。
三、跨时钟域信号传输
跨时钟域信号的传输可以分为两类:
- 控制信号的传输
- 数据信号的传输
1、控制信号的传输
将一个异步信号直接送给若干个并行工作的触发器会大大增加亚稳态事件发生的概率,这可能会导致多个触发器进入亚稳态,通常使用同步触发器的输出取代异步信号,但是会增加整体延时;
采用同步电路的做法无法保证消除亚稳态,但能降低亚稳态出现的可能性。
双级同步电路(亚稳态信号仅保留一个周期):
三级同步电路(亚稳态保持时间超过一个周期,但小于两个周期):
Caution:通常使用双级同步电路就足够了,只有在时钟频率特别高时采用三级。
2、数据信号的传输
见《跨时钟域数据信号传输》
多时钟域设计中,数据经常从一个时钟域传输到另一个时钟域,保证数据在不同时间域间正常传输的两种方法为:
- 使用握手信号的方式;
- 使用异步FIFO。
跨同步时钟域的控制信号传输
如果多个时钟都源于同一时钟,并且相位和频率关系的都是已知的,那么这些时钟可以看成是跨同步时钟域的时钟, 可以分为以下几种类型:
- 同频零相位差时钟
- 同频恒定相位差时钟
- 非同频可变相位差时钟
- 整数倍时钟
- 有理数倍时钟
(1) 同频零相位差时钟
两个具有同频零相位的时钟是完全相同的时钟,在这之间进行数据传输并不算跨时钟域,只要在源触发器和目标触发器之间的逻辑组合的延时能满足电路建立时间和保持时间的要求,数据就能正确传输。
要求:保证静态时序分析(STA)通过,就不会出现亚稳态问题和数据丢失或不一致的问题。
(2)同频恒定相位差时钟
该固定相位可以看成是clock skew,允许传输的时间小于一个时钟周期,但只要满足控制信号的输出是在clk1的控制下进行翻转,就可以满足时序不会出现亚稳态和数据丢失的情况,一般不需要同步器。
两种类型:(1)对某个时钟及其反相时钟的使用;(2)某个时钟相对于其上级时钟发生相位移动。
如上图所示,数据由clk1传递到clk2时,建立时间与保持时间裕量减小(由1周期变为3/4周期),如果组合逻辑延迟能保证满足采样沿处建立时间与保持时间要求将不产生亚稳态,正确传输。
无须使用同步器,只要设计的静态时序分析通过即可。
应用场景:通常会在STA中创建此类时钟域以满足时序要求,如果组合逻辑有更多延时,可以通过在发射边沿和捕捉边沿加入偏移使其满足时序要求。
(3)不同频,但是时钟之间存在整数倍频率关系
含义:一个时钟的频率式另一个的整数倍,且有效沿的相位差是可变的。
特点:如下图所示,这两个时钟的有效沿之间可能的最小相位差始终等于较快时钟的时钟周期;
1)快时钟域发送,慢时钟域接收:
在所有可能性下,通常由快时钟的一个完整周期传输数据使数据能被正确捕捉,只要数据在快时钟域满足建立时间和保持时间要求,就不存在亚稳态或数据不一致问题,一般不需要使用同步器。
问题:
可能出现信号在慢时钟域的有效沿到来之前跳变的问题,导致慢时钟域无法完整接收所有信号,出现数据丢失问题。
解决方法:
为避免数据丢失(即快时钟发送数据频率大于慢时钟频率,如clk1每两个周期发送一次数据,则clk2可能无法完全接收到所有数据)源数据应当至少保持一个目标时钟的稳定状态,可以使用有限状态机(FSM)进行。
2)慢时钟域发送,快时钟域接收:
问题:在一个慢时钟周期内,快时钟多次采样得到慢时钟的控制信号。
解决方法:如果只需要一个快时钟周期的控制信号,可以采用上升沿检测电路进行实现。
(4)非整数倍频率的时钟
含义:
当两个时钟来源于一个时钟,经过PLL分频后产生两个时钟,其中一个时钟频率是另一个的非整数倍,有效边沿相位差可变。这种情况下,可以把两个时钟当做同步时钟,也可以当做异步时钟。
背景:
控制信号仅在两个时钟域的触发器之间传输,且触发器之间不存在任何逻辑。如果控制信号从发送端到接收端的时间为定值t。
类型:
时钟域之间的最小相位差可能导致亚稳态的发生,其取决于实际的频率倍数和设计工艺,可分为三种状况:
1) 源时钟有效沿和目标时钟有效沿之间永远相位差用于大于t,不会产生亚稳态,不需要同步器:
例:
如下图所示,clk1和clk2分别是初始时钟的二分频和三分频,两时钟的最小相位差为1/4二分频,能够满足无组合逻辑的建立时间和保持时间。
注意:由于两时钟相位差很小,应该避免在跨越时钟位置(时钟域变换位置)使用任何组合逻辑。
对于增加的组合逻辑,为满足建立时间与保持时间要求以避免亚稳态,必须使用同步器。
1、数据由慢时钟域传递至快时钟域,需要增加逻辑以保证在快时钟域仅采样一次;
2、数据由快时钟域传递至慢时钟域,需要将快时钟域数据至少保持一个慢时钟周期,以避免数据丢失。
2) 存在两个时钟有效沿相位差非常小的情况,会产生亚稳态问题;但在下一时钟周期就会留出足够大的时间冗余,使得数据的捕获不会出现违背建立时间或保持时间要求:
如下图clk1周期为10ns,clk2周期为7ns,最小相位差为0.5ns,会出现亚稳态,必须使用同步器。
(i) 慢时钟域传递至快时钟域:
问题:仅存在亚稳态问题。
前一个有效沿十分接近,后一个有效沿裕度很大,数据能被正确捕获,但是期望的获得B1,实际获得B2,这里并没有发生数据丢失,而是数据不连贯;
(ii) 快时钟域传递至慢时钟域:
问题:存在亚稳态问题和数据丢失问题。
则可能出现数据丢失现象,为防止这种现象,源数据应该保持至少一个目标时钟周期,可以使用FSM实现;
3) 时钟沿在连续几个周期中都非常接近,与异步时钟行为很相似,但由于来源于相同时钟,相位差可计算:
特点:
相比于异步时钟,变化的相位差异会产生周期性重复现象;可能会出现亚稳态问题和数据丢失问题。
快时钟到慢时钟域:需要考虑数据丢失问题和亚稳态问题。
慢时钟到快时钟域:仅需考虑亚稳态问题。
如下图所示,clk1和clk2的周期分别为10ns和9ns,会有4个连续的周期有效沿很接近,前两个周期可能违背建立时间,后两个周期可能违背保持时间:
B2中数据位丢失部分前一个由于违背建立时间发生数据1丢失,后一个周期由于违背保持时间捕捉到0。
为了不丢失数据,在本图数据两种可能的传输场景下,数据需要保持稳定至少两个目标时钟周期,可以通过FSM对源数据产生控制完成这一任务,但数据不连贯仍存在。
跨异步时钟域的控制信号传输
跨异步时钟域的状态与跨同步时钟域存在多个时钟沿边界接近的状况类似。
(1) 握手/反馈机制
应用场景:对于所有的跨异步时钟的控制信号都有用,不过主要用于快时钟到慢时钟、易产生亚稳态的情况。
工作原理:aclk为快时钟,bclk为慢时钟。当快时钟发出的控制信号净多慢时钟的触发器链到达慢时钟域后,到达的信号在通过aclk的触发器链传递至快时钟,使快时钟域收到慢时钟域的反馈。
反馈信号(abdat1,abdat2)作用:通过反馈信号进行控制信号的延时,从而让慢时钟域充分采样到控制信号,本质上也是对控制信号的延时。
解决快时钟域传输至慢时钟域不充分采样问题:通过反馈信号对快时钟域的时钟进行门控。
module test2( input aclk, input bclk, input rst_n, input adat, output reg abdat2, output reg bdat2 ); reg adat1; // output of register of fast time domain always @(posedge aclk or negedge rst_n) begin if(!rst_n) adat1 <= 1'b0; else adat1 <= adat; end reg bdat1; // output of register of slow time domain always @(posedge bclk or negedge rst_n) begin if(!rst_n) {bdat2, bdat1} <= 2'b00; else {bdat2, bdat1} <= {bdat1, adat1}; end reg abdat1; // output of register of response always @(posedge aclk or negedge rst_n) begin if(!rst_n) {abdat2, abdat1} <= 2'b00; else {abdat2, abdat1} <= {abdat1, bdat2}; end endmodule
(2) 窄脉冲捕捉电路
应用场景:无法将反馈信号接入控制信号产生或传递阶段时,即控制信号完全由前面的逻辑生成与后面电路无关。
窄脉冲捕捉电路:可以快速捕捉到快时钟域产生的异步窄脉冲控制信号。
工作原理:利用脉冲信号的上升沿进行输出脉冲信号,然后通过FF3的反馈进行清零。
注意:窄脉冲控制信号的产生频率不能太快,要等到CLEAR信号无效后才能发出下一个信号,否则会导致无法识别。
跨时钟域传输控制信号注意内容
- 在跨时钟域时,不一定需要跨时钟域电路(即同步器或握手信号),仅在接近异步时钟或者异步时钟时需要使用;
- 从慢时钟域传输至快时钟域时,只需要考虑抑制亚稳态的传播;
- 从快时钟域传输至慢时钟域时,不信需要使用触发器链抑制亚稳态的传播,还需要考虑慢时钟域采样不到快时钟域从而导致数据丢失的情况。
- 在窄脉冲控制信号捕捉电路中,不需要跨时钟域的反馈信号,只需要确保控制信号的频率不是特别快,窄脉冲可以被捕捉到。