本发明实施例涉及电子电路技术领域,尤其涉及一种异步先入先出寄存器以及芯片。
背景技术:
随着超大规模集成电路技术的发展,芯片的规模越来越大,芯片中的时钟域也越来越多。芯片内部,各子系统通常采用不同的时钟域,通常不同子系统的通信是通过异步先入先出寄存器(firstinputfirstoutput,fifo)实现。
图1是现有技术中的异步fifo结构示意图,如图1所示,异步fifo具有两个时钟域:写时钟域和读时钟域。数据从写时钟域进去,存放在中间的存储器(fifomemory)中。其中,写时钟可以是子系统a的内部时钟,读时钟可以是子系统b的内部时钟。图2是现有技术中的芯片中子系统间的时钟设置示意图,如图2所示,如果异步fifo放在其中一个子系统(如子系统a)而需要在顶层和该子系统设置另一系统内部时钟(如读时钟)的时钟树。这会造成时钟布线不均衡,延迟比较大,对于后端布局和时钟树生成是不友好的。
为解决上述问题,现有技术中提议将异步fifo按照时钟域切成两部分,一部分只有写时钟域的逻辑,另一部分只有读时钟域的逻辑。其中,读写时域的划分可以根据图1中间的加粗实线进行划分。图3是现有技术中异步fifo单独设置于不同子系统的结构示意图。如图3所示,写时钟和读时钟可以分别设置在子系统a和子系统b中,顶层与另外的子系统不会存在这两个时钟。但是,图3所示的结构需要读地址穿过顶层进入写时钟域,再选择数据返回读时钟域,需要在读时钟的一个周期内完成组合逻辑。但是,在子系统a与子系统b距离远时,无法保证上述过程在一个周期内完成,从而将异步fifo按照时钟域进行切分的方案不合理。
技术实现要素:
本发明实施例提供了一种异步先入先出寄存器以及芯片,可以允许选择数据在多于读时钟的一个周期内完成,可以实现合理地按照时钟域对异步fifo进行切分的方案。
第一方面,本发明实施例提供了一种异步先入先出寄存器,该异步先入先出寄存器包括:分离设置的读数据模块和写数据模块;写数据模块包括多个数据寄存器组,每个数据寄存器组中包括至少一个数据寄存器;读数据模块包括与各数据寄存器组配对连接的多个配对读取单元,以及分别与各配对读取单元相连的第一时序控制电路;
第一时序控制电路,用于根据读时钟信号,轮流向各配对读取单元传输所配对数据寄存器组中一个数据寄存器的读取地址;
配对读取单元,用于根据读时钟信号,向所配对数据寄存器组发送第一时序控制电路实时传输的读取地址,或前一读时钟周期所保持的读取地址。
第二方面,本发明实施例还提供了一种芯片,该芯片包括:如本发明任意实施例所述的异步先入先出寄存器,至少一个第一子系统,以及至少一个第二子系统;
所述异步先入先出寄存器的写数据模块和读数据模块分别设置在第一子系统和第二子系统中;
所述第一子系统的内部时钟信号作为写数据模块的写时钟信号,所述第二子系统的内部时钟信号作为读数据模块的读时钟信号;
所述第一子系统与所述第二子系统通过所述异步先入先出寄存器实现通信。
本发明实施例的技术方案,通过分离设置的读数据模块和写数据模块;其中,写数据模块包括多个数据寄存器组;读数据模块包括与各数据寄存器组配对连接的多个配对读取单元,以及分别与各配对读取单元相连的第一时序控制电路;第一时序控制电路,用于根据读时钟信号,轮流向各配对读取单元传输所配对数据寄存器组中一个数据寄存器的读取地址;配对读取单元,用于根据读时钟信号,向所配对数据寄存器组发送第一时序控制电路实时传输的读取地址,或前一读时钟周期所保持的读取地址,解决了异步fifo分离设置在不同子系统的问题,实现了可以允许选择数据在多于读时钟的一个周期内完成,可以实现合理地按照时钟域进行切分方案的效果。
附图说明
图1是现有技术中的异步fifo结构示意图;
图2是现有技术中的芯片中子系统间的时钟设置示意图;
图3是现有技术中异步fifo单独设置于不同子系统的结构示意图;
图4是本发明实施例提供一种异步先入先出寄存器的结构示意图;
图5是本发明实施例提供的一种芯片的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
图4是本发明实施例提供一种异步先入先出寄存器的结构示意图,本实施例可适用于合理将异步fifo按照时钟域切成两部分的情况,并可以集成于芯片中,如图4所示,该异步fifo具体包括:分离设置的读数据模块100和写数据模块200;
其中,在本发明实施例中,读数据模块100和写数据模块200可以设置在不同的子系统中。写数据模块200可以将其他子系统的数据写入至所在的子系统中。读数据模块100可以将其他子系统的数据读取至所在的子系统中。本发明实施例以子系统a中设置异步fifo的写数据模块200,子系统b中设置异步fifo的读数据模块100为例,说明子系统b向子系统a进行数据读取的过程,数据写入的过程可以与数据读取的过程类似。
写数据模块200包括多个数据寄存器组210,每个寄存器组中包括至少一个数据寄存器211。其中,各数据寄存器组210中的数据寄存器的个数可以相同,也可以不同。可以预先对所有的数据寄存器进行分组,确定数据寄存器组。在对数据寄存器进行分组时需要考虑多种情况,例如,当前异步fifo所在的子系统a与子系统b的距离,是否存在与分组对应的足够绕线空间。又如,数据寄存器的数量。
示例性的,当子系统a与子系统b距离较远,存在足够的绕线空间时,分组数量可以相对多些,例如,多于4;当子系统a与子系统b距离较近,绕线空间有限时,分组数量可以相对少些,例如,2或者3等。
又一示例性的,当数据寄存器采用均分时,数据寄存器分组与数据寄存器数量的因数可以存在一定的关系。例如,寄存器数量为2的倍数时,分组可以为2;寄存器数量为3的倍数时,分组可以为3。
再一示例性的,数据寄存器可以采用非均分,例如,数据寄存器数量为8,可以分为3组,各组数据寄存器组中的数据寄存器数量分别为3,3,2。为了避免由于非均分导致的控制逻辑复杂问题,在示例中,数据寄存器数量为2的数据寄存器组可以设置为与其他组相同的结构,相当于额外引入一个空的数据寄存器,可以避免读数据或者写数据的逻辑发生较大的变动,不便于数据处理。
为了便于异步fifo绕线以及数据处理中的逻辑,在本实施例的一个可选实施方式中,各数据寄存器组中包括的数据寄存器的数量相同。
如图4所示,读数据模块100包括与各数据寄存器组210配对连接的多个配对读取单元110,以及分别与各配对读取单元110相连的第一时序控制电路120。其中,第一时序控制电路120,用于根据读时钟信号,轮流向各配对读取单元110传输所配对数据寄存器组210中一个数据寄存器的读取地址。
在本发明实施例的一个可选实施方式中,各数据寄存器组中的一个数据寄存器共同组成一个轮询子序列,各轮询子序列的组合构成数据寄存器轮询集合。
其中,轮询子序列可以是按照数据寄存器组中数据寄存器的顺序形成数据寄存器的访问顺序。数据寄存器轮询集合可以是各数据寄存器组的访问顺序以及各数据寄存器组中数据寄存器的访问顺序。在本发明实施例中,可以循环往复在各数据寄存器组中确定一个数据寄存器。
示例性的,对于两组的数据寄存器组,读数据或者写数据可以按照grp0的地址0,grp1的地址0,grp0的地址1,grp1的地址1,…,grp0的地址n,grp1的地址n,grp0的地址0,grp1的地址0,…的顺序进行循环往复。其中,grp0代表第一个数据寄存器组,grp1代表第二个数据寄存器组,地址0代表数据寄存器组中的第一个数据寄存器,地址1代表数据寄存器组中的第二个数据寄存器,…,地址n代表数据寄存器组中的第n 1个数据寄存器。对于其它多组的数据寄存器组,读数据或者写数据的循环往复顺序可以与两组的相似,这里不再赘述。
为了实现读数据时上述的循环往复顺序,可以通过第一时序控制电路通过数据寄存器轮询集合中各数据寄存器的排序确定读取地址。在本发明实施例的一个可选实施方式中,第一时序控制电路由多个逻辑门阵列构成。逻辑门阵列包括逻辑运算单元、算术运算单元、寄存器以及计数器等。第一时序控制电路,具体用于根据读时钟信号,按照数据寄存器轮询集合中各数据寄存器的排序,轮流向各配对读取单元传输所配对数据寄存器组中一个数据寄存器的读取地址。
示例性的,以两组数据寄存器组,各数据寄存器组中包括4个数据寄存器为例,第一时序控制电路可以包括两组第一时序子控制电路。第一组第一时序子控制电路用于为第一数据寄存器组传输读取地址,用于从第一数据寄存器组中的数据寄存器读取数据;第二组第一时序子控制电路用于为第二数据寄存器组传输读取地址,用于从第二数据寄存器组中的数据寄存器读取数据。
示例性的,第一组第一时序子控制电路可以产生读取地址0000,0010,0100,0110;第二组第一时序子控制电路可以产生读取地址0001,0011,0101,0111。其中,读取地址的低2位与低3位构成读写数据小指针,用于指示分组中的各数据寄存器;读取地址的低1位构成分组指针,用于指示各数据寄存器组。例如,0011中的低2位与低3位为01表示读取分组中的第一个数据寄存器,低1位为1表示读取第一数据寄存器组,0011整体表示读取第一数据寄存器组的第一个数据寄存器。
在进行数据读取时,为了保证每组数据寄存器组同样位置都读取过之后,才会继续从第一数据寄存器组的下一个数据寄存器开始下一次读。对于任一数据寄存器组需要等所有的数据寄存器组均绕一圈后才会用到当前选择出来的数据。在进行第一时序控制电路设置时,可以将第一组第一时序子控制电路和第二组第一时序子控制电路设置为交替变化。
示例性的,第一组第一时序子控制电路可以在读时钟信号的当前上升沿之前更新输出0000,在下一上升沿之后保持输出为0000;在再下上升沿之前更新输出0010,并采用与0000相同的保持输出与更新输出,在0000,0010,0100,0110之间进行轮询输出。而第二组第一时序子控制电路可以在第一组第一时序子控制电路更新输出时,保持为上一输出结果0111,在第一组第一时序子控制电路保持输出时,更新输出为0001,并继续采用保持输出与更新输出,在0001,0011,0101,0111之间进行轮询输出。
采用上述的第一时序控制电路,可以实现多循环路径,可以允许读取数据在2个读时钟周期内完成。在本发明实施例的又一具体实施方式中,可以将数据寄存器分为3组,4组或更多组,其具体构成以及控制方式均与将数据寄存器分为2组类似,这里不再赘述。
需要说明的是,数据寄存器的分组越多读取数据的周期可以延长的越长,但是如分3组,可以在3个周期内读取数据;分4组,可以在4个周期内读取数据。但是,分组增多时,绕线是需要增多的,需要考虑是否存在足够的绕线空间以及以绕线为代价实现延长读取数据周期是否划算。
如图4所示,在本发明实施例中,配对读取单元110,用于根据读时钟信号,向所配对数据寄存器组210发送第一时序控制电路120实时传输的读取地址,或前一读时钟周期所保持的读取地址。
示例性的,以两组数据寄存器组,各数据寄存器组中包括4个数据寄存器为例,第一组第一时序子控制电路将输出结果(更新输出或者保持输出)输出至第一配对读取单元,第二组第一时序子控制电路将输出结果(保持输出或者更新输出)输出至第二配对读取单元。实现异步fifo按照grp0的地址0,grp1的地址0,grp0的地址1,grp1的地址1,…,grp0的地址n,grp1的地址n,grp0的地址0,grp1的地址0,…的顺序进行循环往复读取数据。其中,配对读取单元的数量、第一时序子控制电路的数量以及数据寄存器组的数量相同。
在本发明实施例的一个实施方式中,可选的,写数据模块包括:与各数据寄存器组配对连接的多个配对写入单元,以及分别与各配对写入单元相连的第二时序控制电路;第二时序控制电路,用于根据写时钟信号,轮流向各配对写入单元传输所配对数据寄存器组中一个数据寄存器的写入地址;配对写入单元,用于根据写时钟信号,向所配对数据寄存器组发送第二时序控制电路实时传输的写入地址,或前一写时钟周期所保持的写入地址。
其中,在本发明实施例的一个可选实施方式中,第二时序控制电路由多个逻辑门阵列构成;第二时序控制电路具体用于,根据写时钟信号,按照数据寄存器轮询集合中各数据寄存器的排序,轮流向各配对写入单元传输所配对数据寄存器组中一个数据寄存器的写入地址。
在本发明实施例的具体实现方式中,第二时序控制电路与第一时序控制电路类似,区别仅在于一个输出写地址另一个输出读地址。写数据的循环往复顺序与读数据一致,对于第二时序控制电路的具体说明可以参考第一时序控制电路,这里不再赘述。
在本发明实施例的一个实施方式中,可选的,配对读取单元与配对写入单元为标准寄存器;标准寄存器,用于在检测到读时钟信号的上升沿时,将稳定的读取地址传输至所配对数据寄存器组;或者,在检测到写时钟信号的上升沿时,将稳定的写入地址传输至所配对数据寄存器组。
在本发明实施例的一个实施方式中,可选的,读数据模块还包括:读格雷码生成电路;读格雷码生成电路,用于生成读格雷码发送至写数据模块;读格雷码生成电路具体包括:相连的二进制读指针生成子电路和二进制转读格雷码子电路;二进制读指针生成子电路,用于根据读时钟信号,按照二进制指针映射序列中各二进制指针的排序,顺序生成二进制读指针传输至二进制转格读雷码子电路;二进制转读格雷码子电路,用于将接收的二进制读指针转换为匹配的读格雷码,并将读格雷码提供给写数据模块。
在本发明实施例的一个实施方式中,可选的,读数据模块还包括:写格雷码生成电路;写格雷码生成电路具体包括:相连的二进制写指针生成子电路以及二进制转写格雷码子电路;二进制写指针生成子电路,用于根据写时钟信号,按照二进制指针映射序列中各二进制指针的排序,顺序生成二进制写指针传输至二进制转格写雷码子电路;二进制转写格雷码子电路,用于将接收的二进制写指针转换为匹配的写格雷码,并将写格雷码提供给写数据模块。
其中,读格雷码与写格雷码,统称为格雷码,是用于区分异步fifo的空满状态的。因此格雷码中需要额外增加一个比特,用于记录异步fifo的空满状态。例如,异步fifo中存在8个数字寄存器时,需要用4位指针表示格雷码。通过格雷码区分异步fifo的空满状态可以与现有技术的方案相似,这里不再赘述。
在本实施例中,格雷码的生成过程可以是先生成二进制读指针或者二进制写指针,再分别将二进制读指针或二进制写指针对应的转换为读格雷码或写格雷码。其中,二进制读指针可以是根据读时钟信号按照二进制指针映射序列中各二进制指针的排序,顺序生成二进制读指针。二进制指针映射序列可以是0x0开始逐个递增产生的序列,由于格雷码需要记录异步fifo的空满状态,二进制指针映射序列可以是从0x0开始逐个递增共有2n个数值,其中,n为数据寄存器的个数。
示例性的,以8个数据寄存器为例,二进制指针映射序列可以是0x0,0x1,0x2,…,0xf。二进制读指针生成子电路可以是根据读时钟信号顺序将二进制指针映射序列中的作为二进制读指针传输至二进制转读格雷码子电路。当二进制指针映射序列中的值可以被轮询。在实际的电路设计中,可以通过计数器实现二进制读指针的生成,由于记录位数的限制,最高位只能是0或1,在其他位满时溢出,即相当于对二进制指针映射序列的轮询。
二进制写指针可以是根据写时钟信号按照二进制指针映射序列中各二进制指针的排序,顺序生成二进制写指针。生成二进制写指针所用的二进制指针映射序列可以与二进制读指针生成时所用的二进制指针映射序列相同,不再赘述。
二进制与格雷码具有一一对应的映射关系,因此,二进制转读格雷码子电路或者二进制转写格雷码子电路可以根据电路中对应的逻辑运算关系将二进制转换为格雷码。
表1是本发明实施例提供的一种异步fifo中各指针变化示意表。表1以异步fifo中存在8个数字寄存器分为2组为例,说明本发明实施例所提供的异步fifo中各指针间的关系。
如表1所示,二进制读(或写)指针可以是根据0x0,0x1,0x2,…,0xf的二进制指针映射序列以及读(或写)时钟信号确定的。读(或写)格雷码是与二进制读(或写)指针一一对应的。在表1中,二进制读(或写)指针采用十六进制进行表示,读(或写)格雷码采用二进制进行表示。group(分组)指针可以是二进制读(或写)指针的低1位,读写数据小指针可以是二进制读(或写)指针的低2位与低3位构成的。数据寄存器编号可以是根据对各数据寄存器组中各数据寄存器的轮询记录的编号。在实际设计异步fifo的结构时,可以按照表1所示的各指针的对应关系设计电路,形成读写数据的控制电路。
表1
在本发明实施例的一个可选实施方式中,写数据模块中,与各数据寄存器组对应的数据寄存器总数n为非2的幂次方;二进制指针映射序列为以
其中,在格雷码满足对称性时,用于区分异步fifo的空满状态在现有技术中是比较简便的。格雷码的对称性可以理解为格雷码的第n个与第(2n-n 1)个除去最高位后剩余数据是分别相同的。其中,n为1,2,…,n;n为数据寄存器总个数。例如,在表1中,第一个格雷码0b00000与最后一个格雷码0b10000,除去最高位后均为0000。
为了满足格雷码的对称性,现有技术在设计异步fifo时,会将数据寄存器的总个数n设置为2的幂次方。这种方式会局限异步fifo的设计,为了减少异步fifo中数据寄存器总数n的局限性,增加异步fifo设计的灵活性,在本实施例中提出了数据寄存器总数为非2的幂次方的解决方案。
当数据寄存器总数为非2的幂次方时,二进制指针映射序列采用从0x0开始逐个递增共有2n个数值的方式,其对应的格雷码肯定是不满足对称性的。为了满足格雷码的对称性,在本实施例中,将以
其中,标准二进制指针映射序列是指按照从0x0开始逐个递增共有
示例性的,表2是本发明实施例提供的一种异步fifo中数据寄存器总数为非2幂次方时各指针变化示意表。如表2中以数据寄存器总数n=9,分为3组数据寄存器组为例进行说明。
表2
如表2所示的二进制指针映射序列相当于是跳过了中间14个指针((0x16-0x9) 1),因此为了满足本发明实施例所需的二进制指针映射序列对应的二进制读(或写)指针的生成,在本实施例的一个可选实施方式中,读格雷码生成电路中还包括:第一指针跳变单元,第一指针跳变单元与二进制读指针生成子电路相连;二进制读指针生成子电路,具体用于根据读时钟信号,按照二进制数递增顺序,依次生成一个二进制读指针;第一指针跳变单元,用于在读时钟信号到达时,如果确定二进制读指针生成子电路前一读时钟信号输出的二进制读指针为标准二进制指针映射序列中的第n个二进制读指针,指示二进制读指针生成子电路跳变生成标准二进制指针映射序列中的第n 1个二进制读指针。
在本实施例的一个可选实施方式中,写格雷码生成电路中还包括:第二指针跳变单元,第二指针跳变单元与二进制写指针生成子电路相连;二进制写指针生成子电路,具体用于根据写时钟信号,按照二进制数递增顺序,依次生成一个二进制写指针;第二指针跳变单元,用于在写时钟信号到达时,如果确定二进制写指针生成子电路前一写时钟信号输出的二进制写指针为标准二进制指针映射序列中的第n个二进制写指针,指示二进制写指针生成子电路跳变生成标准二进制指针映射序列中的第n 1个二进制写指针。
其中,第一指针跳变单元和第二指针跳变单元可以分别实现异步fifo中数据寄存器总数n为非2的幂次方时二进制读指针和二进制写指针的跳变。
在上述实施方式的基础上,可选的,写数据模块包括与数据寄存器组相同数量的第一选择器;第一选择器与数据寄存器组分别配对相连;读数据模块包括第二选择器和与第二选择器相连的数据读取寄存器;第一选择器,用于接收对应的配对读取单元发送的第一时序控制电路实时传输的读取地址,或前一读时钟周期所保持的读取地址,并根据读取地址在配对的数据寄存器组中选择目标数据寄存器进行目标数据读取,将目标数据发送至第二选择器;第二选择器,用于接收目标数据,并根据读取地址确定目标数据的有效性,将有效的目标数据发送至数据读取寄存器。
其中,第二选择器在确定目标数据的有效性时,可以是根据分组指针实现的,例如,第二选择器可以将分组指针作为触发信号,根据分组指针确定当前有效的数据寄存器组,将从当前有效的数据寄存器组对应的第一选择器中读取的目标数据确定为有效的目标数据值,传输至读数据模块进行使用。这样可以保证在读数据模块在每个周期均有数据操作,不会因为数据寄存器的分组而使数据读取的效率下降。
本实施例的技术方案,通过将异步fifo的读数据模块和写数据模块分离设置,以及将异步fifo中的数据寄存器进行分组设计,以轮询的方式交替向各数据寄存器读取或写入数据,并且在异步fifo设计中引入了跳针设计,解决了异步fifo分离设置中的问题,实现了允许选择数据在多于读时钟的一个周期内完成,并且不会降低数据读取的效率,以及提高异步fifo设计灵活性的效果。
本发明实施例的技术方案通过上述的异步fifo设计,可以实现任意的数据寄存器分组。但是在实际设计异步fifo时一个需要考虑的问题是写数据需要在写格雷码稳定之前稳定,以便于后续的逻辑使用。在现有技术中写格雷码通常是在1-2个时钟周期稳定的。当数据寄存器的分组个数大于4时,进行读写数据的跨系统走线可以是大于2周期。其中,读写数据的跨系统走线周期是读写数据周期的一半。如果写数据延迟大而写格雷码延迟低,可能会造成格雷码稳定后写数据没有稳定的情况。例如,数据寄存器的分组为8,跨系统走线可以有4个时钟周期,写数据可以有4个周期从写数据模块走到读数据模块。但是写格雷码可能仅仅用了一个周期,在读时钟同步两个周期,3个周期后需要用写数据,此时会发生错误。
为了解决上述的问题,在本发明实施例中,可以将写格雷码的走线延迟,例如加长写格雷码的物理走线。示例性的,可以根据数据寄存器组的数量确定跨系统走线的周期n/2,写格雷码的周期数(通常为2),将n/2-2确定为写格雷码延迟周期数。根据写格雷码延迟周期数加长写格雷码的物理走线。或者,在本发明实施例中,可以在读数据模块对写格雷码的等待拍数进行延长。例如,根据写格雷码延迟周期数延长等待拍数。
图5是本发明实施例提供的一种芯片的结构示意图,如图5所示,该芯片包括如本发明实施例任一的异步fifo300,至少一个第一子系统310,以及至少一个第二子系统320。
其中,异步fifo300的写数据模块200和读数据模块100分别设置在第一子系统310和第二子系统320中;
第一子系统310的内部时钟信号作为写数据模块200的写时钟信号,第二子系统320的内部时钟信号作为读数据模块100的读时钟信号;
第一子系统310与第二子系统320通过异步fifo300实现通信。
示例性的,第二子系统通过异步fifo向第一子系统读取数据时,可以采用下述过程:
第二系统的内部时钟信号作为读时钟信号,输入至异步fifo读数据模块的配对读取单元,第一时序控制电路,以及读格雷码生成电路。读格雷码生成电路中的二进制读指针生成子电路可以根据读时钟信号生成二进制读指针。第一时序控制电路可以根据二进制读指针或者读时钟信号依次生成对写数据模块中数据寄存器组中数据寄存器进行轮询的读地址,传输至配对读取单元。其中,读地址可以是按照grp0的地址0,grp1的地址0,…,grpz的地址0,grp0的地址1,grp1的地址1,…,grpz的地址1,……,grp0的地址n,grp1的地址n,…,grpz的地址n,grp0的地址0,grp1的地址0,…的顺序进行循环往复。其中,z为数据寄存器的分组数。
写数据模块的第一选择器中读地址输入端(raddr)根据对应的配对读取单元传输的读地址在对应的数据寄存器组中的数据寄存器选择目标数据进行读取,返回至第一选择器的数据输出端(rdata)。各rdata将目标数据传输至第二选择器。第二选择器根据分组指针确定有效的目标数据,返回至读数据模块进行使用,实现了第一子系统与第二子系统的通信。写数据的过程可以与读数据的过程类似,这里不再赘述。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
1.一种异步先入先出寄存器,其特征在于,包括:分离设置的读数据模块和写数据模块;写数据模块包括多个数据寄存器组,每个数据寄存器组中包括至少一个数据寄存器;读数据模块包括与各数据寄存器组配对连接的多个配对读取单元,以及分别与各配对读取单元相连的第一时序控制电路;
第一时序控制电路,用于根据读时钟信号,轮流向各配对读取单元传输所配对数据寄存器组中一个数据寄存器的读取地址;
配对读取单元,用于根据读时钟信号,向所配对数据寄存器组发送第一时序控制电路实时传输的读取地址,或前一读时钟周期所保持的读取地址。
2.根据权利要求1所述的异步先入先出寄存器,其特征在于,所述写数据模块包括:与各数据寄存器组配对连接的多个配对写入单元,以及分别与各配对写入单元相连的第二时序控制电路;
第二时序控制电路,用于根据写时钟信号,轮流向各配对写入单元传输所配对数据寄存器组中一个数据寄存器的写入地址;
配对写入单元,用于根据写时钟信号,向所配对数据寄存器组发送第二时序控制电路实时传输的写入地址,或前一写时钟周期所保持的写入地址。
3.根据权利要求2所述的异步先入先出寄存器,其特征在于,各所述数据寄存器组中包括的数据寄存器的数量相同;各数据寄存器组中的一个数据寄存器共同组成一个轮询子序列;各所述轮询子序列的组合构成数据寄存器轮询集合;
第一时序控制电路和第二时序控制电路分别由多个逻辑门阵列构成;
第一时序控制电路,具体用于根据读时钟信号,按照所述数据寄存器轮询集合中各数据寄存器的排序,轮流向各配对读取单元传输所配对数据寄存器组中一个数据寄存器的读取地址;
第二时序控制电路具体用于,根据写时钟信号,按照所述数据寄存器轮询集合中各数据寄存器的排序,轮流向各配对写入单元传输所配对数据寄存器组中一个数据寄存器的写入地址。
4.根据权利要求2所述的异步先入先出寄存器,其特征在于,所述配对读取单元与所述配对写入单元为标准寄存器;
所述标准寄存器,用于在检测到读时钟信号的上升沿时,将稳定的读取地址传输至所述所配对数据寄存器组;或者,在检测到写时钟信号的上升沿时,将稳定的写入地址传输至所述所配对数据寄存器组。
5.根据权利要求1所述的异步先入先出寄存器,其特征在于,所述读数据模块还包括:读格雷码生成电路;
所述读格雷码生成电路,用于生成读格雷码发送至所述写数据模块;
所述读格雷码生成电路具体包括:相连的二进制读指针生成子电路和二进制转读格雷码子电路;
所述二进制读指针生成子电路,用于根据读时钟信号,按照二进制指针映射序列中各二进制指针的排序,顺序生成二进制读指针传输至所述二进制转读格雷码子电路;
所述二进制转读格雷码子电路,用于将接收的二进制读指针转换为匹配的读格雷码,并将所述读格雷码提供给所述写数据模块。
6.根据权利要求5所述的异步先入先出寄存器,其特征在于,所述读数据模块还包括:写格雷码生成电路;
所述写格雷码生成电路具体包括:相连的二进制写指针生成子电路以及二进制转写格雷码子电路;
所述二进制写指针生成子电路,用于根据写时钟信号,按照二进制指针映射序列中各二进制指针的排序,顺序生成二进制写指针传输至所述二进制转格写雷码子电路;
所述二进制转写格雷码子电路,用于将接收的二进制写指针转换为匹配的写格雷码,并将所述写格雷码提供给所述写数据模块。
7.根据权利要求6所述的异步先入先出寄存器,其特征在于,所述写数据模块中,与各数据寄存器组对应的数据寄存器总数n为非2的幂次方;
所述二进制指针映射序列为以
8.根据权利要求7所述的异步先入先出寄存器,其特征在于,所述读格雷码生成电路中还包括:第一指针跳变单元,第一指针跳变单元与二进制读指针生成子电路相连;
二进制读指针生成子电路,具体用于根据读时钟信号,按照二进制数递增顺序,依次生成一个二进制读指针;
第一指针跳变单元,用于在读时钟信号到达时,如果确定二进制读指针生成子电路前一读时钟信号输出的二进制读指针为所述标准二进制指针映射序列中的第n个二进制读指针,指示所述二进制读指针生成子电路跳变生成所述标准二进制指针映射序列中的第n 1个二进制读指针,以及,
所述写格雷码生成电路中还包括:第二指针跳变单元,第二指针跳变单元与二进制写指针生成子电路相连;
二进制写指针生成子电路,具体用于根据写时钟信号,按照二进制数递增顺序,依次生成一个二进制写指针;
第二指针跳变单元,用于在写时钟信号到达时,如果确定二进制写指针生成子电路前一写时钟信号输出的二进制写指针为所述标准二进制指针映射序列中的第n个二进制写指针,指示所述二进制写指针生成子电路跳变生成所述标准二进制指针映射序列中的第n 1个二进制写指针。
9.根据权利要求1-8任一项所述的异步先入先出寄存器,其特征在于,所述写数据模块包括与数据寄存器组相同数量的第一选择器;第一选择器与数据寄存器组分别配对相连;所述读数据模块包括第二选择器和与第二选择器相连的数据读取寄存器;
第一选择器,用于接收对应的配对读取单元发送的第一时序控制电路实时传输的读取地址,或前一读时钟周期所保持的读取地址,并根据读取地址在配对的数据寄存器组中选择目标数据寄存器进行目标数据读取,将目标数据发送至所述第二选择器;
第二选择器,用于接收目标数据,并根据读取地址确定目标数据的有效性,将有效的目标数据发送至数据读取寄存器。
10.一种芯片,其特征在于,包括:如权利要求1-9任一项所述的异步先入先出寄存器,至少一个第一子系统,以及至少一个第二子系统;
所述异步先入先出寄存器的写数据模块和读数据模块分别设置在第一子系统和第二子系统中;
所述第一子系统的内部时钟信号作为写数据模块的写时钟信号,所述第二子系统的内部时钟信号作为读数据模块的读时钟信号;
所述第一子系统与所述第二子系统通过所述异步先入先出寄存器实现通信。
技术总结