У Вас есть способ проверить, что нарисованные логические элементы соответствуют таким же внутри FPGA? Наверное нет. По двум причинам. 1) Gowin EDA показывает только границы логического блока, но не показывает его внутреннюю схему. Возможно, он пишет названия использованных ресурсов. 2) Логические элементы с числом входов больше двух (например 3И-НЕ) всегда реализуются на LUT. Другой возможности нет. Асинхронные схемы исторически начинались с многоразрядного сумматора. Почему? Потому что в нём есть переносы и можно определить возникнет следующий перенос или нет. Если нет - результат готов и можно присылать следующие данные.
Во что компилируются условные обозначения элементов этой схемы, в LUT или в элемент XOR с мультиплексором 2:1? Это готовый сумматор, который есть в составе каждого логического блока. Что же касается триггеров (памяти), а также довольно размытого определения "асинхронная схема", то триггеры нужны для carry-save adder (von Neuman circuit). По быстродействию он не отличается от последовательного соединения одноразрядных сумматоров. А схемы, которые Вы делаете, - это части bounded data.
Ну, хоть на instantiation найдите время. Можно начать с кольцевого осциллятора, а можно с того, что (с точностью до константы) приведено ниже. Потом уже можно координаты зафиксировать, чтобы расставлятель не договорился с разводчиком :)
Счётчик - это, конечно, хорошо, но что говорит Gowin о режимах работы триггера? Почему это важно? Потому что вход сброса у этого триггера есть, а входа установки, наверняка, нет. А жаль, на двух RS-триггерах можно было бы собрать С-элемент (схема Murphy)
Кстати, про P&R, может быть Вы знаете, кто-то сравнивал open-source разводчики? В частности тот, который внутри Verilog to Routing с тем, который внутри Yosys?
Выход LUT, конечно, можно подключить к триггеру в другом CLB, но зачем тянуть провод, если есть "местный" триггер? Может быть оптимизатор иногда так делает. Если цель - поизучать что вытворяет оптимизатор - это одно, а если цель - настроить всё вручную, то для этого служит instantiation.
Проблем точно не будет? А как же пересечение clock domains? Синхронизатор не нужен? Посмотрите что внутри у GPU. Хотя, я не уверен, что даже производители российских SoC могут найти в схеме синхронизатор и его разновидности. Просто купили (?) IP, какой-нибудь Mali или PowerVR. Для программиста аппаратные "проблемы" выражаются в принудительной синхронизации потоков, использованию атомарных операций и mutex. Это терминология CUDA, я не знаю как в OpenCL называются те же самые вещи. И да, существуют экзотические globally asynchronous locally synchronous, GALS.
LabView? Высокоуровнево. Интересно, чем этот способ принципиально отличается от блок-схем алгоритмов? Тем, что блоки могут быть произвольной сложности. А качество компиляции какое? Это можно проверить на бенчмарках. Где их взять? Например здесь
Простейшая FSM - это, например, счётчик (делитель частоты на два). По определению в таких FSM может переключаться только один элемент. Другими словами, невозможна ситуация, когда нескольким элементам сразу "выдано разрешение" переключиться. Это последовательные асинхронные схемы. Они, очевидно, мало что могут вычислять, только управлять. С вычисляющими (комбинационными) схемами сложнее. Пример вот
Вы привели перевод из документации Gowin? Попробуйте найти аналогичный триггер в документации Lattice. Я думаю, что Gowin взял за основу (мягко говоря) их наработки. Ещё можно посмотреть старые Xilinx, типа Spartan 3. В них, насколько я помню, структура CLB такая же, как у Lattice. Кстати, схема триггера почти наверняка реализована на pass-transistor logic. Позволяет ли Gowin tool (как он там называется?) измерить задержку трассировочного соединения? Нет? И задержку элемента непонятно откуда вытаскивать? Что же это за tool такой? :)
Интересные опыты. Правда, выражение "статическая логика" больше известно в другом контексте. В асинхронных схемах своя терминология и свои допущения. Кроме того, в этих схемах исключительную роль играет внешняя среда. Если объединить эти два пункта в одно короткое понятие, то получится "соотношение задержек" (вражеский путь, adversary path). Например, С-элемент можно сделать соединив выход LUT с одним из входов. Такая схема работоспособна, но при определённых соотношениях задержек. Если они не выполняются, то нужно "лезть внутрь" LUT и рассматривать каждый мультиплексор как отдельный элемент. Это было сделано в статье
Towards Hazard-Free Multiplexer Based Implementation of Self-Timed Circuits
Чтобы реализовать эту схему ни одно из известных семейств FPGA не подходит. Lattice, Efinix, Gowin, Anlogic тоже не подходят. Почему? Нужно подсоединиться к точке, к которой подсоединиться нельзя. К счастью, китайцы не всегда копируют известное один-в-один. Xist FPGA подходят, Sealion 2000 называются.
В качестве альтернативы Stateflow можно попробовать Synthezza. Может оказаться, что Synthezza дает лучшее соотношение скорость/площадь. Однако, тесной связи с MATLAB у неё нет. https://www.synthezza.com/demo-series
Почему-то в конструкции русского языка «да нет же» Вы упорно видете только «да». Никакой гипотезы во всех моих комментариях НЕТ. Первый комментарий начинается словом «интересно» и это интересно продолжается сквозь ВСЕ мои комментарии. Микросхемы серии К523 — лишь частный случай. Дело в том, что на приборах с N-образной ВАХ (туннельных и лямбда диодах) пытались строить логические элементы. Однако, я видел только такие, где питание осуществляется постоянным током. В случае с тиристорами (S-образная ВАХ) — это переменный ток, что меня несколько удивило. Вот и всё. Кстати, четырехвходовый ТТЛ элемент (скажем SN7460) тоже показывает S-образную ВАХ. Если хотите, можете подумать как её увидеть.
То Вы говорите: «Любые варианты логики корректно сравнивать друг с другом», а то: «тиристорная логика не имеет отношения ни к CML, ни к высоким скоростям». Ну, не важно. На низких скоростях у КМОП низкое потребление лишь в том случае, если фронты импульсов достаточно крутые, т.е. если через транзисторы течёт минимальный сквозной ток (допустим, что он много больше тока утечки). Подпороговый режим КМОП — другая история. Договаривайте фразу, это полезно. А в ответ на просьбу рассказать о преимуществах тиристорной логики могу лишь сказать — неохота читать. Tем более, что с тех пор многое изменилось в технологии. Уж будьте добры, сделайте это домашнее задание самостоятельно.
Есть современные варианты ЭСЛ, например
Palumbo G., Scotti G. A Multi-Folded MCML for Ultra-Low-Voltage High-Performance in Deeply Scaled CMOS //IEEE Transactions on Circuits and Systems I: Regular Papers. – 2020. – Т. 67. – №. 12. – С. 4696-4706.
Поэтому утверждать, что управление током, а не напряжением это недостаток — снова голословно. Спрашивается — нужно ли Вам продолжать раздувать щёки, если Вас поймали за этим занятием три раза. Я не собирался и не собираюсь анализировать преимущества и недостатки КМОП и «тиристорной» логики, а лишь показал, что последняя была реализована.
Тиристор (или, шире, device with S-like characteristics), как известно, управляется током. Поэтому сравнивать «тиристорную» логику с КМОП неправильно. ТТЛ и ЭСЛ управляются током, но ни те ни другие не могут работать в широком диапазоне питающих напряжений. Почему о «тиристорной» логике могут вспомнить (а могут и не вспомнить) сейчас? Потому что, все эти приборы с отрицательной дифференциальной проводимостью (или сопротивлением) достаточно хорошо реализуются на чипе. По крайней мере, на запрос «ndr» «logic gate» scholar.google выдает 790 статей.
Поясните что Вы имеете в виду под «Надо уметь работать при сильно плавающем питании (что в КМОП тривиально)...», иначе это опять голословное утверждение. Да, микросхемы серии CD4000 работоспособны в диапазоне питающих напряжений 3...9В. Однако, при этом меняются пороги переключения элементов и меняется их задержка. Таким образом, если делать тактируемую схему (автомат), то нужно снижать частоту в расчете на наихудший случай. Ну, и конечно, ни о какой серьезной нагрузочной способности и высоковольтности в обычном КМОП (пусть даже современной серии 74LV00) речь не идёт. Что же касается конденсаторов, то в книге
Л.А. Баранов и др. Конденсаторные преобразователи в автоматике и системах управления. 1969.
на Рис. 43. можно найти «Схемы статических логических устройств с переменно-полярным питанием.»
Странно. Bosh и Siemens выпускают (в том числе) изделия промышленной автоматики, где высокий уровень помех. Вы это осознаёте. По крайней мере уверенно отвечаете как за Bosh, так и за Siemens. Однако, для чего нужны высокопороговые (и поэтому помехоустойчивые) логические элементы не знаете. Я ответил на Ваш вопрос «какие преимущества?» Более подробное объяснение можно найти в публикациях уже упомянутого автора.
Утверждение про невозможность сделать КМОП нужно, по крайней мере, сопроводить логическими рассуждениями. Иначе, получается как в байке про рецензента: "Я бы охарактеризовал Вашу диссертацию одним словом, начинается на "г" и кончается на "о", - голословно. Серия К523 разработана в конце 1980-х, а некоторые микросхемы выпущены в 1992. Вот если бы дали ссылку, что на этом заводе не было КМОП процесса, было бы убедительней. Пока я дам ссылку на рассказ одного из разработчиков:
У Вас есть способ проверить, что нарисованные логические элементы соответствуют таким же внутри FPGA? Наверное нет. По двум причинам. 1) Gowin EDA показывает только границы логического блока, но не показывает его внутреннюю схему. Возможно, он пишет названия использованных ресурсов. 2) Логические элементы с числом входов больше двух (например 3И-НЕ) всегда реализуются на LUT. Другой возможности нет. Асинхронные схемы исторически начинались с многоразрядного сумматора. Почему? Потому что в нём есть переносы и можно определить возникнет следующий перенос или нет. Если нет - результат готов и можно присылать следующие данные.
Во что компилируются условные обозначения элементов этой схемы, в LUT или в элемент XOR с мультиплексором 2:1? Это готовый сумматор, который есть в составе каждого логического блока. Что же касается триггеров (памяти), а также довольно размытого определения "асинхронная схема", то триггеры нужны для carry-save adder (von Neuman circuit). По быстродействию он не отличается от последовательного соединения одноразрядных сумматоров. А схемы, которые Вы делаете, - это части bounded data.
Ну, хоть на instantiation найдите время. Можно начать с кольцевого осциллятора, а можно с того, что (с точностью до константы) приведено ниже. Потом уже можно координаты зафиксировать, чтобы расставлятель не договорился с разводчиком :)
module cross_C_element (y, x1, x2, x3);
input x1, x2, x3; output y; wire w0; wire w1; wire w2;
LUT4 #(.INIT(16'h1FFF)) set_chain (.I0(w2), .I1(x1), .I2(x2), .I3(x3), .F(w0));
LUT4 #(.INIT(16'h1FFF)) rst_chain (.I0(w2), .I1(x1), .I2(x2), .I3(x3), .F(w1));
MUX2 mux_out (.I0(w0), .I1(w1), .S0(w2), .O(y));
endmodule
Счётчик - это, конечно, хорошо, но что говорит Gowin о режимах работы триггера? Почему это важно? Потому что вход сброса у этого триггера есть, а входа установки, наверняка, нет. А жаль, на двух RS-триггерах можно было бы собрать С-элемент (схема Murphy)
https://en.m.wikipedia.org/wiki/C-element
Кстати, про P&R, может быть Вы знаете, кто-то сравнивал open-source разводчики? В частности тот, который внутри Verilog to Routing с тем, который внутри Yosys?
Выход LUT, конечно, можно подключить к триггеру в другом CLB, но зачем тянуть провод, если есть "местный" триггер? Может быть оптимизатор иногда так делает. Если цель - поизучать что вытворяет оптимизатор - это одно, а если цель - настроить всё вручную, то для этого служит instantiation.
Проблем точно не будет? А как же пересечение clock domains? Синхронизатор не нужен? Посмотрите что внутри у GPU. Хотя, я не уверен, что даже производители российских SoC могут найти в схеме синхронизатор и его разновидности. Просто купили (?) IP, какой-нибудь Mali или PowerVR. Для программиста аппаратные "проблемы" выражаются в принудительной синхронизации потоков, использованию атомарных операций и mutex. Это терминология CUDA, я не знаю как в OpenCL называются те же самые вещи. И да, существуют экзотические globally asynchronous locally synchronous, GALS.
LabView? Высокоуровнево. Интересно, чем этот способ принципиально отличается от блок-схем алгоритмов? Тем, что блоки могут быть произвольной сложности. А качество компиляции какое? Это можно проверить на бенчмарках. Где их взять? Например здесь
https://www.synthezza.com/about-us
Простейшая FSM - это, например, счётчик (делитель частоты на два). По определению в таких FSM может переключаться только один элемент. Другими словами, невозможна ситуация, когда нескольким элементам сразу "выдано разрешение" переключиться. Это последовательные асинхронные схемы. Они, очевидно, мало что могут вычислять, только управлять. С вычисляющими (комбинационными) схемами сложнее. Пример вот
https://www.mais-journal.ru/jour/article/view/1778
Вы привели перевод из документации Gowin? Попробуйте найти аналогичный триггер в документации Lattice. Я думаю, что Gowin взял за основу (мягко говоря) их наработки. Ещё можно посмотреть старые Xilinx, типа Spartan 3. В них, насколько я помню, структура CLB такая же, как у Lattice. Кстати, схема триггера почти наверняка реализована на pass-transistor logic. Позволяет ли Gowin tool (как он там называется?) измерить задержку трассировочного соединения? Нет? И задержку элемента непонятно откуда вытаскивать? Что же это за tool такой? :)
Интересные опыты. Правда, выражение "статическая логика" больше известно в другом контексте. В асинхронных схемах своя терминология и свои допущения. Кроме того, в этих схемах исключительную роль играет внешняя среда. Если объединить эти два пункта в одно короткое понятие, то получится "соотношение задержек" (вражеский путь, adversary path). Например, С-элемент можно сделать соединив выход LUT с одним из входов. Такая схема работоспособна, но при определённых соотношениях задержек. Если они не выполняются, то нужно "лезть внутрь" LUT и рассматривать каждый мультиплексор как отдельный элемент. Это было сделано в статье
Towards Hazard-Free Multiplexer Based Implementation of Self-Timed Circuits
Чтобы реализовать эту схему ни одно из известных семейств FPGA не подходит. Lattice, Efinix, Gowin, Anlogic тоже не подходят. Почему? Нужно подсоединиться к точке, к которой подсоединиться нельзя. К счастью, китайцы не всегда копируют известное один-в-один. Xist FPGA подходят, Sealion 2000 называются.
Уподоблюсь FSM и напишу по пунктам (ведь присущая FPGA параллельность здесь не рассматривается):
1) Возможно, переключаемые контексты описаны в одной из книг Самария Баранова, надо найти время почитать
https://www.synthezza.com/books
2) Ещё меньшее количество разработчиков интересуются "нано-архитектурой", а именно как сделан LUT или триггер. Я поинтересовался
https://eprints.ncl.ac.uk/file_store/production/276950/9F49E3C0-2DAC-490B-BBFA-6C880F2BED2B.pdf
В качестве альтернативы Stateflow можно попробовать Synthezza. Может оказаться, что Synthezza дает лучшее соотношение скорость/площадь. Однако, тесной связи с MATLAB у неё нет.
https://www.synthezza.com/demo-series
Palumbo G., Scotti G. A Multi-Folded MCML for Ultra-Low-Voltage High-Performance in Deeply Scaled CMOS //IEEE Transactions on Circuits and Systems I: Regular Papers. – 2020. – Т. 67. – №. 12. – С. 4696-4706.
Поэтому утверждать, что управление током, а не напряжением это недостаток — снова голословно. Спрашивается — нужно ли Вам продолжать раздувать щёки, если Вас поймали за этим занятием три раза. Я не собирался и не собираюсь анализировать преимущества и недостатки КМОП и «тиристорной» логики, а лишь показал, что последняя была реализована.
Л.А. Баранов и др. Конденсаторные преобразователи в автоматике и системах управления. 1969.
на Рис. 43. можно найти «Схемы статических логических устройств с переменно-полярным питанием.»
Утверждение про невозможность сделать КМОП нужно, по крайней мере, сопроводить логическими рассуждениями. Иначе, получается как в байке про рецензента: "Я бы охарактеризовал Вашу диссертацию одним словом, начинается на "г" и кончается на "о", - голословно. Серия К523 разработана в конце 1980-х, а некоторые микросхемы выпущены в 1992. Вот если бы дали ссылку, что на этом заводе не было КМОП процесса, было бы убедительней. Пока я дам ссылку на рассказ одного из разработчиков:
http://www.chernikhov.com.ua/ru/injenerni-istoriii