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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: 大林

[求助] 如何快速定位一个二进制数字中第一个1的位置

[复制链接]
 楼主| 发表于 2017-6-14 16:45:58 | 显示全部楼层
回复 10# 殷工

如果是个200位的数据,那就需要200个时钟周期,这时间太长了
发表于 2017-6-14 16:54:50 | 显示全部楼层
回复 11# 大林


    用组合逻辑做,只有判断移位和+1操作在FPGA内可一很快的完成。
发表于 2017-6-14 17:55:57 | 显示全部楼层
用if/else语句了,从第0开始扫描
 楼主| 发表于 2017-6-14 19:57:58 | 显示全部楼层
回复 12# 殷工


    组合逻辑怎么实现?可以写一段简短的代码吗
发表于 2017-6-14 20:55:24 | 显示全部楼层
回复 5# 大林


   怎么会是48位呢?只有7位啊,8位检测产生的3位总是处于低3位的。高4位是由16个8位段的有无结果按照从右到左扫描产生的。
发表于 2017-6-15 11:14:02 | 显示全部楼层
本帖最后由 冲出藩篱 于 2017-6-15 12:04 编辑

仔细想了一下:
如果需要在一个时钟周期得到结果的话,直接用并行的if语句分别对每个bit直接判断
,相当于优先级编码。
  if bit[1] == 1 begin
       cnt <= 1;
   end
  if bit[2] == 1 begin
       cnt <= 2;
   end
  if bit[3] == 1 begin
       cnt <= 3;
   end
  
        .
        .
        .
  if bit[127] == 1 begin
       cnt <= 127;

  end
发表于 2017-6-15 11:15:14 | 显示全部楼层
多谢多谢
发表于 2017-6-15 11:19:58 | 显示全部楼层
回复 16# 冲出藩篱


   这地址也太宽了吧
发表于 2017-6-15 11:45:22 | 显示全部楼层
以前做过一个类似的模块,楼主看下有没有帮助;
用了3拍查找出来的
http://www.eetop.cn/blog/505866/viewspace-564193.html
发表于 2017-6-15 12:10:23 | 显示全部楼层
回复 18# 菜鸟要飞

太宽了,一百多位如果都用作ROM地址,不可行。如果分段的话,按照楼主一个周期出结果的要求,时序上也满足不了。
想了半天我认为楼主只是嫌case语句写起来麻烦,使用并行if的优先级编码方式应该
是他想要的结果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-13 03:31 , Processed in 0.025306 second(s), 9 queries , Gzip On, Redis On.

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