vak: (Улыбка)
[personal profile] vak
TH22 - двухвходовый вентиль NCL-логики с порогом 2, он же C-элемент Мюллера - можно построить из двух корпусов чипа CD4007. Схема следующая:

Моделируем посредством NGSPICE. Красный и синий цвета - входы A и B, желтый - выход C. Вентиль TH22 переключается в единицу, когда оба входных сигнала равны 1, и обратно в ноль, когда оба входа равны 0. Фактиччески он содержит внутри триггер, то есть ячейку памяти на одит бит информации - как и большинство остальных вентилей NCL-логики.

Хорошо видно, что задержка переднего фронта почти в два раза меньше, чем задержка заднего фронта.



На следующем графике изображён ток потребления (красный) и токи по входам (синий, жёлтый).

Date: 2016-07-06 06:12 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Интересно, будет ли работать псевдо-асинхронная логика, в которой TH22 - попросту
always@(posedge fastclk) if (a==b) c <= a;
а частота fastclk определяется только задержкой фидбека.

Date: 2016-07-06 07:14 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Так соотношение задержек не гарантируется.

Date: 2016-07-06 20:49 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Я имею в виду, что задержка фидбека "внутри" вентиля обязана быть меньше, чем любая задержка по пути, проходящему "снаружи" вентиля. При FPGA синтезе произвольной логики это гарантироваться не будет, а если пользоваться state elements - будет. На старых FPGA можно было бы воспользоваться реализацией с двумя SR-latch, но на современных это расточительно: уникальные управляющие сигналы приведут к тому, что каждая защёлка будет занимать целый slice.

Date: 2016-07-08 01:29 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Я имею в виду в точности то, что написано в википедии.

Ну да, и то, что delay assumptions могут не быть гарантированы, если пользоваться только LUT-ами. Даже если не давать синтезатору волю, никто не знает, что там будет после P&R.

Date: 2016-07-08 02:12 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Если 2 выхода, то 5 входов, даром что называется LUT6_2.
В принципе можно, но до недавнего времени у Xilinx были проблемы с дизайнами, в которых много LUT6_2. У них выходы слегка неравнозначны с точки зрения routing, и какой лучше использовать для фидбека, неясно, а сам Xilinx выходы местами не меняет.
Edited Date: 2016-07-08 02:17 (UTC)

Date: 2016-07-08 01:42 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
При попытке реального использования вылетит на P&R с ошибкой типа "too many clock nets".

Date: 2016-07-08 02:19 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Нет, но вроде clr тоже забирает clocking resource.

Date: 2016-07-08 02:46 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Может, я и ошибаюсь. Но всё равно, control sets (CLR+GE) получаются уникальные, так что по 1 элементу на слайс выходит.

Date: 2016-07-08 04:28 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Я смотрел в графическом виде на результат однажды много лет назад ради интереса (где-то даже пост есть на этот счет). С тех пор ISE сменился на Vivado, а сохранилась ли возможность, я не проверял. Один или парочка разместятся с легкостью. Интереснее смотреть на несколько сотен или несколько тысяч.

Date: 2016-07-08 22:27 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Не помню, показывал ли тебе

Tools for emulating transistor-level netlists on FPGAs http://fpga-netlist-tools.github.com

Date: 2016-07-11 19:13 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Что смешно, 20+ лет назад я начинал с эмулятора Zycad, в котором был специальный хардверный алгоритм для эмуляции двунаправленных цепей, потому что они, видимо, были еще популярны ради экономии транзисторов. Но как только тактовые частоты выросли до двузначных чисел мегагерц, халява кончилась: работают эти двунаправленные цепи, нуждающиеся в утечке заряда для смены значения, исключительно медленно.

задержки можно использовать для симуляции в верилоге для оценки быстродействия асинхронного дизайна

Это интересная идея, да.