二进制数中最长的连续1的长度

时间:2018-12-09 18:09:51

标签: bit-manipulation boolean-logic binary-data digital-logic

我需要实现一个具有逻辑门的数字逻辑电路,例如AND,OR,NOT,ADDER(等等),该逻辑门将获得8位二进制数并返回输入中最长的连续1的数字。

例如:

11110011-将返回4

10101111-还将返回4

01111111-将返回7

我非常感谢您的帮助,因为我努力工作了数天才能找到解决该问题的方法。

谢谢!

1 个答案:

答案 0 :(得分:0)

我使用Espresso最小化器生成了一个包含256个条件的真值表,并将其简化为47个条件:

enter image description here

然后,我将压缩表转换为多级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位宽。可以针对计数较小的第一个切片进行优化。

enter image description here