Как бы вы справились с особым случаем в этой цифровой логической системе? - PullRequest
2 голосов
/ 28 января 2009

Я разместил эту цифровую логическую диаграмму в виде ответа на другого вопроса переполнения стека . Он описывает логическую систему, которая будет закодирована в Verilog или VHDL и в конечном итоге реализована в FPGA.

альтернативный текст http://img145.imageshack.us/img145/5125/bitshifterlogicdiagramkn7.jpg

Пронумерованные прямоугольники на диаграмме представляют биты в поле. Каждое поле имеет K бит, а биты для current и mask будут предоставлены компьютерной системой (с использованием фиксированного регистра или эквивалентного). Биты next будут считаны обратно в ту же компьютерную систему.

Решение, которое я опубликовал, работает до тех пор, пока в поле mask установлен хотя бы один бит, а в поле current bit установлен ровно один бит. Идея состоит в том, что битовое поле next станет битовым полем current после того, как компьютерная система выполнила какую-либо задачу (операция планирования, в исходном вопросе).

Итак, мой вопрос таков: Как бы вы изменили эту систему так, чтобы она правильно обрабатывала особый случай, когда битовое поле current все равно нулю (без битов)? Как есть, если все биты в current равен нулю, выход также будет равен нулю, независимо от того, какие биты в mask установлены.

В идеале, если current - все нули, младший установленный бит в mask должен быть установлен в next . Система также должна оставаться масштабируемой до любого количества бит (K) без необходимости экспоненциально добавлять больше логических элементов. Суть первоначального вопроса заключалась в том, чтобы найти решение, которое было бы легко реализовать для любого количества бит.

См. Также: этот вопрос о переполнении стека

1 Ответ

2 голосов
/ 28 января 2009

Для меня, я бы сказал пользователю ПЛИС, что у него должен быть один из битов, установленный на 1 при входе.

Однако, если это не ваше предпочтительное решение, что не так с идеей предварительной подачи всех токовых входов вначале в большой вентиль NOR (так, чтобы вывод был истинным только тогда, когда все входы ложны). Все Токовые линии также продолжаются до своих логических элементов И, за исключением того, что Ток [1] ​​ИЛИ с выходом нашего логического элемента ИЛИ перед входом в свой логический элемент И

Таким образом, ток [1] ​​будет истинным входом в логический элемент И, если все токи ложны.

Имейте в виду, что я понимаю булеву алгебру, но я никогда не работал с необработанным оборудованием - я предполагаю, что вам нужно будет буферизовать все входные сигналы в логические элементы AND, чтобы обеспечить правильную синхронизацию, но я подозреваю, что вы знаете это лучше, чем я.

Следующая диаграмма оставлена ​​на случай, если SO исправит свой код / ​​предварительные блоки - последнее обновление SO, похоже, заполнило их (оставив их пропорциональным, а не шрифтом фиксированной ширины). В любом случае, графическая схема eJames лучше.

Вот моя диаграмма, чуть менее элегантная, чем ваша: -):

+-------------------+ | | | +---- | Current[1]-----+------\ \ | |NOR|o--+ | Current[2-k]---+------/ / | | | +---- | | | +\ /+ | | \_/ | +---+ | OR | \ /Buffer \ / + --- | | +---+ +---+ |2-k| | 1 | <- These signals feed +---+ +---+ into your AND gates.

...