首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

一个编码的实现

一个编码的实现

一个8bit的值, 找出其中有几个1

example:
if value = 8'b0000_0010; then result = 4'd1
if value = 8'b0010_0010; then result = 4'd2
if value = 8'b0111_0000; then result = 4'd3

感觉需要比较大的逻辑。
有没有最优设计,
请赐教!!
多谢!!
问题在FpgaChina.com的论坛得到回答。

〉〉建议者:
8位数各种情况加起来是2的8次方256种可能性

如果按你现在这种写法那判断条件非常多

实现起来不太现实

可以用计数法去记8位数的0--7

比如

value[0]+value[1]+value[2]--value[7]

用结果计数

这样的话是几个1结果就是多少

感觉这样相对可行些

欢迎有问题再一起探讨继续讨论

〉〉本人对他的回复:
有道理
不过Value[0] + Value[1] 可能会溢出

打算这样尝试:
assign NexValue0[1:0] = {0, Value[0]} + {0, Value[1]}
assign NexValue1[1:0] = {0, Value[2]} + {0, Value[3]}
assign NexValue2[1:0] = {0, Value[4]} + {0, Value[5]}
assign NexValue3[1:0] = {0, Value[6]} + {0, Value[7]}

assign NNextValue0[2:0] = {0, NextValue0[1:0]} + {0, NextValue1[1:0]};
assign NNextValue1[2:0] = {0, NextValue2[1:0]} + {0, NextValue3[1:0]};

assign CouterVal[3:0] = {0, NNextValue0[2:0]} + {0, NNextValue1[2:0]};

如果有可优化的方法,请给予指点,多谢!!
返回列表