Pull to refresh

Comments 26

Интересные опыты. Правда, выражение "статическая логика" больше известно в другом контексте. В асинхронных схемах своя терминология и свои допущения. Кроме того, в этих схемах исключительную роль играет внешняя среда. Если объединить эти два пункта в одно короткое понятие, то получится "соотношение задержек" (вражеский путь, adversary path). Например, С-элемент можно сделать соединив выход LUT с одним из входов. Такая схема работоспособна, но при определённых соотношениях задержек. Если они не выполняются, то нужно "лезть внутрь" LUT и рассматривать каждый мультиплексор как отдельный элемент. Это было сделано в статье

Towards Hazard-Free Multiplexer Based Implementation of Self-Timed Circuits

Чтобы реализовать эту схему ни одно из известных семейств FPGA не подходит. Lattice, Efinix, Gowin, Anlogic тоже не подходят. Почему? Нужно подсоединиться к точке, к которой подсоединиться нельзя. К счастью, китайцы не всегда копируют известное один-в-один. Xist FPGA подходят, Sealion 2000 называются.

Интересные опыты. 

Спасибо.

В плане архитектуры контекст примерно один, а так разумеется различия есть, правда я их пока особо не увидел. Но я не настаиваю - ведь я новичок.

А так вообще вот:

Статическая логика не имеет минимальной тактовой частоты — тактирование может быть остановлено на неопределенное время. Это даёт два преимущества:

  • возможность остановить систему в любой момент времени (упрощение отладки и тестирования, возможность пошагового выполнения);

  • возможность работы системы при очень низких тактовых частотах (увеличение времени работы при той же ёмкости батарей).

В частности, хотя многие популярные процессоры используют динамическую логику[3], только процессоры со статическим ядром, спроектированным по статической технологии КМОП, пригодны к использованию в космических спутниках, благодаря их большей радиационной стойкости

Ну и разумеется реализовывать архитектуры и процессоры со статическим ядром ничего не мешает на обычных FPGA, как минимум тут можно и отладить и увидеть плюсы и минусы, ну и даже использовать потом. А так - это только начало моего пути в мир статической архитектуры, логики, да и вообще FPGA.

Больше комментария в день не могу - ограничения, да, думаю и не надо.

Может Вам, если Вы новичок, для начала освоить традиционную тактируемую логику в FPGA?

Нестыковка в терминологии, на которую вам указали выше, не совсем об этом. Асинхронная и статическая логика - не одно и то же. О статичности в основном говорят как раз в контексте синхронной логики - схема, которой можно безболезненно остановить тактирование, затем возобновить, и она продолжит работать из состояния, которое было в момент останова. Пример навскидку - классический Z80 с остановленным клоком может сохранять состояние сколь угодно долго, пока запитан. Антипример - в DRAM, поставленной на паузу, разрядятся конденсаторы, состояние забудется. При этом и то, и другое - в целом синхронные схемы. Или совсем уж базовый элемент - D-триггер в классической реализации синхронен (нуждается в тактировании) и статичен (сохраняет состояние при остановленном тактировании).

Самый явный пример нестатичного процессора - классический MOS 6502. Минимальная частота тактирования составляет 500 кГц, ниже которой его машина состояний начинает "зависать".

Еще читал у Кена Шерриффа статью про анализ кристалла 80386, там половина ячеек сделана по упрощенной схеме - транзистор + конденсатор. То есть 386-й уже был не статичным.

Поправил публикацию по части статической логики

Спасибо за замечания. Единственное, что попробую некоторые из них поправить в свою очередь — Термины «статический»/«динамический», применяемые к комбинационным схемам, не следует путать с этими же терминами, употребляемыми для обозначения запоминающих устройств, например динамического (DRAM) или статического (SRAM) ОЗУ (RAM). С остальными аргументами согласен по части асинхронной логики—  был невнимателен и принял перспективу за действительность (хотя, эта перспектива далеко не вершина идеала). В действительности, как мне стало понятно, сравнение статической логики и динамической эквивалентно сравнению диодно‑транзисторной и резисторно‑транзисторной, то‑есть тут весь фокус именно в реализации элементов осуществляющих работу логики на схеме.

