User Tag List

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 43

Тема: x80 - RISC-ядро с интуитивной системой команд для x80-CISC

  1. #21

    Регистрация
    05.03.2010
    Адрес
    Ташкент
    Сообщений
    160
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    41 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Arrow Дешифратор команд в комбинаторике

    Чтoбы быть последовательным и честным, решил развернуть дешифратор команд из прошивки ПЗУ в элементарную комбинаторику.
    Так в полной мере можно оценить простоту разработанной мною системы команд.
    Правда, перевод BCD в Hex потребует двух сумматоров и одним встроенным в АЛУ сумматором не обойтись… Может, придётся удлинить цикл на ещё один такт… Это дело конкретной реализации…

    К сожалению, не знаю, к какому классу архитектуры можно отнести всё это.
    Для CISC - всё слишком примитивно.
    Для RISC - не все команды просты своей логикой: Комбинация «03 F8» переходит на адрес F800 и пропускает 3 инструкции до адреса F803. Логически, это понятно и просто. Но реализация через счёт пропускаемых операций с режимом пропуска - уже сложно для понимания и выходит за рамки технологии RISC.
    С другой стороны и к MISC отнести в полной мере не получается из-за отсутствия стека как такового…
    (Операции PUSH/POP реализуются программным способом с "танцами под бубен"!)

    Доработки
    Немного подправил схему и логику…
    Теперь комбинация «03 F8» переходит на адрес F830 по логике «Строка #3 дампа по адресу F800»…
    Программировать стало легче, но программная реализация стека реализуется чудовищным кодом, так как её нельзя оформить в подпрограмму.
    Почему так выходит: По плану, как уже писал выше, данный процессор задумывался основанием на ядро к x80-CISC в версии, где CISC-инструкция считывается и разворачивается в RISC-подпрограмму. Потому, получается, что поддержка внутреннего стека в рамках RISC не нужна, так как внешний стек через порты «D0…D9» будет реализовываться в CISC на внешнюю память…
    Это плохо и не удобно для построения самостоятельной системы на данном процессоре и требует введения отдельных команд через резервные линии дешифратора…

    Примерка кода
    Если строить мой CISC x80 на базе данного ядра с прошивкой всех 32768 команд, то сам RISC-код будет всегда начинаться с адреса 0000 в ПЗУ с Гарвардским доступом. Если прикинуть и развернуть одну из операций, то получится примерно следующее:
    Код:
    x80: 54            |MOV  AL,BL  ; Команда x80
    ========================================================================
    0000 DD D1 1E 02 88|MOV D1,0xB0 ; Регистр адреса ячейки контекста
    0005 AA A1 1E AD 2D|MOV A1,D2   ; Считываем содержимое
    000A DD    1E 02 80|MOV D1,0xA0 ; Регистр переключаем с BL на AL
    000F DA D2 1D      |OR  D2,A1   ; Записываем данные
    0012 00            |HLT         ; Итого - 19 команд / 19 тактов
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Вместе с выборкой MOV AL,BL - 22 такта
    Ужасная производительность!!!

    P.S.: Получается, строить внутренности x80 на данном процессоре слишком накладно и бесперспективно.
    Работу над данной версией процессора в качестве ядра приостанавливаю, но не ставлю крест: Быть может, кому-нибудь пригодится как опытный образец…
    Попробую посмотреть в сторону VLIW с длинной машинного кода под 32 бита.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	x80_RISC_Decoder_TTL_Combi.jpg 
