一种跨时钟域事件传递的电路的制作方法

文档序号:14554645阅读:283来源:国知局
一种跨时钟域事件传递的电路的制作方法

本电路涉及数字电路领域,尤其是在FPGA和ASIC中跨时钟域传递事件、信号、数据。



背景技术:

在数字系统中,包括FPGA和ASIC,通常有多个时钟,需要在不同时钟域之间传递事件和数据。

为了可靠的传递,要求消除亚稳态、没有丢失事件;如果传递事件的同时还同步传递相应的数据,则还要求传递后事件和数据依然能保持同步,以便方便而准确的被后续的电路接收。

目前针对不同的情况,业内有几类处理方法:当从频率为f_clkA的时钟域传递到频率为f_clkB的时钟域时,

(1)如果f_clkA远小于f_clkB,则可以直接用clkB对来自clkA时钟域的信号进行采样。

(2)如果f_clkA大于f_clkB或者二者相差不多,则要将来自clkA时钟域的信号展宽,再由clkB采样。

以上这些办法主要针对消除亚稳态;而要做到不丢失事件,以及保证事件和数据的同步,通常是用握手的方法,即clkA传送事件和数据之前先确认clkB时钟域是可以接收的;clkB时钟域在接收到clkA时钟域的信号后再发给clkA时钟域一个确认信号。这种方式无法处理突发性密集事件,另外两个时钟域间的握手也使事件传递效率降低。



技术实现要素:

本方案主要针对上述要求中的不丢失事件,以及保证事件和数据的同步。主要改进点即有益效果是:

(1)对于突发性密集事件(总体稀疏,短时间密集),不会丢失事件,全部传递到另一个时钟域;

(2)不论是单独传递事件,还是同时传递事件和对应数据,都是单向化,不需要握手或确认信号,有助于减少延迟、增加吞吐量;

(3)可以适应两个时钟域的时钟的任意频率关系和相位关系。

本方案主要思路是:针对上述(1)(2)(3)点,从A域传递到B域时:

(1)A域中对事件计数,特别是当突发密集事件时,可以记录已经到来但尚未传递出去的事件的总次数,之后再逐一传递出去;如果传递事件的同时也传递数据,则在A域也缓存数据,并保证每个事件和该事件相应的数据同步传出。

(2)事件的表示形式是:在A域为脉冲(比如,每持续一个时钟周期的高电平表示一次事件),在AB交界是跳变沿(上升沿或下降沿表示事件),在B域又变回脉冲,这样保证每个事件有且仅有一次传递;在电路时序上保证每个事件到达B域时,相应的数据(如果有)也会有效传递。

(3)根据两个时钟clkA和clkB的频率的相对大小,在A域中生成事件时设置合适的分频计数值,保证A中生成的相连两个表示事件的跳变沿间隔足够长,可以被clkB有效识别。

本方案内容如下:

(如图1)一种跨时钟域事件传递的电路,包括两个时钟域A和B,其中的时钟分别为clkA和clkB,其特征在于,时钟域A中包括事件计数最大值N、分频系数K、事件溢出指示ERR、事件输入p、数据输入d五个端口,以及事件计数、事件再生、数据缓存三个单元,时钟域B中包括无数据事件输出pout_0d、有数据事件输出pout_Wd、数据输出dout三个端口,以及事件采样、数据采样两个单元,其中:

所述事件计数最大值N为输入端口,其值为正整数,其设定了对A中现存事件进行计数所允许的最大值;

所述分频系数K为输入端口,其值为正整数,其设定了事件再生单元所生成的相邻两个事件的最小时间间隔为clkA周期的K倍;

所述事件溢出指示ERR为输出端口,指示当前A中现存事件总数是否超过N;

所述事件输入p为输入端口,其每次持续时间为一个clkA周期的脉冲都代表一次事件输入;

所述数据输入d为输入端口,其位宽为W,在仅传递事件不传递数据的情况下,该端口的数据无意义,在同时传递事件和数据的情况下,该端口的数据与p上相应事件的脉冲出现在同一个clkA周期中;

所述无数据事件输出pout_0d为输出端口,其每次持续时间为一个clkB周期的脉冲都代表一次事件输出;

所述有数据事件输出pout_Wd为输出端口,其每次持续时间为一个clkB周期的脉冲都代表一次事件输出;

