我需要实现一个具有逻辑门的数字逻辑电路,例如AND,OR,NOT,ADDER(等等),该逻辑门将获得8位二进制数并返回输入中最长的连续1的数字。
例如:
11110011-将返回4
10101111-还将返回4
01111111-将返回7
我非常感谢您的帮助,因为我努力工作了数天才能找到解决该问题的方法。
谢谢!
答案 0 :(得分:0)
我使用Espresso最小化器生成了一个包含256个条件的真值表,并将其简化为47个条件:
然后,我将压缩表转换为多级circuit(太大了,无法在此处显示为图像)。为此,我使用了Logic Friday 1。
通过将我的C#例程映射到gates中,可能会得出更简单的电路:
private static int countConsecutiveBits(int i)
{
int bMax = 0;
int b = 0;
for (int j = 0; j < 8; j++)
{
if (((i >> j) & 1) == 1)
{
b++;
if (bMax < b)
{
bMax = b;
}
}
else
{
b = 0;
}
}
return bMax;
}
这将涉及您的问题中所述的加法器和比较器。
以下电路-手工制作且未经验证-是一个位片,将到目前为止的最大位数,当前位数和各个位数作为输入。输出是新的最大位数和当前位数。所有计数均为4位宽。可以针对计数较小的第一个切片进行优化。