На замечания по части того, что я тут новичок - посчитал справедливым доделать асинхронный триггер на базе примитива DLC. Тут разработчики пошли на техническую хитрость ( на самом деле в нормальных схемах никогда и не прийдёт одновременный сигнал установки единицы и сброса, но они и не обязаны вовсе раскрывать каких-то секретов, да ещё и в документации) - весь фокус в принципе работы элемента AND -

Причина этого успеха заключается в том, что логический элемент AND, при подаче даже сигнала нуля на один из своих входов - уже выдаёт на выходе 0, даже при входящем сигнале Z на втором входе.

Но это моё личное мнение. В подвтерждение оному могу только добавить, что раз одновременно приходит сигнал единицы и на сброс и на запись в триггер - то в такой схеме, возможно, есть и другие ошибки, например в виде приходящих одновременно сигналов нуля и единицы на один провод. Но - это моё личное мнение.

Прав я или не прав со своей логикой - не знаю, но то что я получил, "опираясь" на неё, более изящный асинхронный триггер - факт. Работают они одинаково, а вот примитив DLC будет явно попроще примитива DLATCHSR, который вставляет в синтезируемую схему среда (разработчики).

Вы привели перевод из документации Gowin? Попробуйте найти аналогичный триггер в документации Lattice. Я думаю, что Gowin взял за основу (мягко говоря) их наработки. Ещё можно посмотреть старые Xilinx, типа Spartan 3. В них, насколько я помню, структура CLB такая же, как у Lattice. Кстати, схема триггера почти наверняка реализована на pass-transistor logic. Позволяет ли Gowin tool (как он там называется?) измерить задержку трассировочного соединения? Нет? И задержку элемента непонятно откуда вытаскивать? Что же это за tool такой? :)

Так же и моя тема которую автор своей терминологией вогнал в ступор общего понимания.
Речь идет об организации работы во времени, когда микропроцессоры делят на синхронные и асинхронные.
Синхронные - микропроцессоры, в которых начало и конец выполнения операций задается таймером, то есть время выполнения любой операции совершенно не зависит от вида команды или величины операндов.
Асинхронные, напротив, выполняют каждую следующую операцию после сигнала окончания выполнения предыдущей операции, то есть по факту. Чтобы повысить эффективность вводят специальные электронные цепи, обеспечивающие автономность работы.
Суть в том, что закончив работу над последней операцией, вырабатывается сигнал запроса, показывающий готовность к выполнению новой операции.
Я предпринял попытку симуляции асинхронного MCU в среде LabView, что в конечном итоге натолкнуло на идею создания софт контролера. В его реализации на уровне работы с аппаратной частью программная часть логического ядра управляет набором настраиваемых FSM, а аппаратная I/O взаимодействует посредством UART, что позволяет конфигурировать топологию периферии и ее типы под довольно большой сегмент алгоритмов в автоматике или робототехнике.

Очень интересно. А можете привести пример простейшего асинхронного КА (FSM), то есть без сигнала тактирования. Как-то в голове не укладывается как такое может работать. :)

Простейшая FSM - это, например, счётчик (делитель частоты на два). По определению в таких FSM может переключаться только один элемент. Другими словами, невозможна ситуация, когда нескольким элементам сразу "выдано разрешение" переключиться. Это последовательные асинхронные схемы. Они, очевидно, мало что могут вычислять, только управлять. С вычисляющими (комбинационными) схемами сложнее. Пример вот

https://www.mais-journal.ru/jour/article/view/1778