所述数据输出dout为输出端口,其位宽为正整数W,在仅传递事件不传递数据的情况下,该端口的数据无意义,在同时传递事件和数据的情况下,该端口的数据与pout_Wd上相应事件的脉冲出现在同一个clkB周期中;

所述事件计数单元连接端口N、ERR、p,还连接事件再生单元的分频计数输出gcnt,该单元对A中现存事件即已经到达A中但是尚未传递到B中的事件进行计数,最大为N,当超出N时置位ERR;

所述事件再生单元连接端口K、p,还连接事件计数单元的计数输出pcnt,该单元将每个要从A传递到B的事件转换为该单元的输出Qp上的一个上升或下降的跳变沿,相邻两个跳变沿的最小时间间隔为clkA周期的K倍;

所述数据缓存单元连接端口d、p,还连接pcnt、gcnt,输出为Q0,该单元内接收并存入d,当事件再生单元生成Qp上代表一个事件的跳变沿时,与该事件相应的数据也出现在Q0上,该数据持续的最短时间为clkA周期的K倍;

所述事件采样单元连接Qp,该单元将Qp上每个代表事件的跳变沿转换为一个宽度为一个clkB周期的脉冲,该脉冲输出到端口pout_0d和pout_Wd上;

所述数据采样单元连接Q0,该单元将Q0转换为与clkB同步的数据,该数据输出到端口dout上。

作为多种实施方式之一,所述一种跨时钟域事件传递的电路中:

所述事件计数单元包含一个事件计数器pcnt,其计数规则为,系统复位后归零,之后端口p上每到来一个事件脉冲则计数增一,最大计数到N,每当gcnt为K-1时计数减一,最小计数到零,当计数值为N的时候如果p上到来一个事件,则ERR置位。(计数规则请参考图2)

所述事件再生单元包含一个分频计数器gcnt、一个跳变沿控制电路,其中:

所述分频计数器用于计数该单元生成的每两个相邻跳变沿之间的时钟周期数,其计数规则为,系统复位后置K-1,在计数值为K-1时如果满足条件(pcnt<2 && p==1)||(pcnt&gt;=2)则置零,在计数值小于K-1时在时钟clkA的每个周期中计数增一,计数值最大为K-1;

所述跳变沿控制电路包括组合电路和输出寄存器Qp,在该组合电路控制下,每当gcnt==K-1并满足条件(pcnt<2 && p==1)||(pcnt>=2)时,寄存器Qp的值会翻转。(计数规则可参考图3,电路可参考图4)

所述数据缓存单元包括pcnt译码器、gcnt译码器、N级流水线,其中:

所述pcnt译码器对pcnt译码,生成N+1个选择信号sel0、sel1、……、selN,其结果是,当pcnt为某一个值i的时候,对应的选择信号seli为1,其它N个选择信号为0;

所述gcnt译码器对gcnt译码,生成一个选择信号,该信号在gcnt等于K-1时为1,在gcnt不等于K-1时为0;

所述N级流水线,包含第N-1级、第N-2级、……、第0级,第N-1级的输出QN-1连接到第N-2级、第N-2级的输出QN-2连接到第N-3级、……、第1级的输出Q1连接到第0级、第0级的输出连接到该单元的输出Q0;

所述N级流水线的每一级有相同的结构,其中第i级连接输入端口p、d,还连接第i个选择信号seli、第i+1个选择信号seli+1、gcnt译码器输出,所述第i级包括5个二选一选择器61~65和一个W位宽寄存器Qi,其中seli连接至选择器61的控制端,p连接至选择器62和65的控制端,seli+1连接至选择器64的控制端,gcnt译码器输出连接至选择器63的控制端,寄存器Qi输出连接到选择器61和62的0选输入端,d连接至选择器61和64的1选输入端,选择器61的输出端连接到选择器62的1选输入端,选择器62的输出端连接到选择器63的0选输入端,选择器63的输出端连接到寄存器Qi的输入端,第i+1级流水线的输出Qi+1连接到选择器64和65的0选输入端,选择器64的输出端连接到选择器65的1选输入端,选择器65的输出端连接到选择器63的1选输入端。(可参考图5、图6)

