用于数据统计的电路单元、电路模块和装置的制作方法

文档序号:14474183阅读:300来源:国知局
用于数据统计的电路单元、电路模块和装置的制作方法

本公开总体上涉及数据统计的技术领域,并且具体地涉及用于数据统计的电路单元、电路模块和装置。



背景技术:

在很多应用中需要对输入的数据流进行统计,以获得一些特定的统计信息。例如,在图像数据的处理中,可能需要对输入的图像的数据流进行统计,以获得例如局部亮度信息、全息直方图信息等。

期望能够使用硬件高效且低消耗地实现数据统计。



技术实现要素:

一方面,公开了一种用于数据统计的电路单元。该电路单元可以包括第一子电路和第二子电路。第一子电路可以包括第一寄存器,并且可以被配置为在电路单元的第一控制端接收到有效的第一控制信号的情况下在第一寄存器中存储经由电路单元的第一输入端接收到的数据。第一寄存器的输出端可以耦接到所述电路单元的第一输出端。第二子电路可以包括第二寄存器,并且可以被配置为在电路单元的第二控制端接收到有效的第二控制信号的情况下在第二寄存器中存储经由电路单元的第二输入端接收到的数据。第二子电路还可以被配置为在电路单元的第三控制端接收到有效的第三控制信号的情况下将存储在所述第二寄存器中的数据的值增加1。第二寄存器的输出端可以耦接到所述电路单元的第二输出端。

另一方面,还公开了一种用于数据统计的电路模块。该电路模块可以包括一个或多个上述的电路单元,其中,一个或多个电路单元可以包括第一电路单元,该第一电路单元的第一输入端和第二输入端可以分别经由电路模块的第一输入端和第二输入端接收输入数据和初始计数值。该电路模块还可以包括控制逻辑电路。该控制逻辑电路可以被配置为判断每个电路单元的第一寄存器中的数据是否与所述输入数据相同以及每个电路单元的第二寄存器中的数据是否等于0。该控制逻辑电路还可以被配置为根据判断的结果向每个电路单元提供相应的第一控制信号、第二控制信号和第三控制信号以及分别经由电路模块的第一输出端和第二输出端选择性地输出一个或多个电路单元中的一个电路单元的第一寄存器和第二寄存器中的数据。

另一方面,还公开了一种用于数据统计的装置。该装置可以包括一个或多个上述的电路模块,其中,一个或多个电路模块可以包括第一电路模块,该第一电路模块的第一输入端和第二输入端可以分别接收解析数据和常数值1。该装置还可以包括更新电路。该更新电路可以耦接在所述一个或多个电路模块中的最后电路模块与存储器之间,并且可以被配置为根据来自最后电路模块的第一输出端的数据项和来自最后电路模块的第二输出端的统计值来更新存储器中的信息,其中,在一个或多个电路模块为一个电路模块的情况下,第一电路模块作为所述最后电路模块,在一个或多个电路模块为多个电路模块的情况下,多个电路模块可以串联在一起,使得除了第一电路模块之外的每个电路模块的第一输入端和第二输入端分别耦接到前一个电路模块的第一输出端和第二输出端,同时除了第二电路模块之外的每个电路模块的第一输出端和第二输出端分别耦接到后一个电路模块的第一输入端和第二输入端,其中,第二电路模块可以作为所述最后电路模块。

根据本公开的实施例的电路单元、电路模块和/或装置能够使用较少的资源和功耗来完成数据统计。

附图说明

图1示意性地示出根据本公开的实施例的用于数据统计的电路单元。

图2示意性地示出根据本公开的实施例的用于数据统计的电路单元的电路结构的示例。

图3示意性地示出根据本公开的实施例的用于数据统计的电路模块。

图4示意性地示出根据本公开的实施例的用于数据统计的电路模块的电路结构的一个示例。

图5示意性地示出根据本公开的实施例的用于数据统计的电路模块的电路模块的电路结构的另一个示例。

图6示意性地示出根据本公开的实施例的用于数据统计的电路模块的电路结构的又一个示例。

图7示意性地示出根据本公开的实施例的用于数据统计的装置的一个示例。

图8示意性地示出根据本公开的实施例的用于数据统计的装置的另一个示例。

图9示意性地示出根据本公开的实施例的用于数据统计的装置中的更新电路的示例。

图10示意性地示出根据本公开的实施例的用于数据统计的装置的工作过程的一个示例。

图11示意性地示出根据本公开的实施例的用于数据统计的装置的工作过程的另一个示例。

具体实施方式

下面结合附图来描述根据本公开的实施例的电路单元、电路模块和装置的细节。在各个图中,箭头可以表示数据的传送方向,并且相同的标号可以表示相同或相似的元件或部件,而数字1或0根据情况可能具有不同的含义。

如图1所示,根据本公开的实施例的用于数据统计的电路单元可以具有输入端val_i和cnt_i、输出端val_o和cnt_o以及控制端val_c、cnt_c和inc_c,并且可以包括子电路uc1和子电路uc2。

子电路uc1可以包括寄存器reg1。寄存器reg1可以存储经由输入端val_i输入的数据,并且可以经由输出端val_o输出所存储的数据。在一个实施例中,子电路uc1可以被配置为在控制端val_c接收到有效的控制信号的情况下,将经由输入端val_i输入的数据存储到寄存器reg1中。

子电路uc2可以包括寄存器reg2。寄存器reg2可以存储经由输入端cnt_i输入的数据,并且可以经由输出端cnt_o输出所存储的数据。在一个实施例中,子电路uc2可以被配置为在控制端cnt_c接收到有效的控制信号的情况下,将经由输入端cnt_i输入的数据存储到寄存器reg2中。子电路uc2还可以被配置为在控制端inc_c接收到有效的控制信号的情况下,将存储在寄存器reg2中的数据的值增加1。

有效的控制信号也可以被称为使能信号,即使一个元件或部件或硬件模块或装置能够开始工作或者转换到有效状态的信号。例如,在一个元件或部件接收到高电平的信号的情况下开始工作或者转换到有效状态,则该高电平的信号可以作为用于该元件或部件的使能信号或有效的控制信号。在另外的示例中,根据需要,有效的信号也可以是诸如低电平信号、处于一定电位或具有一定电压值的信号、具有特定频率的信号等其他形式的信号。在本文中,还使用二进制的1来代表有效的控制信号或使能信号,相应地,二进制的0可以代表无效的控制信号或禁止信号。

在一个实施例中,如图2所示,子电路uc1还可以包括选择器sel1。例如,选择器sel1可以是二选一类型的多路选择器(或多路开关),并且可以具有控制端、与有效的控制信号相对应的输入端(在图2中用1来表示,并且简称为输入端1)和与无效的控制信号相对应的输入端(在图2中用0来表示,并且简称为输入端0)。选择器sel1的控制端、输入端1、输入端0和输出端可以分别耦接到控制端val_c、输入端在val_i、reg1的输出端和reg1的输入端。

选择器sel1可以在控制端接收到有效的控制信号的情况下输出经由输入端1接收到的数据,否则输出经由输入端0接收到的数据。由此,子电路uc1可以在控制端val_c接收到有效的控制信号的情况下,使用经由val_i接收到的新数据替换寄存器reg1中的旧数据,并且在输出端val_o输出该新数据,否则在输出端val_o输出原来的旧数据。

在另外的实施例中,选择器sel1也可以是带有一个输入端、一个控制端和一个输出端的开关(例如,由晶体管等实现的电子开关),该开关可以在相应的控制端接收到有效的控制信号的情况下将输入端与输出端导通,否则断开在输入端与输出端之间的连接。该开关的输入端、输出端和控制端可以分别耦接到输入端val_i、寄存器reg1的输入端和控制端val_c,并且寄存器reg1的输出端可以不必耦接到该开关。

在另外的实施例中,选择器sel1也可以是能够实现相同功能的一个或多个逻辑门元件的组合。在一个实施例中,选择器sel1可以作为寄存器reg1的输入控制电路的一部分。

