在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3907|回复: 6

[求助] 怎么快速求一串二进制的第一个1的位置

[复制链接]
发表于 2014-5-10 23:19:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
比如 一个64位的二进制数   64'b00011.....怎么用一拍就找到第一个1的位置啊,我想了2种方法,但是综合的路径太长了,都不好用,在写浮点加法器加流水线的时候遇到的 问题,有没有大神知道啊,小弟先谢谢了
发表于 2014-5-11 10:57:09 | 显示全部楼层
你直接用casex语句就可以了啊
casex(a)
    64'bxxxxxxxxxx1 : b = 0;
    64'bxxxxxxxxx1x : b = 1;
...
64'b1xxxxxxxx : b= 63;
endcase
这样做路径不是很长,在写前导零或前导一检测逻辑都是这样做的。
发表于 2014-5-11 18:10:51 | 显示全部楼层
case 不是并行的吗?那如果是64'b11
那么b等于零还是一?
发表于 2014-5-11 21:29:54 | 显示全部楼层
少年,查找表试试?
发表于 2014-5-11 22:45:34 | 显示全部楼层
本帖最后由 wupenghhr 于 2014-5-11 22:48 编辑

回复 1# nudtfei

case 显然是有优先级的,所以用 parallel case 应该木有问题,看看后端工具可以做到啥样如果不行,就得人工的的增加逻辑减少关键路径 64位的逻辑可以用两个并行的32位来做,所以这样想的话最后的复杂度是logn ?
 楼主| 发表于 2014-5-12 11:43:25 | 显示全部楼层
回复 3# 418478935


   我看书上也是说并行综合的,不过可以写成

casex(a)
    64'bxxxxxxxxxx1 : b = 0;
    64'bxxxxxxxxx10 : b = 1;
...
   64'b100000000000: b= 63;
这样写是不是体现出优先级了?
 楼主| 发表于 2014-5-12 11:44:25 | 显示全部楼层
回复 2# michael_klein


   嗯 ,我试了,路径确实短了很多,以后再写就知道怎么写了,谢谢你的指导
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-27 09:24 , Processed in 0.023426 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表