Конечно автоматы работают под собственным тактированием, что по другому никак не возможно в его жизни, но при этом он автономен и сидит в зале ожидания своей очереди со остальными и ждет когда его примут. В моем случае это внешняя аппаратная команда которая сообщает этому FSM - "Запускайся и делай что тебе положено в соответствии с своей миссией в общем деле".
Попросту говоря ведомый и ведущий где каждый под своим тактированием. Босс у которого свои мозги и бьющееся сердце и подчиненный со своими мозгами и сердцем, причем и тот и другой под собственными, не связанными процессорными платформами, они общаются друг с другом посредством коммуникаций :)

Проблем точно не будет? А как же пересечение clock domains? Синхронизатор не нужен? Посмотрите что внутри у GPU. Хотя, я не уверен, что даже производители российских SoC могут найти в схеме синхронизатор и его разновидности. Просто купили (?) IP, какой-нибудь Mali или PowerVR. Для программиста аппаратные "проблемы" выражаются в принудительной синхронизации потоков, использованию атомарных операций и mutex. Это терминология CUDA, я не знаю как в OpenCL называются те же самые вещи. И да, существуют экзотические globally asynchronous locally synchronous, GALS.

Верно то, что если сигнал не утверждается достаточно долго и не регистрируется, он может оказаться асинхронным на границе входящего тактового сигнала.
Когда сигнал меняется слишком близко к фронту тактового сигнала, существует вероятность, что регистр не "поймает" нужное состояние, и это может привести к неправильной интерпретации данных. Такие ситуации могут вызывать метастабильные состояния, когда регистр оказывается в промежуточном состоянии, что, в свою очередь, может привести к непредсказуемому поведению всей системы. Для предотвращения подобных проблем в цифровых системах часто используются специальные схемы синхронизации, такие как дублирующие регистры или специальные временные задержки, чтобы гарантировать, что сигнал будет стабильным в течение достаточного времени перед тем, как будет обработан. Также важно правильно выбирать параметры временных задержек и тактовой частоты обеих несвязанных систем при их одновременном запуске чтобы минимизировать риск появления асинхронных состояний.

Я правильно понимаю, что у автомата должен быть свой сигнал разрешения по которому он вычисляет новое внутреннее состояние и новое состояние выходов, плюс выходной сигнал готовности ? То есть в асинхронных схемах все автоматы сидят в своих тактовых доменах, таким образом мы имеем проблему CDC возведенную в абсолют ?

LabView? Высокоуровнево. Интересно, чем этот способ принципиально отличается от блок-схем алгоритмов? Тем, что блоки могут быть произвольной сложности. А качество компиляции какое? Это можно проверить на бенчмарках. Где их взять? Например здесь

https://www.synthezza.com/about-us

От блок схем он категорически отличается тем что классифицируется сам по себе языковой графической парадигмой и отнесен к языкам линейки G. Это IDE, который на 98% собран на С и имеет встроенный компилятор, на выходе которого получаем *.exe, так же присутствует инструмент для исполнения инсталянта на базе скомпилированных проектов.
То что Вы смотрели в моем линке, это компилянт, весит до неприличия смешной объем и может устанавливаться на очень не требовательные CISC x86 архитектуры от таблетов, IPC и т.д.
Где взять?... Кто дает в опенсорсах, там и брать.

Так же и моя тема которую автор своей терминологией вогнал в ступор общего понимания.

Согласно описанию асинхронной логики, из книг и учебников мной применяется терминология касательная ее. А что не так? Можно уточнить? Или это была просто такая уникальная претензия - чисто риторическая? А почему бы вам не упражняться искусству риторики было и далее - в своей теме? Я сюда вроде не на огонёк зашёл, тема по предмету проделанной работы, искусствоведения не касался. Или я посягнул на что-то?

Или это была просто такая уникальная претензия - чисто риторическая? А почему бы вам не упражняться искусству риторики было и далее - в своей теме? Я сюда вроде не на огонёк зашёл, тема по предмету проделанной работы, искусствоведения не касался. Или я посягнул на что-то?

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

