Длина самых длинных последовательных 1 в двоичном числе - PullRequest
0 голосов
/ 09 декабря 2018

Мне нужно реализовать цифровую логическую схему с логическими элементами, такими как AND, OR, NOT, ADDER (и т. Д.), Которые получают 8-битное двоичное число и возвращают число самых длинных последовательных 1 на входе.

Например:

11110011 - вернется 4

10101111 - также вернется 4

01111111 - вернется 7

Я был бы очень признателен за помощь, так как в течение нескольких дней я изо всех сил пытаюсь найти решение этой проблемы.

Спасибо!

1 Ответ

0 голосов
/ 10 декабря 2018

Я сгенерировал таблицу истинности с 256 терминами и сократил ее до 47 с помощью минимизатора Espresso :

enter image description here

ЗатемЯ преобразовал сжатую таблицу в многоуровневую схему (слишком большой, чтобы отображать ее здесь как изображение).Для этого я использовал 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 бита.Это можно оптимизировать для первых срезов, где количество меньше.

enter image description here

...