在一个实施例中,如图2所示,子电路uc2还可以包括选择器sel2、sel3和累加器inc。

与子电路uc1中的选择器sel1相似地,选择器sel2和sel3也可以是二选一类型的多路选择器(或多路开关)。选择器sel2的输入端1、输入端0、控制端和输出端可以分别耦接到输入端cnt_i、寄存器reg2的输出端、控制端cnt_c和选择器sel3的输入端0,选择器sel3的输入端1、输入端0、控制端和输出端可以分别耦接到累加器inc的输出端、选择器sel2的输出端、控制端inc_c和寄存器reg2的输入端,并且累加器inc的输入端可以耦接到寄存器reg2的输出端。

与子电路uc1中的选择器sel1相似地,选择器sel2和sel3也可以在相应的控制端接收到有效的控制信号的情况下输出经由相应的输入端1接收到的数据,否则输出经由相应的输入端0接收到的数据。累加器inc用于将寄存器reg2中的数据加1,并将加1后所得到的数据值提供到选择器sel3的输入端1。由此,子电路uc2的工作过程可以如下面的表格1所示(假设寄存器reg2中先前存储的旧数据为cnt1,经由输入端cnt_i接收到的新数据为cnt2):

表格1

也就是说,子电路uc2可以在经由控制端cnt_c接收到的控制信号无效且经由控制端inc_c接收到的控制信号无效的情况下,维持寄存器reg2中的数据不变,并且在输出端cnt_o输出寄存器reg2中所维持的旧数据cnt1。子电路uc2可以在经由控制端cnt_c接收到的控制信号有效且经由控制端inc_c接收到的控制信号无效的情况下,使用经由输入端cnt_i接收到的新数据来替换寄存器reg2中的旧数据,并且在输出端cnt_o输出寄存器reg2中的新数据cnt2。子电路uc2可以在经由控制端inc_c接收到的控制信号有效的情况下,将寄存器reg2中的数据的值加1,并且在输出端cnt_o输出寄存器reg2中的新数据cnt1+1。

在另外的实施例中,选择器sel2也可以是带有一个输入端、一个控制端和一个输出端的开关(例如,由晶体管等实现的电子开关),该开关可以在相应的控制端接收到有效的控制信号的情况下将输入端与输出端导通,否则断开在输入端与输出端之间的连接。在该实施例中,选择器sel2也可以被称为开关sel2,其输入端、输出端和控制端可以分别耦接到输入端cnt_i、选择器sel3的输入端0和控制端cnt_c,并且寄存器reg2的输出端可以不必耦接到开关sel2。

另外,选择器sel3也可以是带有一个输入端、一个控制端和一个输出端的开关(例如,由晶体管等实现的电子开关),该开关可以在相应的控制端接收到有效的控制信号的情况下将输入端与输出端导通,否则断开在输入端与输出端之间的连接。在该实施例中,选择器sel3也可以被称为开关sel3,其输入端、输出端和控制端可以分别耦接到累加器inc的输出端、寄存器reg2的输入端和控制端inc_c,并且相应地,选择器sel2或开关sel2的输出端可以耦接到寄存器reg2。在该实施例中,可以控制经由控制端cnt_c接收到的控制信号和经由控制端inc_c接收到的控制信号不同时有效,以避免冲突。

在另外的实施例中,选择器sel2和/或sel3也可以是能够实现相同功能的一个或多个逻辑门元件的组合。在一个实施例中,选择器sel2和/或选择器sel3和/或累加器inc可以作为寄存器reg2的输入控制电路的一部分。

在另外的实施例中,子电路uc1和/或uc2中还可以在寄存器reg1与输出端val_o之间和/或在寄存器reg2与输出端cnt_o之间设置另外的选择器或开关,以便控制是否在输出端val_o和/或cnt_o输出寄存器中的数据。

图3示出根据公开的实施例的用于数据统计的电路模块的示例。如图3所示,根据公开的实施例的用于数据统计的电路模块可以具有输入端cnt_in和val_in以及输出端val_out和cnt_out,并且可以包括统计电路阵列arr。统计电路阵列arr可以包括一个或多个如图1或图2所示的电路单元。

如图3所示,该电路模块还可以包括控制逻辑电路con。控制逻辑电路con可以与统计电路阵列arr中的每个电路单元耦接,并且可以接收来自统计电路阵列arr中的每个电路单元的输出端val_o和或cnt_o的数据(d),并且可以向统计电路阵列arr中的每个电路单元的控制端val_c、cnt_c和inc_c提供相应的控制信号(s)。

控制逻辑电路可以被配置为判断统计电路阵列arr中的每个电路单元的寄存器reg1中的数据是否与经由输入端val_in接收到的数据相同以及每个电路单元的寄存器reg2中的数据是否等于0,并且根据判断的结果向统计电路阵列arr中的每个电路单元的控制端val_c、cnt_c和inc_c提供相应的控制信号。另外,控制逻辑电路还可以被配置为分别经由输出端val_out和输出端cnt_out选择性地输出统计电路阵列arr中的一个电路单元的寄存器reg1和寄存器reg2中的数据。

图4至图6示出根据本公开的实施例的电路模块的不同的示例。

在图4的示例中,统计电路阵列arr可以包括多个串联在一起的电路单元u1至un,其中,电路单元u1的输入端val_i和cnt_i分别耦接到电路模块的输入端val_in和cnt_in,电路单元u1之外的每个电路单元的输入端val_i和cnt_i分别耦接到相应的前一个电路单元的输出端val_o和cnt_o,同时电路单元un之外的每个电路单元的输出端val_o和cnt_o分别耦接到相应的后一个电路单元的输入端val_i和cnt_i。例如,电路单元u2的输入端val_i和cnt_i分别耦接到电路单元u1的输出端val_o和cnt_o。

如图4所示,在一个实施例中,控制逻辑电路con可以包括与分别每个电路单元uk相对应的比较器xk和比较器xnk,其中,1≤k≤n。例如,与电路单元u1相对应地,控制逻辑电路con可以包括比较器x1和比较器xn1;与电路单元u2相对应地,控制逻辑电路con可以包括比较器x2和比较器xn2;与电路单元un相对应地,控制逻辑电路con可以包括比较器xn和比较器xnn。

在一个实施例中,比较器xnk的两个输入端可以分别耦接到电路单元uk的输出端val_o和电路模块的输入端val_in,以比较电路单元uk中的寄存器reg1中的数据和电路模块经由输入端val_in接收到的数据。在比较的两个数据相同的情况下,比较器xnk可以输出指示所比较的两个数据相同的信息或信号,否则可以输出指示所比较的两个数据不同的信息或信号。例如,比较器xnk可以输出信号matchk,该信号可以在所比较的两个数据相同的情况下为有效的信号(例如,高电平或者能够代表二进制的1的其他任何形式),而在所比较的两个数据不同的情况下为无效的信号(例如,低电平或者能够代表二进制的0的其他任何形式)。

如图4所示,比较器xn1的两个输入端可以分别耦接到电路单元u1的输出端val_o和电路模块的输入端val_in,并且输出的信号或信息match1可以在电路单元u1中的寄存器reg1中的数据与经由输入端val_in接收的数据相同的情况下为1,否则为0。

虽然在图4中使用一个同或门元件来表示比较器xnk,但是这并不意味着比较器xnk必须只由一个同或门元件来实现。在不同的实施例中,根据需要,比较器xnk可以包括一个或多个逻辑门元件,或者可以包括诸如cc14585或74ls85这样的集成数值比较器。

例如,比较器xnk可以包括多个同或门元件和一个与门元件,其中,每个同或门元件可以具有两个输入端,并且分别接收电路单元uk中的寄存器reg1中的数据的二进制表示中的一位和经由输入端val_in接收的数据的二进制表示中的对应的一位。然后,可以将每个同或门元件的输出端分别耦接到与门元件的一个输入端。

