一种低开销的取模方法与流程

文档序号:15462327发布日期:2018-09-18 18:27阅读:353来源:国知局

本发明涉及余数校验领域,更具体地,涉及一种低开销的取模方法。



背景技术:

空间辐射环境对空间飞行器的电子产品有着严重的影响,单粒子效应是主要要考虑的影响。在空间应用中,单粒子效应能产生严重后果,包括信息丢失和功能失效。当具有足够转移能量的带电粒子击中芯片时,就可能发生单粒子效应现象,进而引发系统故障。辐射效应引起的瞬时错误已经成为人们的主要关注所在,只有应用容错技术才能保证电路的可靠性。

三模冗余技术在辐射环境下的容错信号处理中得到广泛应用。三模冗余使用三个相同模块对输入数据进行相同滤波操作,选择两路或三路相同的结果进行输出,完全消除了单支路故障对信号处理输出的影响。但在三模冗余技术中,所有的运算及存储资源消耗都增加到原来的三倍,这使得三模冗余技术在很多资源受限的应用中无法使用,如星载平台上的容错信号处理等。

为了降低容错开销,研究人员提出了基于余数校验的容错方案。在基于余数校验的容错方案中,校验支路若使用较小的模数,则可以使硬件开销大大低于普通计算支路,因此可以显著降低整体容错系统的开销。

如果使用基于余数校验的容错信号处理技术,则对数据取模是必不可少运算。并且若基于余数校验的容错方案较为复杂,使用较多的取模运算,则整个容错方案中的取模运算的资源开销也会占很大比例。



技术实现要素:

本发明提供一种低开销的取模方法,以降低基于余数校验的容错方案中取模运算的资源开销。

为了达到上述技术效果,本发明的技术方案如下:

一种低开销的取模方法,包括以下步骤:

S1:如果二进制有符号数x为负数,则先将x变为二进制正数,然后赋给y;否则如果二进制有符号数x为正数,则直接将x的值赋给y;

S2:统计二进制正数y的第0、2、4、6等偶数位上1的个数,设为m;同样统计二进制正数的第1、3、5、7等奇数位上1的个数,设为n,其中m为余数为1的个数,n为余数为2的个数;

S3:统计二进制正数m的第0、2、4等偶数位上1的个数,设为a;统计二进制正数m的第1、3、5等奇数位上1的个数,设为b,其中a为余数为1的个数,b为余数为2的个数;

S4:统计二进制正数n的第0、2、4等偶数位上1的个数,设为c;统计二进制正数m的第1、3、5等奇数位上1的个数,设为d,其中c为余数为2的个数,d为余数为1的个数;

S5:余数为1的个数为a与d的和,设为e;余数为2的个数为b与c的和,设为f,根据e和f的值可以确定余数,建立一个只读存储器ROM,只读存储器ROM根据e和f的值输出相对应的余数;

S6:ROM输出的余数为2位二进制正数,如果输入数据x为正数,则直接将ROM输出的余数作为取模运算最终结果,如果输入数据x为负数,则将ROM输出的余数按位取反后作为取模运算最终结果。

进一步地,所述步骤S1中,如果二进制有符号数x为正数,则直接将x的值赋给y,如果x为负数,则将二进制数x按位取反加1后赋给y。

进一步地,所述步骤S2中,如果二进制正数y的第0、2、4、6等偶数位上为1,则每个相应位置代表数值为4N,其中N为0、1、2、3等整数,4N对模M=3取余为1,所以m为余数为1的个数;

如果二进制正数y的第1、3、5、7等奇数位上为1,则每个相应位置代表数值为2*4N,其中N为0、1、2、3等整数,2*4N对模M=3取余为2,所以n为余数为2的个数。

进一步地,步骤S3中,由于m为余数1的个数,所以a为余数为1的个数,b为余数为2的个数。

进一步地,步骤S4中,由于n为余数2的个数,如果二进制数n的第0、2、4、6等偶数位上为1,则每个相应位置代表数值为2*4N,其中N为0、1、2、3等整数,2*4N对模M=3取余为2,所以c为余数为2的个数;

由于n为余数2的个数,如果二进制数n的第1、3、5、7等奇数位上为1,则每个相应位置代表数值为4N+1,其中N为0、1、2、3等整数,4N+1对模M=3取余为1,d为余数为1的个数。

进一步地,步骤S5中,余数为1的个数为e;余数为2的个数为f;根据e和f的值可以计算出对3取余运算的余数,不同的e和f的值对应不同的余数,这种对应关系相当于建立一个只读存储器ROM的组合逻辑功能的真值表。

