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

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

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

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

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


no subject
Date: 2016-07-06 06:12 (UTC)always@(posedge fastclk) if (a==b) c <= a;
а частота fastclk определяется только задержкой фидбека.
no subject
Date: 2016-07-06 07:09 (UTC)Не будет ли это эквивалентно выражению
always@(*) if (a==b) c <= a;
no subject
Date: 2016-07-06 07:14 (UTC)no subject
Date: 2016-07-06 20:37 (UTC)no subject
Date: 2016-07-06 20:49 (UTC)no subject
Date: 2016-07-06 22:22 (UTC)Ну и пусть занимает целый слайс. Это лучше, чем вводить неестественные сущности типа скоростных клоков.
no subject
Date: 2016-07-08 01:20 (UTC)Можешь показать на примере?
Я глянул устройство слайса на Xilinx Artix 7 - да, можно использовать имеющиеся триггеры в режиме latch SRLOW. Но они сгруппированы по четыре с общими сигналами CE, CK и CLR, поэтому три четверти защёлок будут простаивать. Видимо, это народ и имеет в виду, когда говорят, что FPGA не подходят для асинхронной логики.
no subject
Date: 2016-07-08 01:29 (UTC)Ну да, и то, что delay assumptions могут не быть гарантированы, если пользоваться только LUT-ами. Даже если не давать синтезатору волю, никто не знает, что там будет после P&R.
no subject
Date: 2016-07-08 02:11 (UTC)Но нельзя ли из одного LUT-а соорудить С-элемент, завернув выходы на входы?
Ведь у LUT-а шесть входов и два выхода.
no subject
Date: 2016-07-08 02:12 (UTC)В принципе можно, но до недавнего времени у Xilinx были проблемы с дизайнами, в которых много LUT6_2. У них выходы слегка неравнозначны с точки зрения routing, и какой лучше использовать для фидбека, неясно, а сам Xilinx выходы местами не меняет.
no subject
Date: 2016-07-08 01:39 (UTC)module th22 ( input wire a, // input input wire b, // input output wire z // output ); assign set = a & b; assign clr = !a & !b; // LDCE: Transparent latch with Asynchronous Reset and Gate Enable. // 7 Series Xilinx HDL Libraries Guide, version 2016.2 LDCE #( .INIT (0) // Initial value of latch ) LDCE_inst ( .Q (z), // Data output .CLR (clr), // Asynchronous clear/reset input .D (1), // Data input .G (1), // Gate input .GE (set) // Gate enable input ); endmoduleno subject
Date: 2016-07-08 01:42 (UTC)no subject
Date: 2016-07-08 01:58 (UTC)Он GE как clock воспринимает, что ли?
no subject
Date: 2016-07-08 02:19 (UTC)no subject
Date: 2016-07-08 02:43 (UTC)Это же "медленный" сигнал.
no subject
Date: 2016-07-08 02:46 (UTC)no subject
Date: 2016-07-08 03:12 (UTC)В слайсе ведь четыре LUT-а и две группы по четыре триггера.
Из каждой группы мы можем задействовать по одному триггеру в качестве защёлок.
Получается по одному LUT-у на сигналы CLR и GE для двух пороговых элементов.
Ты наверняка умеешь смотреть в графическом виде результат после place&route?
Можешь попробовать синтезировать один или парочку TH22 таким способом?
Интересно, что получится.
У меня просто опыта с тулзами Xilinx маловато.
no subject
Date: 2016-07-08 04:28 (UTC)no subject
Date: 2016-07-09 04:03 (UTC)Если бы подтвердилось, что асинхронные гейты можно уложить в FPGA устойчивым способом, то дальше можно ставить задачу порождать соответствующий нетлист из Yosys.
no subject
Date: 2016-07-08 22:27 (UTC)Tools for emulating transistor-level netlists on FPGAs http://fpga-netlist-tools.github.com
no subject
Date: 2016-07-09 04:11 (UTC)Я в принципе освоил ngspice, всё в нём нормально. Его можно вызывать как библиотеку из своей сишной программы, то есть строить специализированные тулзы, например для верификации элементарных асинхронных вентилей и регистров.
no subject
Date: 2016-07-11 19:04 (UTC)Мужики восстанавливают транзисторную схему и умудряются отладить её до работоспособного состояния.
Кучу доисторических микропроцессоров осилили.
Есть даже что-то про калькулятор HP-35, недоделанное.
Я затеял бодягу с ngspice в основном с целью проверить работоспособность CMOS-вариантов элементарных NCL-вентилей, и получить численные значения задержек. Потом эти задержки можно использовать для симуляции в верилоге для оценки быстродействия асинхронного дизайна.
no subject
Date: 2016-07-11 19:13 (UTC)задержки можно использовать для симуляции в верилоге для оценки быстродействия асинхронного дизайна
Это интересная идея, да.