比较器xk的一个输入端可以耦接到电路单元uk的输出端cnt_o,另一个输入端可以接收常数值0,以为比较电路单元uk中的寄存器reg2中的数据和0。在比较的两个数据相同的情况下,比较器xk可以输出指示所比较的两个数据相同的信息或信号,否则可以输出指示所比较的两个数据不同的信息或信号。例如,比较器xk可以输出信号validk,该信号可以在所比较的两个数据不同的情况下为有效的信号(例如,高电平或者能够代表二进制的1的其他任何形式),而在所比较的两个数据相同的情况下为无效的信号(例如,低电平或者能够代表二进制的0的其他任何形式)。

如图4所示,比较器x1的一个输入端可以耦接到电路单元u1的输出端cnt_o,另一个输入端接收常数值0,并且输出的信号或信息valid1可以在电路单元u1中的寄存器reg2中的数据不等于0的情况下表示二进制的1,否则表示二进制的0。

虽然在图4中使用一个异或门元件来表示比较器xk,但是这并不意味着比较器xk必须只由一个异或门元件来实现。在不同的实施例中,根据需要,比较器xk可以包括一个或多个逻辑门元件,或者可以包括诸如cc14585或74ls85这样的集成数值比较器。

例如,比较器xk也可以设置一个输入端,并且将该输入端耦接到电路单元uk的输出端cnt_o。另外,比较器xk可以包括一个或多个或门元件,以便对电路单元uk的寄存器reg2中的数据的所有位的二进制数执行逻辑或操作,并输出逻辑或操作的结果作为信号或信息validk。例如,如果电路单元uk的寄存器reg2为32位寄存器并且存储的数据为3,则在数值3的二进制表示的32个二进制位中包含2个二进制的1,并且所有32个位的二进制数执行逻辑或操作的结果为1,相应地,比较器xk输出的信号或信息validk可以为1。或门元件的数量可以取决于电路单元uk的寄存器reg2的位数、所采用的或门元件的输入端的数量和或门元件的布置方式。

如图4所示,每对比较器xk和xnk的输出端还可以分别耦接到检测器ak的两个输入端,并且将检测器ak的输出端耦接到电路单元uk的控制端inc_c。例如,比较器x1和xn1的输出端还可以分别耦接到检测器a1的两个输入端,并且将检测器a1的输出端耦接到电路单元u1的控制端inc_c。在图4的示例中,检测器ak包含一个与门元件。

在另外的实施例中,检测器ak可以包括诸如cc14585或74ls85这样的集成数值比较器。在该实施例中,ak可以在所接收的两个数据相同或者均大于0的情况下向电路单元uk的控制端inc_c提供有效的控制信号,由此实现与与门元件相当的功能。

在另外的实施例中,检测器ak可以包括例如二选一类型的多路选择器(或多路开关)。例如,可以将比较器xk的输出端耦接到ak的控制端,将比较器xnk的输出端耦接到ak的与有效的控制信号相对应的输入端,将0提供给ak的与无效的控制信号相对应的输入端,并且将ak的输出端耦接到电路单元uk的控制端inc_c,由此实现与与门元件相当的功能。

通过比较器xk和xnk以及检测器ak,控制逻辑电路con能够在电路单元uk的寄存器reg1中的数据与经由电路模块的输入端val_in接收到的数据相同并且电路单元uk的寄存器reg2中的数据不等于0的情况下,向电路单元uk的控制端inc_c提供有效的控制信号。

例如,如果电路模块经由输入端val_in接收到数据v1,并且电路单元u2的寄存器reg1和reg2中的数据分别为v1和3,则比较器x2输出的valid2为1(即,u2的reg2中的数据不等于0),并且比较器xn2输出的match2为1(即,u2的reg1中的数据与v1相同)。检测器a2在接收到两个均为1的输入的情况下,输出有效的控制信号(例如,1)。相应地,电路单元u2的寄存器reg2中的数据3在通过累加器inc处理之后成为4。

在另外的实施例中,检测器ak还可以包括信号生成器(未示出),以便在电路单元uk的寄存器reg1中的数据与经由电路模块的输入端val_in接收到的数据相同并且电路单元uk的寄存器reg2中的数据不等于0的情况下生成有效的控制信号,例如满足一定电压值要求或者频率要求的信号。在另外的实施例中,这样的信号生成器可以独立于检测器ak地设置在检测器ak与电路单元uk的控制端inc_c之间。

控制逻辑电路con中用于生成针对每个电路单元uk的控制端inc_c的控制信号的部分可以不局限于图4中的示例中的方式。在另外的实施例中,例如,控制逻辑电路con可以包括处理器和计数器。处理器可以被配置为轮流地检测每个电路单元uk的寄存器reg1和reg2中的数据,并且在电路单元uk的寄存器reg1中的数据与经由电路模块的输入端val_in接收到的数据相同并且电路单元uk的寄存器reg2中的数据不等于0的情况下,向电路单元uk的控制端inc_c提供有效的控制信号,以使电路单元uk的寄存器reg2中的数据的值增加1。计数器可以是从1到n的循环计数器,并且可以包括寄存器,用于标识处理器当前正在检测的电路单元uk。

如图4所示,控制逻辑电路con还可以包括检测器nor。检测器nor的输入端可以分别耦接到每个比较器xnk,并且检测器nor的输出端可以耦接到每个电路单元uk的控制端val_c和cnt_c。检测器nor可以被配置为在来自每个比较器xnk的输出信号或信息matchk均为0(即,每个电路单元uk的寄存器reg1中的数据均不同于经由电路模块的输入端val_in接收到的数据)的情况下,生成有效的控制信号,并且将所生成的有效的控制信号提供到每个电路单元uk的控制端val_c和cnt_c。

在图4的示例中,检测器nor可以包括或非门元件,其中,该或非门元件的每个输入端分别耦接到比较器xnk的输出端,并且该或非门元件的输出端耦接到每个电路单元uk的控制端val_c和cnt_c。在另外的实施例中,检测器nor还可以包括信号生成器(未示出),以便基于或非门元件的输出生成有效的控制信号,例如满足一定电压值要求或者频率要求的信号。在另外的实施例中,这样的信号生成器可以独立于检测器nor地设置在检测器nor与电路单元uk的控制端val_c和cnt_c之间。

当每个电路单元uk的控制端val_c和cnt_c接收到来自控制逻辑电路con的有效的控制信号时,电路单元u1分别使用来自电路模块的输入端val_in和cnt_in的数据来替换电路单元u1的寄存器reg1和reg2中的数据,并且每个电路单元uk将相应的寄存器reg1和reg2中的数据传递给下一个电路单元uk+1。例如,电路单元u1将其寄存器reg1和reg2中的旧数据提供给u2,并且将旧数据替换为新数据;电路单元u2将其寄存器reg1和reg2中的数据提供给u3,并使用来自电路单元u1的数据来更新数据;以此类推。

在图4的示例中,控制逻辑电路con还可以包括检测器and1和控制开关sw,以控制是否输出电路单元un的寄存器reg1和reg2中的数据。

如图4所示,检测器and1的两个输入端可以分别耦接到检测器nor的输出端和比较器xn的输出端,并且可以在两个输入端的数据均为1(即,每个电路单元uk的寄存器reg1中的数据均不同于经由输入端val_in接收到的数据,并且电路单元un的寄存器reg2中的数据不等于0)的情况下输出有效的控制信号update_valid。在一个实施例中,检测器and1可以包括与门元件。

开关sw可以带有控制端,并且开关sw的控制端可以耦接到检测器and1的输出端。另外,开关sw的两个输入端分别耦接到电路单元un的输出端val_o和cnt_o,并且开关sw的两个输出端分别耦接到电路模块的输出端val_out和cnt_out。开关sw可以在其控制端接收到有效的控制信号update_valid的情况下,将电路单元un的输出端val_o与电路模块的输出端val_out导通,并且将电路单元un的输出端cnt_o与电路模块的输出端cnt_out导通,否则断开电路单元un的输出端val_o与电路模块的输出端val_out之间的连接以及电路单元un的输出端cnt_o与电路模块的输出端cnt_out之间的连接。

