微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 怎么快速求一串二进制的第一个1的位置

怎么快速求一串二进制的第一个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;
这样写是不是体现出优先级了?



   嗯 ,我试了,路径确实短了很多,以后再写就知道怎么写了,谢谢你的指导

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top