如何构建一个面积有效的电路,使用4输入LUT(查找表)计算15位输入中的设置位数。输出显然是4位(计数0-15)。有些人声称可以使用9个LUT。
答案 0 :(得分:2)
好吧,我会帮你的。您的第一层查找表将如下所示:
0 0 0 0 = 00
0 0 0 1 = 01
0 0 1 0 = 01
0 0 1 1 = 10
0 1 0 0 = 01
0 1 0 1 = 10
0 1 1 0 = 10
0 1 1 1 = 11
1 0 0 0 = 01
1 0 0 1 = 10
1 0 1 0 = 10
1 0 1 1 = 11
1 1 0 0 = 10
1 1 0 1 = 11
1 1 1 0 = 11
1 1 1 1 = 00
在你的15位输入中传播其中的四个,获取输出并将它们传递给两个新的查找表,如下所示:
0 0 0 0 = 000
0 0 0 1 = 001
0 0 1 0 = 010
0 0 1 1 = 011
0 1 0 0 = 001
0 1 0 1 = 010
0 1 1 0 = 011
0 1 1 1 = 100
1 0 0 0 = 010
1 0 0 1 = 011
1 0 1 0 = 100
1 0 1 1 = 101
1 1 0 0 = 011
1 1 0 1 = 100
1 1 1 0 = 101
1 1 1 1 = 110
......等等。当然,你将不得不解决所有零和所有在第一层产生相同输出的问题。
我可能完全错了。
答案 1 :(得分:1)
我可以在10中完成。它是第一个计数器阶段(4个表),然后是带有进位的2阶段加法器(3和3个表)。
我怀疑有一种方法可以做得更好,因为我没有完全使用每个LUT,但有时一个简单的设计值得花费额外费用。我尝试了其他方法,仍然需要10。
祝你的家庭作业好运。 (:
答案 2 :(得分:-5)
这里有一些计算位数的C代码: C code to count the number of '1' bits。你必须将它转换成你的硬件。