由此,控制逻辑电路con可以在每个电路单元uk的寄存器reg1中的数据均不同于经由输入端val_in接收到的数据并且电路单元un的寄存器reg2中的数据不等于0的情况下,输出电路单元un的寄存器reg1和reg2中的数据。

在一个实施例中,开关sw可以包括多个晶体管,其中,一个晶体管的栅极、源极和漏极耦接到检测器and1的输出端、电路单元un的输出端val_o和电路模块的输出端val_out,另一个晶体管的栅极、源极和漏极耦接到检测器and1的输出端、电路单元un的输出端cnt_o和电路模块的输出端cnt_out,并且这些晶体管可以在其栅极接收到有效的控制信号update_valid时导通。在另外的实施例中,开关sw也可以包括一个或多个多路选择器或多路开关。

在另外的实施例中,控制逻辑电路con还可以将检测器and1输出的控制信号update_valid提供到控制逻辑电路con的外部。

图5示出根据本公开的实施例的电路模块的另一个示例。下面描述图5的示例与图4的示例的不同之处,而对于两个示例中的相同之处不再赘述。

与图4中的示例不同,在图5所示的示例中,统计电路阵列arr中的每个电路单元uk的输入端val_i和cnt_i均分别耦接到电路模块的输入端val_in和cnt_i,而不是如图4所示那样地可能耦接到前一个电路单元的输出端val_o和cnt_o。

另外,在图5所示的示例中,检测器and1的多个输入端耦接到检测器nor的输出端以及每个比较器xk的输出端(而不是像图4的示例中那样地只耦接到耦接到检测器nor的输出端和比较器xn的输出端)。这意味着,在图5所示的示例中,当每个电路单元uk的寄存器reg1中的数据均不同于经由输入端val_in接收到的数据时,检测器and1只有在每个电路单元uk的寄存器reg2中的数据均不等于0(而不是像图4的示例中那样地只考虑un的寄存器reg2中的数据)的情况下才输出有效的控制信号update_valid。

如上所述,在图4的示例中,固定地选择电路单元un的寄存器reg1和reg2中的数据作为输出对象,并且可以相对简单地采用开关sw来控制输出。然而,与图4的示例不同,在图5的示例中,需要在每个电路单元uk的寄存器reg1中的数据均不同于经由输入端val_in接收到的数据并且检测器and1只有在每个电路单元uk的寄存器reg2中的数据均不等于0的情况下,从所有的电路单元u1至un中选择一个电路单元uj(1≤j≤n),并将电路单元uj的寄存器reg1和reg2中的数据输出。

相应地,控制逻辑电路con可以包括选择器us1、多路选择器vsel和多路选择器csel。选择器us1的控制端可以耦接到检测器and1的输出端,并且在其控制端接收到来自检测器and1的有效的控制信号update_valid的情况下从1至n中选择j。多路选择器vsel的控制端可以耦接到选择器us1的输出端,多路选择器vsel的多个输入端可以分别耦接到每个电路单元uk的输出端val_o,并且多路选择器vsel的输出端可以耦接到电路模块的输出端val_out,使得多路选择器vsel可以响应于在其控制端接收到来自选择器us1的j值,输出电路单元uj的寄存器reg1中的数据。多路选择器csel的控制端可以耦接到选择器us1的输出端,多路选择器csel的多个输入端可以分别耦接到每个电路单元uk的输出端cnt_o,并且多路选择器csel的输出端可以耦接到电路模块的输出端cnt_out,使得多路选择器csel可以响应于在其控制端接收到来自选择器us1的j值,输出电路单元uj的寄存器reg2中的数据。

在一个实施例中,选择器us1可以耦接到每个电路单元uk的输出端cnt_o,并且可以包含一个或多个比较器(例如,诸如cc14585或74ls85这样的集成数值比较器)。在该实施例中,比较器可以比较每个电路单元uk的寄存器reg2中的数据并且从1到n中确定j,使得电路单元uj的寄存器reg2中的数据的值在所有的电路单元u1至un的寄存器reg2中的数据的值之中是最大的或最小的。

在另外的实施例中,选择器us1可以包含随机数生成器(例如,基于物理过程生成随机数字的真随机数生成器),以生成1至n之间的随机数j。

在另外的实施例中,选择器us1可以固定地选择1至n之间的一个数值j(例如,n),并且固定地将j传递给多路选择器vsel和csel,使得多路选择器vsel和csel固定地选择uj的寄存器reg1和reg2中的数据进行输出。在这样的情况下,选择器us1、多路选择器vsel和csel可以简化为例如与图4的示例中的开关sw相似的形式,并且可以使开关sw的两个输入端分别耦接到uj的输出端val_o和cnt_o。

例如,如果固定地选择usn,则可以将图5中的选择器us1、多路选择器vsel和csel简单地实现成图4中的开关sw的形式。因此,图4的示例中的控制逻辑电路con可以被视为图5的示例中的控制逻辑电路con的一种简化形式,并且另一方面,图4的示例中的控制逻辑电路con中的开关sw也可以采用例如图5的示例中的选择器us1、多路选择器vsel和csel的组合的形式。

另外,在图5的示例中,控制逻辑电路con还可以包括信号控制器scon。信号控制器scon接收从选择器us1输出的值j,将有效的控制信号提供电路单元uj的控制端val_c和cnt_c,并且将无效的控制信号提供给其他电路单元的控制端val_c和cnt_c,使得电路单元uj能够使用来自电路模块的输入端cnt_in和val_in的数据来更新相应的寄存器reg1和reg2中的数据,同时维持其他电路单元的的寄存器中的数据不变。

在一个实施例中,信号控制器scon可以包括例如n个二选一类型的多路选择器(未示出,与有效的控制信号相对应的一个输入端可以耦接到有效的信号,另一个输入端可以耦接到无效的信号),其中,每个多路选择器的输出端可以耦接到对应的电路单元uk的控制端val_c和cnt_c,并且每个多路选择器可以在经由相应的控制端接收到的控制信号所指示的信息(例如,数字j)与该多路选择器的编号相同(这样的判断例如可以借助于逻辑电路来实现)时输出有效的控制信号,否则输出无效的控制信号。

另外,在图5的示例中,控制逻辑电路con还可以包括检测器na、检测器and2和选择器us2。

检测器na的多个输入端分别耦接到每个比较器xk的输出端,并且在validk不全为1(即,存在一个电路单元的寄存器reg2的数据等于0)的情况下输出有效的信号。在一个实施例中,检测器na可以包含与非门元件。

检测器and2的两个输入端分别耦接到检测器na的输出端和检测器nor的输出端,并且在所接收的两个输入数据均为1(即,每个电路单元uk的寄存器reg1中的数据均不同于经由电路模块的输入端val_in接收到的数据,并且存在一个电路单元的寄存器reg2的数据等于0)的情况下输出有效的信号。在一个实施例中,检测器and2可以包含与非门元件。

选择器us2的实现方式可以与选择器us1相似。不同之处在于,选择器us2需要从相应的寄存器reg2中的数据等于0的电路单元(而不是所有的电路单元)中选择一个电路单元uj。为此,选择器us2中的逻辑电路或多路选择器还可以耦接到每个比较器xk的输出端或者每个电路单元uk的输出端。然后,选择器us2可以从满足上述条件的所有电路单元中选择(例如,在一个实施例中,借助于随机数生成器随机地选择)一个电路单元uj,该电路单元uj的寄存器reg2中的数据等于0并且寄存器reg1中的数据也不同于经由电路模块的输入端val_in接收的数据。然后,选择器us2可以将与所选择的电路单元uj有关的信息(例如,编号j)传送给信号控制器scon。

在另外的实施例中,选择器us2也可以包括计数器。例如,可以将计数器的初始值设置为0。当电路模块经由输入端val_in接收到数据时,如果所有的match1至matchn均为0并且valid1至validn中至少一个为0,即,如果检测器and2输出1,则计数器的计数值可以加1,并将当前的计数值传递给信号控制器scon。在该实施例中,电路单元u1至un将依次地被用于存储有效的数据。在另外的实施例中,计数器也可以从大至小地进行计数,并且在该实施例中,电路单元un至u1将依次地被用于存储有效的数据。

