发明内容
本公开的目的是提供一种输出拖尾1所在位置的装置、输出前导1所在位置的装置、输出拖尾1所在位置的方法及输出前导1所在位置的方法,旨在降低位置输出时所需的逻辑级数,提升电路运行速度。
根据本公开的一个方面,提供一种输出拖尾1所在位置的装置,该装置包括:独热信号发生模块和位置计算模块;
独热信号发生模块用于将n位的目标二进制数转换为独热向量,独热向量中1的位置与目标二进制数中拖尾1的位置对应,n是大于1的整数;
位置计算模块用于将独热向量的每个数据位的位置信息表示为m位的第一二进制数,将独热向量的每个数据位的数值复制成m个,m个数值形成m位的第二二进制数,对独热向量的每个数据位的第一二进制数和第二二进制数执行按位与运算,得到独热向量的每个数据位的第三二进制数,对n个第三二进制数执行按位或运算,输出拖尾1在目标二进制数中的位置。
本公开一种可行的实现方式中,独热信号发生模块包括减1电路和独热信号发生电路;减1电路的输入信号为目标二进制数,减1电路对目标二进制数执行减1运算,得到减1后的二进制数;独热信号发生电路的输入信号包括目标二进制数和减1后的二进制数,独热信号发生电路对减1后的二进制数的每一位进行取反后,与目标二进制数的每一位执行与运算,得到独热向量。
本公开一种可行的实现方式中,独热信号发生模块包括减1电路和独热信号发生电路;减1电路的输入信号为目标二进制数,减1电路对目标二进制数执行减1运算,得到减1后的二进制数;独热信号发生电路的输入信号包括目标二进制数和减1后的二进制数,独热信号发生电路对减1后的二进制数的每一位与目标二进制数的每一位执行按位异或运算,并对异或运算结果与目标二进制数的当前位执行与运算,得到独热向量。
本公开一种可行的实现方式中,位置计算模块包括n个按位与电路和1个按位或电路;每个按位与电路的输入信号包括独热向量的一个数据位的数值和该数据位的位置信息,该数据位的位置信息是一个m位的二进制数,每个按位与电路将相应数据位的数值与m位的二进制数的每一位分别执行与运算,得到m位的运算结果;按位或电路的输入信号包括n个m位的运算结果,按位或电路对n个m位的运算结果执行按位或运算,得到并输出拖尾1在目标二进制数中的位置。
根据本公开的另一方面,还提供一种输出前导1所在位置的装置,该装置包括:按位倒序模块、独热信号发生模块及位置计算模块;
按位倒序模块用于对n位的目标二进制数执行按位倒序操作,得到按位倒序后的二进制数;
独热信号发生模块用于将按位倒序后的二进制数转换为独热向量,独热向量中1的位置与按位倒序后的二进制数中拖尾1的位置对应,n是大于1的整数;
按位倒序模块还用于对独热向量执行按位倒序操作,得到目标独热向量;
位置计算模块用于将目标独热向量的每个数据位的位置信息表示为m位的第一二进制数,将目标独热向量的每个数据位的数值复制成m个,m个数值形成m位的第二二进制数,对目标独热向量的每个数据位的第一二进制数和第二二进制数执行按位与运算,得到目标独热向量的每个数据位的第三二进制数,对n个第三二进制数执行按位或运算,输出前导1在目标二进制数中的位置。
本公开一种可行的实现方式中,独热信号发生模块包括减1电路和独热信号发生电路;减1电路的输入信号为按位倒序后的二进制数,减1电路对按位倒序后的二进制数执行减1运算,得到减1后的二进制数;独热信号发生电路的输入信号包括按位倒序后的二进制数和减1后的二进制数,独热信号发生电路对减1后的二进制数的每一位进行取反后,与按位倒序后的二进制数的每一位执行与运算。
本公开一种可行的实现方式中,独热信号发生模块包括减1电路和独热信号发生电路;减1电路的输入信号为按位倒序后的二进制数,减1电路对按位倒序后的二进制数执行减1运算,得到减1后的二进制数;独热信号发生电路的输入信号包括按位倒序后的二进制数和减1后的二进制数,独热信号发生电路对减1后的二进制数的每一位与按位倒序后的二进制数的每一位执行按位异或运算,并对异或运算结果与按位倒序后的二进制数的当前位执行与运算,得到独热向量。
本公开一种可行的实现方式中,位置计算模块包括n个按位与电路和1个按位或电路;每个按位与电路的输入信号包括目标独热向量的一个数据位的数值和该数据位的位置信息,该数据位的位置信息是一个m位的二进制数,每个按位与电路将相应数据位的数值与m位的二进制数的每一位分别执行与运算,得到m位的运算结果;按位或电路的输入信号包括n个m位的运算结果,按位或电路对n个m位的运算结果执行按位或运算,得到并输出前导1在目标二进制数中的位置。
根据本公开的另一方面,还提供一种输出拖尾1所在位置的方法,该方法包括:
将n位的目标二进制数转换为独热向量,独热向量中1的位置与目标二进制数中拖尾1的位置对应,n是大于1的整数;
将独热向量的每个数据位的位置信息表示为m位的第一二进制数,将独热向量的每个数据位的数值复制成m个,m个数值形成m位的第二二进制数,对独热向量的每个数据位的第一二进制数和第二二进制数执行按位与运算,得独热向量的每个数据位的第三二进制数;
对n个第三二进制数执行按位或运算,输出拖尾1在目标二进制数中的位置。
本公开一种可行的实现方式中,将n位的目标二进制数转换为独热向量,包括:
对目标二进制数执行减1运算,得到减1后的二进制数;
对减1后的二进制数执行按位取反操作,得到按位取反后的二进制数;
对目标二进制数和按位取反后的二进制数执行按位与运算,得到独热向量。
本公开一种可行的实现方式中,将n位的目标二进制数转换为独热向量,包括:
对目标二进制数执行减1运算,得到减1后的二进制数;
对目标二进制数和减1后的二进制数执行按位异或运算,得到异或运算后的二进制数;
对目标二进制数和异或运算后的二进制数执行按位与运算,得到独热向量。
本公开一种可行的实现方式中,m是大于等于x的整数,x是以2为底数对n执行对数运算后的运算结果。
本公开一种可行的实现方式中,m是以2为底数对n执行对数运算,并对运算结果进行向上取整的结果。
根据本公开的另一方面,还提供一种输出前导1所在位置的方法,该方法包括:
对n位的目标二进制数执行按位倒序操作,得到按位倒序后的二进制数;
将按位倒序后的二进制数转换为独热向量,独热向量中1的位置与按位倒序后的二进制数中拖尾1的位置对应,n是大于1的整数;
对独热向量执行按位倒序操作,得到目标独热向量;
将目标独热向量的每个数据位的位置信息表示为m位的第一二进制数,将目标独热向量的每个数据位的数值复制成m个,m个数值形成m位的第二二进制数,对目标独热向量的每个数据位的第一二进制数和第二二进制数执行按位与运算,得到目标独热向量的每个数据位的第三二进制数;
对n个第三二进制数执行按位或运算,输出前导1在目标二进制数中的位置。
本公开一种可行的实现方式中,将按位倒序后的二进制数转换为独热向量,包括:
对按位倒序后的二进制数执行减1运算,得到减1后的二进制数;
对减1后的二进制数执行按位取反操作,得到按位取反后的二进制数;
对按位倒序后的二进制数和按位取反后的二进制数执行按位与运算,得到独热向量。
本公开一种可行的实现方式中,将按位倒序后的二进制数转换为独热向量,包括:
对按位倒序后的二进制数执行减1运算,得到减1后的二进制数;
对按位倒序后的二进制数和减1后的二进制数执行按位异或运算,得到异或运算后的二进制数;
对按位倒序后的二进制数和异或运算后的二进制数执行按位与运算,得到独热向量。
本公开一种可行的实现方式中,m是大于等于x的整数,x是以2为底数对n执行对数运算后的运算结果。
本公开一种可行的实现方式中,m是以2为底数对n执行对数运算,并对运算结果进行向上取整的结果。
具体实施方式
在介绍本公开实施例之前,应当说明的是:
本公开部分实施例被描述为处理流程,虽然流程的各个操作步骤可能被冠以顺序的步骤编号,但是其中的操作步骤可以被并行地、并发地或者同时实施。
本公开实施例中可能使用了术语“第一”、“第二”等等来描述各个特征,但是这些特征不应当受这些术语限制。使用这些术语仅仅是为了将一个特征与另一个特征进行区分。
本公开实施例中可能使用了术语“和/或”,“和/或”包括其中一个或更多所列出的相关联特征的任意和所有组合。
应当理解的是,当描述两个部件的连接关系或通信关系时,除非明确指明两个部件之间直接连接或直接通信,否则,两个部件的连接或通信可以理解为直接连接或通信,也可以理解为通过中间部件间接连接或通信。
为了使本公开实施例中的技术方案及优点更加清楚明白,以下结合附图对本公开的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本公开的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
在数字集成电路中,经常需要检测一个二进制数中拖尾1的所在位置或前导1的所在位置。例如在决定CPU中多个中断请求的响应顺序时,或者在决定多个总线事务请求的响应顺序时,就会涉及二进制数中的拖尾1或前导1的所在位置检测。
相关技术中,通常会使用级联的二选一选择器mux检测并输出二进制数中的拖尾1或前导1的所在位置。如图2所示,图2是使用级联的二选一选择器mux(以下将二选一选择器mux简称为mux)检测并输出二进制数中的拖尾1的所在位置的示意图。图2中,有n个一位(bit)的请求信号,分别是请求信号req[0]至req[n-1],n个一位的请求信号组成n位的二进制数。其中,如果一个请求信号为1,则表示该请求信号对应的实体当前有挂起的请求;如果一个请求信号为0,则表示该请求信号对应的实体当前没有请求。
图2中,当请求信号req[i]为1时,该请求信号对应的mux将数值i作为输出结果,该输出结果会作为下一级mux的输入信息;当请求信号req[i]为0时,该请求信号对应的mux将上一级mux的输出结果作为自身的输出结果,该输出结果也会作为下一级mux的输入信息。通过图2所示的方式对n个请求信号进行处理后,req[0]对应的mux(即最后一个mux)会输出最后一个为1的请求信号的所在位置,也就是n位二进制数中拖尾1的所在位置,CPU可以根据最后一个mux输出的位置信息,对相应请求信号对应的被挂起请求进行处理。需要说明的是,n个请求信号的优先级排序从高到低依次是req[0]、req[1]、req[2]...req[n-1]。换言之,只有当请求信号req[0]至req[i-1]均为0,CPU才会对请求信号req[i]对应的被挂起请求进行处理。
图2中,彼此级联的二选一选择器mux的数量等于请求信号的数量。可见,在对请求进行响应顺序判断时,需要的逻辑级数与请求数量成正比。换言之,相关技术在检测拖尾1或前导1的所在位置时,需要的逻辑级数与二进制位数成正比。当二进制位数较大时,所需的逻辑级数也较大,会对电路的运行速度造成较大的负面影响。
针对上述问题,本提案提出一种输出拖尾1所在位置的装置、输出前导1所在位置的装置、输出拖尾1所在位置的方法及输出前导1所在位置的方法,旨在减少位置输出时所需的逻辑级数,提高电路运行速度。
参考图3,图3是本公开一实施例提出的输出拖尾1所在位置的方法的流程示意图。本公开中的输出拖尾1所在位置的方法可具体应用于以下场景:决定CPU中多个中断请求的响应顺序,或者决定多个总线事务请求的响应顺序。如果将输出拖尾1所在位置的方法应用至上述领域,则可以首先将n个请求信号表示为n位的目标二进制数。
如图3所示,该方法包括以下步骤:
S310:将n位的目标二进制数转换为独热向量,独热向量中1的位置与目标二进制数中拖尾1的位置对应,n是大于1的整数。
本公开中,二进制数的拖尾1是指二进制数中的最后一个1。为便于理解,如图1所示,图1中二进制数从左至右的第18位是该二进制数的拖尾1。
本公开中,独热向量中1的位置与目标二进制数中拖尾1的位置对应,具体是指:独热向量中的1在整个独热向量中的位置与目标二进制数中的拖尾1在整个目标二进制数中的位置相同。例如当目标二进制数中的拖尾1在目标二进制数的从左至右的第18位时,则在转换成的独热向量中,1的位置也在独热向量的从左至右的第18位。
在一些具体实施方式中,步骤S310可以包括以下子步骤:
S310-1:对目标二进制数执行减1运算,得到减1后的二进制数。
S310-2:对减1后的二进制数执行按位取反操作,得到按位取反后的二进制数。
S310-3:对目标二进制数和按位取反后的二进制数执行按位与运算,得到独热向量。
为便于理解,示例性地,对于一个n位的二进制数D,其中第i位是
,第0位(即
)是最后一位,二进制数D的表示如下:
假设二进制数D中的第j位是拖尾1,即
到
位均为0,则二进制数D的具体表示如下:
首先对二进制数D执行减1运算,得到减1后的二进制数D’,D’的具体表示如下:
然后对二进制数D’执行按位取反操作,得到按位取反后的二进制数~D’,~D’的具体表示如下:
二进制数~D’中的第0位至第j位分别与二进制数D中的第0位至第j位相同,二进制数~D’中的第j+1位至第n-1位分别与二进制数D中的第j+1位至第n-1位相反。
最后对二进制数D和二进制数~D’执行按位与运算,即二进制数D的第i位与二进制数~D’的第i位执行与运算,
,最终得到独热向量
,独热向量
的具体表示如下:
在另一些具体实施方式中,步骤S310可以包括以下子步骤:
S310-A:对目标二进制数执行减1运算,得到减1后的二进制数。
S310-B:对目标二进制数和减1后的二进制数执行按位异或运算,得到异或运算后的二进制数。
S310-C:对目标二进制数和异或运算后的二进制数执行按位与运算,得到独热向量。
为便于理解,示例性地,对于一个n位的二进制数D,其中第i位是
,第0位(即
)是最后一位,二进制数D的表示如下:
假设二进制数D中的第j位是拖尾1,即
到
位均为0,则二进制数D的具体表示如下:
首先对二进制数D执行减1运算,得到减1后的二进制数D’,D’的具体表示如下:
然后对二进制数D和二进制数D’执行按位异或运算,即二进制数D的第i位与二进制数~D’的第i位执行异或运算,
,得到二进制数D’’,D’’的具体表示如下:
最后对二进制数D和二进制数D’’执行按位与运算,即二进制数D的第i位与二进制数D’’的第i位执行与运算,
,最终得到独热向量
,独热向量
的具体表示如下:
以上,本公开提供了两种转换独热向量的具体实施方式,需要说明的是,本公开对于独热向量的具体转换算法不做限定。
S320:将独热向量的每个数据位的位置信息表示为m位的第一二进制数,将独热向量的每个数据位的数值复制成m个,m个数值形成m位的第二二进制数,对独热向量的每个数据位的第一二进制数和第二二进制数执行按位与运算,得到所述独热向量的每个数据位的第三二进制数。
本公开中,m是小于n的正整数。
在一些具体实施方式中,m是大于等于x的整数,x是以2为底数对n执行对数运算后的运算结果,即
。为便于理解,假设n等于16,则x等于4,因此m是大于等于4的整数,m的最小取值为4。或者假设n等于30,则x约等于4.9,因此m是大于等于4.9的整数,m的最小取值是5。
在另一些具体实施方式中,m是以2为底数对n执行对数运算,并对运算结果进行向上取整的结果,即
。为便于理解,假设n等于16,则m等于4。或者假设n等于30,则m等于5。
本公开中,将独热向量的每个数据位的位置信息表示为m位的第一二进制数,具体是指:针对独热向量的第i位,利用总长度为m的二进制数表示数值i。为便于理解,假设n等于16(相应地,独热向量的总长度也为16),m取值为4。则对于独热向量的第0位,其位置信息表示为0000;对于独热向量的第1位,其位置信息表示为0001;对于独热向量的第2位,其位置信息表示为0010...对于独热向量的第8位,其位置信息表示为1000...对于独热向量的第14位,其位置信息表示为1110;对于独热向量的第15位,其位置信息表示为1111。
示例性地,假设独热向量为0000000000100000,该独热向量总共有16位,从左至右分别是第15位至第0位,其中第5位是1,其余位是0。在针对第15位进行处理时,将第15位的位置信息表示为第一二进制数1111,并将第15位的数值0复制成4个,形成第二二进制数0000,然后对1111和0000执行按位与运算,得到第三二进制数0000。
在针对第14位进行处理时,将第14位的位置信息表示为第一二进制数1110,并将第14位的数值0复制成4个,形成第二二进制数0000,然后对1110和0000执行按位与运算,得到第三二进制数0000。
在针对第5位进行处理时,将第5位的位置信息表示为第一二进制数0101,并将第5位的数值1复制成4个,形成第二二进制数1111,然后对0101和1111执行按位与运算,得到第三二进制数0101。
在针对第1位进行处理时,将第1位的位置信息表示为第一二进制数0001,并将第1位的数值0复制成4个,形成第二二进制数0000,然后对0001和0000执行按位与运算,得到第三二进制数0000。
在针对第0位进行处理时,将第0位的位置信息表示为第一二进制数0000,并将第0位的数值0复制成4个,形成第二二进制数0000,然后对0000和0000执行按位与运算,得到第三二进制数0000。
可见,按照上述方式对独热向量的每个数据位进行处理,最终非0数据位(即数值等于1的数据位)的第三二进制数等于该数据位的位置信息,其余数据位的第三二进制数均为0。当然,第0位的第三二进制数也等于第0位的位置信息。
S330:对n个第三二进制数执行按位或运算,输出拖尾1在目标二进制数中的位置。
本公开中,对n个第三二进制数执行按位或运算后,得到的运算结果就是输出拖尾1在目标二进制数中的位置,其原因如下:由于n个第三二进制数中,仅非0数据位(即数值等于1的数据位)的第三二进制数等于该数据位的位置信息,其余数据位的第三二进制数均为0,因此对n个第三二进制数执行按位或运算后,输出的运算结果等于非0数据位(即数值等于1的数据位)的位置信息,又由于独热向量中1的位置与目标二进制数中拖尾1的位置对应,因此输出的运算结果也正是目标二进制数中拖尾1的位置信息。
为便于理解,沿用上述示例,独热向量0000000000100000的15个数据位中,第5位的第三二进制数为0101,其余位的第三二进制数均为0000,对这15个第三二进制数执行按位或运算后,输出的运算结果为0101,也就是第5位的位置信息“5”的二进制表示。
本公开中,通过为独热向量的每个数据位生成m位的第一二进制数和第二二进制数,然后对第一二进制数和第二二进制数执行相应运算,所需的逻辑级数与m成正比,而不需要与n成正比,因此减少了所需的逻辑级数,有利于提高电路运行速度。
以上,本公开提供了输出拖尾1所在位置的方法,以下基于同一发明构思,本公开提供输出前导1所在位置的方法。
参考图4,图4是本公开一实施例提出的输出前导1所在位置的方法的流程示意图。本公开中,二进制数的前导1是指二进制数中的第一个1。为便于理解,如图1所示,图1中二进制数从左至右的第3位是该二进制数的前导1。
本公开中的输出前导1所在位置的方法可具体应用于以下场景:决定CPU中多个中断请求的响应顺序,或者决定多个总线事务请求的响应顺序。如果将输出前导1所在位置的方法应用至上述领域,则可以首先将n个请求信号表示为n位的目标二进制数。
如图4所示,该方法包括以下步骤:
S410:对n位的目标二进制数执行按位倒序操作,得到按位倒序后的二进制数。
本公开中,对n位的目标二进制数执行按位倒序操作,具体是指:将目标二进制数的第i位的数值与第n-1-i位的数值进行对调,i∈[0,n/2)。为便于理解,假设n等于16,n位的目标二进制数为0001011011000010。在步骤S410中,需要将第0位的数值和第15位的数值对调,将第1位的数值和第14位的数值对调,将第2位的数值和第13位的数值对调,将第3位的数值和第12位的数值对调,将第4位的数值和第11位的数值对调,将第5位的数值和第10位的数值对调,将第6位的数值和第9位的数值对调,将第7位的数值和第8位的数值对调。按位倒序后的二进制数为0100001101101000。
S420:将按位倒序后的二进制数转换为独热向量,独热向量中1的位置与按位倒序后的二进制数中拖尾1的位置对应,n是大于1的整数。
在一些具体实施方式中,步骤S420包括以下子步骤:
S420-1:对按位倒序后的二进制数执行减1运算,得到减1后的二进制数。
S420-2:对减1后的二进制数执行按位取反操作,得到按位取反后的二进制数。
S420-3:对按位倒序后的二进制数和按位取反后的二进制数执行按位与运算,得到独热向量。
对于子步骤S420-1至S420-3的具体说明,可参考针对子步骤S310-1至S310-3的具体说明,为避免重复,此处不做赘述。
在另一些具体实施方式中,步骤S420包括以下子步骤:
S420-A:对按位倒序后的二进制数执行减1运算,得到减1后的二进制数。
S420-B:对按位倒序后的二进制数和减1后的二进制数执行异或运算,得到异或运算后的二进制数。
S420-C:对按位倒序后的二进制数和异或运算后的二进制数执行按位与运算,得到独热向量。
对于子步骤S420-A至S420-C的具体说明,可参考针对子步骤S310-A至S310-C的具体说明,为避免重复,此处不做赘述。
以上,本公开提供了两种转换独热向量的具体实施方式,需要说明的是,本公开对于独热向量的具体转换算法不做限定。
S430:对独热向量执行按位倒序操作,得到目标独热向量。
本公开中,独热向量的位数与目标二进制数的位数相等,均是n位。对独热向量执行按位倒序操作,具体是指:将独热向量的第i位的数值与第n-1-i位的数值进行对调,i∈[0,n/2)。
S440:将目标独热向量的每个数据位的位置信息表示为m位的第一二进制数,将目标独热向量的每个数据位的数值复制成m个,m个数值形成m位的第二二进制数,对目标独热向量的每个数据位的第一二进制数和第二二进制数执行按位与运算,得到目标独热向量的每个数据位的第三二进制数。
在一些具体实施方式中,m是大于等于x的整数,x是以2为底数对n执行对数运算后的运算结果。
在另一些具体实施方式中,m是以2为底数对n执行对数运算,并对运算结果进行向上取整的结果。
对于步骤S440的具体说明,可参考针对步骤S320的具体说明,为避免重复,此处不再赘述。
S450:对n个第三二进制数执行按位或运算,输出前导1在目标二进制数中的位置。
对于步骤S450的具体说明,可参考针对步骤S330的具体说明,为避免重复,此处不再赘述。
本公开中,通过为目标独热向量的每个数据位生成m位的第一二进制数和第二二进制数,然后对第一二进制数和第二二进制数执行相应运算,所需的逻辑级数与m成正比,而不需要与n成正比,因此减少了所需的逻辑级数,有利于提高电路运行速度。
以上,本公开提供了输出拖尾1/前导1所在位置的方法。基于同一发明构思,本公开以下提供输出拖尾1所在位置的装置。
参考图5,图5是本公开一实施例提出的输出拖尾1所在位置的装置的结构示意图。如图5所示,该装置包括独热信号发生模块和位置计算模块。
其中,独热信号发生模块用于将n位的目标二进制数转换为独热向量,独热向量中1的位置与目标二进制数中拖尾1的位置对应,n是大于1的整数。
位置计算模块用于将独热向量的每个数据位的位置信息表示为m位的第一二进制数,将独热向量的每个数据位的数值复制成m个,m个数值形成m位的第二二进制数,对独热向量的每个数据位的第一二进制数和第二二进制数执行按位与运算,得述独热向量的每个数据位的第三二进制数,对n个第三二进制数执行按位或运算,输出拖尾1在目标二进制数中的位置。
在一些具体实施方式中,m是大于等于x的整数,x是以2为底数对n执行对数运算后的运算结果。
在另一些具体实施方式中,m是以2为底数对n执行对数运算,并对运算结果进行向上取整的结果。
本公开中,通过为独热向量的每个数据位生成m位的第一二进制数和第二二进制数,然后对第一二进制数和第二二进制数执行相应运算,所需的逻辑级数与m成正比,而不需要与n成正比,因此减少了所需的逻辑级数,有利于提高电路运行速度。
在一些具体实施方式中,独热信号发生模块包括减1电路和独热信号发生电路;减1电路的输入信号为目标二进制数,减1电路对目标二进制数执行减1运算,得到减1后的二进制数;独热信号发生电路的输入信号包括目标二进制数和减1后的二进制数,独热信号发生电路对减1后的二进制数的每一位进行取反后,与目标二进制数的每一位执行与运算,得到独热向量。
参考图6,图6是本公开一实施例提出的两种减1电路的结构示意图,上下两种减1电路的输入信号均为目标二进制数D,输出信号均为减1后的二进制数D’。
参考图7,图7是本公开一实施例提出的独热信号发生电路的结构示意图。如图7所示,独热信号发生电路包括n个与门,分别是第0个至第n-1个与门,第i个与门的输入信号是二进制数D’的第i位数值[i]’取反后的数值和二进制数D的第i位的数值[i],第i个与门的输出信号是输入的两个数值的与运算结果Doh[i]。n个与门的输出信号形成n位的独热向量。
在另一些具体实施方式中,独热信号发生模块包括减1电路和独热信号发生电路;减1电路的输入信号为目标二进制数,减1电路对目标二进制数执行减1运算,得到减1后的二进制数;独热信号发生电路的输入信号包括目标二进制数和减1后的二进制数,独热信号发生电路对减1后的二进制数的每一位与目标二进制数的每一位执行异或运算,并对异或运算结果与目标二进制数的当前位执行与运算,得到独热向量。
参考图8,图8是本公开另一实施例提出的独热信号发生电路的结构示意图。如图8所示,独热信号发生电路包括n个异或门和n个与门,其中n个异或门分别是第0个至第n-1个异或门,n个与门分别是第0个至第n-1个与门。第i个异或门的输入信号是二进制数D’的第i位的数值[i]’和二进制数D的第i位的数值[i]。第i个与门的输入信号是第i个异或门的输出结果和二进制数D的第i位的数值[i]。其中,二进制数D是目标二进制数,二进制数D’是目标二进制数减1后的二进制数。第i个与门的输出信号是输入的两个数值的与运算结果Doh[i]。n个与门的输出信号形成n位的独热向量。
在一些具体实施方式中,位置计算模块包括n个按位与电路和1个按位或电路;每个按位与电路的输入信号包括独热向量的一个数据位的数值和该数据位的位置信息,该数据位的位置信息是一个m位的二进制数,每个按位与电路将相应数据位的数值与m位的二进制数的每一位分别执行与运算,得到m位的运算结果;按位或电路的输入信号包括n个m位的运算结果,按位或电路对n个m位的运算结果执行按位或运算,得到并输出拖尾1在目标二进制数中的位置。
参考图9,图9是本公开一实施例提出的按位与电路的结构示意图。如图9所示,每个按位与电路包括m个与门,分别是第0个至第m-1个与门。第i个按位与电路的第j个与门的输入信号包括:独热向量的第i位的数值Doh[i]、第i位的位置信息对应的二进制数d中的第j位的数值[j]。第i个按位与电路的m个与门的输出结果形成一个m位的二进制运算结果index i。
为便于理解,示例性地,假设独热向量为0000000000100000,m的取值为4。比如第0个按位与电路的第0个与门的输入信号包括:独热向量的第0位的数值0、第0位的位置信息对应的二进制数0000中的第0位的数值0,该与门的输出结果为0。
比如第3个按位与电路的第2个与门的输入信号包括:独热向量的第3位的数值0、第3位的位置信息对应的二进制数0011中的第2位的数值1,该与门的输出结果为0。
比如第5个按位与电路的第1个与门的输入信号包括:独热向量的第5位的数值1、第5位的位置信息对应的二进制数0101中的第2位的数值1,该与门的输出结果为1。
比如第5个按位与电路的第3个与门的输入信号包括:独热向量的第5位的数值1、第5位的位置信息对应的二进制数0101中的第3位的数值0,该与门的输出结果为0。
参考图10,图10是本公开一实施例提出的按位或电路的结构示意图。如图10所示,按位或电路包括m个或门,分别是第0个至第m-1个或门,第i个或门的输入信号是每个按位与电路输出的m位二进制数index中的第i位的数值[i]。为便于理解,假设m取值为4,n个按位与电路各自输出的4位二进制数分别是0000、0000、0000、0000、0000、0101、0000、0000、0000、0000、0000、0000、0000、0000、0000、0000。则第0个或门的输入信号是0、0、0、0、0、1、0、0、0、0、0、0、0、0、0、0,第1个或门的输入信号是0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0,第2个或门的输入信号是0、0、0、0、0、1、0、0、0、0、0、0、0、0、0、0,第3个或门的输入信号是0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0。第0个或门的输出为1,第1个或门的输出为0,第2个或门的输出为1,第3个或门的输出为0。第3个或门至第0个或门的输出成二进制数0101,该二进制数0101就是最终的输出结果,即目标二进制数中拖尾1的所在位置。
以上,本公开提供了输出拖尾1所在位置的装置,以下基于同一发明构思,本公开提供输出前导1所在位置的装置。
参考图11,图11是本公开一实施例提出的输出前导1所在位置的装置的结构示意图。如图11所示,该装置包括按位倒序模块、独热信号发生模块及位置计算模块。
其中,按位倒序模块用于对n位的目标二进制数执行按位倒序操作,得到按位倒序后的二进制数。
独热信号发生模块用于将按位倒序后的二进制数转换为独热向量,独热向量中1的位置与按位倒序后的二进制数中拖尾1的位置对应,n是大于1的整数。
按位倒序模块还用于对独热向量执行按位倒序操作,得到目标独热向量。
位置计算模块用于将目标独热向量的每个数据位的位置信息表示为m位的第一二进制数,将目标独热向量的每个数据位的数值复制成m个,m个数值形成m位的第二二进制数,对目标独热向量的每个数据位的第一二进制数和第二二进制数执行按位与运算,得到目标独热向量的每个数据位的第三二进制数,对n个第三二进制数执行按位或运算,输出前导1在目标二进制数中的位置。
在一些具体实施方式中,m是大于等于x的整数,x是以2为底数对n执行对数运算后的运算结果。
在另一些具体实施方式中,m是以2为底数对n执行对数运算,并对运算结果进行向上取整的结果。
本公开中,通过为目标独热向量的每个数据位生成m位的第一二进制数和第二二进制数,然后对第一二进制数和第二二进制数执行相应运算,所需的逻辑级数与m成正比,而不需要与n成正比,因此减少了所需的逻辑级数,有利于提高电路运行速度。
在一些具体实施方式中,独热信号发生模块包括减1电路和独热信号发生电路;减1电路的输入信号为按位倒序后的二进制数,减1电路对按位倒序后的二进制数执行减1运算,得到减1后的二进制数;独热信号发生电路的输入信号包括按位倒序后的二进制数和减1后的二进制数,独热信号发生电路对减1后的二进制数的每一位进行取反后,与按位倒序后的二进制数的每一位执行与运算。
在另一些具体实施方式中,独热信号发生模块包括减1电路和独热信号发生电路;减1电路的输入信号为按位倒序后的二进制数,减1电路对按位倒序后的二进制数执行减1运算,得到减1后的二进制数;独热信号发生电路的输入信号包括按位倒序后的二进制数和减1后的二进制数,独热信号发生电路对减1后的二进制数的每一位与按位倒序后的二进制数的每一位执行按位异或运算,并对异或运算结果与按位倒序后的二进制数的当前位执行与运算,得到独热向量。
对于独热信号发生模块的具体说明,可参考本公开的前述内容,为避免重复,此处不做赘述。
在一些具体实施方式中,位置计算模块包括n个按位与电路和1个按位或电路;每个按位与电路的输入信号包括目标独热向量的一个数据位的数值和该数据位的位置信息,该数据位的位置信息是一个m位的二进制数,每个按位与电路将相应数据位的数值与m位的二进制数的每一位分别执行与运算,得到m位的运算结果;按位或电路的输入信号包括n个m位的运算结果,按位或电路对n个m位的运算结果执行按位或运算,得到并输出所述前导1在目标二进制数中的位置。
对于位置计算模块的具体说明,可参考本公开的前述内容,为避免重复,此处不做赘述。
尽管已描述了本公开的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本公开范围的所有变更和修改。
显然,本领域的技术人员可以对本公开进行各种改动和变型而不脱离本公开的精神和范围。这样,倘若本公开的这些修改和变型属于本公开权利要求及其等同技术的范围之内,则本公开也意图包含这些改动和变型在内。