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