所述事件采样单元包括4级寄存器R3~R0和2个异或门,其中R3的输入端连接时钟域A输出的Qp,R3的输出端连接R2的输入端,R2的输出端连接R1的输入端,R1的输出端连接R0的输入端,R2和R1的输出端分别连接到一个异或门的两个输入端,该异或门的输出端连接到输出端口pout_0d,R1和R0的输出端分别连接到另一个异或门的两个输入端,该异或门的输出端连接到输出端口pout_Wd。(可参考图7)

所述数据采样单元包括2级W位宽的寄存器DR1和DR0,其中DR1的输入端连接时钟域A输出的Q0,DR1的输出端连接DR0的输入端,DR0的输出端连接到输出端口dout。(可参考图8)

所述输入端口K的值由clkA时钟周期标称值Ta、clkA时钟周期抖动最大值Taj、clkB时钟周期标称值Tb、clkB时钟周期抖动最大值Tbj、B中寄存器建立时间Tbsu、B中寄存器保持时间Tbh确定,在只传事件的情况下,K的取值最小为(Tb+Tbj+Tbsu+Tbh)除以(Ta-Taj)所得的商向上取整,在同时传递事件和数据的情况下,K的取值最小为(Tb*2+Tbj*2+Tbsu+Tbh)除以(Ta-Taj)所得的商向上取整;

所述输入端口N的值由端口p上最密集传递的一段时间内的事件总数M确定,在极端情况即连续输入的情况下,N值最小为(M-M/K)向上取整。

一种跨时钟域事件传递的方法,涉及两个时钟域A和B,其中的时钟分别为clkA和clkB,将事件从A传递到B中,其特征在于,包括如下步骤:

(1)设定事件计数最大值N、分频系数K:

其中K的值由clkA时钟周期标称值Ta、clkA时钟周期抖动最大值Taj、clkB时钟周期标称值Tb、clkB时钟周期抖动最大值Tbj、B中寄存器建立时间Tbsu、B中寄存器保持时间Tbh确定,在只传事件的情况下,K的取值最小为(Tb+Tbj+Tbsu+Tbh)除以(Ta-Taj)所得的商向上取整,在同时传递事件和数据的情况下,K的取值最小为(Tb*2+Tbj*2+Tbsu+Tbh)除以(Ta-Taj)所得的商向上取整;

其中N的值由输入端口p上最密集传递的一段时间内的事件总数M确定,在极端情况即连续输入的情况下,N值最小为(M-M/K)向上取整;

(2)事件的计数和再生、数据的缓存:

对A中现存事件即已经到达A中但是尚未传递到B中的事件进行计数,即当端口p上到来一个事件时,计数增一,当事件再生传递出一个事件给B时,计数减一,计数最小为0,最大为N,当超出N时对事件溢出指示ERR置位;

当出现ERR置位时回到第(1)步,重新计算和设定N值;

当事件计数不为0即A中尚有事件要传递到B中时,将A中事件逐一地传递到B中,再生事件的间隔最小为clkA时钟周期的K倍;

在仅传递事件不传递数据的情况下,不需要数据缓存,在同时传递事件和数据的情况下,在p上出现每个事件的同时将数据输入端口上相应的数据接收并存入缓存,当每个事件再生后出现在B的输入端时,与该事件相应的数据也从缓存输出到B的数据输入端上,该数据持续的最短时间为clkA时钟周期的K倍;

(3)事件和数据的采样:

用B中的时钟clkB对从A中传递来的事件和数据进行采样,在仅传递事件的情况下生成同步于clkB的事件输出,在同时传递事件和数据的情况下生成同步于clkB的事件输出和数据输出。

所述一种跨时钟域事件传递的方法中,每个输入事件在A的输入端口p上是持续时间为一个clkA时钟周期的脉冲,在经过事件再生后转换为一个上升或下降的跳变沿,在B中处理后是持续时间为一个clkB时钟周期的脉冲。

附图说明:

图1 为整体功能框图;

图2 为“事件计数”pcnt状态转移图;

图3 为“事件再生”中分频计数器gcnt状态转移图;

图4 为“事件再生”电路;

图5 为“数据缓存”电路;

图6 为数据缓存的N级流水线中第i级的电路图;

图7 为“事件采样”电路图;

图8 为“数据采样”电路图;

图9 为第一个具体实施例(仅传递事件);

图10为第二个具体实施例(传递事件和数据)。

具体实施方式

