怎么快速求一串二进制的第一个1的位置
时间:10-02
整理:3721RD
点击:
比如 一个64位的二进制数 64'b00011.....怎么用一拍就找到第一个1的位置啊,我想了2种方法,但是综合的路径太长了,都不好用,在写浮点加法器加流水线的时候遇到的 问题,有没有大神知道啊,小弟先谢谢了
你直接用casex语句就可以了啊
casex(a)
64'bxxxxxxxxxx1 : b = 0;
64'bxxxxxxxxx1x : b = 1;
...
64'b1xxxxxxxx : b= 63;
endcase
这样做路径不是很长,在写前导零或前导一检测逻辑都是这样做的。
case 不是并行的吗?那如果是64'b11
那么b等于零还是一?
少年,查找表试试?
case 显然是有优先级的,所以用 parallel case 应该木有问题,看看后端工具可以做到啥样如果不行,就得人工的的增加逻辑减少关键路径 64位的逻辑可以用两个并行的32位来做,所以这样想的话最后的复杂度是logn ?
我看书上也是说并行综合的,不过可以写成
casex(a)
64'bxxxxxxxxxx1 : b = 0;
64'bxxxxxxxxx10 : b = 1;
...
64'b100000000000: b= 63;
这样写是不是体现出优先级了?
嗯 ,我试了,路径确实短了很多,以后再写就知道怎么写了,谢谢你的指导
