状态指示检测装置和方法 【发明领域】
本发明涉及用于检测硬件设备输出的状态指示的装置和方法。一般来说,为了检测指示脉冲或状态指示或将其锁存在存储设备中,所述状态指示由同步于第一参考时钟的硬件设备输出,而同步于与所述第一参考时钟有相位和/或频率差异的第二时钟的处理设备或其它监控设备可能要读取该状态指示,例如1比特。因此,状态指示可能会因不同“时钟域”之间的相位和/或频率失配而丢失。
具体地说,本发明所解决的问题是,对第一和第二参考时钟之间的任意相位关系,如何才能实现指示信号从第一参考时钟域到第二参考时钟域的稳定传输。
【发明背景】
可以采用ASIC(专用集成电路)来操作和/或监视数据流。在这种ASIC内,通常有产生短脉冲形状的状态或错误指示的电路和功能块。此外,一旦从硬件设备中读出指示信号,则ASIC必须更新闩锁寄存器。如上所述,锁存状态指示(如1比特)的寄存器或触发器在不同于处理已锁存指示的电路(如微控制器接口)的时钟域下工作。因此,当访问闩锁寄存器时需要同步功能来避免亚稳态。
亚稳态可能在触发器(FF)的建立-保持窗口被违反的情况下出现。当出现亚稳态时,无法预测FF输出的逻辑状态,从而只能以一定错误概率给出未确定逻辑值稳定到确定状态的精确时刻。当然,理论上来说,亚稳态的触发器也可以被读出。但是,因为亚稳态,所以完全无法确定哪一个逻辑值被读出。
再者,即使更新请求和新指示在时间上重合,同步和更新功能也不得与错误指示的检测重叠。
需要锁存这样地状态指示的典型环境例如SONET/SDH应用架构。对于这种应用,电路会锁存短的、时钟周期长的指示,使它们同步于微控制器接口,并提供读时更新功能,而在读和更新阶段不覆盖新指示。例如,SDH/SONET ASIC可能会接收、监视和处理16个SDH/SONET数据流。在此情况下,从SDH/SONET应用中的数据流恢复时钟,因此ASIC涉及16个具有相同标称时钟频率但彼此间相位关系不可预测且输入到微控制器接口的时钟域,所述微控制器接口使控制和配置控制器可以存取被锁存的指示。假设锁存的指示在微控制器读取它们之前一直是可用的,从而可将它们更新为新指示而又不会覆盖读出阶段到达的指示。因此,仅通过两次连续的读访问,微控制器即可以检测指示状态中的变化。
现有技术说明
上述更新和锁存(检测)来自硬件设备的状态指示的问题是一个一般性的任务,并不局限于上述的SONET/SDH应用。例如,同一申请人提交的德国专利申请P19814359(对应于PCT/EP99/0226(WO99/50727)和美国专利申请09/280984)描述了大体上如图1所示那样存储和访问状态指示的问题。
硬件设备HW例如同步于第一参考时钟CLK_A将状态指示SI输出到属于时钟域A的输入存储装置ISM。状态指示SI′从输入存储装置ISM传送到输出存储装置OSM。例如,由处理装置PROC输出读请求RDRQ,以便从输出存储装置OSM读出状态指示SI″。读出状态指示SI″可以同步于属于时钟域B的第二时钟CLK_B,而从输入存储装置ISM传送状态指示SI′则可以同步于属于时钟域A的第一时钟CLK_A,以致读出和传送通常不会同时进行(亦参见图2中的时刻PD1、PD2)。这是时钟CLK_A和CLK_B之间存在相位和/或频率差所致,在实际实施例中,时钟CLK_A和CLK_B不是从同一个源产生的,而且它们通常不是分布在同一个时钟树上。即使时钟速率是相同的,一般的相差也存在,导致CLK_A和CLK_B脉冲各自的传送和读出沿不一致,即不同步。
在上述专利申请中,描述了在输入存储装置ISM中采集状态指示(若干位),然后将其传送或复制到输出存储装置OSM的若干寄存器中,以便一个或多个处理装置PROC可以同时访问输出存储装置OSM中的那些状态指示。
图2显示例如图1所示的时钟域A和时钟域B之间典型的相位/频率关系。例如,在时刻PD1、PD2,如果各时钟频率不是彼此的整数倍,即周期长度Ta不是周期长度Tb的整数倍,则各时钟脉冲的上升沿或下降沿不匹配。此外,即使各时钟频率在标称上彼此为整数倍,相位失配也可能随时间变化,尤其是当时钟频率由不同时钟源产生时。这意味着,例如新的状态指示SI(图2中以IN_STATUS表示)可能同步于第一参考时钟CLK_A以钟控方式打入输入存储装置ISN;但当存在相位和/或频率失配时,它可能不适于传送并存储在输出存储装置OSM中。
美国专利US5357613公开一种类似于图1所示的电路,即输入存储级由多路复用器和D触发器构成,而输出存储装置也由多路复用器和D触发器构成。还设有由两个串联的D触发器构成的同步级。类似于图1,该美国专利公开的电路分别在输入域和输出域用两个不同的参考时钟工作。虽然同步级可实现时间域同步,并实现低误码率的数据捕获,但是,首先它无法在两个时钟信号的任何频率和相位关系下正确工作,无法确保输出存储级所提取的值是通过时钟域边界正确传送的最新错误指示。
美国专利US5638015也公开了一种类似于附图1的配置。其中,设置了输入部分和输出部分,各部分以不同的参考时钟工作。其原理是采用多个延迟D触发器,以便使两个时钟域匹配。其中说明了这种配置可避免亚稳态。但是,它只适用于输出部分的时钟频率大于或等于输入部分的时钟频率的情况。再者,只有两个寄存器级,一个用于接收输入脉冲的输入级,一个所述脉冲直接传送到的输出级。
如上所述,常规技术无法通用于指示锁存时钟域和指示提取时钟域(下文称为时钟域A和时钟域B)之间的所有时钟和频率关系。经典的同步级方法,例如上述美国专利US-5357613和US-5638015所述的方法,在例如提取时钟域B的工作时钟CLK_B比锁存时钟域A的工作时钟CLK_A慢时就会失效。因此,当需要在任意相位/频率关系下实现读清零功能时,常规技术可能无法实现同步或无法尽可能快地传递所存储的(锁存或检测到的)指示信号。
因此,常规技术下据所知还没有在读出时集成所有三种功能即锁存、同步和更新而又不会丢失输入的状态指示的状态指示检测装置和状态指示检测方法。
本发明要解决的问题
如上参照现有技术,具体参照图1和图2所述,常规技术的电路仅由输入级装置ISM和输出级装置OSM构成,OSM在第一参考时钟CLK_A(锁存域A)和第二时钟CLK_B(读出域B)之间相位和/或频率关系任意的情况下,无法提供精确的锁存、同步和读更新功能。
因此,本发明的目的在于提出一种状态指示检测方法和装置,它可以确保对应于锁存参考时钟和读出时钟之间的每种频率和相位关系,状态指示都不会丢失,即对应于每种频率和相位关系,可以稳定地将状态从输入寄存器传送到输出寄存器,同时可以读入任何新输入的状态指示而不会丢失。
实现目标的解决方案
本发明目标通过一种用于检测状态指示的方法(权利要求1)来实现,其中,将原始状态指示读入第一参考时钟域的输入存储级,以使所述状态指示在同步于所述第一参考时钟域的第一参考时钟的所述输入存储级中可用;以及将所述读状态指示输入到第二参考时钟域的输出存储级,以使所述状态指示在同步于所述第二参考时钟域的第二参考时钟的所述输出存储级中可用,所述第二参考时钟域的所述第二参考时钟具有与所述第一参考时钟不同的相位和/或频率;其中所述输入存储级中的所述状态指示同步于所述第一参考时钟移位到所述第一参考时钟域的中间存储级;以及响应于输入所述输出存储级的读请求信号,对所述中间存储级施加保持信号,以在所述中间存储级中保持当前状态指示,并阻止新状态指示从所述输入移位到所述中间存储级;在所述保持信号期间,对所述输出存储级施加读出信号,以将所述中间存储级中的当前状态指示同步于所述第二参考时钟读入到所述输出存储级。
此外,本发明目的是通过一种检测原始状态指示的状态指示检测装置(权利要求15)来实现的,它包括第一参考时钟域的输入存储级,用于读取所述原始状态指示,以使所述状态指示在同步于所述第一参考时钟域的第一参考时钟的所述输入存储级中可用;以及第二参考时钟域的输出存储级,所述读状态指示输入到其中,以使所述状态指示在同步于所述第二参考时钟域的第二参考时钟的所述输出存储级中可用,所述第二参考时钟域的所述第二参考时钟具有与所述第一参考时钟不同的相位和/或频率;其中在所述输入存储级与所述输出存储级之间设有所述第一参考时钟域的中间存储级,所述输入存储级中的所述状态指示同步于所述第一参考时钟移位到中间存储级;所述输出存储级包括控制脉冲生成器,用于响应输入所述输出存储级的读请求信号而产生读出信号,以将此读出信号施加于所述输出存储级的输出寄存器,从而将所述中间存储级中的当前状态指示同步于所述第二参考时钟读入所述输出寄存器;以及所述中间存储级包括同步级,用于产生施加于所述中间存储级的中间寄存器的保持信号,以在所述中间存储寄存器中保持当前状态指示,并阻止新指示从所述输入移位到所述中间存储级。
因此,根据本发明,状态指示检测装置还包括属于锁存域的、称为中间存储级的存储级。以如下方式控制中间存储级:使中间存储级中当前状态指示的锁存时间为保持信号的时间间隔,以使输出存储级可以在所述保持信号持续时间内施加与所述第二参考时钟同步的读出脉冲。在此情况下,读出脉冲可以仍与第二参考时钟同步,而保持信号可以与第一参考时钟同步。因此,两个参考时钟具有什么相位和/或频率关系都无关紧要。
再者,读状态指示的格式不必与原始状态指示的格式完全相同。例如,原始指示可能对应于事件的发生,而读指示可能对应于一定计数数量的原始指示。
本发明还具有如下优点:输出存储级从中间存储级提取的值总是通过时钟域边界正确传送的最新状态(例如错误)指示。
本发明的优选实施例
最好是(权利要求2/16),在所述保持信号期间,读入一个新的原始状态指示,并将其一直存储在输入存储级中;在保持信号中止之后,输入存储级中的状态指示被移位到与所述第一参考时钟同步的所述中间存储级。同时,可以将新的原始状态指示输入输入存储级,且至少在保持信号的持续时间内,这些原始状态指示将保持在输入存储级中并被阻止移位到中间存储级。因此,在保持信号期间产生同步于第二参考时钟的读出信号,以便无论两个参考时钟的相位和/或频率关系如何,均可防止任何状态指示的丢失。
虽然读请求信号可以具有相对于第一或第二参考时钟的任何相位,但是根据一个实施例(权利要求3/18),读请求信号同步于所述第二参考时钟输入输出存储级。因此,可以确保产生读出的信号也与所述第二参考时钟同步。
根据另一个实施例(权利要求4/19),保持信号施加到同步于所述第一参考时钟的所述中间存储级。
再者,根据本发明的另一个实施例(权利要求5/20),来自输入存储装置的状态指示在移位到中间存储级之前,在输入存储级中至少保持一个以上的第一参考时钟。
根据本发明的优选实施例(权利要求6/21),响应于所述读请求信号,所述控制脉冲生成器产生同步于所述第二参考时钟的读锁定脉冲,并从所述第二参考时钟域将其提供给所述第一参考时钟域,所述读锁定脉冲的脉冲长度为允许所述第一参考时钟域中的所述读锁定脉冲与所述第一参考时钟可靠同步所需的时间长度与从所述中间存储级将所述状态指示读入输出存储级的时间长度之和。因此,读锁定信号可以从输出时钟域移位到输入时钟域,充当产生保持信号的基础。
最好是(权利要求7/22),所述中间存储级的所述同步级使所述读锁定脉冲与所述第一参考时钟同步,并根据所述同步化的读锁定脉冲派生出脉冲长度至少为同步化的读锁定脉冲的持续时间的所述保持信号。
最好是(权利要求8/23),所述同步级以如下方式派生出所述保持信号,使所述保持信号的持续时间至少为一个但最好为两个所述第一参考时钟的周期,而且涵盖第二参考时钟的至少一个时钟脉冲。
最好是(权利要求9/24),所述脉冲生成器产生同步于读锁定脉冲末端的所述读出信号。
根据本发明的另一个实施例(权利要求10/25),所述输入存储级的输入更新控制装置产生清零脉冲,用于从输入存储级删除状态指示,所述清零脉冲是在所述保持信号中止之后产生的。检查所述输入存储级和所述中间存储级的内容是否一致可以避免虽然中间存储级尚未采样到输入存储级的旧内容,而输入存储级已更新状态指示。但是,避免状态指示丢失的备选解决方案也是可行的。
最好是(权利要求11/26),读请求信号与所述第二参考时钟同步,且持续时间为一个第二参考时钟周期。即,读请求信号只作为产生读锁定脉冲的基础,它可能比一个第二参考时钟周期长很多,例如对于第二参考时钟频率较第一参考时钟高很多的情况。
最好是(权利要求12/27),以与第一参考时钟同步的方式产生状态指示。因此,可以捕获状态指示而同时没有额外的同步化问题。
最好是(权利要求13/28),所述读状态指示可以在所述输入存储级、中间存储级和输出存储级包括1比特。
最好是(权利要求14/29),所述读状态指示在所述输入存储级、中间存储级和输出存储级包括n比特。
最好是,对于1位和n位累加,输出寄存器可包括输出多路复用器和连接的输出D触发器或n位寄存器(权利要求30)。
再者,对于1位和n位累加,控制脉冲生成器(权利要求31)可以包括接收所述读请求信号和输出所述读锁定信号和所述读出信号的控制装置。
最好是(权利要求32),对于1位和n位累加,所述中间寄存器包括中间多路复用器和中间D触发器或n位寄存器。
最好是(权利要求33),对于1位和n位累加,所述同步级包括至少两个串联的D触发器。
此外,对于一位累加,所述输入寄存器(权利要求34)可以包括两个串联的多路复用器和一个输入D触发器。
此外,对于n位累加,所述输入寄存器可以包括可以同时存储n比特的n位寄存器(权利要求35)。
此外,对于一位累加,输入更新控制装置(权利要求36)可以包括一个D触发器、两个“与”门和一个“异或非”门。
此外,对于n位累加,输入更新控制装置可以包括一个D触发器、一个“与”门和一个四输入/单输出的多路复用器(权利要求37)。
保持信号的主要功能是要足够长,以便期间至少出现一个第二时钟的参考脉冲,以防止输出寄存器中的亚稳态,所述保持信号与第一参考时钟同步,以避免中间寄存器中的亚稳态。最好是,输入存储级和中间存储级中的所有操作均与所述第一参考时钟同步执行(权利要求38),而所述输出存储级中的所有操作均与所述第二参考时钟同步执行。
所述状态指示可以通过例如监视多个(如16个)SDH/SONET数据比特流产生(权利要求39)。
另一个实施例涵盖通过VSLI结构实现输入、中间和输出级(权利要求40)。
本发明的其它优选实施例和改进可以从从属权利要求中得到。再者,应注意,本发明还涵盖各种修改和变更方案,例如可对说明书和/或权利要求书中单独说明的特征和/或步骤加以组合。
以下将参考本发明的实施例及参照附图所示来说明本发明。
附图简介
在附图中,相同或相似的参考数字表示相同或相似的步骤。附图中:
图1显示根据现有技术的状态指示检测装置,它包括输入存储级ISM和输出存储级OSM;
图2显示当第一参考时钟CLK_A的频率远高于第二参考时钟CLK_B的频率时,第一参考时钟CLK_A和第二参考时钟CLK_B的相位和/或频率关系实例;
图3显示根据本发明的状态指示检测SIDM装置的一个实施例;
图4显示对应于1位读指示的情况的图3所示部件的详细实施例;
图5a显示当第一参考时钟CLK_A具有较第二参考时钟CLK_B高的频率时,图3和图4所示信号的关系。
图5b显示第一和第二参考时钟CLK_A、CLK_B具有相同频率fA=fB的情况;
图5c显示第一参考时钟CLK_A的频率较第二参考时钟CLK_B的频率低时,图3和图4所示信号的关系。
图6显示图3和图4中的电路产生信号和传递状态指示的时序图;以及
图7显示在对原始指示计数的情况下,图3所示各单元的更详细的实施例;以及
图8显示图7中的电路产生信号和传递状态指示的时序图。
尤其应注意,图6、图7以及图5a、5b、5c和图8中的标记“STATREG、BRIDGEREG和OUTPUT_REG”表示图3所示的输入寄存器INM、中间寄存器INT和输出寄存器ORM以及图4和图7的特殊实施例中的相应电路。
本发明概述(1或n位状态指示)
随后将参考图3、图5a(fA>fB的情况)以及图6中信号产生和状态指示移位的时序图来说明本发明的原理。即,将首先针对第一参考时钟CLK_A的频率fA远高于第二参考时钟CLK_B的频率fB的情况来说明本发明。但是,同样要考虑于fA=fB和fA<fB的情况。再者,对本发明原理的说明与状态指示是一位还是n位状态指示无关。
如图3所示,根据本发明的状态指示检测装置SIDM在如下方面与图1中的装置相似:它包括同步于第一参考时钟CLK_A读入状态指示IN_STATUS的输入存储级INS和同步于第二参考时钟CLK_B输入状态指示IN_STATUS′的输出存储级OSS。第一和第二参考时钟CLK_A和CLK_B一般具有如图2所示的不同的相位和/或频率fA;fB。
与图1中的装置的差别之一是,图3的本发明装置在输入存储级INF和输出存储级OSS之间还包括中间存储级ISS。所述输入存储级INS中的状态指示同步于所述第一参考时钟CLK_A移位到中间存储级ISS,如第一参考时钟CLK_A输入输入存储级INS和中间存储级ISS所示。
因此,图3中也可以区分第一时钟域A和第二时钟域B,第一时钟域A中的所有操作和信号传输均同步于第一参考时钟CLK_A;而第二时钟域B中的所有操作和信号传输均同步于第二参考时钟CLK_B,这类似于图1,但不同之处在于附加的中间存储级ISS。读请求信号RDRQ从外部输入第二时钟域B,因此可能具有相对于第二参考时钟CLK_B或第一参考时钟CLK_A的任意相位关系。但是,读请求信号RDRQ最好也同步于第二参考时钟CLK_B。
如图3所示,例如来自SONET/SDH应用的状态指示IN_STATUS(即出错位指示)可能通过例如硬件设备(HW)输出。但是,状态指示通常可能出自另一个源头,不过本发明的上下文与这些状态指示由硬件还是软件产生并不相关。一般来说,状态指示具有比特结构,而且根据所采用的逻辑,它们将根据其电平为“0”或“1”而指示某种状态。
如图6所示,状态指示可同步于第一参考时钟CLK_A而产生。但是,状态指示IN_STATUS不必与第一参考时钟CLK_A同步,而且长度不必为第一参考时钟CLK_A的一个周期那么长。
例如,IN_STATUS可以与第一参考时钟CLK_A同步,但可能比此第一参考时钟CLK_A周期长。在此情况下,可以执行负沿检测(例如类似于图4中门I10、I11和I12的情况,对此下文将作详细解释),以便将此同步化后的状态指示输入到输入存储级中。
另一个实例是,状态指示IN_STATUS可与第一参考时钟CLK_A异步。在此情况下,可以在该状态指示频率fCLK_IN小于第一参考时钟频率CLK_A的限制下引入常规同步级(包括图4中的至少两个串联的触发器如I09和I10,下文将对此作详细解释)。其结果与前一个实例相同,即将状态指示IN_STATUS读入输入存储级,使之在同步于所述第一参考时钟CLK_A的输入存储级中可用,如图5a、5b、5c和图6所示。
状态指示IN_STATUS锁存在输入存储装置INS中,然后再传送到中间存储级ISS,然后在读请求信号RDRQ输入输出存储级OSS时,再传送到输出存储级OSS。例如,对该状态指示感兴趣的处理装置可以任意定时将这种读请求信号RDRQ输出到输出存储级OSS,虽然如上所述,只同步于第二参考时钟CLK_B的输入也是可能的。
如图6和图5a所示,根据本发明,用特殊控制信号CLEAR_PULSE、LOCK和STROBE分别来控制输入存储级INS的输入寄存器INM、中间存储装置ISS的中间寄存器INT以及输出存储级OSS的输出寄存器ORM,使得第一参考时钟CLK_A和第二参考时钟CLK_B可以具有任意频率和/或相位关系,而仍不会丢失任何状态指示,即,响应发出的读请求信号RDRQ而输入到输入存储级INS的每个状态指示IN_STATUS都将可靠地移位到输出寄存器ORM。
因此,可以说对于图3中的状态指示检测装置SIDM,两个时钟域A和B之间的同步是基于功能而非同步级来实现的,且与“读清零”功能紧密地结合在一起(如图6所示),从而构造出适用于第一参考时钟CLK_A和第二参考时钟CLK_B之间存在任意时钟关系的通用设计。
STROBE读出信号产生
因为信号CLEAR_PULSE、LOCK和STROBE的时间关系和功能对于理解本发明是相关的,所以随后将参考图6(其中还显示了图4所示实施例的其它信号)解释信号LOCK和STROBE的关系。
如图6所示,在步骤S0中,从例如处理装置PROC将读请求信号RDRQ输入输出存储级OSS,处理装置PROC通常甚至可能处于第二时钟域B之外的另一个时钟域C中(附图中未显示),即它不一定与第二参考时钟CLK_B同步。即读请求信号RDRQ可能与第二参考时钟CLK_B的脉冲不对齐,因为一般情况下,它只向输出存储级OSS提供希望将状态指示IN_STATUS′传送到所述输出存储级OSS的指示。但是,也可以这样设计,使读请求信号RDRQ确实同步于第二参考时钟CLK_B,如图6中可见。
如图5a中的箭头RQ(以及图5b和5c中的箭头RQ′和RQ″)所示,读请求信号RDRQ可能同步于第二参考时钟CLK_B,但例如它与第一时钟域A的第一参考时钟CLK_A不对齐,如箭头IN所示。再者,如图5a中箭头RDE(以及图5b和5c中的RDE′和RDE″)所示,读请求信号RDRQ的持续时间最好可以为一个第二参考时钟周期。
响应接收到上述配置中的读请求信号RDRQ,输出存储级OSS的控制脉冲生成器CG产生读锁定脉冲RDLCK和读出信号STROBE,分别施加于输入存储级ISS和输出存储级OSS的输出寄存器ORM,如图6中步骤S1和S2所示。
如对应于两个参考时钟CLK_A和CLK_B之间具有不同频率和相位关系的图5a、5b和5c所示,读锁定脉冲RDLCK具有至少为一个第二参考时钟CLK_B周期的脉冲长度RDLCKL、RDLCKL′和RDLCKL″,其中RDE、RDE′和RDE″同步于读请求信号RDRQ。但是,如图3所示,读锁定脉冲RDLCK要从时钟域B传送到时钟域A。为了确保时钟域A可以可靠地捕获此读锁定脉冲并使之同步地对齐于时钟域A中的第一参考时钟CLK_A,脉冲RDLCK的脉冲长度RDLCKL、RDLCKL′和RDLCKL″最好应该为至少一个第一参考时钟CLK_A的周期长度Tclk_A。而且它的长度最好为第一参考时钟CLK_A的一个周期长度Tclk_A加上第一时钟域A中接收读锁定信号RDLCK的采样触发器(寄存器)的建立保持窗口的持续时间,即:
RDLCKL、RDLKCL′、RDLCKL″≥Tclk_A+Tsetup_hold (1)因为这允许在这两个时钟域之间相位关系任意的情况下均可捕获到读时钟脉冲。因此,读锁定信号RDLCK(读锁定)是同步于第二参考时钟CLK_B从读请求脉冲RDRQ派生的。从根本上说,它是脉冲RDRQ同步于第二参考时钟CLK_B拓宽得到的。
读出信号STROBE的脉冲长度最好等于第二参考时钟CLK_B的一个周期;具体地来说,具有单脉冲周期长度的读出信号STROBE同步于读锁定脉冲RDLCK的末端。由于不同的频率关系,图5b和5c清晰地表明STROBE信号的单脉冲长度,而在图5a中,STROBE信号长度与RDLCK脉冲的长度相同。但是,这通常只针对情况fA>fB才成立,而对于一般情况,在图5b和图5c中可以看出STROBE信号的长度通常具有同步于RDLCK脉冲的末端的单脉冲周期。
如图6所示,完全与读请求信号RDRQ的产生不相干,在步骤ST1,新的状态指示同步于第一参考时钟CLK_A的一个脉冲(如图5a、5b和5c中箭头IN、IN′和IN″所示),在步骤ST2,随着第一参考时钟CLK_A的脉冲连续产生,输入存储级INS的输入寄存器INS仍然保持设为对应于状态指示的某个值(这可以根据稍后对图4的说明来加以理解,状态指示IN_STATUS并非真正地“以钟控方式打入”输入寄存器INM的寄存器STATREG中,因为状态指示线IN_STATUS和寄存器STATREG的D输入之间没有直接的连接;IN_STATUS上的逻辑1只在STATREG被读出之后才通过门I02和I01使寄存器STATREG置位)。
因为事先既无法知道读请求脉冲RDRQ的精确出现时间也无法知道新状态指示IN_STATUS的精确出现时间,并且还因为第一参考时钟CLK_A和第二参考时钟CLK_B具有任意频率和/或相位关系,所以无法确定RDRQ、RDLCK和STROBE与IN_STATUS的任何明确而固定的关系。所能说的就是,响应于读请求信号RDRQ,在若干个第二参考时钟CLK_B周期(在图5a中为一个时钟周期;在图5b中为两个时钟周期;在图5c中为八个时钟周期;具体由RDLCK的长度来确定)“之后”,产生读出选通信号STROBE(但是,应该注意,无论读出脉冲STROBE何时产生,它均可同步于第二参考时钟CLK_B的脉冲而产生)。
关于“之后”,它意味着读出脉冲STROBE必须在读锁定脉冲RDLCK期间产生但在其末端结束。如上所述,读锁定脉冲RDLCK必须足够长,以便它可以可靠地同步于时钟域A,以及它可以使数据(通过保持信号LOCK)保持在中间存储级ISS中,直到数据移位到输出寄存器ORM为止。即如果要将读出信号STROBE完全任意地置于读锁定脉冲RDLCK期间,则可能产生如下情况,例如它被置于读锁定信号RDLCK的开始位置,即读锁定脉冲RDLCK尚未同步于时钟域A且因此保持信号LOCK尚未产生的时刻。但是,如果未产生保持信号LOCK,则中间寄存器中自由变化的数据可能在输出寄存器中引起亚稳态,这在频率关系为fA>>fB时尤其严重。因此,读出脉冲STROBE最好应该在读出脉冲STROBE末端之前产生一个第二时钟周期。
再者,虽然图5a、5b、5c和图6显示读出信号STROBE同步于第二参考时钟CLK_B,但是读出脉冲STROBE并非一定同步于第二参考时钟CLK_B而产生。重要的仅仅是,读出信号STROBE本身的变化以及中间存储级的中间寄存器中的变化均不会破坏输出存储级的输出寄存器的建立-保持窗口。例如,可以设想,处理装置PROC使用外部时钟C来产生读请求信号RDRQ,而对于TCLK_B<TCLK_C且具有已知的最大相位抖动的情况,读出信号STROBE由许多分别具有周期CLK_B的脉冲组成,并且使这些脉冲设置在输出寄存器的正沿下(正沿触发的),从而使输出寄存器的建立-保持窗口保持不受信号变化的约束。因此,读出信号STROBE可能不必同步于所述第二参考时钟CLK_B脉冲而产生。
锁定中间寄存器INT的内容
根据图3和图6的步骤S3可知,读锁定信号RDLCK毫无疑问负责确保中间存储级ISS的同步级SS可以产生保持信号LOCK,以便将其施加于中间存储级的中间寄存器INT,用以在所述中间寄存器INT中保持当前状态指示以及阻止新的指示从所述输入INS移位到所述中间存储级ISS。
但是,也可以采用其它机制来产生保持信号LOCK。要点在于保持信号LOCK的持续时间为LOCKL;LOCKL′;LOCKL″(如图5a、5b、5c所示),其中至少出现一个第二参考时钟脉冲。这对图5a、5b和5c中的所有情况通常都是正确的。由于不同的频率关系,在图5a中,保持信号LOCK持续期间只包括一个第二参考时钟脉冲,而在图5b中,保持信号LOCK的持续时间包括两个脉冲,在图5c中,保持信号LOCK包括多个第二参考时钟脉冲。
通过查看读锁定脉冲RDLCK、保持信号LOCK本身和读出信号脉冲STROBE的时间关系,可以容易地理解保持信号LOCK的定时和保持信号LOCK的持续时间的产生。最好首先查看RDLCK的产生。RDLCK主要负责产生保持信号LOCK,用于冻结传送到中间寄存器INT的状态指示。读锁定信号RDLCK的持续时间主要确定保持信号LOCK的持续时间。本质上,保持信号LOCK必须足够长,以使来自中间寄存器INT的数据可以利用读脉冲STROBE移至输出寄存器ORM。再者,读锁定信号必须足够长,以便可以将其采样到或以钟控方式打入时钟域A,否则,根本无法产生保持信号LOCK。更具体地来说,读锁定脉冲RDLCK的持续时间是可靠地使RDLCK同步于第一时钟域A所需的时间加上数据从中间寄存器INT到输出寄存器ORM的传输时间。因此,保持信号LOCK的持续时间只取决于读锁定信号RDLCK的长度,而不是自动设为第一参考时钟CLK_A的2个时钟周期那么长(虽然在图5a、5b、5c中它刚好是以2TCLK_A满足公式(1)的这种持续时间)。但是,满足公式(1)的保持信号LOCK的典型的持续时间是2TCLK_A。
从图5a可以看出,同步级SS最好同步于第一参考时钟CLK_A产生保持信号LOCK,因为同步级SS接收第一参考时钟CLK_A。尽管长度RDLCKL(RDLCKL′、RDLCKL″)原则上将确定保持信号LOCK的持续时间LOCKL,但长度LOCKL和RDLCKL不会完全相同,因为长度RDLCKL根本上是由同步级“映射到”或“同步于”第一参考时钟CLK_A的。
就读出信号STROBE而言,状态指示ST1、ST2的出现和移位,和保持信号LOCK的实际出现之间也无明确的时间关系,至少是因为LOCK基于例如RDLCK,并因此基于RDRQ脉冲的出现。
但是,重要的是,在读请求脉冲RDRQ出现之后产生长度涵盖至少一个第二参考时钟脉冲的保持信号LOCK,且最好同步于第一参考时钟CLK_A,因为它的长度至少为传送到第一时钟域A的读锁定脉冲RDLCK的持续时间,其持续时间具体如等式(1)所述的,为允许在时钟域A中捕获到RDLCK所需的时间再加上必需的建立-保持时间。此外,重要的是,在保持信号LOCK的持续时间内在中间寄存器INT中保持当前状态指示(例如通过将要参照图4中的特定实施例来解释的时钟循环过程),以及在保持信号LOCK的持续时间内阻止新指示从输入寄存器INM移位到中间寄存器INT。STROBE和LOCK脉冲的时间关系
虽然无法在将新状态指示读入输入寄存器INM中(在步骤ST1和ST2)和读请求脉冲RDRQ、读出脉冲STROBE以及保持脉冲LOCK的出现之间明确定义时间关系,即涵盖至少一个第二参考时钟周期的保持信号在读请求脉冲RDRQ之后的某个时间产生,但是选通脉冲STROBE与保持脉冲LOCK之间存在重要的准时间关系。
即,响应接收到读请求信号RDRQ,同步于第二参考时钟CLK_B在读请求信号RDRQ的末端产生持续时间为一个第二时钟脉冲CLK_B周期的读出脉冲STROBE(以避免在基于读请求信号RDRQ的读锁定脉冲RDLCK已同步于时钟域A之前产生读出脉冲STROBE)。另一方面,读锁定信号RDLCK的持续时间为在时钟域A实现同步所需的时间再加上建立-保持所需时间(根据公式(1))和至少允许数据中间寄存器移位到输出寄存器所需的时间。最后,保持信号LOCK的持续时间至少与读锁定信号RDLCK相同,即足够长,以允许将数据从中间寄存器传送到输出寄存器。
即,如图5a、5b和5c所示,对于不同的频率关系,读出脉冲STROBE可以准确地产生于保持信号LOCK持续时间LOCKL、LOCKL′和LOCKL″期间。如上所述,通过读锁定脉冲RDLCK的中介作用(或通过其它方式),选通脉冲STROBE始终同步于第二参考时钟CLK_B产生,而且当此选通脉冲STROBE产生于持续时间LOCKL、LOCKL′、LOCKL″内时,则有可能同步于第二参考时钟CLKB读出保存在中间寄存器INT中的任何当前状态指示。如果状态指示已经在步骤ST1、ST2和ST3于早先的第一参考时钟周期内传送(如图6所示),则读出信号STROBE将在保持信号LOCK期间读出此状态指示,因为从保持信号LOCK的锁定开始位置LS、LS′、LS″起,中间寄存器INT中的任何当前状态指示将被保持(通过循环处理),并阻止新的状态指示被移位到中间寄存器INT中。
另一方面,在保持信号LOCK结束之后(如图5a、5b、5c的箭头LE、LE′和LE″所示),同步于所述第一参考时钟CLK_A将输入寄存器INM中存在的任何状态指示移入中间寄存器INT中,如图6的步骤ST5所示。
接下来,解释保持信号LOCK对中间寄存器INT执行的控制和输入存储控制装置DM利用清零脉冲CLEAR_PULSE对输入寄存器INM执行的控制的交互。
从图3和图4可以看出,保持信号LOCK对输入寄存器INM没有直接的影响。如果检测到保持信号LOCK的负沿(通过门I12),则产生主清零脉冲CP。但是如果此主清零脉冲CP直接施加到输入寄存器INM上,则CP会使输入寄存器INM(更具体地说使图4所示的寄存器STATREG在保持信号LOCK的负沿之后立即采用尚在输入IN_STATUS上的当前值,即便中间寄存器INT(BRIDGEREG)尚未接收输入寄存器(STATREG)中上次存储的值。必须避免这种情况,否则,输入寄存器中的状态指示可能丢失。因此,门I13和I14根据主清零脉冲CP、输入寄存器的当前输出(STATREG的Q输出)和中间寄存器的当前输出(BRIDGEREG的Q输出)产生清零脉冲CLEAR_PULSE,从而只允许在STATREG和BRIDGEREG的内容相同(STATREG=BRIDGEREG)之后,即在STATREG中的前一个状态指示已经成功传送到中间寄存器INT之后,以新的状态指示IN_STATUS更改STATREG的内容。
因此可以说,仅在保持信号LOCK失效之后且当输入寄存器INM与中间寄存器INT的存储内容一致时才产生允许接收新的状态指示的清零脉冲CLEAR_PULSE。这就是输入存储控制装置DM所执行的步骤S4和S5的目的所在,下文将参考图4的特殊实施例进行详细说明。
如上所述,保持信号LOCK的持续时间或脉冲长度LOCKL、LOCKL′、LOCKL″(在图5a中为三个第一参考时钟周期;在图5b中为两个第一参考时钟周期;在图5c为两个第一参考时钟周期;即为所述第一参考时钟的至少两个周期)以及此保持信号LOCK的实际出现时间都是无关紧要的,只要它的持续时间足够长,以使与第二参考时钟同步的选通脉冲STROBE含在保持信号脉冲LOCKL之内即可。因为在保持信号持续时间内,可以将新的状态指示读入输入寄存器INM,并(通过循环)保持在输入寄存器INM中,而且因为当前状态指示(通过循环)保持在中间寄存器ISS时阻止新的指示传送到中间寄存器INT中,所以一方面不会有新的状态指示丢失的危险(它将通过循环保持在输入寄存器中),另一方面,可以同步于第二时钟域B的第二参考时钟将最新的状态指示从中间寄存器INT读入输出寄存器ORM(如图6中步骤ST4所示)。
如上所述,保持信号LOCK具有足够长的持续时间,以在产生读出脉冲STROBE时可使数据从中间寄存器INT传送到输出寄存器ORM。因为保持信号LOCK的长度也基于读锁定脉冲RDLCK的长度(读锁定脉冲RDLCK本身的持续时间必须为使其在时钟域A实现同步所需时间(外加同步级SS中的建立-保持时间),所以保持信号LOCK的典型长度(在产生读出选通脉冲STROBE时也包括至少一个第二参考时钟的脉冲)是第一参考时钟CLK_A周期的几倍,例如两倍或三倍。对于图5a、5b、5c中的频率关系,这足以允许将数据从中间寄存器传送到输出寄存器,即输出寄存器ORM在时钟域B中读入已经用时钟域A的参考时钟以钟控方式打入中间寄存器INT的指示。
因此,使当前状态指示保持在中间存储级并阻止新的状态指示从输入存储级移入的保持信号LOCK起到一种“屏蔽时间”的作用,它长度足以补偿两个参考时钟CLK_A和CLK_B之间的任何频率和/或相位关系,这可从图5a、5b、5c容易看出。例如,在图5c中,唯一的重要的是,读出脉冲STROBE确实出现在保持信号LOCK的持续时间内,但是,至于采用保持信号持续时间LOCK”内的第二还是第三个脉冲用于读出中间寄存器INT则完全无关紧要。但是,读出选通信号STROBE是同步于读锁定信号RDLCK的末端而产生的,以避免在读锁定脉冲RDLCK同步于时钟域A产生并因此可以产生保持信号LOCK之前发生从中间级到输出寄存器的读出操作。
因此,可以归纳出下列基本步骤:
1.只要未产生保持信号LOCK,状态指示就像在移位寄存器中一样从输入寄存器INM移入中间寄存器INT(步骤ST1、ST2和ST3)。
2.当在步骤S1于某个时间产生读请求RDRQ(可能与第二参考时钟同步)时,一定时间之后(LS、LS′、LS″),产生包含至少一个第二参考时钟脉冲周期的保持信号LOCK。保持信号LOCK的持续时间长得足以使产生读出脉冲STROBE时,数据从中间寄存器INT传送到输出寄存器ORM。因为保持信号LOCK的长度也基于读锁定脉冲RDLCK的长度(读锁定脉冲RDLCK本身的持续时间必须为可使其在时钟域A实现同步所需的时间(外加同步级SS中的建立-保持时间)),所以保持信号LOCK的典型长度(在读出选通脉冲STROBE产生时至少涵盖了一个第二参考时钟脉冲)是第一参考时钟CLK_A周期的两倍。
3.在保持信号持续时间内且在读锁定脉冲RDLCK的末端产生(S6)读出选通脉冲STROBE,并将中间寄存器INT的当前状态读到同步于第二时钟CLK_B的输出寄存器ORM中(ST4)。
4.在锁定信号LOCK产生期间,将当前状态指示保持在中间寄存器INT中,且可以同步于第一参考时钟将新的状态指示读入输入寄存器INM中。
此过程不受第一参考时钟频率fA和第二参考时钟频率fB之间的任何频率关系(fA>fB;fA<fB;fA=fB)影响。即,响应处理装置PROC输出的(例如来自微控制器(MC)的)读请求信号RDRQ,最后产生保持信号LOCK。之所以本发明具有MC始终接收“最新”状态指示这一特征,是因为在输出寄存器读取中间寄存器之后,产生清零脉冲CLEAR_PULSE,以允许更新输入寄存器INM,即更新STATEG。
因此,在本发明中,设置输入寄存器INM、中间寄存器INT(二者均属于时钟域A)和输出寄存器ORM(属于时钟域B)并利用读出信号STROBE和保持信号LOCK对其实施特殊控制,确保与相位和频率关系无关而又不会丢失新输入状态指示且通过时钟域边界传送最新状态指示。
此外,通过上述特征的组合,可以通过功能方式(即通过适当地产生读出脉冲STROBE)来避免输出寄存器ORM中的亚稳态。延迟从输入寄存器向中间寄存器移位
如图6所示,(也可从图5a、5b、5c可见),在保持信号LOCK中止于LE、LE′、LE″之后,状态指示在输入存储级寄存器INM(STATREG)中保持至少一个以上的第一参考时钟周期(结束于STE、STE′、STE″)。即,清零脉冲CLEAR_PULSE负责控制输入寄存器INM的更新。一方面,保持信号LOCK(LOCK=“0”)的终止控制输入寄存器INM的内容向中间寄存器INT的传送。另一方面,在输入寄存器INM的更新会改变输入寄存器INM的内容,而中间寄存器INT尚未对输入寄存器INM的旧内容采样的情况下要抑制CLEAR_PULSE。
图5a、5b、5c中的实例
以上说明了响应于读请求脉冲RDRQ的一次出现,信号STROBE、LOCK和CLEAR_PULSE之间的关系。但是,从图5a、5b、5c中可以看到,可以采用周期性读周期,即周期性地输出读请求信号RDRQ。微控制器MC(处理装置PROC)的读操作的频度取决于实际的实现方式。实际的访问周期为大约每106个CLK_A时钟周期一次,图5a所示的纯例示性实例显示了一种每逢第4个时钟周期进行一次的读访问,图5b显示的则是每逢第5个时钟周期一次,图5c显示的则是每逢第18个时钟周期一次。
如图5a、5b和5c所示,无论读取和更新过程有什么相位,都可捕获到状态指示而不会丢失。如果自RDRQ有效起开始第n次读访问之前状态指示有效,则它将会正好在此第n次访问之后在输出寄存器ORM(OUTPUT_REG)中可见。
但是,如果状态指示在第n次读访问期间有效,则它将在第(n+1)次读访问之后于输出寄存器ORM(OUTPUT_REG)中可见。因此,最大n+2个读访问周期(同步于第二参考时钟CLK_B)就足以从输入寄存器IRM将新的状态指示被移位到输出寄存器ORM。即,两次读访问是必需的,因为可能出现这样的情况:RDRQ和IN_STATUS之间具有不适当的时间关系,以致于必须抑制信号CLEAR_PULSE(根本上是从读请求信号RDRQ派生出的),以避免丢失状态指示。在此情况下,微控制器MC(处理装置PROC)将只能在第(n+1)次读周期才可见到第n次读周期中出现的指示。
但是,此过程完全与相位和/或频率关系无关,即此过程对图5a:fA>fB,图5b:fA=fB(频率相同且相差固定)以及图5c:fA<fB均以相同的方式工作。
以下将参考图4解释用于实现输出寄存器ORM、同步级SS、中间寄存器INT、输入存储控制装置DM和输入寄存器INM的各电路单元的特殊方式。
定性的状态指示逻辑门实现方案
图4显示一种作为图3所示状态指示检测装置SIDN的优选实施例的,使用逻辑门、多路复用器和D触发器的更为具体的电路实施方案。如对图3所述的一样,在图4中也提供了基于功能而不是通过同步级来实现的同步化,它独立地与“读取时清零”功能相结合,以构建适用于任何时钟关系的通用设计。
更具体地来说,输出存储级OSS包括用于所述输出寄存器ORM的输出多路复用器I06和输出D触发器I07(OUTPUT_REG)。对于正逻辑,输出端Q馈送到多路复用器I06的“0”输入端,D触发器I07的时钟输入端从外部接收第二参考时钟CLK_B输入。多路复用器I06的“1”输入端连接到中间存储级ISS。
控制脉冲生成器CG通常包括控制装置CNTRL,用于接收外部输入的读请求信号RDRQ和输出所述的读锁定脉冲RDLCK和所述的读出信号STROBE。当读出信号STROBE为高时,多路复用器I06选择“1”端,而当它为低时,选择多路复用器的“0”端(对于正逻辑)。再者,第二参考时钟CLK_B也输入到控制装置CNTRL。
从Q输出到多路复用器I06的“0”端的反馈可以看出,在前一个第二参考时钟周期中,状态指示IN_STATUS′已经存储在所述D触发器I07中(为此,读出信号为高以选择“1”端),当读出信号STROBE随后切换为低电平时,则读入D触发器的任何状态指示IN_STATUS′同步于第二参考时钟CLK_B通过反馈和多路复用器I06保持循环。因此,可以说,在读出信号STROBE为低(“0”)期间,将选择“0”端且任何状态指示在D触发器I07内保持循环,同时因为选择“0”端,阻止任何后续读取状态指示IN_STATUS′从中间存储级ISS传递。即,当产生读出信号STROBE(为高)时,新的状态指示被输入到输出寄存器ORM,而当该信号未产生(为低)时,状态指示在输出寄存器ORM中保持(循环)。
从图4可以看出,中间存储级ISS的中间寄存器INT还包括中间多路复用器I04和中间D触发器,它们以与输出寄存器ORM相同的方式连接。唯一不同的是,中间多路复用器I04的“1”和“0”端与输出多路复用器I06的相反。即,当产生保持信号LOCK(为高)时,选择多路复用器I04的“1”端,以便利用输入D触发器的时钟输入端的第一参考时钟CLK_A将任何当前状态指示(通过循环)保持在n位寄存器I05中。
当未产生保持信号LOCK(为低)时,选择低的“0”端,从而允许新的状态指示从输入存储级INS传递。因此,可以说,在产生保持信号LOCK期间,任何当前状态指示通过循环保持在中间寄存器INT内,同时阻止从输入存储级INS传递新的状态指示。当保持信号LOCK未产生时,就可以将新的状态指示读入到D触发器I05(BRIDGEREG)中。
从图4可以看出,保持信号LOCK由同步级SS输出,同步级SS通常包括至少两个串联的D触发器I09和I10。这两个D触发器I09和I10利用第一参考时钟CLK_A钟控,第一D触发器接收控制脉冲生成器CG输出的读锁定脉冲RDLCK。
如已参照图5a、5b、5c所作的说明,同步级SS的作用本质上为使长度为RDLCKL、RDLCLKL′、RDLCKL″的读锁定脉冲RDLCK(即这样的时间长度,长得足以允许在第一时钟域A中实现同步,即至少一个第一参考时钟CLK_A周期加D触发器I09中必需的建立-保持时间,以及长得足以使根据读锁定信号RDLCK产生的保持信号LOCK足够长,以使数据可以从中间级传送到输出寄存器,参见等式(1))同步于时钟域A中的第一参考时钟CLK_A。因此读锁定脉冲RDLCK的持续时间也根据第一参考时钟CLK_A周期来选择,具有至少一个第二时钟信号周期的长度(因为第二参考时钟周期是同步于第二参考时钟CLK_B的脉冲可以具有的最短持续时间)。
根据相位和/或频率差,现在同步于第一参考时钟CLK_A的保持信号LOCK可能稍微短于读锁定脉冲RDLCK。保持信号LOCK施加到中间多路复用器I04上。
同样如图4所示,输入寄存器INM包括两个串联的输入多路复用器I01、I02和输入D触发器I03(STATREG)。D触发器I03的Q输出与中间多路复用器I04的“0”终端相连。再者,D触发器I03的D输入与多路复用器I02的输出相连,第一参考时钟CLK_A输入D触发器I03的时钟端。
第一多路复用器I01的输出与第二多路复用器I02的“0”端相连,而第二多路复用器I02的“1”端与“1”电平永久相连。施加到第二多路复用器I02上的选择信号是状态指示IN_STATUS。即如果接收到“1”状态指示(对正逻辑而言),则多路复用器I02将选择它的“1”端,并因此将“1”端的“1”电平转发到D触发器I03的D输入端。否则,即当没有状态指示时,将第一多路复用器I01的输出施加到输入D触发器I03上。
第一多路复用器I01的“1”端与“0”电平永久相连,第一多路复用器I01的“0”端从D触发器I03的Q输出端接收信号。
因此,当CLEAR_PULSE产生(对正逻辑为高电平)时,将所选“1”端的“0”电平传送到第二多路复用器I02的“0”端。当未产生CLEAR_PULSE(对正逻辑为低电平)时,则将D触发器的输出Q传送到第二多路复用器I02的“0”端。
因此,可以说,当CLEAR_PULSE未产生且无任何新状态指示IN_STATUS出现时,存储在D触发器I03的新状态指示在输入寄存器INM中保持(以第一参考时钟CLK_A循环)。
当新的状态指示IN_STATUS出现时,则此新的状态指示将通过选择将“1”电平输入第二多路复用器I02的“1”端而以钟控方式打入D触发器I03中,并在一个第一参考时钟周期之后,只要未产生CLEAR_PULSE,此新状态指示就(通过循环)保持在输入寄存器INM内。
另一方面,产生清零信号CLEAR_PULSE可从第一多路复用器I01的“1”端将“0”电平输入到第二多路复用器I02的“0”端。因此,第一多路复用器I01用于对输入寄存器INM中的状态指示复位,而第二多路复用器I02用于在输入寄存器INM中设置新的状态指示。
清零脉冲CLEAR_PULSE通过具有如下配置的输入更新控制装置DM来产生。输入更新控制装置DM包括同步于第一参考时钟CLK_A且在其D输入端接收D触发器I10的输出(即保持信号LOCK)的D触发器I11。D触发器I11的Q输出输入到第一“与”门I12的第一端。保持信号LOCK的反相信号输入到第一“与”门I12的第二端,从而实现对保持信号LOCK的负沿检测。第一“与”门I12的输出是图5a、5b、5c和图6中所示的CP信号。
“异或非”门I13的第一输入接收中间D触发器I05的输出,“异或非”门I13的第二端接收输入D触发器I03的输出。“异或非”门I13的反相信号提供给第二“与”门I14的第一端,CP信号输入“与”门I14的第二端。第二“与”门I14的输出是清零脉冲CLEAR_PULSE,它输入到输入寄存器INM的第一多路复用器I01。
因为D触发器I11和第一“与”门I12的电路互连,将如图6中步骤S4所示那样产生脉冲CP,且此同步于第一参考时钟CLK_A的脉冲CP正好在保持信号LOCK结束之后的第一参考时钟周期产生。
亦如图6所示,在步骤S4产生的脉冲CP导致在步骤S5中产生CLEAR_PULSE。CLEAR_PULSE允许当前状态指示IN_STATUS输入寄存器STATREG。STATREG中所存储的状态指示真正传送到BRIDGEREG是由保持信号LOCK,即保持信号LOCK中止(LOCK=“0”)来控制的,这将选择多路复用器I04的“0”输入,此多路复用器输入因此将传送到BRIDGEREG中。
由于CLEAR_PULSE的产生,D触发器I03(STATREG)中的新状态指示被移位到中间寄存器INT(BRIDGEREG),如图6中步骤ST5所示。
因为最终CLEAR_PLLSE的产生隐含地取决于输入中间n位寄存器I05(BRIDGEREG)的Q输出端的信号,所以可以说输入n位寄存器I03(STATREG)中的任何新状态指示传送到中间存储级ISS仅在已经从中间存储级ISS(更具体地说是从中间n位寄存器I05)读出了当前状态指示时才进行。这样做是必要的,为了在将中间存储级的内容成功读出到输出存储级之前避免从输入存储级INS新输入的新状态指示使中间存储级内容发生改变。
以上已对图4中各逻辑门和触发器和多路复用器的基本功能和互连作了说明,随后将描述图4中电路的操作(同时还图示于图5a、5b、5c和图6中)。
时钟域A的操作
在“正常”的操作过程中,即当清零脉冲CLEAR_PULSE和保持信号LOCK(为“0”)均未产生时,输入触发器I03和中间触发器I05作为移位寄存器来工作。即,新状态指示IN_STATUS一出现且中间触发器I05通过中间多路复用器I04对输入触发器I03采样,则通过第二输入多路复用器I02将输入触发器I03设为“1”。因此,在一个第一参考时钟CLK_A周期的延迟后,中间触发器I05就会保存与输入触发器I03相同的内容。
一旦输入触发器I03已置位,则它通过第一和第二多路复用器I01和I02将其Q输出反馈回到其D输入端来保持内容。这样,就在输入寄存器INM中捕获到IN_STATUS上的一脉冲状态指示,且通过循环在其中保持该脉冲状态指示(除非有新的指示IN_STATUS或CLEAR_PULSE信号出现)。
如以上对图3中配置所作的更详细的说明所述,对于一次读访问,产生读请求信号RDRQ,并基于此信号产生读锁定脉冲RDLCK,锁定脉冲RDLCK通过同步级SS(I09、I10)同步于时钟域A。RDLCK的同步化版本,即保持信号LOCK使中间多路复用器I04选择将中间n位寄存器I05的输出反馈到它的输入。只要产生保持信号LOCK,则中间n位寄存器I05的内容就不会改变。在此期间,可以将中间n位寄存器I05的内容可靠地选通输入到输出寄存器ORM中,而又不会导致n位寄存器I07中产生亚稳态。在此上下文中,“可靠地”意味着由于保持信号LOCK(涵盖至少一个第二参考时钟脉冲)的产生,可以可靠地将中间存储级ISS中的当前状态指示读入到输出存储级OSS中,因为读出信号STROBE是在保持信号LOCK持续期间产生的。
在此“可靠的”操作过程中,输入n位寄存器不受锁定或保持中间寄存器INT内容的影响。因此输入级INS仍可以捕获新的状态指示(新的状态指示在输入寄存器INM中保持循环),一直到保持信号LOCK中止为止。
在时钟域A中,需要n位寄存器I11和第一“与”门I12来对保持信号LOCK执行负沿检测,以便产生原始的清零脉冲CP(对于正逻辑)。保持信号LOCK从高电平到低电平的改变表示(对于正逻辑)对输入n位寄存器I03的读访问结束以及更新阶段可能开始。清零脉冲CLEAR_PULSE是利用“异或非”门I13和第二“与”门I14从原始清零脉冲CP派生的,实质上是为了在对输入n位寄存器I03的将更改输入n位寄存器I03,但是中间n位寄存器尚未对输入n位寄存器I03的内容采样的情况下抑制清零摩擦CLEAR_PULSE。在输入n位寄存器I03的更新会改变输入n位寄存器I03的内容,而中间n位寄存器尚未对输入INT寄存器的旧内容采样的情况下抑制CLEAR_PULSE。
时钟域B中的操作
如上所述,输入存储级INS捕获到的任何新状态指示IN_STATUS必须可靠地传送到时钟域B,以便进行进一步的处理。因此,在输入存储级INS中捕获到的状态指示的最后目的地是输出寄存器ORM。当读出信号STROBE产生时,输出寄存器ORM的n位寄存器I07对中间n位寄存器I05采样。否则,输出n位寄存器I07中的状态指示被反馈到输出多路复用器I06,并因此不会改变。
如上所述,控制装置CNTRL负责正确地产生读锁定脉冲RDLCK和读出信号STROBE。从图5a、5b、5c和图6可以看出,读锁定脉冲RDLCK是读请求信号RDRQ(主读请求脉冲)的延长版本。因此,通过控制装置CNTRL使读请求脉冲RDRQ延长,使其持续时间为:读锁定脉冲RDLCK可以可靠地对同步级SS的第一n位寄存器I09采样。此持续时间的范围可以从一个第二参考时钟CLK_B周期(图5a)(如果fA>fB)到多个第二参考时钟CLK_B周期(如果fA<fB(图5c))。
亦如上所述,读出信号STROBE是始终在保持信号LOCK内产生的信号,具体来说它产生于读锁定脉冲RDLCK的最后一个周期内。
应该注意的是,就图4实施例所有达到的目的而言,控制装置CNTRL的实现细节如何无关紧要,只要它执行适当地产生读锁定脉冲RDLCK和读出信号STROBE的功能即可。例如,控制装置CNTRL可以包括简单的移位寄存器(如果所有捕获时钟域都具有相同频率);或者更为复杂的可以处理对各种不同时钟域的访问的状态机。包括计数器的输入存储级
因为状态指示IN_STATUS出现与读请求信号RDRQ出现之间的时间关系通常是不确定的,所以可能会发生下列情况。
假定第一原始状态指示IN_STATUS(即第一状态比特)已经输入并存储在输入n位寄存器I03中。只要没有新的状态指示输入到输入存储级INS中,则当前可用的状态指示保持(通过循环)在输入寄存器INM内。如上所述,在读请求信号RDRQ出现时,将此状态指示可靠地传送到中间存储级,然后在保持信号LOCK持续期内从中间存储级可靠地读出到输出寄存器ORM。
但是,这假定了在读请求信号出现之前,没有新的原始状态指示输入到输入存储级INS。另一方面,如果读请求信号RDRQ在很长一段时间内未出现,则有可能另一个新的原始状态指示IN_STATUS以钟控方式打入中间n位寄存器IO3中。这意味着响应读请求信号RDRQ,只将最新(即最近)的新状态指示传送到中间级IS,然后再传送到输出存储级OSS。
对状态指示计数的逻辑门实现
图7显示避免上述问题的状态指示确定装置的SIDM的逻辑实现的另一个实施例。提供这种状态指示确定装置SIDM针对的是要对两次读访问之间原始状态指示的个数进行计数的情况。在此情况下,在输入存储级INS中累计原始状态指示的数量,且输入存储级INS、中间存储级INT和输出存储级OSS分别存储包含n位的状态指示。n位的存储和n位的传递在各连接上以参考数字“n”表示。图7所示实例中的原始状态指示是1位指示,当然,如果相应地调整输入存储级INT,也可设想包含k位的原始指示。
通过图7和图4的比较可以看出,图7中的输出存储级OSS和中间存储级ISS的结构与图4中对应的输出存储级OSS和中间存储级ISS的结构相同。唯一的差异在于,提供了中间寄存器INT和输出寄存器ORM,用于存储和传递n位的状态指示,如图7中的参考数字“n”所示。另一方面,在图7和图4中,控制脉冲生成器CG和同步级SS完全一样。
输入存储级INS还包括输入寄存器INM和输入更新控制装置DM,它们执行与图4中类似的功能,但用于累加、存储和传递n位状态指示。因此,输入寄存器INM包括n位寄存器I17,它的Q输出端连接到中间寄存器INT的多路复用器I04的“0”输入端。如图4所示,第一时钟CLK_A输入到n位寄存器I17的时钟输入端。
输入更新控制装置包括n位寄存器I11和“与”门I12,它们具有与图4中对应的n位寄存器I11和“与”门I12类似的电路连接。因此,触发器I11的D输入接收同步级SS的第二触发器I10的Q输出。第一参考时钟CLK_A输入到n位寄存器I11的时钟输入端。与图4相反,n位寄存器I11的Q输出反相后提供给“与”门I12。提供给中间寄存器INT的多路复用器I04的保持信号LOCK由n位寄存器I11的输出Q提供。“与”门I12的第二输入连接到同步级SS的n位寄存器I10的Q输出端。
输入存储器INS还包括一个四输入/单输出的多路复用器I15,它的输出连接到输入寄存器INM的n位寄存器I17的D输入端。多路复用器I15的第一输入与n位寄存器I17的输出直接相连。第二输入连接到加法器(递增器)I16的输出,加法器I16将“1”加到寄存器STATCNT的当前内容。第三输入接收逻辑“0”,第四输入接收整数“1”。为了将这四个输入之一切换到多路复用器的输出,多路复用器接收作为切换信号的状态指示脉冲IN_STATUS和“与”门I12的输出CLEAR_PULSE。如I15框图所示,以“00”选择第一输入,以“10″选择第二输入,以“01”选择第三输入,以“11”选择第四输入。
选择是按位进行的。这意味着新的原始状态指示比特无论何时到达,则该比特将与“与”门I12的对应逻辑输出电平一起为多路复用器I15提供相应的切换信号。从图7中的电路连接可以理解,只要没有新的状态指示比特到达(IN_STATUS=0)且“与”门I12没有输出CLEAR_PULSE(CLEAR_PULSE=0),则寄存器STATCNT的内容保持不变,因为其输出通过多路复用器I15反馈回输入。如果新的状态指示比特到达(IN_STATUS=1),则选择第二输入,它使寄存器STATCNT增“1”,这是因为加法器I16将“1”加到寄存器STATCNT的输出Q。当“与”门I12输出CLEAR_PULSE=1时,如果状态指示比特等于1,则插入整数“1”;而如果状态指示比特是0,则输入0。
n位寄存器I11输出的保持信号LOCK与图5中的类似,它在一定时间输出,且长度足以允许响应读请求信号而读出存储在中间寄存器INT中的状态指示比特。当未产生保持信号LOCK(=0)时,可以将存储在n位寄存器I17中的n个状态指示比特传送到中间寄存器触发器I05中。因为该配置适合于n位状态指示,所以此n位寄存器起计数器的作用,因此在图7中以“STATCNT“表示。从图7可以明白,此计数器STATCNT可以对两次读访问之间(即读请求信号RDRQ两次出现之间)输入状态指示的个数按n位来计数。
虽然图7中的实施例显示了具有适于n位状态指示并行传输的寄存器及连接的状态指示确定装置SIDM,但该状态指示确定装置还可以利用寄存器之间状态指示的串行传输来实现。
图8显示与图5类似的图7中各信号的时序图。图8中的此实例显示图7中的电路接收14个状态指示比特,其中第一部分属于第一读周期。显然,首先读出计数器值8,然后是计数器值6。8和6之和是14,因此不会丢失任何状态指示比特(脉冲)。因此,图7中的实施例可以累计n个原始状态指示比特,并将读取的状态指示的数量传送到中间寄存器,再从中间寄存器读出到输出寄存器。
以下将详细说明图8的信号流程。首先,应记住,图4中的电路可以读取单个原始状态指示脉冲(比特),以将读取的指示从时钟域A传送到时钟域B,并在到输出OUTPUT_REG的读周期内更新输入寄存器。一旦某个指示IN_STATUS已读入到输入寄存器STATREG中,则新到达的状态指示不会导致STATREG中内容发生改变。读取输出寄存器OUTPUT_REG两次可确保检测到状态指示的出现(存在性检查)。但是,图4中的电路无法检测出IN_STATUS中出现多少个指示脉冲(比特)。
假定在图4中,状态指示脉冲IN_STATUS显示对期望的消息块的完整性检查已经失败。还假定在包含图4中电路的传输系统中,所关心的是计算块误码率(BER)。因此,在此情况下重要的是计算每单位时间指示的数量。在此情况下,微控制器可能希望按预定时间间隔读出输入寄存器STATREG,以便检查自上次读出操作起已经累计了多少个指示信号。因此必须将图4中电路的“读取时更新”功能推广为“在读取时复位到0/1”的功能。因此,将图4中简单地在输入寄存器STATREG中“锁存”指示替换为图7中涉及输入计数器STATCNT的计数过程。
因此,图7所示实施例对两次读访问(两次连续出现的读请求信号RDRQ)之间的指示脉冲的个数进行计数。这些指示脉冲(比特)在输入计数器STATCNT中进行计数。在从输出寄存器OUTPUT_REG读出计数器值的过程中,STATREG根据IN_STATUS和CLEAR_PULSE复位(到0)或置位(到1)。
为了理解图7所示电路的功能特性,如图8所示,可以定义时钟周期的指示clkcnt_a。此指示clkcnt_a对应于时钟域A中的时钟周期数,便于理解图8中的时间关系。
在图8中,信号clk_a是用于触发时钟域A中的所有触发器的时钟。虽然图7可以采用正沿触发的触发器,但是也可以采用负沿触发的触发器。如图5所示,信号IN_STATUS是来自外部的状态指示脉冲(比特)。它自然是主要的信息载体,状态指示脉冲相对于时钟脉冲clk_a的出现是随机的,即状态指示脉冲不一定出现在时钟信号clk_a的正沿,也就是说不一定同步于clk_a。仅是为了便于理解本实施例,所以状态指示显示为与clk_a同步。图8则显示14个状态指示脉冲的连续脉冲序列。
与图5类似,信号CLEAR_PULSE用于复位输入寄存器计数器STATCNT。如果CLEAR_PULSE与IN_STATUS重合,则STATCNT置位为1,以对此重合事件计数。如果CLEAR_PULSE与IN_STATUS不重合,则实际上将输入寄存器计数器STATCNT的值删除(STATCNT→0)。CLEAR_PULSE通过对RDLCK的同步化版本执行正沿检测来产生(这是通过I09-I12来完成的)。
输入寄存器计数器STATCNT存储累计的指示脉冲数量。在一种电路实现方案中,STATCNT是通过多路复用器I15用加法器I16构成的计数器的寄存器。
保持信号LOCK是RDLCK的同步化版本。它的作用是保持状态指示或允许从输入存储级INS接收状态指示。因此,如图4所示,保持信号LOCK用于“稳定”中间寄存器BRIDGEREG。
输出寄存器OUTPUT_REG存储同步于时钟域B的输入寄存器计数器STATCNT的内容的一个副本。虽然读访问对累计的脉冲指示序列进行,但OUTPUT_REG将正确地指示8+6=14个接收到的指示脉冲。如上所述,其它信号和电路与图4所示相同。
为了说明图8中的功能特征以及各种依赖关系,可以区分出四种不同情况:
1)既没有新到达的状态指示,也没有读访问:
2)有读访问,但没有新的指示脉冲;
3)有新指示脉冲,但没有读请求;
4)既有读访问,也有新的指示脉冲。
在第一种情况中,例如对于19≤clkcnt_a≤27,则不采取任何动作。STATCNT、BRIDGEGREG和OUTPUT_REG不改变它们的值。它们执行存储操作。其余所有内部信号在逻辑上均为0。
在第二种情况中,有读访问,但没有新的状态指示出现。这发生在26≤CLKCNT_A≤31的时钟周期中。
读请求脉冲RDRQ使得控制脉冲生成器CG产生脉冲RDLCK,该脉冲的长度至少为一个CLK_A周期加触发器I09的建立-保持-窗口宽度(事件A和B)。最好使RDLCK的长度为两个CLK_A周期。通过触发器I09和I10,RDLCK同步于时钟CLK_A。一般情况下,同步级SS(109/110)可以比两个触发器长。两个触发器是最少的。关于STROBE信号(事件C),以上已经参考图4对此信号作了详细解释并且图7和图8中没有什么更改。触发器I10的输出是RDLCK的同步化版本,即同步于时钟域A的时钟信号。如图7所示,此信号以RDLCK′表示,其长度至少一个CLK_A周期,在本实例中根据CLK_B周期为4个CLK_A周期。另一触发器I11使RDLCK′延迟1个时钟周期,并将LOCK=RDLK″(事件E)送到输入寄存器INT和“与”门I12。保持信号LOCK必须相对于RDLCK′/CLEAR_PULSE延迟一个时钟周期,以在第四种情况中允许在STATCNT于12≤CLKCNT_A≤13期间复位之前仍可以接收STATCNT的内容。因保持信号LOCK=1,中间寄存器BRIDGEREG将内容反馈到多路复用器I04,这在功能上防止OUTPUT_REG的输入发生单次变化。RDLCLK″结合I12用于检测RDLCK′的正沿。如果RDLCK′中出现正沿,则使信号CLEAR_PULSE置位(事件D)。如果状态指示IN_STATUS没有同时出现,则多路复用器I15选择输入“01”=0作为STATCNT的下一个内容(事件F)。在时钟域B的时钟周期8中,中间寄存器BRIDGEREG的值通过多路复用器I06读到输出寄存器OUTPUT_REG中(事件G)。
所示的第三种情况对应于4≤CLKCNT_A≤9。每次出现新的指示脉冲,就选择输入“10”,通过加法器(递增器)I16的中介作用使STATCNT的内容递增。在第三种情况中,CLEAR_PULSE始终为0,因为它因为没有读脉冲RDLCK而未置位。在第三种情况中,BRIDGEREG每个第一时钟CLK_A周期从STATCNT接收值,因为保持信号LOCK未置位。
对于从RDRQ到CLEAR_PULSE的信号序列,对第二种情况的考虑完全适用。唯一不同于第二种(和第三种)情况的是,在多路复用器I15选择输入“11”=1,并因此在时钟周期13将STATCNT置为1。逻辑上这对应于利用直接递增过程复位到0。
概括地说,图7和图8中的实施例允许在输入存储级INS中累计一定数量的状态指示,并在读请求信号在时钟域B中产生时,将当时有效的状态指示数量传送到中间存储级INT,然后传送到输出存储级OSS。此操作在保持信号LOCK的产生期间执行。在保持信号LOCK的持续时间内,可以在输入存储级INS中累积一定数量的状态指示脉冲,然后在保持信号LOCK中止时将其传送到中间存储级INT。因此,可以确定(累积)状态指示的数量,并可以可靠地将其传送到输出存储级OSS,而不会丢失任何状态指示。
工业适用性
如上所述,根据本发明,在输入存储级INS与输出存储级OSS之间设置中间存储级ISS。状态指示被移位到中间存储级ISS,并在用于保持中间存储级ISS的内容并阻止从输入存储级ISS传递新状态指示的保持信号的产生期间,将中间存储级ISS的内容传送到输出存储级OSS,而同时不会在输出寄存器ORM中产生亚稳态。
该设计可在第一参考时钟和第二参考时钟之间的任何频率和/或相位关系下工作,且仍然不会丢失任何新的状态指示。此外,总是可以保证输出寄存器的内容是最近的状态指示并通过时钟域边界正确传送。
这种状态指示检测装置和状态指示检测方法对于监控硬件设备形式的SONET/SDH应用特别有用。此外,输入、中间和输出存储级可以通过ASIC中的VLSI结构来实现。
再者,应注意,本发明可以包括所述本发明范围内的各种其它修改和变化。具体地来说,本发明还可以包括由单独描述和/或在说明书中和/或所附权利要求书中要求权利的特征和/或步骤构成的其它实施例。
在权利要求书,参考数字只起标识的作用。