信号控制器scon在接收到来自选择器us2的输出值j时,将有效的控制信号提供电路单元uj的控制端val_c和cnt_c,并且将无效的控制信号提供给其他电路单元的控制端val_c和cnt_c,使得电路单元uj能够使用来自电路模块的输入端cnt_in和val_in的数据来更新相应的寄存器reg1和reg2中的数据,同时维持其他电路单元的的寄存器中的数据不变。

由于检测器na和and1不会同时输出1,所以选择器us2和us1不会同时发挥作用。也就是说,选择器us1和us2分别在不同的情况下向信号控制器scon的控制端发送关于j的信号或信息,而不会产生冲突。因此,虽然图5中示出选择器us1和us2分别耦接到信号控制器scon的不同的端子,但是信号控制器scon的这两个端子将不会同时接收到有效的控制信号。因此,在一个实施例中,信号控制器scon可以设置一个控制端,并且可以将选择器us1和us2的输出端均耦接到该控制端。

图6示出根据本公开的实施例的电路模块的另一个示例。在该示例中,统计电路阵列arr只包括一个电路单元u,并且控制逻辑电路con可以只包括与该电路单元u相对应的一对比较器xu和xnu以及一个检测器au,其中,与图4或图5中的示例相似地,比较器xnu的两个输入端可以分别接收来自电路单元u的输出端val_o和电路模块的输入端val_in的数据,并且比较器xnu的输出信号matchu可以在两个输入数据相同的情况下为有效的信号(例如,为1),而在不相同的情况下为无效的信号(例如,为0);比较器xu的输入端可以耦接到电路单元u的输出端cnt_o,并且其输出信号validu可以在电路单元u的寄存器reg2中的数据不等于0的情况下有效(例如,为1),而在电路单元u的寄存器reg2中的数据等于0的情况下无效(例如,为0);检测器au的两个输入端可以分别耦接到比较器xu和xnu的输出端,并且其输出端可以耦接到电路单元u的控制端inc_c,并且可以在所接收到的两个输入信号均有效(例如,均为1)的情况下输出有效的控制信号,否则输出无效的控制信号。

因为图6的示例中的统计电路阵列arr只包括一个电路单元u,所以在图4或图5的示例中的检测器nor用非门元件或反相器n替代或者可以包括非门元件或反相器n,并且控制逻辑电路con中用于控制是否输出电路单元u的寄存器reg1和reg2中的数据的电路部分可以采用图4的示例中的简单形式。

图6实际上是图4或图5中的示例在一种简单情况下的实现方式的示例。

虽然图4至图6的示例中的控制逻辑电路con中的各个比较器和检测器被示为单个的逻辑门元件(例如,在图4至图6中,采用ieee推荐的逻辑门符号来表示),但是每个元件只是用于表示相应的比较器或检测器所有实现的基本功能或者在一个实施例中的相应的比较器或检测器所包括的基本元件,而不意味着,这些比较器和/或检测器必须只包括一个逻辑门元件或者必须采用那样的逻辑门元件来实现。另外,图4至图6的示例中的各个多路选择器(或多路开关)和开关sw(一种简单形式的多路选择器)可以通过一个或多个逻辑门元件来实现,也可以通过一个或多个例如晶体管等带有控制端的电子开关来实现,也可以通过一个或多个诸如74ls153、74ls151等多路选择器来实现。另外,选择器us1和/或us2可以是包括多路选择器和/或一个或多个逻辑门元件实现的表决电路,并且可以包括随机数生成器。

例如,在图4至图6的示例中,统计电路阵列arr中的每个电路单元的寄存器reg2中的数据可以在电路模块接收到n个(其中,在图6的示例中,n=1)互不相同的解析数据之后都不再等于0。也就是说,与任何一个电路单元uk(1≤k≤n)相对应的信号validk可以只有在初期阶段才有可能为0,在该初期阶段,电路模块接收并统计了少于n个的不同的解析数据(即,至少一个电路单元的reg2中的数据为0)并且不会经由输出端val_out和cnt_out输出任何数据;而在经过该初期阶段之后的任何一个时间点,所有的信号valid1至validn可以均不为0。

因此,在一个实施例中,控制逻辑电路con可以包括计数器,该计数器可以从1到n进行计数,并且相应的计数值可以只在所有的信号match1至matchn均不为0时才加1。控制逻辑电路con可以在计数器的值小于或等于n的情况下不经由输出端val_out和cnt_out输出任何数据,并且在计数器的值大于n并且在所有的信号match1至matchn均不为0时的情况下经由输出端val_out和cnt_out输出电路单元un的寄存器reg1和reg2中的数据。

在该实施例中,可以不必设置图4至图6中的比较器x1至xn或xu,并且检测器a1至an或au可以检测计数器的当前值以及match1至matchn或者matchu的信号值。检测器and1可以只接收检测器nor的输出值和计数器的当前值,并且可以在计数器的当前值大于n并且检测器nor输出1时输出有效的控制信号update_valid。另外,在图5的示例中可以不必设置检测器na和and2,并且可以采用图4的示例中的简单的开关sw来实现选择器us1和多路选择器usel和csel的功能。应当理解,该实施例中的计数器的计数方式(包括计数的初始值、最大值等)可以不局限于上述示例。

在另外的实施例中,也可以设置标志位寄存器,该标志位寄存器可以是具有至少n个位的寄存器,可以选择其中的n个位,并且使所选择的每个位分别对应于一个电路单元uk。例如,最右边的位对应于电路单元u1,右边第二位对应于电路单元u2,以此类推。可以根据需要任意地设置标志位寄存器中的各个位与各个电路单元uk之间的对应关系。

可以先将标志位寄存器的各个位均设置为0。然后,当一个电路单元uk存储了有效的数据时,可以将标志位寄存器中与uk相对应的位设置为1。由此,可以简单方便地记录与每个电路单元uk相关的validk信号的值。

在该实施例中,可以不必设置检测器x1至xn或xu,并且检测器a1至an或au中的每一个可以接收来自检测器xn1至xnn或xu中的对应的一个的输出以及该标志位寄存器的输出flags。例如,检测器ak可以输出(flags&(1<<k))&&matchk的结果,其中,&表示按位与运算,<<表示向左移位,1<<k表示将1的二进制表示向左移k位,&&表示逻辑与判断。

另外,在该实施例中,信号控制器scon可以根据标志位寄存器中的值flags来方便地确定是否每个电路单元uk的寄存器reg2中的数据均不为0,并且可以简单方便地确定并选择出相应地寄存器reg2中的数据为0的电路单元uj。相应地,可以不必设置检测器na、and和选择器us2,并且检测器and1可以不必接收信号valid1至validk,而是根据检测器nor的输出以及标志位寄存器中的值来决定是否输出有效的控制信号update_valid。

应当理解,根据本公开的实施例的控制逻辑电路con的实现方式可以不局限于图4至图6中的示例。

在实际的应用中,可以向如图3至图6中的任一个所示的电路模块的输入端val_in提供输入数据(例如来自解析器的一条解析数据或者来自另一个电路模块的输出端val_out的数据),并且向输入端cnt_in提供初始计数值(例如,1或者来自另一个电路模块的输出端cnt_out的数据)。

图7和图8示出根据本公开的实施例的用于数据统计的装置的示例。

在图7所示的装置中包括一个如图4至图6中的任一个所示的电路模块sc,该电路模块sc的输入端val_in和cnt_in可以分别接收输入数据val_new和常数值1。

在图8所示的装置中包括串联在一起的多个如图4至图6中的任一个所示的电路模块sc1、sc2、……、scn,其中,除sc1之外的每个电路模块(例如,sc2)的输入端val_in和cnt_in可以分别耦接到该电路模块的前一个电路模块(例如,sc1)的输出端val_out和cnt_out,而电路模块sc1的输入端val_in和cnt_in可以分别接收输入数据val_new和常数值1。

