Как бы вы справились с особым случаем в этой цифровой логической системе?
-
20-08-2019 - |
Вопрос
Я опубликовал эту цифровую логическую схему в качестве ответ Для еще один вопрос stackoverflow.Он описывает логическую систему, которая будет закодирована в Verilog или VHDL и в конечном итоге реализована в FPGA.
альтернативный текст http://img145.imageshack.us/img145/5125/bitshifterlogicdiagramkn7.jpg
Пронумерованные поля на диаграмме представляют биты в поле.Каждое поле имеет K биты, и биты для текущий и маска будет обеспечиваться компьютерной системой (с использованием заблокированного регистра или его эквивалента).Биты в Далее будет считан обратно в ту же компьютерную систему.
Решение, которое я опубликовал, работает до тех пор, пока в маска поле, и в нем установлен ровно один бит текущий битовое поле.Идея заключается в том, что Далее битовое поле станет текущий битовое поле после того, как компьютерная система выполнила какую-либо задачу (операцию планирования, в исходном вопросе).
Итак, мой вопрос заключается в следующем:Как бы вы изменили эту систему, чтобы она должным образом обрабатывала особый случай, когда текущий все битовое поле равно нулю (биты не установлены)? В нынешнем виде, если все биты в текущий равны нулю, выходные данные также будут равны нулю, независимо от того, какие биты в маска установлены на.
В идеале, если текущий это все нули, самый младший установленный бит в маска должно быть установлено в Далее.Система также должна по-прежнему оставаться масштабируемой до любого количества битов (K) без необходимости добавлять экспоненциально больше логических элементов.Суть первоначального вопроса заключалась в том, чтобы придумать решение, которое было бы легко реализовать для любого количества битов.
Смотрите также: этот вопрос stackoverflow
Решение
Что касается меня, я бы сказал пользователю FPGA, что у них должен быть один из битов, равный 1 при вводе.
Однако, если это не ваше предпочтительное решение, что плохого в идее предварительной подачи всех текущих входных данных изначально в большой элемент NOR (чтобы выходные данные были истинными только тогда, когда все входные данные равны false).Все линии тока также продолжаются до их элементов AND, за исключением того, что ток [1] является OR'ed с выходом нашего элемента NOR перед входом в его элемент AND
Таким образом, ток [1] был бы истинным, входящим в элемент И, если все Токи ложны.
Имейте в виду, что я понимаю булеву алгебру, но я никогда не работал на необработанном оборудовании - я предполагаю, что вам нужно будет буферизировать все входные сигналы в элементы И, чтобы обеспечить правильную синхронизацию, но я подозреваю, что вы знаете это лучше, чем я.
Следующая диаграмма оставлена на случай, если SO исправит свой код / предварительные блоки - последнее обновление SO, похоже, наполнило их (оставив их пропорциональным шрифтом, а не шрифтом фиксированной ширины).В любом случае, графическая диаграмма Эджеймса лучше.
Вот моя схема, немного менее элегантная, чем ваша :-):
+-------------------+
| |
| +---- |
Current[1]-----+------\ \ |
|NOR|o--+ |
Current[2-k]---+------/ / | |
| +---- | |
| +\ /+
| | \_/ |
+---+ | OR |
\ /Buffer \ /
+ ---
| |
+---+ +---+
|2-k| | 1 | <- These signals feed
+---+ +---+ into your AND gates.