首页 文章

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

提问于
浏览
0

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

例如:

11110011 - 将返回4

10101111 - 也将返回4

01111111 - 将返回7

我真的很感激一些帮助,因为我几天都在苦苦寻找解决这个问题的方法 .

谢谢!

1 回答

  • 0

    我用256个术语生成了一个真值表,并使用Espresso minimizer将其减少到47个术语:

    然后,我将压缩表转换为多级circuit(太大而不能在此显示为图像) . 为此,我使用了Logic Friday 1 .

    通过将我的C#例程映射到门中,可以得到更简单的电路:

    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位宽 . 这可以针对计数较小的第一切片进行优化 .

相关问题