Долото: как эффективно использовать один горячий мукс?

У меня есть таблица, где каждая строка таблицы содержит состояние (регистры). Существует логика, которая выбирает одну конкретную строку. Только одна строка принимает "выбранный" сигнал. Затем открывается состояние из этой выбранной строки. Либо часть состояния подключается как выход к IO модуля, либо часть IO используется в качестве входа для обновления состояния.

Если бы я реализовал это с помощью схемы, я бы использовал pass-gates. Выбранный сигнал включал бы один набор проходов, которые соединяли бы регистры строк с шиной. Затем шина будет подключена к набору IO. Это быстро, небольшая площадь и низкая энергия.

Существует прямой способ реализации этого в долото. Он кодирует выбранную строку как двоичное число, а затем применяет это число к выбору входа традиционного мультиплексора. К сожалению, для таблицы с 20-50 строками и состоянием сотен бит эта реализация может быть довольно медленной и расточительной по площади и энергии.

Вопрос состоит из двух частей: 1) Есть ли способ указать шины в долото, так что у вас есть проходные ворота или традиционные драйверы с тремя состояниями, которые все висят на шине?

2) Если это не так, есть ли быстрый, небольшой участок, способ с низким энергопотреблением сделать это в долото?

Спасибо

Ответ 1

1) Долото не полностью поддерживает двунаправленные провода, но через экспериментальный аналоговый тип (см. пример), вы можете по крайней мере сшить автобус через ваш долото код между Verilog Black Boxes.

2) Вы пробовали Mux1H в chisel3.util? Он испускает по существу сумму продуктов входов и их соответствующих битов выбора. Я не уверен, как это сравнивается с предлагаемой вами реализацией. Мне бы хотелось увидеть сравнение QOR. Если этой конструкции недостаточно, и вы не можете точно выразить то, что хотите в долото, вы можете использовать параметризованный BlackBox для реализации вашего горячего мультиплексора и создайте его, как вам будет угодно.