1-битный процессор микрокода на эмиттерно-связанной логике?

Другие микроконтроллеры и микропроцессоры, не попавшие в предыдущие разделы

Moderator: Shaos

belfegor96
Senior
Posts: 100
Joined: 09 Jun 2022 07:49

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by belfegor96 »

Замоделировал модуль тактового генератора на 100 МГц

Оказывается, тактовый генератор не такое уж простое дело!

Ещё стало очевидно что захочется несколько частот и нужно будет их переключать. Думаю, 4 частоты достаточно:
  • Очень маленькая, чтобы компьютер красиво переливался светодиодами, ~10 Герц
  • Разумно-маленькая чтобы высокочастотные эффекты не играли роли, 5-10 кГц
  • Основная, 100 МГц
  • Запредельно большая для экспериментов за пределами возможностей осциллографа, 0.2 - 1.5 ГГц (как получится)
Ещё нужен ручной пошаговый режим, причём, лучше всего, в двух видах: полный шаг и фронт-спад

Также замоделировал "безглючный" (glitch-free) переключатель.

Для такого простого очевидного модуля схема получится ого-го! Приблизительно, 40 транзисторов!

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

100 MHz oscillator model
100 MHz oscillator model
100 MHz oscillator.png (25.44 KiB) Viewed 13261 times

Switchable clock oscillator
Switchable clock oscillator
123.png (35.91 KiB) Viewed 13261 times

belfegor96
Senior
Posts: 100
Joined: 09 Jun 2022 07:49

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by belfegor96 »

Наконец-то сделал конвертеры в CMOS и обратно

Но напрягает тот, который из DCTL в CMOS: сейчас он явно не успевает на частоте 100 МГц ("акулий плавник"), и ещё там вышла какая-то тонкая настройка с резистором 8 Ом. Боюсь, повторяемости не будет. А "правильную" схему с пуш-пулл выходом (как у выходы у TTL) пилить не хочется...

Осталось придумать логику ручного тактирования и можно приступать к KiCADу
Attachments

CMOS 3.3V to DCTL translator
CMOS 3.3V to DCTL translator
TTL2DCTL-A.png (31.28 KiB) Viewed 13213 times

DCTL to CMOS 3.3V translator (weak)
DCTL to CMOS 3.3V translator (weak)
DCTL-A2TTL.png (28.55 KiB) Viewed 13213 times

belfegor96
Senior
Posts: 100
Joined: 09 Jun 2022 07:49

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by belfegor96 »

belfegor96 wrote:Осталось придумать логику ручного тактирования и можно приступать к KiCADу
Дополнительная логика съедает тонны транзисторов, поэтому обойдусь мультивибратором который уже реализован в схеме.

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

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

Короче говоря, для реализации всего этого дополнительных транзисторов не требуется.

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

Всё, наконец-то можно приступать к KiCAD! :rotate:
Attachments

Генератор тактовой частоты без гличей на основе ненасыщающегося мультивибратора с возможностью пошагового исполнения и ручного переключения высокий-низкий / Glitch-free clock generator based on a non-saturable multivibrator with stepping and manual high-low switching
Генератор тактовой частоты без гличей на основе ненасыщающегося мультивибратора с возможностью пошагового исполнения и ручного переключения высокий-низкий / Glitch-free clock generator based on a non-saturable multivibrator with stepping and manual high-low switching
clock_with_bystep_and_edges.png (57.21 KiB) Viewed 13153 times

belfegor96
Senior
Posts: 100
Joined: 09 Jun 2022 07:49

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by belfegor96 »

Нарисовал плату с медленным мультивибратором, который будет заодно и пошаговым. Думал - раз всё мелкое, сэкономлю место, но забыл что ЛУТ не умеет дорожки меньше 0.2мм. Придётся переделывать. Но в целом как-то так вот будет выглядеть. Да, сверлильного станка нет поэтому всё будет SMD, включая выводные компоненты :-)

Резисторы справа и сверху от конденсатора - это временный источник напряжений всех сортов что нужны :-)
Attachments

Oscillators_PCB_v1.png
Oscillators_PCB_v1.png (152.91 KiB) Viewed 13023 times

belfegor96
Senior
Posts: 100
Joined: 09 Jun 2022 07:49

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by belfegor96 »

Пока жду фоторезист и принадлежности для него, нарисовал мультиплексор на 4 бита. А потом задумался:

Похоже, имеет смысл отказаться от (де)мультиплексоров в пользу введения третьего состояния как у обычных TTL/КМОП микросхем. Это приведёт к бОльшей унификации блоков и гибкости схемы: если не сделать высокоимпедансное состояние то вместо изменения одной линии которая переключает вход на приём или передачу придётся перепиливать целую шину, идущую на мультиплексор или демультиплексор.

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

Вопрос теперь как в этой ЭСЛ-DTL-EFL-логике реализовать это третье состояние.

И ещё мысль:

Я правильно понимаю, что если сделать генератор фаз и поднять частоту тактов в 2 раза то это позволит избавиться от триггеров в пользу защёлок? То есть, по одной фазе мы делаем полезное, по второй фазе защёлкиваем полученное значение (вместо ожидания фронта/спада)

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

