Chisel3 - util - Math vs. CircuitMath

 
 
对数相关的辅助方法,Math通过软件方法实现,CircuitMath通过硬件方法实现。
 
参考链接:
 
 
1. Math
 
1) log2Up
 
log2Ceil,建议使用log2Ceil。
 
2) log2Ceil
 
求对数,向上取整。
 
 
一方面:
1位二进制无符号数,表示的数值范围:0, 1
2位二进制无符号数,增加的数值范围:2, 3
3位二进制无符号数,增加的数值范围:4, 5, 6, 7, 即:2^(3-1) .. 2^3 - 1
...
n位二进制无符号数,增加的数值范围:2^(n-1) .. 2^n - 1
 
即是bitLength每增加1,增加的数值范围;
 
另一方面:
若log2(N)向上取整为n,则N的数值范围为:2^(n-1) + 1 .. 2^n;
则N-1的数值范围为:2^(n-1) .. 2^n - 1,这正是n位二进制无符号数所增加的数值范围;
 
所以:
(N-1).bitLength = n;
 
仅供理解,并非严谨证明。姑妄观之。
 
3) log2Down
 
log2Floor,建议使用log2Floor。
 
4) log2Floor
 
求2的对数,向下取整。
基于log2Ceil,把向上取整加的1减掉。如果没有加1,也就不需要减了。
 
5) isPow2
 
判断一个数字是否2的指数幂。
 
 
2. CircuitMath
 
生成一个计算某个数的2的对数值的电路。小数部分舍弃掉。
 
 
1) Log2
 
使用分治策略,若高位的一半有比特置1,则使用高位的一半进行后续计算。
 
3. 附录
posted @ 2018-12-24 11:06  wjcdx  阅读(1000)  评论(0编辑  收藏  举报