Важная информация

User Tag List

Страница 1 из 14 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 133

Тема: Ядро с 32 битами и виртуализацией

  1. #1
    Master
    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Ядро с 32 битами и виртуализацией

    С хард-процессором не получилось, но появилось понимание что и как сделать. Попробую софт-процессор.

    На основе своего "эмулятора-интерпретатора" пишу на Паскале симулятор. Привязан он не к программной обработке, а ближе к FPGA, поэтому в нём IF-ов ещё больше. Сначала реализую набор команд Z80, потом добавлю 32 бита, а как появится окончательная картина внутренней архитектуры буду переносить на Verilog.

    32 бита будут точно не через префиксы, это будет отдельная система команд, использующая те же регистры (BC, DE, IX, A...). Также, возможно, в режиме совместимости с Z80 весь префикс ED будет обрабатываться программно, то есть для него будет вызываться обработчик, который в режиме интерпретатора обработает команду и вернёт управление. Будет медленнее, но учитывая что там и так надо половину опкодов эмулировать (порты, прерывания) можно пожертвовать скоростью ради ускорения 32 бит.

    На данный момент в симуляторе получается в среднем около 6 тактов на один байт кода. В том числе обращения к памяти данных считаю 1 такт на байт при попадании в кэш, оно скорее всего так и будет. Частоту пока не знаю, но по предварительной оценке в Quartus 100 МГц должен осилить. До eZ80 с его 1 тактом/байт на частоте 50 МГц не дотягивает, но это будет точно быстрее Z80 на 20 МГц.

    В общем, в новый год с новым проектом

  2. Эти 2 пользователя(ей) поблагодарили Bolt за это полезное сообщение:

    andrews (11.01.2020), Evgeny Muchkin (10.01.2020)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  4. #2
    Moderator Аватар для Mick
    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    9,917
    Спасибо Благодарностей отдано 
    178
    Спасибо Благодарностей получено 
    695
    Поблагодарили
    368 сообщений
    Mentioned
    19 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Идея интересная. У меня были раньше более приземленные желания. Всего лишь софт процессор - 16 битный Z80. То есть расширить стандартные инструкции до полноценной работы с 16 битными данными.
    Сайт поддержки моих изделий - http://micklab.ru/
    Группа ВКонтакте - https://vk.com/micklab

  5. #3
    Master
    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Расширяем регистры BC, DE, HL, IX, IY до 32 бит.
    По возможности делаем набор ортогональным, чтобы можно было что-то типа "ld IX,(HL+34)", или "add BC,(DE)".
    Битов для кодирования таких инструкций надо много, поэтому некоторые регистры и операции с ними делаем быстрыми, однобайтными. В остальном - не сдерживаем полёт фантазии.

    Далее, например, в стандартном наборе "add, adc, sub, sbc, and, xor, or..." инструкция сравнения мне кажется лишней, а вместо неё просится что-то типа andn.
    and - маска, оставить в первом операнде только те биты, которые во втором операнде равны 1.
    xor - инвертировать биты.
    or - установка битов.
    andn - "and not", сбросить в первом операнде биты, которые во втором операнде равны 1.

    Сложение и вычитание с переносом тоже кажутся не очень нужными при 32-битной арифметике. Может их вынести из основного набора, а вместо них поставить что-то другое?

    Возможно, я не умею пользоваться флагом переполнения, но смешанное арифметическое сравнение signed и unsigned ломает мозг. Давайте сделаем четыре инструкции cpuu, cpus, cpsu, cpss.

    Можно оставить sll в режиме Z80 как есть для совместимости, но в новом наборе исправить ошибку.

    Префикс повтора, как в x86, не предлагать, он вообще никак не вписывается. Можно сделать 32-битный djnz.

    Ну, огромное желание добавить mul и div даже не обсуждается.

    Что ещё добавить, изменить?

  6. #4
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    512 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bolt Посмотреть сообщение
    andn - "and not"
    а это ищо что за х86 аутизм
    когда есть nand

    ееще бы eor\exor придумали

    - - - Добавлено - - -

    Цитата Сообщение от Bolt Посмотреть сообщение
    Что ещё добавить, изменить?
    условное выполнение
    add nz bc,de
    зачем?
    шоб было

    - - - Добавлено - - -

    Цитата Сообщение от Bolt Посмотреть сообщение
    Расширяем регистры BC, DE, HL, IX, IY до 32 бит
    и если мы что то расширяем
    то не уподобляемся мерзкому 8080
    и расширяем в z80 стайл

    тоесть новые 32 бит регистры

    BCDE
    DEHL - получается перегруженно
    или
    BCBC' - тоже не фантан и будет не удобно юзать

    ну и вощем стандартных регистров мало для такого подхода...
    может нужно большо?


    конечно
    можно было бы
    EBC
    EDE
    EHL

    но тогда старшие 2 байта
    придется выкалупывать для работы как с 8 бит числами
    для чего потребются новые команды...
    или просерание процессорного времени

    такая же херня в мерском х86
    AH AL есть и все хорошо
    но далбше
    AX (AXH уже нету)
    EAX (EAXH тоже нету)


    вощем нужно подумать как это правильно сделать






    НАПРИМЕР

    завести второй набор 16 бит регов для старшой половины extended 32 битных регов
    BCH
    DEH
    HLH
    или
    HBC
    HDE
    HHL

    32бит команды ЖЕ в стиле
    add EBC,EDE
    которые ПО СУТИ
    add HBCbc, HDEde

    младшие же 2 байта
    будут сходу доступны старым командам z80
    к старшим придется обращатся новыми командами


    как вариант2 (ВМЕСТО) не уподоблятся х86

    и завести второй набор регистров для младших 16 бит

    BCL
    DEL
    HLL

    преиущества такие

    add ehl,ebc
    равносильно
    add HLhll,BCbcl
    и по влиянию на флаги
    сопоставимо с
    add hl,bc
    и знак у нас сохраняется!!!!

    тоесть в любой момент времени
    мы можем дрыгать точностью вычислиений
    add hl,de
    add ehl,ebc
    mul ehl,eix
    ld bc,hl - и так например отбросили младшие не значимые 16 бит

    Последний раз редактировалось NEO SPECTRUMAN; 11.01.2020 в 12:38.

  7. #5
    Veteran Аватар для zebest
    Регистрация
    11.01.2008
    Адрес
    Ладошкино
    Сообщений
    1,673
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    323
    Спасибо Благодарностей получено 
    221
    Поблагодарили
    174 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bolt Посмотреть сообщение
    Что ещё добавить, изменить?
    Елси и изобретать велосипеды, то можно хоть колеса одного диаметра делать??
    https://docs.google.com/spreadsheets...gid=1809398086
    там вкладка для следующего есть, да и в доках они кое-что писали, что реализовали.
    Да и ужасм вроде поддерживает новые инструпции.
    *мимо проходил
    Profi v3.2 -=- Speccy2010,r2

  8. #6
    Master
    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zebest Посмотреть сообщение
    Елси и изобретать велосипеды, то можно хоть колеса одного диаметра делать??
    https://docs.google.com/spreadsheets...gid=1809398086
    там вкладка для следующего есть, да и в доках они кое-что писали, что реализовали.
    Да и ужасм вроде поддерживает новые инструпции.
    *мимо проходил
    У "следующего" есть интересные инструкции, но где там 32 бита? У него концепция совсем другая. У меня, скорее, 32-разрядный процессор с аппаратным эмулятором Z80, и вообще я задумывался о простом RISC и трансляции "на лету", но нашёл способ проще.

    - - - Добавлено - - -

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    есть nand
    Есть, и означает "not (A and B)", а у нас "A and (not B)".

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    условное выполнение
    add nz bc,de
    зачем?
    шоб было
    Условное выполнение используется чтобы конвейер не сбивать переходами. Будет конвейер - будет условное выполнение, а так оно действительно "шоб было".

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    и если мы что то расширяем
    то не уподобляемся мерзкому 8080
    и расширяем в z80 стайл
    Не, не пойдёт. Плохой это стайл, особенно в плане скорости. На кристалле можно обойтись одним транзистором, а в FPGA синтезатор такие дурные схемы рисует, что частота сразу резко падает.

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    но тогда старшие 2 байта
    придется выкалупывать для работы как с 8 бит числами
    для чего потребются новые команды...
    или просерание процессорного времени
    "Гоги, а оно тебе зачем?" В смысле старшие байты. Просерание времени всё равно будет, потому что или все условно по 5 тактов, или некоторые по 3, а экзотика по 8. Старшие байты это по-моему экзотика.

    - - - Добавлено - - -

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    add ehl,ebc
    равносильно
    add HLhll,BCbcl
    и по влиянию на флаги
    сопоставимо с
    add hl,bc
    и знак у нас сохраняется!!!!

    тоесть в любой момент времени
    мы можем дрыгать точностью вычислиений
    add hl,de
    add ehl,ebc
    mul ehl,eix
    ld bc,hl - и так например отбросили младшие не значимые 16 бит
    Вот тут я вообще нить потерял.

    Понимаешь, если в FPGA делать вот совсем всё на всё, то получается мультиплексор на тыщи ячеек и с огромной задержкой, в результате ядро будет работать на частоте 10 МГц. Что, в принципе, и наблюдаем почти во всех Z80-"корках".

    То есть опять "либо то, либо это". Либо делаем огромный мультиплексор с возможностью подать на АЛУ всякие комбинации регистров 8/16/32 бит и получаем тормоза на всём, либо делаем тупой мультиплексор без сдвигов, получаем быстрые 32 бита и потерю одного такта при эмуляции старых 8-битных инструкций. Долго объяснять, но вот у меня такая загогулина получилась.

    Но я подумаю куда это впихнуть можно. Если в итоге доступ будет быстрее чем альтернативы типа "srl BC,16" - сделаю. Swap word и swap byte устроит?

  9. #7
    Guru Аватар для andrews
    Регистрация
    20.04.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,686
    Спасибо Благодарностей отдано 
    422
    Спасибо Благодарностей получено 
    196
    Поблагодарили
    174 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bolt Посмотреть сообщение
    С хард-процессором не получилось, но появилось понимание что и как сделать. Попробую софт-процессор.

    На основе своего "эмулятора-интерпретатора" пишу на Паскале симулятор. Привязан он не к программной обработке, а ближе к FPGA, поэтому в нём IF-ов ещё больше. Сначала реализую набор команд Z80, потом добавлю 32 бита, а как появится окончательная картина внутренней архитектуры буду переносить на Verilog.

    32 бита будут точно не через префиксы, это будет отдельная система команд, использующая те же регистры (BC, DE, IX, A...). Также, возможно, в режиме совместимости с Z80 весь префикс ED будет обрабатываться программно, то есть для него будет вызываться обработчик, который в режиме интерпретатора обработает команду и вернёт управление. Будет медленнее, но учитывая что там и так надо половину опкодов эмулировать (порты, прерывания) можно пожертвовать скоростью ради ускорения 32 бит.

    На данный момент в симуляторе получается в среднем около 6 тактов на один байт кода. В том числе обращения к памяти данных считаю 1 такт на байт при попадании в кэш, оно скорее всего так и будет. Частоту пока не знаю, но по предварительной оценке в Quartus 100 МГц должен осилить. До eZ80 с его 1 тактом/байт на частоте 50 МГц не дотягивает, но это будет точно быстрее Z80 на 20 МГц.

    В общем, в новый год с новым проектом
    только не забудьте RTC и BT или WiFi и поддержку microSD в тот же кристалл. RISC точно бы упростил и архитектуру и конвейер. Быстродействия 50 МГц z80 точно не надо, если будут 32 битная арифметика и логика, достаточно 25 МГц для таких экранов.
    Последний раз редактировалось andrews; 11.01.2020 в 13:26.

  10. #8
    Master
    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, и учтите что 32 бита это не просто арифметика, а ещё и 24-разрядный адрес.

    У процессора как минимум два режима работы:
    1. "Нативный", бинарно несовместимый с Z80, но имеющий плюшки типа 24-разрядной адресации.
    2. "Эмулятор Z80", в котором он работает как быстрый Z80 и, если разрешено, через префикс имеет доступ к 32-битным инструкциям.
    Запрет нужен чтобы проц не падал при запуске старого софта, в котором могут встретиться такие же комбинации недокументированных байтов.

    Плюс ещё будет "kernel" и "user". В "kernel" можно всё, в "user" запрещён доступ к портам и т.п. Пусть приложение с железом работает через драйвер.

    - - - Добавлено - - -

    Цитата Сообщение от andrews Посмотреть сообщение
    только не забудьте RTC и BT или WiFi и поддержку microSD в тот же кристалл. RISC точно бы упростил и архитектуру и конвейер. Быстродействия 50 МГц z80 точно не надо, если будут 32 битная арифметика и логика, достаточно 25 МГц для таких экранов.
    andrews опять про технологии XXI века...

    Нет, 25 МГц не достаточно. Экран тоже будет другой.

  11. #9
    Activist
    Регистрация
    09.04.2009
    Адрес
    Зеленоград
    Сообщений
    449
    Спасибо Благодарностей отдано 
    127
    Спасибо Благодарностей получено 
    427
    Поблагодарили
    195 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В 2016 году занимался аналогичным проектом.
    Но не доделал. Хотя кое-что уже работало.
    Например, по каналу RS232 из PC посылал файлы .scr в плату с FPGA с выводом на экран монитора.
    Могу реанимировать проект, если есть интерес.
    Вот описания на процессор и СнК.
    https://cloud.mail.ru/public/XfgP/6ymYQ5bfU
    https://cloud.mail.ru/public/2swe/2Mg4A9qfC

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

    Bolt (11.01.2020)

  13. #10
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,552
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    272
    Спасибо Благодарностей получено 
    229
    Поблагодарили
    181 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bolt Посмотреть сообщение
    Есть, и означает "not (A and B)", а у нас "A and (not B)".
    не спорьте, эта операция обычно называется bic (BIt Clear)

    - - - Добавлено - - -

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

Страница 1 из 14 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 465
    Последнее: 03.01.2020, 07:15
  2. Ответов: 16
    Последнее: 02.08.2005, 12:20

Ваши права

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