(Тогда будет удобно сделать ещё одну кнопку однократного прохода по полному циклу фаз ("полный шаг") - но это мелочи.)
Attachments

3-уровневый мультиплексор / 3-level multiplexor
3-уровневый мультиплексор / 3-level multiplexor
3lvl_MUX.png (11.35 KiB) Viewed 12609 times

User avatar
Shaos
Admin
Posts: 23664
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by Shaos »

обычно двух-фазные триггеры "стабильнее"
но по идее можно и на защёлках :)
третье сосотяние можно в отдельных элементах сделать
по идее всё можно делать на NAND-ах либо на NOR-ах (для унификации так сказать)
Я тут за главного - если что шлите мыло на me собака shaos точка net
belfegor96
Senior
Posts: 100
Joined: 09 Jun 2022 07:49

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by belfegor96 »

Тогда решено - фазам быть!

Третье состояние почти сделал. То есть, логика верная и даже работает если нагрузка невелика - небольшая разница напряжений присутствует при включении Z (отрицательный сигнал на B включает Z-состояние, то есть выключает передачу сигнала A, но оставляет приём сигнала из общей шины через Reverse). У передающего устройства положенные токи стекают из эмиттерных повторителей организованных с помощью TRAN1 и TRAN2 (это транзисторы так обозначены). Также на шине в единственном экземпляре ставится резистор-терминатор (на схеме не показан)

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

(Фоторезист приехал, экспериментировал, всё отлично кроме фотошаблонов: оказывается, лазерный принтер их печатает частично прозрачными и это проблема которая толком не решена. Ничего, пару тестовых плат всё равно завтра соберу)
Attachments

Попытка изобрести диффкаскад с высокоимпедансным состоянием
Попытка изобрести диффкаскад с высокоимпедансным состоянием
Try to create Z-state diff gate.png (13.62 KiB) Viewed 12391 times

Генератор двух непересекающихся фаз / 2 phases non-overlapping clock
Генератор двух непересекающихся фаз / 2 phases non-overlapping clock
phase_splitting.png (12.72 KiB) Viewed 12391 times

belfegor96
Senior
Posts: 100
Joined: 09 Jun 2022 07:49

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by belfegor96 »

Третье состояние почти сделал
Работает так: переключающий в высокоимпедансное состояние вход сигнал s на диффкаскаде DIFF2 выравнивается и поступает на инвертирующий транзистор 23. Далее транзистор 24 регулирует уровень выходящего полезного сигнала (driver_b) с выравнивающего диффкаскада на транзисторах 22 и 21. Полезный сигнал начинает меняться по высоте (зелёные линии на осциллограмме, частота полезного сигнала 1 ГГц, частота переключающего сигнала bas - розовая линия сверху графика - около 100 МГц). Изменяющийся сигнал в режиме высокого сопротивления становится ниже чем сток с эмитерного повторителя (Vt, обозначен красным пунктиром), выполненного на транзисторах 39 и 38.

Вроде-бы, всё ок, но потом сообразил что есть одно "но":

Дело в том, что само переключение почему-то не может происходить так же быстро как прохождение обычного сигнала. Видимо, потому что размах переключения в и из высокоимпедансного состояния 0.7 В, то есть, получается намного больше чем размах полезного сигнала (он всего 0.2 В), поэтому такое переключение будет существенно медленнее остальных сигналов, что неприемлемо.

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

Никогда таких сложных транзисторных схем раньше не разрабатывал...
Attachments

ЭСЛ схема с тремя состояниями / Tri-state ECL circuit
ЭСЛ схема с тремя состояниями / Tri-state ECL circuit
export.png (57.63 KiB) Viewed 12100 times

belfegor96
Senior
Posts: 100
Joined: 09 Jun 2022 07:49

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by belfegor96 »

Потыкавшись в LogiSim понял что рисовать руками даже простой процессор это очень муторно. А тут получается простой, но всё-таки не совсем.

Надо вкатываться в SystemVerilog. Заказал книгу "Логическое проектирование и верификация систем на SystemVerilog (Томас Дональд)", жду. Приму рекомендации что ещё почитать на эту тему можно

Да, ещё интересно, получится ли синтезатор заставить использовать только нужные мне элементы? (а именно: мультиплексоры и логические вентили)
belfegor96
Senior
Posts: 100
Joined: 09 Jun 2022 07:49

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by belfegor96 »

Написал двухфазный тактовый генератор на SystemVerilog, всё ок, осциллограммы красивые выдаются и в iverilog и в verilator.

Но на каком симуляторе его гонять "по полной программе"? Не нашёл ни одного опенсорсного, который бы поддерживал, например, параллельные секвенции. А без этого далеко не уедешь, как мне кажется.

При этом вижу много SV кода на github, значит люди на чём-то гоняют свои модели. Что-то пиратят?
User avatar
Shaos
Admin
Posts: 23664
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by Shaos »