如图7或图8所示,该装置还可以包括更新电路upc。更新电路upc的两个输入端可以分别耦接到最后一个电路模块(在本文中也称为最后电路模块,例如,图7中的sc或者图8中的scn)的输出端val_out和cnt_out,以接收数据val_update和cnt_update。

如前文所述,控制逻辑电路con的update_valid也可以提供到控制逻辑电路con的外部。相应地,在一个实施例中,可以将图7中的sc或图8更新电路upc能够只在检测到或接收到有效的update_valid信号时才处理所接收的val_update和cnt_update。

另外,如图7或图8所示,该装置还可以包括解析器par和/或存储器mem。

解析器par可以对要统计的输入数据流data_flow进行解析,并且将所生成的每条解析数据val_new提供sc或sc1。例如,如果data_flow是图像数据流,则解析器par可以从该图像数据流中解析出图像的一个或多个维度的信息,例如图像中像素点的亮度值、颜色值,像素点所属的子图编号以及多种信息的组合。例如,如果要统计的图像被图像处理算法划分成4行3列共12个子图,则解析器par可以得到每个像素点所在的子图的编号(例如,可以用4比特表示)。进一步地,解析器par可以结合像素点自身的色彩信息(例如,rgb或yuv),来生成要统计的像素信息对象作为解析数据val_new。例如,可以用12比特来表示解析数据,其中,用4个比特表示该像素所属的子图的编号,并且用另外的8个比特表示像素的灰度值。例如,如果对于处于第2行第0列的子图(例如,编号为7)中并且灰度值为250的像素,相应的解析数据可以(7,250)或者(2,0,250)。

应当理解,解析数据val_new的类型、表示方式等不局限于上述示例。相应地,提供给解析器par的数据流data_flow也不局限于图像数据流,并且解析器par中的处理过程和输出也不局限于上述示例。在另外的实施例中,解析器par可以在该装置的外部,并且通过例如i/o接口向该装置提供数据。

存储器mem可以通过接口与更新电路upc耦接在一起,并且可以接收来自更新电路upc的读地址信息r_addr并将所存储的与数据val_update相关的旧统计值old_cnt返回给更新电路upc,另外,还可以根据来自更新电路upc的写地址w_addr和与数据val_update相关的新统计值new_cnt来更新所存储的与数据val_update相关的统计值。存储器mem可以是采用sram或dram等任何技术实现的任何类型的存储器,并且可以包括一个或多个例如sram模块。在另外的实施例中,存储器mem可以在该装置的外部,并通过该装置的i/o接口与该装置进行通信。

图9示出图7或图8中的更新电路upc的示例。

如图9所示,更新电路upc可以包括地址计算器addr_cal和加法器(在图9中用“+”表示)。

地址计算器addr_cal的输入端可以接收val_update,可以根据val_update计算出val_update在存储器mem中的存储位置的地址,并且可以将所计算出的读地址发送给存储器mem,以对存储器mem产生读逻辑。

加法器可以接收cnt_update,并且可以接收存储器mem返回的与val_update有关的旧统计值old_cnt,然后将cnt_update和old_cnt相加并先得到与val_update有关的新统计值new_cnt。然后,更新电路upc可以将写地址w_addr(可以与读地址r_addr相同)和加法器所计算出的新统计值new_cnt发送给存储器mem,从而产生针对存储器mem的写逻辑。

假设在存储器mem内部从获得读地址r_addr到开始输入旧统计值old_cnt的延时(例如,周期数)为m,将旧统计值old_cnt从存储器mem发送到更新电路upc的延时为q,加法器的计算所导致的延时为c,将新统计值new_cnt和写地址w_addr发送到存储器mem的延时为w,则可以使耦接在解析器与更新电路upc之间的所有电路模块sc或者sc1至scn中的所有统计电路阵列中的所有电路单元的数量大于或等于m+q+c+w-1,以确保数据更新的正确性,例如确保每次从存储器mem中读取的旧统计值old_cnt一定是先前已经被正确更新的统计结果。

在存储器mem不支持同时对同一地址进行读操作和写操作两者的情况下,所有电路单元的数量可以大于m+q+c+w-1。例如,在存储器mem没有读写路径延时(或者读写路径延时可以忽略不计)的情况下,如果存储器mem能够在一个周期返回所读取的数据,并且不支持同一时刻对同一地址进行读操作和写操作两者,则所有电路单元的数量只要大于c(即更新电路upc中的加法器的延时)即可。

相应地,在根据本公开的实施例的装置中所需的寄存器的数量只要大于或等于2*(m+q+c+w-1)或者大于2c即可,而不必针对所有统计的每个数据均设置相应的寄存器,由此能够极大程度地减少所需的寄存器的数量,从而极大地降低硬件成本并减少功耗。

为了使数据的读取、计算和存储等能够协调动作并确保数据更新的正确性,如图9所示,更新电路upc还可以包括延时元件d1、d2、d3和d4,其中,延时元件d1和d2可以串联地耦接在地址计算器addr_cal与存储器mem之间,延时元件d3和d4可以串联地耦接在最后一个电路模块sc或scn的输出端cnt_out与加法器之间。

延时元件d3可以将所接收的cnt_update延时a个周期,以便与地址计算器addr_cal中的处理所导致的延时a相匹配。延时元件d1和d4可以将所接收的数据在延时b个周期之后输出,b可以等于r+m+q,其中,r代表将读地址r_addr发送到存储器mem的延时。延时元件d2可以将来自延时元件d1的与存储器mem的写逻辑相关的地址信息(w_addr)延时c个周期,以便与加法器中的处理所导致的延时c相匹配。

在另一个实施例中,可以使用一个延时元件代替延时元件d1和d2两者,并且可以使用另一个延时元件代替代延时元件d3和d4两者。在另外的实施例中,延时元件d1和d2中的一者或两者可以包括在地址计算器addr_cal中,并且延时元件d3和d4中的一者或两者可以包括在加法器中。在另外的实施例中,也可以通过软件的方式来控制数据传输过程中的延时,在该实施例中可以不必设置延时元件。

从一对val_update和cnt_update进入到更新电路upc开始至读取到val_update在存储器mem中的旧统计值old_cnt为止所需的周期数为a+r+m+q,并且从一对val_update和cnt_update进入到更新电路upc开始至将新统计值new_cnt更新到存储器mem中为止所需的周期数为a+b+c+w=a+r+m+q+c+w。

图10和图11示出根据本公开的实施例的用于数据统计的装置的工作过程的示例。

在图10的示例中,装置包括一个用于数据统计的电路模块,该电路模块包括6个用于数据统计的电路单元u1至u6,并且6个电路单元以图4中的示例的方式串联在一起(即,图4的示例中的n=6),并且u1至u6中的每一个用上下相邻的两个方框来表示,上面的方框代表相应的电路单元的寄存器reg1,下面的方框代表相应的电路单元的寄存器reg2。当寄存器reg2中的数据(即,统计值)为0时,对应的寄存器reg1中的数据可以是与任何一个解析数据均不相同的特殊的无效数据x。v1至v7表示互不相同的有效的解析数据。

最初,电路单元u1至u6中的每一个均未存储有效的解析数据及相应的统计值,因此所有的电路单元的寄存器reg2中的数据均为0。

在图10的示例中,首先向装置提供解析数据val_new=v6。此时,valid1至valid6均为0(即,所有的电路单元u1至u6的寄存器reg2中的数据均为0,相应地,所有的电路单元u1至u6的寄存器reg1和reg2中的数据均为无效数据),同时match1至match6也均为0。因此,控制逻辑电路con向电路单元u1至u6中的每一个提供有效的val_c信号、有效的cnt_c信号和无效的inc_c信号,使得电路单元u1在相应的寄存器reg1中存储解析数据v6,并且在相应的寄存器reg2中存储统计值1。

