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

В схеме много вникать. Если Вы не верите IDE Logisim Evolution - можете просто пройти мимо и не принимать тут изложенный материал во что-то нужное и полезное. Тем более что это в общем-то работа новичка, который просто развивает свой проект и взгляды в новых областях, сталкивается с новыми задачами и решает их новыми способами. Поэтому пока предмет мной не изучен достаточно - всё это остаётся в категории "мнение". И в конечной реализации процессора функционал кэша мостов может быть развернут, так как нигде не оговаривалось что это за триггер RUN , и в принципе его содержимое может быть изменено с нуля на единицу через дешифратор адресов кэша команд ,если каждый такой триггер привязать к звену кэша моста для его запуска. То-есть ненужные ячейки кэша мостов, даже если прохождение сигнала прямое через ключи, тоже можно пропустить запуская его с нужной точки (ключи тоже срабатывают не мгновенно).

Сгенерированно в Шедеврум
Сгенерированно в Шедеврум

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

Что тут подразумевается под значками

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

Hidden text

Важно запомнить:

Электронный ключевой элемент - это электронное устройство, предназначенное для замыкания или размыкания цепи при воздействии на него управляющего сигнала.

Способ управления логическими элементами и представления сигналов в цифровой схемотехнике применяется потенциальный и импульсный.

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

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

Это тут было к сведению. Ближе к тому теперь что подразумевается в моих схемах:

Импульсный способ управления заключается в том, что значению логической единцы / нуля ставится соответствие факт наличия / отсутствия импульса или его положительного отрицательного перепада, соответственно.

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

При потенциальном представлении возможен как синхронный, так и асинхронный съём информации. При импульсном представлении возможен только синхронный съём инофрмации.

Мной выбран цифровой способ представления. Некоторые недостатки:

Задержки сигналов при прохождении через логические элементы;

Электронные ключевые элементы (электронные ключи), согласно цифровой схемотехнике, не являются базовыми элементами цифровой логики.

Далее из книги, но немного сокращённо, что есть в цифровой схемотехнике. По функциональному признаку выделяют основные элементы и устройства цифровых интегральных микросхем:

