1.面向集成电路的超低延时的整数次幂计算电路的优化方法,其特征在于,包括:一个软件分段器,在给定的最大软件相对误差下得到最大分段,同时得到各分段对应的线性系数;
一个软件量化器,在给定的硬件误差限制下得到各分段对应的线性系数的最小小数位宽;
一个分段线性近似电路,采用线性近似的方法实现2的任意次幂和以2为底的对数运算;
一个倒数运算模块,用多路选择器和查找表的方式实现倒数;
所述软件分段器具体执行如下步骤:
步骤a1,设定非线性函数f(x)通过分段线性函数h(x)来近似计算,f(x)输入的范围为[c,d]被分割成子区间[ci,di]i=1,2,3..,其中ci和di分别表示第i个分区起点值和终点值,每个子区间采用一个线性函数来hi(x)来表示;在f(x)该子区间内选择不同的两点(x1,f(x1))(x2,f(x2)),其中x1、f(x1)、x2和f(x2)为分别为第一点的横坐标、纵坐标及第二点的横坐标、纵坐标,则第i分段的线性方程表示为:hi(x)=kix+bi(1),
bi=f(x2)‑ki(x2)(3),
其中,ki和bi分别为第i分段线性方程的斜率和截距;通过上述式子就能够确定各个分段线性函数的参数;
浮点数R的N次根根据以下恒等式进行表示:
而浮点数R表示为:
其中,MR为浮点数的尾数部分,ER为阶码部分;
结合式(4)和(5)得到以下表示:
通过式(6),浮点数R的N次根被分解成多个子任务;
对于浮点数格式,尾数MR的范围为[1,2),log2(MR)采用线性近似的方法来得到:log2(x)≈h_log2(x),x∈[1,2)(7)其中输入x的值与MR的范围保持一致;
将式子(6)化简为:
其中P表示为:
P分为整数部分PI和小数部分PF,表示为:
P=PI+PF (10)
则式子(8)表示为:
P PI PF
2=2 ×2 (11)
其中整数PI在加上15后正好与单精度浮点的阶码格式一致,直接作为阶码输出由于PF大小在[0,1)范围内,2的PF次幂计算采用分段线性近似的方法来实现,表示如下:x
2≈h_pow2(x),x∈[0,1) (12)x
由于x∈[0,1),所以2值的取值范围为[1,2),满足浮点数输出尾数的表达要求,直接作为输出的尾数部分;
步骤a2,根据最大根计算的最大相对误差来得到子函数(7)和(12)的最大绝对误差,子函数再根据最大绝对误差进行分段,绝对误差AE和最大绝对误差MAE的定义为:AE=|f‑h| (13)
MAE=max|f‑h| (14)
其中f表示精确值是通过MatLab内置函数计算得到,h是近似值,通过近似方法计算得到;
步骤a3,相对误差Errr、平均相对误差Avg_Errr及最大相对误差Max_Errr分别表示为:Max_Errr=max(Errr) (17)NUM表示输出结果的数量;
通过子函数(7)和(12)的分段器,实现公式(7)、公式(12)的非线性函数的分段,具体包括如下步骤:步骤b1,初始化相关参数:
si表示当前分段的起点,等于上个分段的终点后一点;
ei为分段终点,初始化为输入的最大值;
li和ri分别是用于确定ei的二分法左窗口、右窗口;
步骤b2,通过式(13)计算出分区内的任意一点的绝对误差AE,通过式(14)求出分段内的最大绝对误差MAE,如果最大绝对误差MAE大于设定的软件最大绝对误差mae_sw,说明分段太大,则将左移到ei的位置以减小二分窗口的大小,同时ei移动到二分窗口的中点,重新开始步骤b2;如果最大绝对误差MAE小于mae_sw,则说明误差满足要求且可能存在两种可能,第一种可能:如果二分窗口能够减小,说明分段还能够增大,此时将li右移动ei处以减小二分窗口的大小,同时ei移动到二分窗口的中点,并重新开始步骤b2;第二种可能:二分窗口已无法减小,说明此时分段属于mae_sw限制下的最宽状态,则存储相应的参数及起点终点的信息;
步骤b3,将子函数分段器封装为函数seg_log2(a,b,mae_sw)和seg_pow2(a,b,mae_sw),分别用于对公式(7)和(12)中的非线性函数进行分段,其中a,b分别表示分段区间的起点和终点,seg_log2函数的输出为一个向量,用于存储分区的起始点及公式(1)(2)(3)中的k,b;
1/N
步骤b4,子函数分段器根据R 的最大相对误差得到mae_sw的最小值;
步骤b4包括:
步骤b4‑1,进行初始化:rmae、lmae分别表示用于优化mae_sw的二分左窗口、右窗口,F为优化循环控制位;
步骤b4‑2,计算最大相对误差:将子函数进行分段线性近似,遍历根据公式(15)求出的所有点的相对误差Errr,根据公式(17)求出最大相对误差Max_Errr;
步骤b4‑3,优化mae_sw,如果Max_Errr大于设定的最大相对误差Errr_sw,则说明当前mae_sw太大,则rmae减小到当前mae_sw值,mae_sw移动到新二分窗口的终点;如果Max_Errr小于等于设定的最大相对误差Errr_sw,一种情况是mae_sw还能够继续增大,则rmae增大到‑5当前mea_sw值,同时将mae_sw增大到新窗口的中点值,另一种情况是|rmae、lmae|<10 ,说明窗口已经足够小,mae_sw已优化完毕,当前mae_sw已为最优值;再通过所述mae_sw就能够确定最终的分段区间及各区间的参数;
所述软件量化器采用以下两个函数来分别表示二进制中的四舍五入及截位操作:qw ‑qw
kq=round(k×2 )×2 ,
qw ‑qw
kq=floor(k×2 )×2 ,
其中qw表示量化后的小数位宽,kq和k分别为量化前和量化后的数据值;
软件量化器计算出每点近似值的大小,再根据式(17)得到Max_Errr,如果Max_Errr大于Errr_hw的值,则说明当前qw太小,则qw加1,直到Max_Errr满足Errr_hw的要求;
所述相对误差的计算采用MatLab内置函数round和floor来模拟硬件四舍五入和截位操作,其中存储在片上的系数采用四舍五入来提高精度,计算的中间结果采用截位来降低硬件复杂度;
所述分段线性近似电路包括:
减法器,将输入与每个分段的起点相减,并提取结果的符号位;
多路选择器,通过提取的符号位去选择存储在片上的线性方程参数,包括斜率和截距;
乘法器,采用两级流水的乘法器以减小关键路径的长度,将输入信号与多路选择器输出的斜率相乘;
加法器,将乘法器结果与多路选择器输出的截距相加;
所述倒数运算模块采用输入数据N作为选择信号,通过多路选择器选择预存储在片上的倒数结果。