Просмотров:	41 
Размер:	24.7 Кб 
ID:	72753  
    Вложения Вложения
    Последний раз редактировалось Радио-86РК; 31.05.2020 в 07:16.

    Этот пользователь поблагодарил Радио-86РК за это полезное сообщение:

    Lethargeek(31.05.2020)

  2. #22

    Регистрация
    05.10.2018
    Адрес
    г. Москва
    Сообщений
    172
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я недавно собрал мелкое недо-WLIW ядрышко в ПЛИС на базе микрокода с целью эмулировать 8080. Ширина микрокода 18 бит ( в ПЛИС память такая), длина 1К (756 это код, а 256 - таблица вызовов и аргументов), объём ядра около 500 LUT4 и 200 триггеров. Не поддерживает пока прерывания, порты и HLT, все остальные инструкции работают. Несовместимо по таймингам и интерфейсу шины, всё-таки больше ориентировано на ПЛИС чем на дискретную логику. Проект с его участием далёк до завершения, так что оно пока сырое, но если есть желание посмотреть, могу поделиться.

  3. #23

    Регистрация
    05.03.2010
    Адрес
    Ташкент
    Сообщений
    160
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    41 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb Дорабатывать схему становится тяжелее: Нужно просто нарабатывать код

    Цитата Сообщение от hitomi2500 Посмотреть сообщение
    Проект с его участием далёк до завершения
    B OpenCores имеется?
    Цитата Сообщение от hitomi2500 Посмотреть сообщение
    если есть желание посмотреть, могу поделиться.
    Конечно есть!
    Цитата Сообщение от hitomi2500 Посмотреть сообщение
    всё-таки больше ориентировано на ПЛИС чем на дискретную логику.
    В пост-апокалипсис не добыть…

    Кстати, устранил мелкие ошибки в схеме:
    Операции «BE»/«CE» считывали данные из памяти преждевременно, из-за чего в регистры «Bn»/«Cn» попадали хаотические данные, так как многократно считывался байта адреса, на который и указывал сам регистр. Вентиль «2-И» всё исправил…
    Код:
    B0 C0 BE|MOV B0,B0:C0  ;Ячейка считывалась многократно и рандомно…
    Наконец-то добавил самостоятельную «MOV» операцию прямо в АЛУ-группу:
    Код:
    ; было…
    A1 AA 1E|EOR A1,A1
       AC 3D|OR  A1,C3
    ; стало…
    A1 AC 3F|MOV A1,C3
    Что мешало? Концепция! Думал сунуть команды битовых сдвигов в ту группу, но пришлось отдать её под «MOV», так как свистопляска достала…
    Также и с префиксом «REP 2…9» не всё так гладко:
    Код:
    AC A1 07 2A|ADD A1,C2*7 ; Префиксом 07 (REP 7) сложение повторяется 7 раз
          07 3B|SUB A1,C3*7 ; Вычитаение 7 раз
          07 4C|AND (A1,C4) ; Чушь!!! Зачем маскировать 7 раз???
          07 5D|OR  (A1,C5) ; Чушь!!! Эти операции в повторе бессмысленны!
          07 6E|EOR (A1,C6) ; Чушь!!! Чётное число повторов возвращают биты обратно!
          07 7E|MOV (A1,C7) ; Чушь!!! Какой смысл в таком присваивании 7 раз?
    B5 C5 07 AE|MOV A1,B5:C5; Чушь!!! Семь раз считывать из памяти???
          07 AF|MOV B5:C5,A1; Чушь!!! Семь раз записывать в память???
          07 A1|USE A1      ; Чушь!!! Семь раз выбирать индекс регистра???
          07 AB|USE A1,B5   ; Чушь!!! Семь раз выбирать группу операндов???
    Думаю, под повтором нужно подключать иную логику. Например, внедрить операции «SHL»/«SHR» или «BIT»…
    В общем, хоть таблица команд вроде бы и забита вся, но резервных комбинаций очень много получается под префиксом повтора!
    Хоть механизмы пре-/пост-инкремента/декремента вводи, как в 68k… В этом случае коды 02…09 будут уже не префиксом «REP n», а каким-нибудь «MODE x»…
    Сделать инкремент/декремент - лишь заменить регистры B₀…₉ и C₀…₉ на счётчики. За часик управиться можно, в перспективе…
    Но, это точно выдавит процессор из класса RISC!

    В файле «cnd_lib.ram» наконец-то появился код с командами «CALL»/«RET»/«JMP»/«Jcnd» с привязкой к стеку. Теперь можно вызвать подпрограммы вложением до сотни раз.
    Операции «PUSH»/«POP» пока не описаны, но это достаточно легко реализуемо.

    P.S.: В схему добавил два десятичных счётчика: Один считает такты до операции «00-HLT» в оперативном режиме, второй - фиксирует последний максимум…
    Вложения Вложения

  4. #24

    Регистрация
    05.10.2018
    Адрес
    г. Москва
    Сообщений
    172
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Радио-86РК Посмотреть сообщение
    B OpenCores имеется?
    Нет Конечный проект это упихать Радио-86РК в Tang Nano. Он абсолютно непрактичен, и в идеологию OpenCores не очень вписывается. Если взлетит (пока есть сомнения), то опубликую на гитхабе.

    Цитата Сообщение от Радио-86РК Посмотреть сообщение
    Конечно есть!
    Пожалуйста : Whatever.7z
    Там многое не очевидно, что-то возможно не соответствует описанию, документацию я не писал пока. Будут вопросы - обращайтесь.

    Цитата Сообщение от Радио-86РК Посмотреть сообщение
    В пост-апокалипсис не добыть…
    В пост-апокалипсис мне кажется главные ценности это патроны и еда, а не электроника. А пока не наступил, купить указанную выше плату можно за $5.

    Цитата Сообщение от Радио-86РК Посмотреть сообщение
    Наконец-то добавил самостоятельную «MOV» операцию прямо в АЛУ-группу
    Я наоборот её убрал, заменив сложением с регистром-нулём. Но у меня в опкоде три селектора для регистров.

  5. #25

    Регистрация
    05.03.2010
    Адрес
    Ташкент
    Сообщений
    160
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    41 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от hitomi2500 Посмотреть сообщение
    Там многое не очевидно, что-то возможно не соответствует описанию, документацию я не писал пока. Будут вопросы - обращайтесь.
    Чтo-то я совсем запутался в исходниках! Видимо, не хватает опыта вникать в Verilog…
    Цитата Сообщение от hitomi2500 Посмотреть сообщение
    В пост-апокалипсис мне кажется главные ценности это патроны и еда, а не электроника.
    Смотря ещё, какой пост-апокалипсис. У отца ещё от цифровой АТС остались запчасти: Целый мешок с 155ЛА3, 155ТВ1 и пр…
    Цитата Сообщение от hitomi2500 Посмотреть сообщение
    Я наоборот её убрал, заменив сложением с регистром-нулём. Но у меня в опкоде три селектора для регистров.
    Просто концептуальные решения различаются: У меня всякая операндная лабуда задаётся одним байтом, чтобы не было никаких проклятущих битовых полей!
    Левая тетрада и правая тетрада, как в известной песне про калоши!

    P.S.: Пока развивал схему в Logisim, понял, что левое полушарие мозга, отвечающее за логическое мышление, крайне плохо работает.
    То есть, мне нравится Logisim за то, что в нём графически строится логическая схема. Причём, этот свой процессор я местами так и построил - методов "тыка": Делал один тик и смотрел, какой сигнал нужно подавить вентилем «И», какой сигнал необходимо подтянуть вентилем «ИЛИ», а где требуется разветвление мультиплексором сделать…
    То есть, чисто визуально проработал всю логику процессора!
    Вот, почему в Verilog'е у меня до сих пор всё туго - левое полушарие уже перегорело!

  6. #26

    Регистрация
    05.10.2018
    Адрес
    г. Москва
    Сообщений
    172
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Verilog/VHDL по сути почти не отличаются от Logisim. Только в Logisim всё рисуется графикой, а в Verilog описывается текстом. В ранних плисовых САПР было что-то очень похожее на Logisim (а в некоторых и до сих пор есть), но когда схемы стали усложняться, разбираться в графической паутине стало всё сложнее, даже с учётом иерархических блоков. Потому и придумали языки описания схем, в виде текста большая схема более читабельна. Так же как и с ЯВУ, в виде блок-схем в ядре Linux ни за что не разберёшься.
    Если возникнет желание разбираться с верилогом, то по нему очень много и справочного и образовательного материала в интернете, на русском в том числе. А если нет, то в Vivado (и других плисовых сапрах тоже) можно сконвертировать верилог в схему, и рассматривать уже её. Могу попробовать наскриншотить. Правда схемы там обычно на много листов, и некоторые примитивы не имеют аналогов в дискретной логике.

  7. #27

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от hitomi2500 Посмотреть сообщение
    Нет Конечный проект это упихать Радио-86РК в Tang Nano.
    Прошу прощения за небольшой оффтопик - а что там за среда разработки для Tang Nano? Руками уже пробовали?

  8. #28

    Регистрация
    05.10.2018
    Адрес
    г. Москва
    Сообщений
    172
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Китайская среда от Gowin. Очень сильно похожа на Lattice Diamond. Лицензия бесплатная, но надо заказывать, можно через представителей в РФ. Где-то кажется был сайт с автоматической процедурой, но точно я не уверен. Для любителей опенсорса можно прикрутить Yosys, но PNR всё равно нужно использовать китайский, альтернативы пока нет.
    Руками пробовал, RGB-полоски на дисплей выводил. Описанное выше ядро собрал, но без обвязки от него толку мало. Беда в том, что в плисе всего 4 блока по 18 килобит памяти, не разгуляешься. А внешняя - китайский QSPI PSRAM, я вообще такое впервые вижу. Видимо придётся делать кэш.
    Если интересует Tang Nano как платформа, можно создать отдельную тему, чтобы здесь не оффтопить.

    Этот пользователь поблагодарил hitomi2500 за это полезное сообщение:

    Vslav(04.06.2020)

  9. #29

    Регистрация
    05.03.2010
    Адрес
    Ташкент
    Сообщений
    160
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    41 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb x80-дизассемблер в Logisim

    Цитата Сообщение от hitomi2500 Посмотреть сообщение
    Если возникнет желание разбираться с верилогом, то по нему очень много и справочного и образовательного материала в интернете, на русском в том числе.
    Вoт частичная модель моего процессора
    Но она такая кривая, что нужно переписывать с чистого листа!

    В самом начале темы я уже пояснил, что в перспективе данный процессор станет ядром того процессора: CISC с RISC-ядром.
    И все архитектурные решения - свои: Никакой лицензионной зависимости ни от кого!

    Кстати, ниже архив - пародия на целевой процессор: Частичный дизассемблер…
    В схеме - как бы всё красиво и последовательно. А в Verilog - тихий ужас!
    Вложения Вложения

  10. #30

    Регистрация
    20.04.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,870
    Спасибо Благодарностей отдано 
    522
    Спасибо Благодарностей получено 
    251
    Поблагодарили
    225 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от hitomi2500 Посмотреть сообщение
    Китайская среда от Gowin. Очень сильно похожа на Lattice Diamond. Лицензия бесплатная, но надо заказывать, можно через представителей в РФ. Где-то кажется был сайт с автоматической процедурой, но точно я не уверен. Для любителей опенсорса можно прикрутить Yosys, но PNR всё равно нужно использовать китайский, альтернативы пока нет.
    Руками пробовал, RGB-полоски на дисплей выводил. Описанное выше ядро собрал, но без обвязки от него толку мало. Беда в том, что в плисе всего 4 блока по 18 килобит памяти, не разгуляешься. А внешняя - китайский QSPI PSRAM, я вообще такое впервые вижу. Видимо придётся делать кэш.
    Если интересует Tang Nano как платформа, можно создать отдельную тему, чтобы здесь не оффтопить.
    Получил на нашу компанию от наших соседей в Питере АО "Восток" поиграться. Только поскольку комп у меня дома 32 битный с ETHERNET, а там привязка к MAC лицензии, то "под Win32 Вы не сможете использовать OEM-овский синтезатор Synplify Pro
    (он требует 64-разрядной ОС). У Вас будет возможность синтеза только в синтезаторе GowinSynthesis"
    теперь нужно привезти какую-то плату посерьезней, на GW1N-2 хотя бы
    Device: GW1N-1 GW1N-2 GW1N-4 GW1N-6 GW1N-9
    LUT4: 1,152 2,304 4,608 6,912 8,640
    Flip-Flop (FF) :864 1,728 3,456 5,184 6,480
    Shadow SRAM S-SRAM(bits): 0 0 0 13,824 17,280
    Block SRAM B-SRAM(bits): 72 K 180 K 180 K 468 K 468 K
    B-SRAM quantity B-SRAM: 4 10 10 26 26
    User Flash (bits): 96 K 256 K 256 K 608 K 608 K
    18 x 18 Multiplier: 0 16 16 20 20
    PLLs+DLLs: 1+0 2+2 2+2 2+4 2+4
    Total number of I/O banks: 4 4 4 4 4
    Max. user I/O: 119 207 207 273 273
    Core Voltage (LV): 1.2 V 1.2 V 1.2 V 1.2 V 1.2 V
    Core Voltage (UV) :– 2.5V/3.3V у всех кроме GW1N-1
    Вопрос только на каких платах стоят не GW1N-1

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ядро с 32 битами и виртуализацией
    от Bolt в разделе Несортированное железо
    Ответов: 132
    Последнее: 30.12.2021, 17:50
  2. x80: CISC - уже не i8080, ещё не i8086
    от Радио-86РК в разделе Разное
    Ответов: 41
    Последнее: 18.05.2020, 21:41
  3. RISC OS
    от Кирлиан в разделе Зарубежные компьютеры
    Ответов: 7
    Последнее: 07.08.2012, 01:28
  4. Ответов: 16
    Последнее: 02.08.2005, 12:20

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •