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

User Tag List

Страница 43 из 48 ПерваяПервая ... 394041424344454647 ... ПоследняяПоследняя
Показано с 421 по 430 из 472

Тема: Потактовый клон i8080 на FPGA/CPLD

  1. #421
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,556
    Спасибо Благодарностей отдано 
    1,219
    Спасибо Благодарностей получено 
    1,754
    Поблагодарили
    683 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Поправил выход из режима halt по прерыванию. В книжке было написано что выход из halt только по сбросу, а реально оно должно выходить и по прерыванию. Я про это забыл, сегодня вот изучал исходники КСМ, увидел там инструкцию hlt, пришлось вносить правки в корку
    Так что же, ваша модель основана на инструкции, а не на реверсе?

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

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Так что же, ваша модель основана на инструкции, а не на реверсе?
    Основана на реверсе, но сделана оптимизация. Когда я сделал форк на вишбон, то выполнил ряд оптимизаций - убрана фаза F1, убраны HOLD/HLDA/WAIT, ну и еще выбросил по ошибке просыпалку, считая что она тоже не нужна. Теперь выяснилось, что это я погорячился, вернул просыпалку на место. Экзорцист-то все тестирует, кроме HLT. Пришлось еще тестик на HLT добавить.

  4. #423
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,556
    Спасибо Благодарностей отдано 
    1,219
    Спасибо Благодарностей получено 
    1,754
    Поблагодарили
    683 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

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

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Но, надеюсь, оригинальная потранзисторная схема осталась? Для будущих поколений, которые захотят пойти не путем верилога.
    Там на гитхабе все расписано в описании проекта. И схема выложена полностью со всеми материалами, и верилог. В репозитории две ветки - одна оригинальная, полифазная, с F1/F2, а вторая оптимизированная под SoC, хотя и сохранением всех растактовок T1-T5/М1-М10.

  6. #425
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,404
    Спасибо Благодарностей отдано 
    318
    Спасибо Благодарностей получено 
    597
    Поблагодарили
    443 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

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

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Может стоит апдейт первого поста сделать? Там ссылки все повыкладывать, а то по теме искать - не айс.

  8. #427
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,404
    Спасибо Благодарностей отдано 
    318
    Спасибо Благодарностей получено 
    597
    Поблагодарили
    443 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ищите остальные, кидайте в личку. Я добавлю.

  9. #428
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,404
    Спасибо Благодарностей отдано 
    318
    Спасибо Благодарностей получено 
    597
    Поблагодарили
    443 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Разлохматил второй лист, который с АЛУ. Он действительно забавный. Остался последний, с регистрами и адресными мультиплексорами.

  10. #429
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,404
    Спасибо Благодарностей отдано 
    318
    Спасибо Благодарностей получено 
    597
    Поблагодарили
    443 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Все, разлохматил последний лист, с регистрами и 16ти битным счетчиком. Процессор - чистая стэйт-машина, никакого микрокода. Теперь точно ясно, что повторять его влоб смысла вообще нет, нужно делать изложение на тему. Речь конечно о реализации на FPGA/CPLD. Интересного там только сам ALU - он просто изящен, хоть и не настолько продвинут в математическом смысле, как у Z80. Ну еще и стэйт машина циклов, но ее можно и самому накорябать за полминуты. Забавно еще то, что только регистры реально хранят значения во времени и аккумулятор, хотя он часть ALU (его выбор - отдельная цепь). У ALU несколько внутренних регистров: X, R и A, причем X и R практически каждый такт перезаписываются. A, выполняет роль, собственно, аккумулятора. При расчете, данные из A сначала копируются в R. Второй операнд параллельно грузится в X и результат вычисляется комбинаторной логикой напрямую (затраты времени чисто задержка в логике), который может быть записан обратно в А, минуя внутреннюю шину, или сразу выставлен на внутреннюю шину данных. Она, кстати, двунаправленная, точнее там что-то вроде монтажного ИЛИ + накачка перед использованием, т.е. используется ёмкостный эффект - это уже обсуждали. Это позволяет загрузить опкод NOP (накачка внутренней шины отключается при активном сбросе), удерживая сброс в течение нескольких тактов (в доке написано, что их число минимально 3), что уменьшает накладные расходы в схеме. Таким образом, вот эта схема не верна, так как Accumulator Latch имеет доступ к внутренней шине.

    А, еще регистр флагов. Он отсутствует как регистр - так, набор триггеров. 4 из них вообще тупые: P, Z, AC и S. А вот C - развитой. У него сложная цепь управления, т.к. он реально участвует в куче команд.

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

    Теперь я знаю Кунг-Фу ВМ80!

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

    Позже, я попробую сделать анализ схемы. Хочу нарисовать растактовку, когда в какой момент активируется тот или иной процесс, особенно внутри ALU. Будет нечто подобное растактовке команд из доки, только с указанием внутренних процессов, особенно тех, что без привязки к опкоду. Получившейся информации будет предостаточно для написания тактово точной модели или эмулятора. И сделать это максимально оптимально.
    Последний раз редактировалось HardWareMan; 14.02.2018 в 18:26.

  11. #430
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,404
    Спасибо Благодарностей отдано 
    318
    Спасибо Благодарностей получено 
    597
    Поблагодарили
    443 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ах да, последнее на сегодня. Когда-то давно, на NedoPC возник спор, что происходит на ногах у ВМ80 во время выполнения 16ти битного сложения командой DAD. По количеству машинных циклов было понятно, что эта команда прогоняется через ALU и занимает 3 машинных цикла, что подтверждает всем известная дока. Большинство арифметических команд накладывается на цикл М1 следующего опкода, если результат ALU надо сохранить в аккумулятор (помечены сноской 9 в известной доке на карте растактовки). Это возможно благодаря внутренней шине ALU, о чем я уже упомянул выше. Однако, команда DAD единственная из тех, что использует машинные циклы М2 и М3, но при этом ей не нужна шина, потому, что все необходимые данные уже внутри, в регистрах. Так вот, я хочу поставить жирную точку в этом споре. Легче всего это отследить по сигналу SYNC. Вот его схема:

    Здесь видно, что сигнал SYNC формируется из сигнала T1, который может блокироваться сигналом RESET (все верно, сигнал SYNC в состоянии сброса не генерируется, но при этом машина молотит, загружая каждый раз опкод NOP в регистр инструкции). Этот сигнал запоминается сначала по тактовой фазе F1 и затем по тактовой последовательности F2. Помешать сформированному сигналу может только лог.1 на READY_INT, который, складываясь по NOR будет давить SYNC к лог.0. Напомню, что сигнал SYNC имеет положительную полярность: активный лог.1. Таким образом, SYNC это всего лишь T1 задержанный до T2. Внутри, READY_INT блокирует сигнал WR (перед выдачей на ножку WR) и обнуляет сигнал-статус SY_WO, который по сути является битом D1 в слове состояния и который означает, что процессор хочет запись. Это, в свою очередь, блокирует DBIN выход. Зачем сделано именно так? Это упрощает генерацию сигнала чтения DBIN, который генерируется чаще и должен быть длиннее. Теперь сигнал READY_INT:

    Сигнал формируется только от ID_DADX, который стреляет на все 4 опкода команды DAD (09H, 19H, 29H и 39H) и два сигнала машинный циклов M4 и M5. Сигналы машинных циклов M4 и M5 сначала складываются по ИЛИ, а затем по ИЛИ-НЕ (что эквивалентно И). Т.е., блокировка происходит для M4 или M5 только при команде DAD. Соответственно, сигналы SYNC, DBIN и WR во время исполнения 2 и 3 циклов команды DAD не активны. READY_INT так же блокирует вход READY, что не даст вам остановить ВМ80 сигналом неготовности во время прогона вычислений команды DAD. Шину адреса он не блокирует - там будет активность. Шина данных так же управляется только внутренним сигналом SY_WO, поэтому на шине данных так же будет что-то выставлено (в том числе и слово состояния в своем временном слоту). Произойдет обычная запись, но при отсутствии стробирующих сигналов DBIN и WR конфликта шины или чего-то деструктивного не будет. На остальные входы и выходы READY_INT не влияет.

    Очевидно, что в схеме ошибка. Вместо M4 и M5 должны быть M2 и M3. Я специально в тексте объяснения написал соответственно этой схеме, чтобы не было путаницы. Но в целом и так ясно. Не понятно, почему сигнал назван именно как READY_INT, ведь к прерываниям он отношения не имеет (сокращение INT у меня ассоциируется с ними), быть может как READY INTERNALLY? Но все это сейчас уже и не важно, наверное.
    Последний раз редактировалось HardWareMan; 14.02.2018 в 22:54.

Страница 43 из 48 ПерваяПервая ... 394041424344454647 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Комманды ассемблера/коды i8080/КР580ВМ80А
    от sergey2b в разделе Разное
    Ответов: 4
    Последнее: 29.11.2015, 14:01
  2. МикроСтеплер. Компилятор ЯП СТЕПЛЕР для i8080
    от Kakos_nonos в разделе Программирование
    Ответов: 8
    Последнее: 31.05.2013, 16:34
  3. Эмулятор i8080
    от Higgins в разделе Разное
    Ответов: 2
    Последнее: 20.05.2011, 11:43
  4. Использование FPGA и CPLD (ПЛИС и ПЛМ)
    от Mick в разделе Для начинающих
    Ответов: 69
    Последнее: 03.05.2006, 11:47

Ваши права

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