进一步地,步骤S6中,ROM输出的余数为2位二进制正数0、1、2,如果输入数据x为正数,则使用位拼接运算符把0和ROM输出的余数拼接起来变为一个最高位为0的有符号数,作为最终的结果输出;如果输入数据x为负数,则其余数一般也为负数,可以先将ROM输出的余数按位取反后再加1变为对应的负数,使用位拼接运算符把1和这个负数拼接起来变为一个最高位为1的有符号数,作为最终的结果,其中如果余数为0,则直接输出,不进行上述操作;

由于基于余数校验的容错方案中会对三个支路产生的余数进行比较,而如果余数为负数,可将负数加上模数变为正数以方便余数间的比较;模为3,如果输入数据x为负数,则可以将ROM输出的余数按位取反,就可以得到负数加上模数变为正数的结果,其中如果余数为0,则直接输出,不进行上述操作,如果输入数据x为正数,则直接将ROM输出的余数作为结果。

与现有技术相比,本发明技术方案的有益效果是:

本发明方法中以模m=3为例,取模运算可以通过统计余数1与余数2的个数,然后根据余数1与余数2的个数查表确定余数,再根据输入数据的正负确定余数的最终结果,这种方法与直接使用%取模方法相比,大大降低了取模运算的开销。

附图说明

图1为本发明方法。

具体实施方式

附图仅用于示例性说明,不能理解为对本专利的限制;

为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;

对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。

下面结合附图和实施例对本发明的技术方案做进一步的说明。

实施例1

如图1所示,一种低开销取模方法,包括以下步骤:

S1,如果输入二进制数x的最高位为1,将二进制数x按位取反再加1变为正数,把正数的值赋给y,如果二进制数x的最高位为0,则直接将其值赋给y;

S2,求二进制数y的第0、2、4、6、8、10、12、14位上1的个数,设为m,如果二进制数y上述位置上数为1,则其代表的值对3取模得到的余数为1;

求二进制数y的第1、3、5、7、9、11、13位上1的个数,设为n,如果二进制数y上述位置上数为1,则其代表的值对3取模得到的余数为2;

另外,m的最大值为8,n的最大值为7;

S3,求二进制数m的第0、2位上1的个数,设为a,由于m为S2步骤中余数1的个数,所以a为余数1的个数;

求二进制数m的第1、3位上1的个数,设为b,由于m为S2步骤中余数1的个数,所以b为余数2的个数;

S4,求二进制数n的第0、2位上1的个数,设为c,由于n为S2步骤中余数2的个数,所以c为余数2的个数;

求二进制数n的第1位上1的个数,设为d,由于n为S2步骤中余数2的个数,所以d为余数1的个数;

S5,分别求S3和S4步骤中余数为1和余数为2总的个数,求得a与d的和,设为e,e为余数为1个数的总和;求得b与c的和,设为f,f为余数为2个数的总和;

根据e与f的值可以确定余数,例如,e与f均为1时,输出余数为0。这种关系相当于一个逻辑组合的真值表,使用只读存储器ROM将这个真值表的信息存储起来。根据e与f的值输出相应的余数,余数有位宽为2的二进制数0、1、2三种情况;

S6,如果S1步骤中的二进制数x最高位为0,则将只读存储器ROM输出的余数作为最终结果;

S7,如果S1步骤中的二进制数x最高位为1,则将只读存储器ROM输出除0外的余数按位取反后作为最终结果;如果输出余数为0,不经过取反操作直接作为最终结果。例如,如果输出余数为2,则代表取余运算的结果实际为-2,但是将位宽为2二进制余数2按位取反后就变成了1,这相当于将-2加上一个模数3的结果。

本实施例通过先计算出二进制有符号数x的余数1和余数2的个数,再通过余数1和2的个数查表得到有符号数x的最终余数。比在Verilog程序中直接使用%取模要更节省资源开销。

本申请所述的方法使用Vivado工具进行仿真和设计综合,结果如下:

对于位宽为49、33、16、6的数据x,使用新提出的取模方法的资源开销比在Verilog程序中直接使用%取模的资源开销分别节省46.2%、41.8%、65.0%、85.7%。由此可见,本申请提出的一种低开销的取模运算方法对降低取模运算的资源开销是非常有效的。

相同或相似的标号对应相同或相似的部件;

附图中描述位置关系的用于仅用于示例性说明,不能理解为对本专利的限制;

显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

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