Я изучаю реализацию 4-разрядной функции BitSet на уровне логических ворот, чтобы ее можно было записать в структурном Verilog - я искал в другом месте для ответа на этот вопрос, но могут находить только ресурсы C/C++, которые работают на более высоком уровне и в большинстве случаев мне не нужны.Bitset на уровне логических ворот
Входы на мой интерфейс представляют собой 4-битное число х, два-битное число индекс, содержащий индекс, чтобы быть установлен или сброшен в х, один-битное число значение а, содержащий значение x [index] должен быть установлен на (1 или 0 для установки или очистки соответственно) и 4-разрядный выход y, что является окончательным результатом x.
В моем понимании, установив значение х следует логический у | = 1 < < х и клиринговых значение х следует Y & = 1 < < х, так что если значение равно 1, отправка его через логический элемент ИЛИ со значением, уже указанным в этом индексе x, приведет к значению 1, и если значение равно, оно равно 0, отправив его через логический элемент И со значением, уже указанным в этом индексе x приведет к 0. Это имеет смысл для меня.
Это также имеет смысл, что если я начинаю с 4-разрядным числом х, что я мог бы поставить его через демультиплексор блок 1-к-4 (в стороне от основных логических вентилей, у меня есть MUX демультиплексируй , компараторы величин и двоичные сумматоры в моем распоряжении) для получения отдельных бит.
Что я не уверен в том, как получить из четырех отдельных битов, чтобы выбрать один из них, чтобы изменить на основе значения, хранящегося в , индекс, используя только базовые логические ворота. Любые идеи или указатели для меня, чтобы начать? Думаю ли я об этом правильно?
Но будет ли это рассматриваться как структурный уровень verilog? Мне всегда говорили, что аргументы/else относятся к поведенческим и что структурный дизайн может быть представлен иерархическим дизайном, используя только блоки ворот (и, или, не, и т. Д. И т. Д.). –
Хорошо, если вы используете инструменты синтеза, они преобразуют его в ворота для вас, поэтому вам не нужно беспокоиться.В случае, если вы действительно хотите использовать ворота, просто используйте Mux с выделенной строкой в качестве индекса, потому что это то, к чему приводятся операторы case, если другие и тройные операторы синтезируются. – DBB