Jump to content

    
Alikberov

Койяанискаци - ТТЛ-процессор с душой акына

Recommended Posts

2 минуты назад, Obam сказал:

пардону просим...

Как я уже сказал, вот черновой вариант дизассемблера, где можно поэкспериментировать с комбинациями кодов.
Реверс битов (не инверсию) я там обозначил «<…>», так как толком не понятно, каким оператором это можно обозначить…

P.S.: Пора бы уж за эмуляцию браться, чтобы практически всё демонстрировать и Тетрис написать…:boredom:

Share this post


Link to post
Share on other sites
12 hours ago, Alikberov said:

(Ни один из существующих процессоров не имеет такую приветливую систему кодирования команд!

Замечание довольно спорное: всю "некрасивость" команд закрывает ассемблер, если уж ЯВУ не годится. И потом: красивая внешне для человека система команд будет ли такой же красивой внутри - для АЛУ процессора?

12 hours ago, Alikberov said:

В том же x86

x86 тянет тяжёлое наследие середины/конца 20 века, когда процессоры ещё только учились строить)

3 hours ago, Alikberov said:

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

В любом случае искренне рад за вас! Отличная возможность изучить язык описания схем для программируемой логики!

Share this post


Link to post
Share on other sites
10 часов назад, haker_fox сказал:

И потом: красивая внешне для человека система команд будет ли такой же красивой внутри - для АЛУ процессора?

Кажeтся, на этот вопрос я уже ответил?  

28.06.2020 в 03:02, Alikberov сказал:

В противоположность известных всем процессоров «Intel», марку которых довольно легко запоминать и выговаривать, «Койяанискаци» задумывался как процессор, имя которого сложнее произнести, чем разобраться в его архитектуре и научиться его программировать на самом элементарном уровне машинного кода редакторами дампа, чтобы проверить, действительно ли стоит прогибаться под радиолюбительские ТУ и невозможно сформировать красивую систему команд, понятную на уровне интуиции?

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


Тем самым, я не зря сильно затягиваю с Verilog-вариантом и HTML5-эмулятором, чтобы именно в Logisim, ближе к ТТЛ-номенклатуре с реализацией собачником убедиться, что удалось найти компромисс между красивой, интуитивно понятной, почти гуманитарной, системой команд и аппаратно-вентильным эскизом не будет никакой непроходимой пропасти.
(Sun тоже свой Java-процессор сколько разрабатывала, но так и не справилась…)

P.S.: Как я уже выше сказал, Койяанискаци, как побочный продукт из ядра моего CISC, был придуман год назад. И за год мне удалось его довести до презентабельного вида.
(Это не хвастовство, а удивление, так как тот же свой CISC (по этой ссылке - Тетриса заготовка) прорабатываю со школы, а всё никак успешной реализации даже в JavaScript-эмуляции не удаётся добиться…)

 

P.P.S.: Учитывая новости, получается, мечта детства с конкурсом осуществляется, но у меня на руках абсолютно ничего нет.
Слишком уж скоро это событие произошло! Ни CISC не готов, ни этот…

 

Edited by Alikberov

Share this post


Link to post
Share on other sites

Протoтип процессора в Verilog-облаке набросал за двое суток как мог…

Единственный порт - «decoder.sv», который писался с Logisim-схемы.
Остальное - потолочные технологии.
 

Сутки потратил на регистровый файл, так как, благодаря Yosys-визуализации, мог визуально оценить, во что всё это синтезируется.
Тем самым, от массивов типа «reg [7:0] R[0:3][0:9]» пришлось отказаться и кодировать всё отдельными регистрами…
(Перепробовал варианта четыре, включая примеры из учебников и студенческие из интернета. Возможно, я что-то недопонимаю…)
 