电路单元u1至u5中的每一个分别将相应的寄存器reg1和reg2中的无效数据传递给对应的后一个电路单元,例如,u1将原来存储在u1的寄存器reg1和reg2中的无效的数据对(x,0)传递给u2,u2将原来存储在u2的寄存器reg1和reg2中的无效的数据对(x,0)传递给u3,以此类推。由于控制逻辑电路con检测到电路单元u6中的数据为无效数据(valid6=0),因此控制信号update_valid=0。相应地,控制逻辑电路con将不会在输出端val_out和cnt_out输出电路单元u6中的无效的数据对(x,0)。

然后,向装置提供解析数据val_new=v5。此时,控制逻辑电路con检测到valid1=1,valid2至valid6均为0,match1至match6均为0。因此,控制逻辑电路con向电路单元u1至u6中的每一个提供有效的val_c信号、有效的cnt_c信号和无效的inc_c信号,使得电路单元u1将先前存储的有效的数据对(v6,1)传递给电路单元u2,并且在相应的寄存器reg1中存储解析数据v5,并且在相应的寄存器reg2中存储统计值1。此时,电路单元u6中的数据仍为无效数据(valid6=0),因此控制信号update_valid仍然为0。相应地,控制逻辑电路con仍不会在输出端val_out和cnt_out输出电路单元u6中的无效的数据对(x,0)。

在处理了6个(与所包括的电路单元的数量相同)不同的解析数据之后,每个电路单元均将存储有效的数据,即任何一个电路单元的寄存器reg1中的数据均为有效数据,并且任何一个电路单元的寄存器reg2中的数据均不为0,在此之后,在图10的示例中的valid1至valid6将变成总是为1。

在图10的示例中,在电路单元u1至u6分别存储有效的数据对(v1,2)、(v2,3)、(v3,1)、(v4,2)、(v5,4)和(v6,4)的情况下,将val_new=v4提供给该装置。此时,控制逻辑电路con可以检测到match4=1,而其他的match1至match3以及match5和match6均为0,即,电路单元u4的寄存器reg1中存储的数据与val_new相同。于是,控制逻辑电路con向电路单元u4的控制端提供无效的val_c信号、无效的cnt_c信号和有效的inc_c信号,并且向其他的电路单元提供无效的val_c信号、无效的cnt_c信号和无效的inc_c信号,使得电路单元u4的reg2中的数据的值加1,从而在电路单元u4中存储的有效的数据对从(v4,2)变成(v4,3),而其他电路单元中存储的数据保持不变。

同时,虽然valid6=1,但是由于match4=1,所以控制信号update_valid仍然为0。相应地,控制逻辑电路con不会在输出端val_out和cnt_out输出电路单元u6中的数据对(v6,4)。

然后,装置接收到解析数据val_new=v6。与先前的val_new=v4的情况相似地,控制逻辑电路con可以检测到match6=1,而其他的match1至matchmatch5均为0,,即,电路单元u6的寄存器reg1中存储的数据与val_new相同。于是,控制逻辑电路con向电路单元u6的控制端提供无效的val_c信号、无效的cnt_c信号和有效的inc_c信号,并且向其他的电路单元提供无效的val_c信号、无效的cnt_c信号和无效的inc_c信号,使得电路单元u6的reg2中的数据的值加1,从而在电路单元u6中存储的有效的数据对从(v6,4)变成(v6,5),而其他电路单元中存储的数据保持不变。同时,虽然valid6=1,但是由于match6=1,所以控制信号update_valid仍然为0。相应地,控制逻辑电路con不会在输出端val_out和cnt_out输出电路单元u6中的数据对(v6,5)。

然后,装置接收到解析数据val_new=v7。此时,控制逻辑电路con可以检测到val_new=v7与电路单元u1至u6中的每一个的reg1中的数据均不相同,即match1至match6均为0。因此,控制逻辑电路con内部的控制信号update_valid在此时为1,使得开关sw导通,从而将电路单元u6中存储的数据对(v6,5)经由输出端val_out和cnt_out输出。

另一方面,控制逻辑电路con可以向电路单元u1至u6中的每一个的控制端提供有效的val_c信号、有效的cnt_c信号和无效的inc_c信号,使得电路单元u1至u6中的每一个均使用从相应的输入端val_i和cnt_i接收到的数据来更新相应的寄存器reg1和reg2中的数据。由于电路单元u1至u6串联在一起,所以结果是,电路单元u1至u5中的每一个电路单元中的数据对分别向后移位到后一个电路单元中。例如,如图10所示,原来存储在u1中的(v1,2)向后移位到u2中,原来存储在u5中的(v5,4)向后移位到u6中。同时,电路单元u1存储新的数据对(v7,1)。

响应于控制逻辑电路con经由val_out和cnt_out输出电路单元u6中原来存储的数据对(v6,5),更新电路upc开始工作。更新电路upc中的地址计算器addr_cal接收val_update=v6,并且计算出v6在存储器mem中的存储位置的地址0xkkkk,并且基于读地址r_addr(0xkkkk)产生针对存储器mem的读逻辑。存储器mem将与v6相对应的旧统计值old_cnt=6返回给更新电路upc。更新电路upc中的加法器接收来自控制逻辑电路con的统计值cnt_update=5以及来自存储器mem的旧统计值old_cnt=6,基于两者执行加法运算,并获新统计值new_cnt=5+6=11。然后,更新电路upc基于针对存储器mem产生写逻辑,并将写地址w_addr(0xkkkk)和新统计值new_cnt=11发送给存储器mem。相应地,存储器mem可以将地址0xkkkk处的内容从原来的(v6,6)更新为(v6,11)。

然后,装置接收到解析数据val_new=v6。由于此时在电路单元u1至u6中没有与v6相同的数据,所以与装置先前接收到解析数据v7时相似地,控制逻辑电路con可以检测到val_new=v6与电路单元u1至u6中的每一个的reg1中的数据均不相同,即match1至match6均为0。因此,控制逻辑电路con内部的控制信号update_valid在此时为1,使得开关sw导通,从而将电路单元u6中存储的数据对(v5,4)经由输出端val_out和cnt_out输出。另一方面,控制逻辑电路con可以向电路单元u1至u6中的每一个的控制端提供有效的val_c信号、有效的cnt_c信号和无效的inc_c信号,使得电路单元u1至u6中的每一个均使用从相应的输入端val_i和cnt_i接收到的数据来更新相应的寄存器reg1和reg2中的数据。由于电路单元u1至u6串联在一起,所以结果是,电路单元u1至u5中的每一个电路单元中的数据对分别向后移位到后一个电路单元中。例如,如图10所示,原来存储在u1中的(v7,1)向后移位到u2中。同时,电路单元u1存储新的数据对(v6,1)。

响应于控制逻辑电路con经由val_out和cnt_out输出电路单元u6中原来存储的数据对(v5,4),更新电路upc开始工作,并基于该数据对来更新存储器mem中位于0xyyyy处的与v5相关的内容。

在图11的示例中,装置包括一个用于数据统计的电路模块,该电路模块包括用于数据统计的6个电路单元,并且6个电路单元以图5中的示例的方式并联在一起(即,图5的示例中的n=6)。与图10的示例相似地,在图11中,u1至u6中的每一个也使用上下相邻的两个方框来表示,上面的方框代表相应的电路单元的寄存器reg1,下面的方框代表相应的电路单元的寄存器reg2。同样地,当寄存器reg2中的数据(即,统计值)为0时,对应的寄存器reg1中的数据可以是与任何一个解析数据均不相同的特殊的无效数据x。v1至v7表示互不相同的有效的解析数据。另外,与图10中的示例相同地,最初,电路单元u1至u6中的每一个均未存储有效的解析数据及相应的统计值,因此所有的电路单元的寄存器reg2中的数据均为0。