Ну по части терминологии Вы ничего так и не ответили - в чём проблема то, а вот вашего проекта я и вовсе не касался, есть конкретная тема - и какие-то несоответствия обсуждаются именно касательно неё, а не вашей где-то там существующей. Если я что-то уже и исправил - Вам ничего не мешало ответить и о прошедешем времени. Извините, ваш проект мне не интересен и учебным материалом он ни для кого пока не является, а когда будет - я прочту об этом из книг или новостей. Удачи Вам.

Ну по части терминологии Вы ничего так и не ответили - в чём проблема то

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

Это чистой воды работа FSM, когда у нас как минимум имеем 1 вход, 1 выход и в каждый момент времени можем менять такое логическое состояние из множества возможных, в Вашем случае это "И", "ИЛИ", "НЕ".
Собственно это хрестоматийная трактовка понятия конечного автомата и Ваша задача построить или симулировать на своей элементной базе ( программном симуляторе) такой функционал.

Процесс:

  • Строим алгоритм: определите, что именно должен делать ваш контроллер. Это может быть управление устройством, обработка сигналов и т.д.

  • Составление таблицы состояний: Определите состояния, в которых может находиться ваш контроллер, а также возможные переходы между этими состояниями. Создайте таблицу состояний с входами и выходами.

  • Выбор типа микросхемы или ее софт симуляция: к примеру (намеренно не указываю) - это серия логических микросхем, таких как D-триггеры, JK-триггеры и счетчики. Выберите нужные компоненты в зависимости от того, как будет реализован ваш конечный автомат.

  • Схема управления состоянием:

    • Используйте триггеры для хранения состояния. Например, D-триггеры могут хранить текущее состояние и обновляться на основе входных сигналов.

    • Определите логические схемы для переходов между состояниями. Это могут быть комбинации логических элементов (AND, OR, NOT), которые будут реагировать на входные сигналы и изменять состояние.

  • Сборка схемы: На основе ваших расчетов и применяемого RISC или CISC (FPGA...что Вам больше нравится), создайте аппаратную архитектуру, которая будет включать в себя один FSM и управление его состоянием (в каждый момент времени).

    По части дребезга и ситуаций бистабильности это Ваши скилы, и каждый эмбед должен хорошо понимать природу таких проблем и методы устранения. Если в процессе тестирования выявлены ошибки, вам нужно будет отладить схемы переходов и состояния.

    Вот собственно и всё.
    А теперь давайте свои претензии :)

А теперь давайте свои претензии :)

Не имею таковых, у меня после нескольких экспериментов накопился материал и расчёты для новой публикации завтра.

Похоже не туда коммент вставил, но это уже не могу поправить.

Всё будет через пару-тройку часов. Могу сказать одно - мой успех меня опечаливает. Почему? Потому что цифры неожиданные, хоть и верные, слишком несерьёзно относился и не ожидал что так можно. Второй фактор - в то время, как кто-то пиарится на альтернативах западным FPGA - мне приходится побеждать баги в средах разработки, которые они не стесняются рекомендовать российским пользователям для обучения. Я не думаю, что они не знали - мне не понятно: они хотят денег за свои победы над багами, или не совершили ещё ни одной...всё это уныло. Ну запись я не стану конечно делать в таком жанре - просто приведу баг (а он достаточно серьёзный, с таким я не осмелился бы рекомендовать среду для обучения в российских вузах), и то как он нейтрализуется. Ну и цифры. А следующим уже (через один) - будет АЛУ нового типа и его тестбенчи (тут я не уверен что у меня получится успешный АЛУ, но всё-же на фоне асинхронной логики просматриваются иные архитектуры, поэтому всё может быть).

Честно говоря, вся серия публикаций выглядит как адовый *ц
@accurate_random Не сочтите за труд, почитайте вот эти лекции по проектированию асинхронных схем для студентов. Это даже не учебник, и не книги Варшавского, а просто лекции, самые азы т.с. https://elib.spbstu.ru/dl/1945.pdf/download/1945.pdf

Sign up to leave a comment.

Articles