2016-12-19 10 views
10

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

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

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

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

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

Благодаря

ответ

2

1) Зубило не полностью поддерживает двунаправленную провода, но с помощью экспериментального типа аналогового (see example), вы можете по крайней мере, вязально автобус через код Долото между Verilog черных ящиков.

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

+0

Спасибо за ссылку. Это на самом деле вызывает постоянный и критический момент для нас. Мы не сложные кодировщики. Но люди, внедряющие Rocket и Chisel разработчики. Уровень сложности в практике кодирования программного обеспечения намного выше наших навыков. Обучение, необходимое для понимания реализации Mux1H, является нетривиальным. – seanhalle

+0

Эта непроницаемость кода зубила была постоянным препятствием. С одной стороны, базовое долото более продуктивно, чем Verilog. Требуется от месяца до двух месяцев, чтобы иметь возможность доставлять полезную работу в долото. Около 60% людей, которых мы наняли, ушли, потому что они не могли добраться даже до этого момента. Но уровень, представленный Mux1H, и все чаще по Rocket-коду, я оцениваю, пожалуй, от 6 месяцев до года, чтобы получить удовольствие от такой практики кодирования. Это реальная проблема для нас при создании коммерческого продукта с использованием обычных разработчиков Verilog. – seanhalle

+0

Как добраться до содержимого ответа .. Спасибо за отзыв о Analog. В пункте 1) я не был ясно из упоминания о Verilog Black Boxes. И я не знал о двунаправленности. Шина фактически однонаправленная. Он просто имеет несколько источников, которые могут управлять одним и тем же проводом. Драйвер три-состояния, например, однонаправлен. Кроме того, логика, которая вводит значения в шину и получает от шины, - это все долото. Нет явных ящиков Verilog Black ... – seanhalle