электронный ключевой элемент (был описан ранее), базовые логические элементы (интегральные микросхемы содержащие электронные ключевые элементы и выполняющие базовые логические функции НЕ (инверсию), И (конъюнкцию), ИЛИ (дизъюнкцию), а также их комбинации И-НЕ, И-ИЛИ-Не и другие; драйверы, мультивибратор, одновибратор, триггер, синхронный тригер, триггер Шмитта, регистр, счётчик суммирующий, счётчик реверсивный, дешифратор, шифратор, мультиплексор, демультплексор.

Книга очень хорошая, но материал привожу в сокращённом виде.

Электронные ключи входят в состав многих импульсных устройств. Основу любого электронного ключа составляет активный элемент (обычно транзистор), работающий в в ключевом режиме. Ключевой режим характеризуется двумя состояниями ключа: включено ; выключено.

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

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

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

Hidden text

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

И почему я всё ещё не приступил к работе с своей платой - потому что нужно сначала было исправить все недоработки и ошибки.

Далее исправленный кэш мостов

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

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

И вот мне писали что нет, это типа не так. Да это так, вы прежде, чем писать такое - попробовали бы в симуляторе сами хоть одну схему с собственной шиной и сразу-же убедились бы в том, что электронный ключ намного устроен проще базового логического элемента. А повторение чужих отлаженных схем и их созерцание в симуляторах - полной картины и представления не даст никогда. И тем, кто пишет, что не нужно рисовать схем и даже делать свой процессор, так как на FPGA реализовать абсолютно всё, скажу - ну раз всё так просто, напишите на Verilog для FPGA ...любой САПР, ОС, или хотя-бы полноценный Blender 3D. Как сделаете - обязательно напишите об этом другим.

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

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

Как это работает (как работают заглушки ошибок - каждый может проверить сам).

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

Сначала в триггер линии Last (от триггера с меткой Last вправо на схеме), являющимся ограничением заполнения триггеров линии Memo , записывается единица, это делается подачей сигнала в самый нижний ряд контакта, и сигнала единицы на контакт самого нижнего горизонтального провода (не стал заполнять схему метками, так как это вероятно сильно усложнит её прочтение). После чего эти на сигналы единицы снова меняются на ноль. И устанавливается снова значения единицы на нижний контакт звена, от которого нужно залить триггеры линии Memo и на контакт второго снизу провода на схеме. Если триггер или триггеры заполнятся единицею, то в процессе работы кэша мостов соответствующий светодиод загорится, что эквивалентно вызову соответствующей ячейки кэша команд. Если ноль - то звено и соответствующая ему ячейка кэша команд будут пропущены. Процесс заливки можно повторить, если нужно. Далее с контактов механизма заливки сигнал единицы убирается. Дальше в триггер Run записывается единица, чтобы дать по проводу сигнал подать сигнал для перебора звеньев цепи. Затем нажатием на Button_1 в триггеры Start записывается единица, если звено пропускается - то в ходе работы кэша мостов она останется, если вызовет ячейку кэша команд - то сменится нулём. Чтобы посмотреть симуляцию пошагово нужно в Logisim Evolution снять галочку с "Моделирование включено" и указателем выбора элементов (курсор в виде руки) в триггер Tact установить единицу. Далее нажимать CTRL+I , в результате чего мигнёт первый в очереди светодиод в звене, а в триггер Tact установится значение ноль. Так пока не пройдёт вся цепь. Пропуск звеньев с нулём в триггере осуществляется автономно. После окончания цепи процедуру можно снова нажав кнопку и записав в триггеры Start единицы.

Теперь, после того как мной были устранены все недоработки в схеме, мне остаётся только работа с FPGA , разумеется это в отрезки свободного времени от основной и других дел. Буду рад, если мой опыт окажется полезным кому-то в других решениях. Теперь точно нечего писать кроме результатов работы с FPGA. Всем спасибо за внимание... и понимание, если случайно отнял у них время. Быстрых ответов от меня не ждите - у меня длинный рабочий день и т.п. Да и надеюсь что в комментариях нет нужды, так как очередь Verilog и очередных результатов только подошла.

Комментарии (12)


  1. accurate_random Автор
    07.04.2024 18:45
    +1

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


  1. checkpoint
    07.04.2024 18:45
    +2

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

    Что такое "кэш мостов" ?


    1. ValeriyPushkarev
      07.04.2024 18:45

      Это простой коммутатор шин. (Commutation matrix)

      Затраты по энергии - вплоть до 2 транзисторов на линию (экономично).

      Применяется много где.

      А проблема давно известна - с 80-х из FPGA ушла поддержка tristate (High, Low, High-impendace), и отлаживать подобные коммутаторы стало тяжелее.


      1. ValeriyPushkarev
        07.04.2024 18:45

        Все трансляторы verilog собирают полное логическое уравнение (если коммутируем 3 сигнала, то это A_en&A_val | B_en&B_val | C_en&C_val.

        Из-за этого самого высокого сопротивления такие коммутации шин выходили медленными.


      1. VT100
        07.04.2024 18:45

        Лет 20 назад рассказывал мне участник событий, как у них пустил дым один "шаттл", за ним - и другой и третий... Разбор выявил, что некая внутренняя шина могла переводиться в Z-состояние и не имела фиксаторов уровня. Потенциалы массово достигали половины питания, мощность от сквозных токов превышала все мыслимые пределы и выходил волшебный дым.


        1. ValeriyPushkarev
          07.04.2024 18:45

          Чаще бывает что в шину пишут и 1, и 0. И идет дым ).


    1. accurate_random Автор
      07.04.2024 18:45

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

      Спасибо за внимание, и положительные отзывы, надесь не разочаровать читателей и в будущем.


      1. ValeriyPushkarev
        07.04.2024 18:45

        Вы придете к тому, что 10 компиляторов делают свои, скажем циклы, в 3-х вариантах.

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

        Итого 20 различных вариаций работы цикла (вложенности 1).

        Есть еще как минимум 2 распространенных варианта вложенности (60 вариантов).

        Это по циклам. Любые другие цепочки команд, обрабатываемые быстрее в StateMachine - то же самое.

        Это без учета прерываний и прочих зависимостей данных.

        И все это можно сделать более эффективно (в плане качества и энергопотребления) (трансляция готовых бинарников на свои расширения на тот же RISC).


        1. accurate_random Автор
          07.04.2024 18:45

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

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


          1. accurate_random Автор
            07.04.2024 18:45

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


          1. ValeriyPushkarev
            07.04.2024 18:45

            Гены не сжимаются - единственный вариант всех crc - это параметрическая идентификация белков и сборка таких же из унифицированных элементов (последовательности которых можно верифицировать и исправлять)


        1. accurate_random Автор
          07.04.2024 18:45

          По плану качества энергопотребления ,если это касается кэша моста, то ничего не мешает мне разбить его на энергопотребляющие сегменты, экономить транзисторы тоже надо, а так можно сделать и каждое звено таким сегментом, где все пройденные звенья будут отключаться от питания. Просто сегменты экономичнее по транзисторам. И тогда дешифратор адресов, да и счётчик команд тоже, сведут объект вашей защиты к отрицательно эффективному, в сравнении конечно.