设计电路确定当前32bit数能被5整除
if ( ( num_32bit%5) ==3'd0 )
取余操作一般不能被有效综合
2# xiaogouggg
先左移1比特,然后用二进制转换十进制译码器,如何?
wire [6:0] sum1; assign sum1 = a[31:28] + a[27:24] + a[23:20] + a[19:16] + a[15:12] + a[11:8] + a[7:4] + a[3:0];
wire [4:0] sum2;
assign sum2 = sum1[6:4] + sum1[3:0];
if (sum2 % 5 ==0) can_be_divided = 1;
原理在本版的另一个帖子里17楼,不是我原创哦,但我推导过是正确的。
我觉得是我原创的。
学习一下
算法很神奇,值得推敲一下
还是用了%
学习下
very simple
学习了。可能有些人还没有明白,我来总结一下:
这个算法很巧妙的地方在于利用了“16的N(N为非负整数)次方除5,余数为1”这个特性,因而判断一个二进制数能否被5整除与判断其十六进制数各位累加和能否被5整除是一样的,这也是上面构造sum1、sum2的原因。用这种方法可以迅速缩小输入值的位数,但计算出sum2后,用“sum2 % 5 ==0”来判断同样会遇到不好综合的问题,不太好。实际上,可以判断出sum2<23,那么在这条件下能被5整除是数只有0、5、10、15、20,5个数而已,可以分别与这5个数比较并将结果或一下就好了。
另外也可以用比较和减法实现,大致如下:
while(1)
{
if(sum2>=5)
sum2=sum2-5;
else
{
if( sum2==0 )
TRUE;
else
FALSE;
break;
}
}
请参考:http://bbs.eetop.cn/thread-269775-1-1.html