下面以两个例子说明上述方案的实施。在这两个例子中,假设clkA频率为100MHz即Ta=10ns,clkB频率为50MHz即Tb=20ns,二者的抖动都为0.2ns,clkB时钟域中寄存器的建立时间为0.3ns,保持时间为0.1ns。在这两个例子中,参照图9或10中A区输入事件p的信号,共有3个clkA周期的高电平,每个周期的高电平代表一个事件脉冲,所以到来的事件共3次。第一次与前后事件都有较长间隔,所以可看做是事件稀疏的情况;后面两次是连续到来的,可看做是事件密集的情况。所以最密集到来的事件数目M为2。

第一个例子是仅传递事件。

(1)确定N、K:

计算(Tb+Tbj+Tbsu+Tbh)/(Ta-Taj)=(20+0.2+0.3+0.1)/(10-0.2)=2.10,向上取整为3,设置K=3。计算(M-M/K)=(2-2/3)=2,向上取整为2,设置N=2。

以下参考图1~8的电路,以及图9的时序:

(2)事件计数与事件再生:

从图中可以看出,因为K=3,所以gcnt从0到2即K-1;因为N=2,所以pcnt在事件密集时最大计到2。

3个输入事件转变为Qp上的3个跳变沿,后面两个跳变沿的间隔最小,但仍不少于K=3倍的clkA时钟周期。

(3)B区对事件的采样:

通过clkB的采样,消除亚稳态后经过异或门,恢复出3个事件,每个宽度为clkB时钟周期。

其中,由于图示中clkA和clkB的相位关系,B区中R3会在第一个和第三个事件处出现亚稳态,相应的,R2和R1会出现不定态,以“x”表示。在R2和R1中,当x=0时,异或门输出如图9中pout_0d(x=0);当x=1时,异或门输出如图9中pout_0d(x=1)。可以看出,在这两种情况下,输出都是3个事件(脉冲每持续一个clkB周期就代表一个事件),是正确的。另外一种情况是在第二个事件处,没有产生亚稳态,输出也是正确的。

从以上三种情况看,无论clkA和clkB的相位如何,不外乎出现亚稳态与不出现亚稳态,而输出结果都是正确的。这佐证了前述有益效果的第三点中,可以适应两个时钟域的时钟的任意相位关系。

而通过(1)中对N,K的计算,也可以保证前述有益效果的第三点中,可以适应两个时钟域的时钟的任意频率关系。

对于前述有益效果的第一点,从这3个事件来看,不论稀疏(第一个事件),还是密集(第二、三个事件),只要正确设置N,K,就不会丢失事件。

第二个例子是同时传递事件和数据。

(1)确定N、K:

计算(Tb*2+Tbj*2+Tbsu+Tbh)/(Ta-Taj)=(20*2+0.2*2+0.3+0.1)/(10-0.2)=4.16,向上取整为5,设置K=5。计算(M-M/K)=(2-2/3)=2,向上取整为2,设置N=2。

以下参考图1~8的电路,以及图10的时序:

(2)事件计数与事件再生、数据缓存:

从图中可以看出,因为K=5,所以gcnt从0到4即K-1;因为N=2,所以pcnt在事件密集时最大计到2。

3个输入事件转变为Qp上的3个跳变沿,后面两个跳变沿的间隔最小,但仍不少于K=5倍的clkA时钟周期。

从图10可以看出,3个输入事件对应p上的3个clkA周期高电平,相应的3个数据a、b、c与3个高电平同步出现。当Qp上3个跳变沿出现时,3个数据也依次同步出现在Q0上。

(3)B区对事件的采样:

通过clkB的采样,消除亚稳态后经过异或门,恢复出3个事件,每个持续时间为一个clkB时钟周期。

其中,与第一个例子类似,3个事件在B中依次会出现有亚稳态、无亚稳态、有亚稳态的情况,输出事件pout_Wd都是正确的。

图10中,对数据的采样在DR1、DR0中虽然也出现了亚稳态和不定态,但在pout_Wd上3个事件有效时,相应的3个数据a、b、c也都是稳定和正确的。后续电路可以根据这3个事件有效来读取相应的数据。

从图9和图10可见,传递事件和数据时,都是单向化,即只有从A到B的信号,没有从B到A的信号,可见不需要握手或确认信号,有助于减少延迟、增加吞吐量。这佐证了有益效果的第二点。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1