在图11的示例中,首先向装置提供解析数据val_new=v4。此时,valid1至valid6均为0(即,所有的电路单元u1至u6的寄存器reg2中的数据均为0,相应地,所有的电路单元u1至u6的寄存器reg1和reg2中的数据均为无效数据),同时match1至match6也均为0。控制逻辑电路con从电路单元u1至u6中选择(例如,随机地)电路单元u4,并且向电路单元u4提供有效的val_c信号、有效的cnt_c信号和无效的inc_c信号,并向其他的电路单元提供无效的val_c信号、无效的cnt_c信号和无效的inc_c信号,使得电路单元u4在相应的寄存器reg1中存储解析数据v4,并且在相应的寄存器reg2中存储统计值1,而其他电路单元的寄存器中的数据仍然是无效数据。相应地,控制逻辑电路con可以产生无效的控制信号update_valid,从而不会在输出端val_out和cnt_out输出任何数据。

然后,向装置提供解析数据val_new=v6。此时,控制逻辑电路con检测到val_new与每个电路单元的寄存器reg1中的数据均不相同,并且除了电路单元u4之外的其他所有电路单元的寄存器reg2中的数据仍为0。于是,控制逻辑电con例如通过选择器us2从除了电路单元u4之外的其他所有电路单元中选择(例如,随机地)电路单元u6,并且向电路单元u6提供有效的val_c信号、有效的cnt_c信号和无效的inc_c信号,并向u6之外的其他所有电路单元提供无效的val_c信号、无效的cnt_c信号和无效的inc_c信号,使得电路单元u6在相应的寄存器reg1中存储解析数据v6,并且在相应的寄存器reg2中存储统计值1。由于电路单元u1、u2、u3和u5中的数据仍为无效数据,所以控制逻辑电路con仍然产生无效的控制信号update_valid,从而不会在输出端val_out和cnt_out输出任何数据。

在处理了6个(与所包括的电路单元的数量相同)不同的解析数据之后,每个电路单元均将存储有效的数据,即任何一个电路单元的寄存器reg1中的数据均为有效数据,并且任何一个电路单元的寄存器reg2中的数据均不为0,在此之后,在图10的示例中的valid1至valid6将变成总是为1。

在图11的示例中,在电路单元u1至u6分别存储有效的数据对(v1,2)、(v2,3)、(v3,1)、(v4,2)、(v5,4)和(v6,4)的情况下,将val_new=v4提供给该装置。此时,控制逻辑电路con可以检测到match4=1,而其他的match1至match3以及match5和match6均为0,即,电路单元u4的寄存器reg1中存储的数据与val_new相同。于是,控制逻辑电路con向电路单元u4的控制端提供无效的val_c信号、无效的cnt_c信号和有效的inc_c信号,并且向其他的电路单元提供无效的val_c信号、无效的cnt_c信号和无效的inc_c信号,使得电路单元u4的reg2中的数据的值加1,从而在电路单元u4中存储的有效的数据对从(v4,2)变成(v4,3),而其他电路单元中存储的数据保持不变。此时,由于match4=1,所以控制信号update_valid为0。相应地,控制逻辑电路con不会在输出端val_out和cnt_out输出任何数据。

然后,装置接收到解析数据val_new=v6。与先前的val_new=v4的情况相似地,控制逻辑电路con可以检测到match6=1,而其他的match1至matchmatch5均为0,,即,电路单元u6的寄存器reg1中存储的数据与val_new相同。于是,控制逻辑电路con向电路单元u6的控制端提供无效的val_c信号、无效的cnt_c信号和有效的inc_c信号,并且向其他的电路单元提供无效的val_c信号、无效的cnt_c信号和无效的inc_c信号,使得电路单元u6的reg2中的数据的值加1,从而在电路单元u6中存储的有效的数据对从(v6,4)变成(v6,5),而其他电路单元中存储的数据保持不变。此时,由于match6=1,所以控制信号update_valid为0。相应地,控制逻辑电路con不会在输出端val_out和cnt_out输出任何数据。

然后,装置接收到解析数据val_new=v7。此时,控制逻辑电路con可以检测到val_new=v7与电路单元u1至u6中的每一个的reg1中的数据均不相同,即match1至match6均为0。控制逻辑电路con使内部的控制信号update_valid在此时为1。相应地,控制逻辑电路con从u1到u6中选择(例如,随机地)电路单元u6,并将u6中存储的数据对(v6,5)经由输出端val_out和cnt_out输出,然后将v7和1分别存储到电路单元u6的寄存器reg1和reg2中。

响应于控制逻辑电路con经由val_out和cnt_out输出电路单元u6中原来存储的数据对(v6,5),更新电路upc开始工作。更新电路upc中的地址计算器addr_cal接收val_update=v6,并且计算出v6在存储器mem中的存储位置的地址0xkkkk,并且基于读地址r_addr(0xkkkk)产生针对存储器mem的读逻辑。存储器mem将与v6相对应的旧统计值old_cnt=6返回给更新电路upc。更新电路upc中的加法器接收来自控制逻辑电路con的统计值cnt_update=5以及来自存储器mem的旧统计值old_cnt=6,基于两者执行加法运算,并获新统计值new_cnt=5+6=11。然后,更新电路upc基于针对存储器mem产生写逻辑,并将写地址w_addr(0xkkkk)和新统计值new_cnt=11发送给存储器mem。相应地,存储器mem可以将地址0xkkkk处的内容从原来的(v6,6)更新为(v6,11)。

然后,装置接收到解析数据val_new=v6。由于此时在电路单元u1至u6中没有与v6相同的数据,所以与装置先前接收到解析数据v7时相似地,控制逻辑电路con可以检测到val_new=v6与电路单元u1至u6中的每一个的reg1中的数据均不相同,即match1至match6均为0。控制逻辑电路con使内部的控制信号update_valid在此时为1。相应地,控制逻辑电路con从u1到u6中选择(例如,随机地)电路单元u4,并将u4中存储的数据对(v4,3)经由输出端val_out和cnt_out输出,然后将v6和1分别存储到电路单元u4的寄存器reg1和reg2中。

响应于控制逻辑电路con经由val_out和cnt_out输出电路单元u4中原来存储的数据对(v4,3),更新电路upc开始工作,并基于该数据对来更新存储器mem中位于0xyyyy处的与v4相关的内容。

在上述的示例中,假设解析器提供解析数据的频率与模块或装置中的硬件的工作频率是相匹配的,例如,用于数据统计的模块或装置接收解析数据的速率与模块或装置完成数据的统计和/或更新的速率是相同的或相近的。在另外的实施例中,解析器提供解析数据的频率和硬件的工作频率可以不相同。相应地,可以在装置中采用更多的或更少的电路单元uk。根据本公开的实施例的用于数据统计的电路单元、电路模块和装置不局限于数据流输入与硬件的工作频率之间的特定关系。

如上所述,根据本公开的实施例的用于数据统计的电路单元、电路模块和装置能够极大程度地减少所需的寄存器的数量,从而极大地降低硬件成本并减少功耗。另外,根据本公开的实施例的装置能够只在需要更新数据的情况下向存储器mem发起读写操作,从而能够避免频繁的存储器存取操作,能够极大地提高装置的整体处理效率,并且能够避免在数据统计和数据存储中可能出现的冲突或统计错误。

除非上下文清楚地另有要求,否则贯穿说明书和权利要求书,措词“包括”、“包含”等应当以与排他性或穷尽性的意义相反的包括性的意义来解释,也就是说,应当以“包括但不限于”的意义来解释。另外,措词“在本文中”、“上文”、“下文”以及相似含义的措词应当指作为整体的本公开的说明书和权利要求书,而不是本公开的任何特定部分。在上下文允许时,在使用单数或复数的以上描述中的措词也可以分别包括复数或单数。关于在提及两个或多个项目的列表时的措词“或”,该措词涵盖该措词的以下解释中的全部:列表中的任何项目,列表中的所有项目,以及列表中的项目的任何组合。另外,在本公开的说明书和权利要求书中,在同一个术语被不同的序数词“第一”、“第二”等修饰时,其旨在区分该术语所指代的不同的实体,而不是用于强调次序或重要性。

已经描述了本公开的一些实施例,但是这些实施例仅为示例,而不打算限制本公开的范围,并且可以在不脱离本公开的范围的情况下做出各种省略、替换和改变。

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