Как я и опасался, в Verilog слишком много вольностей:

  • Вместо потактового пропуска инструкций сделал «IP <= IP + Step» (design.sv строчка #146)
  • Вместо возврата из функции с пропуском инструкций сделал «IP <= PTRN + IR» (строчка #118)
  • Имеется искушение вообще переделать логику префикса, чтобы «REP 9 ADD A1,B5» не 9 тактов выполнял сложение, а прямо средствами FPGA-модулей арифметики просто использовался умножитель
  • Ввёл лишнюю линейку регистров D₀…₉ (context.sv строки 60…67), так как там должен быть какой-то механизм, которым в Logisim я не занимался и там просто висит буфер клавиатуры, терминал, джойстик и LED-матрица

Команды BCD (двоично-десятичные коды 01⋱99) переделал под HLT-расширение.
Теперь любой такой код перебрасывает процессор на адрес 0000, где нужно убедиться, какой код это был.
Тем самым, все 90 кодов приводят к прерыванию и можно ввести 90 разных инструкций.
Как пример, этот механизм я использовал для врезки текста прямо в код:

AA A1 1E|EOR A1,A1
22 48 ..|DB  "HELLO WORLD!",0

В итоге, весь код (включая apr_bar, context.sv, alu_test.sv, alu.sv) - 386 строк (исключая «task show»).
Даже не думал, что вся Logisim-схема опишется так компактно за двое суток!:biggrin:
(На отладку львиная доля времени ушла…)

 

По-хорошему, регистры D₀…D₉ должны быть внешними, например, шиной I²C. А это предполагает некоторую задержку в доступе.

В Logisim-дизайне сигнал Wait работает только при обращениях к памяти, а при доступе к регистровому файлу режим задержки доступа не предусматривался и за год я этим не занимался.

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

 

Почему это так принципиально?

Когда я этой весной додумался ввести группу D, полагал, что если делать ремейк-пародию ИМ-02, регистры D₀…D₇ могли бы битами управлять всеми сегментами ЖК-индикатора. А это не предполагает задержку.

А вот если в ряде D₀…D₈ размазать ПДП 580ВТ57 со всеми его регистрами, то задержки учитывать нужно.

Скажем, если через чтение D₉ будет генерироваться запрос на ПДП цикла чтения из памяти, а при записи в D₉ - запрос на ПДП-цикл записи в память, то команда «MOV D9,D9» будет сначала читать память через ПДП-цикл, а затем - записывать (всё через разные каналы). И здесь нужно ввести узел задержки и временного хранения.
Например, код «DD D9 9F 9F 9F» как 3 штуки «MOV D9,D9» копируют 3 байта из одного канала ПДП в другой.

 

P.S.: Этим блоком «D» нужно будет основательно заниматься…
(Жутковато там… В «блоке D»…)

Edited by Alikberov

Share this post


Link to post
Share on other sites

В общем, на ixbt немного простимулировали и установил Quartus. Более-менее освоился в нём и добился симуляции, идентичной этой.
Занимает 1/25 от Cyclone-V. Задержки получаются ≈19 нс. Тем самым, на 50 МГц работать должно стабильно.
Пока ещё детально не изучил все таблицы. Возможно, скважность нужно подкорректировать…
 

Генерируемая схема получилась слишком узкой и длинной.
(После Logisim такое крайне непривычно наблюдать. Тем более, наткнулся на статью, где используется и ModelSim, и Logisim - не только я белая ворона…)
Думаю, стоит добавить ещё блок, для формирования более чёткой структуры.
 

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

Сейчас хочу написать HTML5-JavaScript эмулятор с графикой и звуком, чтобы ByteBeat проверить.
Графический движок у меня имеется, так как телевизионный вариант «ИМ-02» когда-то пытался набросать…
Особенность в том, что сначала заполняется буфер со сценой из спрайт-сегментов, а потом одним из 64 битов маски можно гасить эти спрайты…
(В демонстрации - имитация ТВ-помех с наложением огромного мерцающего смайлика…)
Тогда (в 2011) до эмуляции процессора не дошёл, так как не нашёл описания КБ1013ВК1-2, а потом и занялся своими…
 

То есть, остаётся эмулятор Койяанискаци-команд написать и какой-то код, типа «Pong», на 64 ЖК-сегментах…

Edited by Alikberov

Share this post


Link to post
Share on other sites
2 hours ago, Alikberov said:

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

По моим ощущениям, такое процессорное ядро должно уместиться в  гораздо более скромный Cyclone чип (неважно какого поколения) - что-то с 10-16 kilo LE (цена платы с таким FPGA, соответственно, будет куда гуманнее). Вместе с некоторой периферией. И перед покупкой этот факт можно и нужно проверить - посинтезировать в Quartus'е проект под разные FPGA чипы, разные частоты тактирования и т.п.

Quote

Занимает 1/25 от Cyclone-V. Задержки получаются ≈19 нс. Тем самым, на 50 МГц работать должно стабильно.

Вот тут не понял. 1/25 от ресурсов чипа? Какого именно? Или вы это про временнЫе характеристики? Тогда еще вопрос, как вы эти 19 нс получили. Синтезировать под FPGA пробовали? Или это все пока только про симулятор и его результаты?

Share this post


Link to post
Share on other sites

  

15 минут назад, Raven сказал:

По моим ощущениям, такое процессорное ядро должно уместиться в  гораздо более скромный Cyclone чип (неважно какого поколения) - что-то с 10-16 kilo LE (цена платы с таким FPGA, соответственно, будет куда гуманнее). Вместе с некоторой периферией. И перед покупкой этот факт можно и нужно проверить - посинтезировать в Quartus'е проект под разные FPGA чипы, разные частоты тактирования и т.п.

Вoт на это и расчёт, чтобы можно было любую архитектуру Компьютера (не процессора) спроектировать…

То есть «своя архитектура компьютер» на «процессоре своей архитектуры». А там и площади кристалла может не хватить…

19 минут назад, Raven сказал:

Вот тут не понял. 1/25 от ресурсов чипа? Какого именно? Или вы это про временнЫе характеристики? Тогда еще вопрос, как вы эти 19 нс получили. Синтезировать под FPGA пробовали? Или это все пока только про симулятор и его результаты?

Кaк я уже говорил, с Quartus никогда не работал и третий день как кутёнок тыкаюсь там. Вот что выдаёт компиляция:

Flow Status			Successful - Sun Jul 12 03:26:43 2020
Quartus II 64-Bit Version	15.0.0 Build 145 04/22/2015 SJ Web Edition
Revision Name			Koyaanisqatsi_CPU
Top-level Entity Name		Koyaanisqatsi_CPU
Family				Cyclone V
Device				5CEBA2F23C7
Timing Models			Final
Logic utilization (in ALMs)	395 / 9,430 ( 4 % )
Total registers			374
Total pins			28 / 224 ( 13 % )
Total virtual pins		0
Total block memory bits		0 / 1,802,240 ( 0 % )
Total DSP Blocks		0 / 25 ( 0 % )
Total HSSI RX PCSs		0
Total HSSI PMA RX Deserializers	0
Total HSSI TX PCSs		0
Total HSSI PMA TX Serializers	0
Total PLLs			0 / 4 ( 0 % )
Total DLLs			0 / 4 ( 0 % )

Откуда я увидел «Logic utilization (in ALMs) 395 / 9,430 ( 4 % )»…

И графически это, вроде как, подтверждается…
 

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

Koyaanisqatsi-Q-Diagram.jpg

Koyaanisqatsi-zone.png

Edited by Alikberov

Share this post


Link to post
Share on other sites

Кстaти, здесь на видео я программно реализовал наложение графики ZX-Spectrum на видеосигнал, как если бы телевизоры тех лет оснащались бы его начинкой для OSD-меню.
Тем самым, мне подошла любая отладочная плата, но с поддержкой композитного видео входом и выходом.
Хоть и интересуюсь инженерингом низкого уровня, но как-то совсем не хочется заказывать ADV7181 и ADV7340, да ещё пропаивать их (находил их специально под DE0-Nano).

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

В худшем случае, буду дорабатывать официальные примеры Altera.
В лучшем - буду дорабатывать собственную архитектуру от RISC до CISC в рамках пародии на РАДИО-86РК: Любопытно было ВГ75 связать развёрткой с LM1881 и наложением текста на внешний ТВ-сигнал.

 

Сейчас все увлечены HD-графикой с реалистичным 3D. Но в 2010 я специально стал интересоваться разработкой видеосистемы, где динамичная графика невозможна в принципе. То есть, сначала процессор рисует некую сцену из 128 фигур, а потом через порт управляет регистром с маской, чтобы получился ЖК-эффект игры «Ну, Погоди!». Динамика присутствует, но движения спрайтов - нет. Процессор занят игровым процессом, а не перерисовкой всяческой ерунды на экране.
 

Ещё недавно совсем те же популярные Тамагочи имели не графический - структурный ЖК-дисплей с пиктограммами режимов.
И как-то наскучил весь этот бум на 3D-движках.
Любопытно исследовать простенькое, но оригинальное.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.