Чем больше операторов возврата Вы имеете в функции, тем более высокая сложность в том одном методе. Если Вы задаетесь вопросом, если у Вас есть слишком много операторов возврата, Вы могли бы хотеть спросить себя, если у Вас есть слишком много строк кода в той функции.
, Но, не, нет ничего неправильно с одним/многими операторами возврата. На некоторых языках это - лучшая практика (C++), чем в других (C).
Я могу сделать это за 10. Это первый этап счетчика (4 стола), затем двухступенчатый сумматор с переносом (3 и 3 таблицы).
Я подозреваю, что есть способ чтобы добиться большего, потому что я не использовал каждую таблицу LUT полностью, но иногда простой дизайн стоит дополнительных затрат. Я пробовал другие подходы, но мне все равно понадобилось 10.
Удачи вам с домашним заданием. (:
Вот код C, который подсчитывает количество битов: Код C для подсчета количества битов «1» . Вам придется преобразовать это в свое оборудование.
Что ж, я начну. Ваш первый уровень таблиц поиска будет выглядеть так:
0 0 0 0 = 00
0 0 0 1 = 01
0 0 1 0 = 01
0 0 1 1 = 10
0 1 0 0 = 01
0 1 0 1 = 10
0 1 1 0 = 10
0 1 1 1 = 11
1 0 0 0 = 01
1 0 0 1 = 10
1 0 1 0 = 10
1 0 1 1 = 11
1 1 0 0 = 10
1 1 0 1 = 11
1 1 1 0 = 11
1 1 1 1 = 00
Распределите четыре из них по вашему пятнадцатибитному входу, возьмите выходы и пропустите их через две новые таблицы поиска, которые выглядят следующим образом:
0 0 0 0 = 000
0 0 0 1 = 001
0 0 1 0 = 010
0 0 1 1 = 011
0 1 0 0 = 001
0 1 0 1 = 010
0 1 1 0 = 011
0 1 1 1 = 100
1 0 0 0 = 010
1 0 0 1 = 011
1 0 1 0 = 100
1 0 1 1 = 101
1 1 0 0 = 011
1 1 0 1 = 100
1 1 1 0 = 101
1 1 1 1 = 110
... и так далее . Конечно, вам придется решить проблему со всеми нулями и всеми единицами, производящими одинаковый результат на первом уровне.
И я могу совершенно ошибаться.