что значит "по полной программе"?
iverilog и verilator не считаются?
ещё yosys есть - он опенсорцный и там тоже конвертер в C++ имеется
обычно на верилоге пишут чтобы в FPGA прошить либо чип в ASIC заказать
Я тут за главного - если что шлите мыло на me собака shaos точка net
belfegor96
Senior
Posts: 100
Joined: 09 Jun 2022 07:49

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by belfegor96 »

Shaos wrote:что значит "по полной программе"?
iverilog и verilator не считаются?
ещё yosys есть - он опенсорцный и там тоже конвертер в C++ имеется
обычно на верилоге пишут чтобы в FPGA прошить либо чип в ASIC заказать
А я хочу симуляцию+верицикацию и потом в виде гейтов вывести (или даже автоматически преобразовать их в схему kicad, но это вряд ли, слишком трудоёмко делать такой код, наверно)

iverilog и verilator не поддерживают "sequence":

Code: Select all

 verilator --cc --build --exe --main --timing --trace --main-top-name clk_test clk_gen.sv
%Error-UNSUPPORTED: clk_gen.sv:30:5: Unsupported: sequence
   30 |     sequence phases;
      |     ^~~~~~~~
                    ... For error description see https://verilator.org/warn/UNSUPPORTED?v=5.012
%Error: clk_gen.sv:31:9: syntax error, unexpected '@', expecting TYPE-IDENTIFIER
   31 |         @(posedge clk)
      |         ^
%Error: Cannot continue
        ... See the manual at https://verilator.org/verilator_doc.html for more assistance.
yosys, вроде, требует для симуляции "Verific" - некое проприетарное дополнение

Ну и на синтаксис тоже ругается:

Code: Select all

yosys -r clk_test -o output.blif -p "verific" clk_gen.sv
[...]
Yosys 0.33 (git sha1 2584903a060)


-- Parsing `clk_gen.sv' using frontend ` -sv' --

1. Executing Verilog-2005 frontend: clk_gen.sv
Parsing SystemVerilog input from `clk_gen.sv' to AST representation.
clk_gen.sv:30: ERROR: syntax error, unexpected ';', expecting '(' or '['
Код моего (первого в жизни) модуля приложил к сообщению
Attachments

clk_gen.7z
Двухфазный генератор тактового сигнала
(968 Bytes) Downloaded 274 times

Last edited by belfegor96 on 20 Sep 2023 12:55, edited 2 times in total.
belfegor96
Senior
Posts: 100
Joined: 09 Jun 2022 07:49

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by belfegor96 »

Код модуля чтобы не распаковывать:

Code: Select all

module clk_source
    #(parameter LEN)
    (
        input clk,
        output bit f1, f2
    );

    bit[LEN-1:0] q;

    for(genvar i = 0; i < LEN-1; i++)
        always_ff @(posedge clk)
                q[i+1] <= q[i];

    always_ff @(posedge clk)
        q[0] <= ~q[LEN-1];

    assign f1 = q[0] & q[1];
    assign f2 = ~(q[0] | q[1]);

    initial begin
        assert(LEN >= 2);
    end
endmodule

module clk_test;
    logic clk, f1, f2;

    clk_source #(5) c (clk, f1, f2);

    sequence phases; // <- тут ругается
        @(posedge clk)
        f1 ##1 f2;
    endsequence

    //~ assert property (@(posedge clock) phases.triggered);

    initial begin
        //~ $monitor("time=%0d clk=%b f1=%b f2=%b", $time, clk, f1, f2);
        $dumpfile("clk_output.vcd");
        $dumpvars(0, clk_test);

        clk = 0;
        repeat (50) #1 clk = ~clk;
    end
endmodule
belfegor96
Senior
Posts: 100
Joined: 09 Jun 2022 07:49

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by belfegor96 »

Разобрался: verilator нужно было запускать с такими параметрами:

Code: Select all

$ verilator +1800-2017ext+sv --assert --cc --build --exe --main --timing --trace --main-top-name clk_test clk_gen.sv
А код проверки должен быть примерно такой:

Code: Select all

    assert property(@(posedge clk) ~(f1 && f2));
(тут проверяется чтобы две фазы одновременно не включились)
User avatar
Shaos
Admin
Posts: 23664
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: 1-битный процессор микрокода на эмиттерно-связанной логи

Post by Shaos »

belfegor96 wrote:
Shaos wrote:что значит "по полной программе"?
iverilog и verilator не считаются?
ещё yosys есть - он опенсорцный и там тоже конвертер в C++ имеется
обычно на верилоге пишут чтобы в FPGA прошить либо чип в ASIC заказать
А я хочу симуляцию+верицикацию и потом в виде гейтов вывести (или даже автоматически преобразовать их в схему kicad, но это вряд ли, слишком трудоёмко делать такой код, наверно)
Вот есть такая штука - PCBFlow для Yosys, которая из верилога (или даже VHDL) может делать печатную плату с транзисторами :)

https://github.com/cpldcpu/PCBFlow
Attachments

PCBFlow.png
PCBFlow.png (390.94 KiB) Viewed 11251 times

Я тут за главного - если что шлите мыло на me собака shaos точка net
Post Reply