发明内容
本发明旨在提供一种可以近似计算在(0,1)区间内的增函数的硬件装置,该装置的实现基于随机计算和分段线性近似方法。
本发明的技术方案为:
一种基于随机计算的增函数实现装置,包括截位单元、部分值λ生成单元、部分值生成单元、随机序列发生单元、逻辑计算单元和计数器,
所述截位单元,用于根据分段间距k对输入的二进制数据x截位拆分,k=2-m,m=1,2,3……;并将高m位作为所属分段的标号n,分别输送给部分值λ生成单元和部分值生成单元,剩余的低位数据直接输送给随机序列发生单元;
所述部分值λ生成单元,用于将分段标号n转换成目标函数值f(x)的一个部分值λ=f[(n+1)k],并将λ值输出给随机序列发生单元;
所述部分值生成单元,用于将分段标号n转换成目标函数值f(x)的一个部分值并将/>值输出给随机序列发生单元;
所述随机序列发生单元,用于生成随机比特流并输送给逻辑计算单元;
所述逻辑计算单元,用于将随机比特流转化为目标函数值f(x)的随机比特流结果,并输出给计数器;
所述计数器,用于将目标函数值f(x)的随机比特流结果转化为二进制结果输出。
本发明基于随机计算、分段线性近似方法和组合逻辑映射方法,提供了一种创新地近似计算增函数的装置,该装置仅使用寄存器、简单门电路和一个计数器即可完成目标函数的近似计算,避免了大量查找表、乘法器、加法器等硬件资源的消耗,从而既可以提升拟合计算结果的精度又可以占用更少的硬件资源,更加符合目前各类应用的硬件装置面积更小、功耗更小、性能更佳的设计趋势。因此,相较于已有的算术函数实现装置,本发明不仅硬件资源消耗少且计算精度更高。
具体实施方式
下面结合本发明实施例中的附图对本发明方案作进一步详细的说明。显然,以下描述的实施例仅仅是本发明的一部分实施例,而不是全部实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本发明的保护范围。
如图1所示,本发明的一种基于随机计算的增函数实现装置,包括截位单元(<<m)、λ生成单元(λ-GU)、生成单元/>随机序列发生单元(SNGU)、逻辑计算单元(LCU)和计数器(Counter)。整个(0,1)区间被划分为/>段,每段间距均为k(k=2-m,m=1,2,3……)。目标函数值f(x)根据一阶泰勒展开改写为式(1)进行近似计算,其中,x为函数自变量,x∈(0,1),/>表征自变量x所属分段的序号,x0=(n+1)k为第n段段尾处的自变量值,λ=f[(n+1)k]、/>和/>分别为目标函数值f(x)的三个部分值,λ,/>d∈(0,1)。
sin(x)是在(0,1)区间内单调增的一种典型函数,sin(x)的近似计算在信号处理等领域十分重要。例如,在信号发生器中,以周期性变化的相位作为自变量计算sin(x)得到正弦波信号,并根据正弦信号产生三角波、方波等其他类型的信号。
下面以sin(x)作为目标函数,将(0,1)区间分为16段进行计算的一个具体实施例如下:
根据公式(1),本实施例中采用如下公式对sin函数进行近似:
其中,x为函数自变量,x∈(0,1),为分段间距,m=4,/>表征自变量x所属分段的序号,λ=sin[(n+1)k]、/>和/>分别为目标函数值sin(x)的三个部分值,λ,/>d∈(0,1)。
本实施例的近似计算sin函数的装置,其输入x的取值范围为(0,1),输出函数结果的取值范围也为(0,1)。其中,截位单元(<<m)对输入的自变量x进行拆分,高m位表征数据所属的分段序号n,输送给λ生成单元(λ-GU)和生成单元/>用于产生目标函数的两个部分值λ和/>对于同一段内的数据即分段序号n不变时λ和/>的值也不变;x的剩余低位数据即为d,可以表征数据在段内的相对位置,直接输送给随机序列发生单元(SNGU)。λ生成单元根据比特映射原理,将输出数据λ与输入值n的一一对应关系转换为10个逻辑表达式并用简单门电路实现,从而输入的分段标号n可以在λ生成单元(λ-GU)内通过逻辑门映射变换为10bit的λ,并输出给随机序列发生单元(SNGU)。/>生成单元根据比特映射原理,将输出数据与输入值n的一一对应关系转换为10个逻辑表达式并用简单门电路实现,从而输入的分段标号n可以在/>生成单元/>内通过逻辑门映射变换为10bit的/>并输出给随机序列发生单元(SNGU)。随机序列发生单元(SNGU)包括三个独立且结构相同的随机序列发生器(SNG),三个SNG分别将目标函数值f(x)的三个部分值λ、/>和d中的一个作为输入转换为三组一定长度的随机序列输出给逻辑计算单元(LCU)。逻辑计算单元(LCU)完成式(1)中两个乘法(*)和两个与1相减(1)的运算,具体为:对目标函数的三个部分值λ、/>和d对应的三组随机序列进行逻辑运算,d对应的随机序列比特流先通过非门取反得到1d的值,随后和/>对应的随机比特流作为两个输入送入与非门得到/>的值,与非门的输出结果再和λ对应的随机序列相“与”,与门的结果即为式(1)结果对应的随机序列。计数器(Counter)利用10bit累加器统计输入的比特流中出现“1”的概率,当目标函数值f(x)对应的随机序列中出现“1”时,累加器加1,从而将随机序列转化得到目标函数值f(x)二进制结果输出。下面详细说明每个单元的功能以及具体实施过程:
如图1所示,本实施例中的输入x为14bit无符号定点数。
首先在截位单元(<<m)中,输入数据x被拆分为两部分输出。x高4bit的数值为可以表明x所属的分段序号,n有16种可能的取值,x[13:10]将输出至λ生成单元和/>生成单元;x低10bit的数值为/>可以表明x在第n段内的相对大小,x[9:0]将直接输出至随机序列发生单元。
随后,由于对于同一分段内的所有数据,n的值确定后λ固定不变,16种可能的n的取值与16种可能的λ的取值一一对应。因此可以预先计算出n与λ的对应关系,将每一bit的16种λ的值与4bit的n值整理成真值表,通过卡诺图法得到10个化简后的逻辑函数表达式,映射为相应的组合逻辑电路构建为λ生成单元(λ-GU)。在λ生成单元中,输入的4bit的n值可以快速产生10bit的λ值,同时占用很少的硬件资源。当n=0,1,2…15时,将λ(n)的取值罗列如下表:
表1λ的取值情况
本实施例中取λ的高10位作为λ生成单元的输出。当n=0,1,2…15时,λ的每一位与4bit的n值对应的逻辑函数表达式罗列如表2所示:其中A=n[3]、B=n[2]、C=n[1]、D=n[0]分别表示k值的四位,分别表示n值的四位取反,λ[i]表示λ的第i位。
表2λ与n的逻辑函数表达式
此外,由于对于同一分段内的所有数据,n的值确定后/>固定不变,16种可能的n的取值与16种可能的/>的取值一一对应。因此可以预先计算出n与/>的对应关系,将每一bit的16种/>的值与4bit的n值整理成真值表,通过卡诺图法得到10个化简后的逻辑函数表达式,映射为相应的组合逻辑电路构建为/>生成单元/>在/>生成单元中,输入的4bit的n值可以快速产生10bit的/>值,同时占用很少的硬件资源。当n=0,1,2…15时,将/>的取值罗列如下表:
表3的取值情况
本实施例中取的高10位作为/>生成单元的输出。当n=0,1,2…15时,/>的每一位与4bit的n值对应的逻辑函数表达式罗列如表4:其中/>表示/>的第i位。
表4与n的逻辑函数表达式
经前述处理完成后得到三路数据,包括截位单元输出的10bit的d值、λ生成单元输出的10bit的λ值和生成单元输出的10bit的/>值,分别对应为随机序列发生单元(SNGU)中的三个随机序列发生器(SNG)的输入,经过处理后转换为三路随机序列。图2为随机序列发生器的结构示意图,包括10位线性反馈移位寄存器(LFSR)、输入寄存器和比较器,每个时钟周期,线性反馈移位寄存器(LFSR)通过10个D触发器和组合逻辑反馈产生10bit随机数,随后在由与或门构成的比较器中,将生成的随机数与输入值进行比较与概率计算,从而判断随机序列发生器传送给逻辑计算单元的输出应为“1”还是“0”,随机序列发生器发生器产生的随机序列中出现“1”的概率由随机序列发生器的输入数值决定,输入数据为B的N位SNG产生的随机序列中出现“1”的概率为B*2-N。下面以输入为λ的SNG(SNG_λ)为例描述随机序列的产生过程:首先将输入的10bitλ存入输入寄存器;如图3所示的10bit线性反馈移位寄存器(LFSR)的初始值设定为10’b0111_0011_01,随后1024个时钟周期中,LFSR将伪随机地产生一个10bit数;每个时钟周期,LFSR生成的随机数与输入的λ值将在由与或门构成的比较器中进行比较,从而得出随机序列发生器的输出应为“1”还是“0”,比较器输出的BitStream即为SNGU产生的随机序列,具体比较电路如图2所示;等待1024个时钟周期后,随机序列发生器(SNG)即可产生一串长度为1024且出现“1”的概率等于λ*2-10的随机序列。类似地,其余两个随机序列发生器(/>SNG_d)中,移位寄存器的初始值分别设定为10’b0011_1011_00和10’b1110_1011_00,分别可以产生长度为1024且出现“1”的概率等于d*2-10和/>的随机序列。
本实施例计算开始后的1024个时钟周期,逻辑计算单元(LCU)接收到随机序列发生单元(SNGU)传递来的三路随机序列,即每个时钟周期逻辑计算单元的输入为对应λ的1bit比特流、对应的1bit比特流和对应d的1bit比特流。在逻辑计算单元中,三路比特流按照公式(2)中的关系计算,具体过程为:对应d的1bit比特流先通过非门取反完成1d的计算;非门的输出和对应/>的1bit比特流相“与”后取反,完成/>的计算;与非门的输出和对应λ的1bit比特流相“与”,完成乘法运算,与门的结果即为式(2)结果对应的随机序列。
本实施例中,计数器(Counter)的输入为长度为1024的随机序列,每个时钟周期接收随机序列中的1bit,当随机序列中出现“1”时,累加器加1,1024个时钟周期结束后,10bit累加器中的数值可表示输入的随机序列中出现“1”的概率,此时将10bit累加器中的数值作为计数器的输出。经过1024个时钟周期,计数器可以将输入的长度为1024的随机序列转化为sin(x)的10bit实数结果输出。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,本实施例仅对区间划分为16段计算sin(x)的情况进行举例说明,任何在(0,1)区间内单调增的函数都可以采用本发明的方法进行计算,实际应用中,还可以根据精度需要而改变区间的分段数目和随机序列的长度。
以上所述,仅为本发明部分具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。