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

User Tag List

Страница 44 из 45 ПерваяПервая ... 404142434445 ПоследняяПоследняя
Показано с 431 по 440 из 450

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

  1. #431
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    Павлодар
    Сообщений
    2,867
    Благодарностей: 1454
    Mentioned
    0 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.

  2. Эти 3 пользователя(ей) поблагодарили HardWareMan за это полезное сообщение:
    SegaBoy (20.02.2018), Titus (15.02.2018), Udillak (15.02.2018)

  3. #432
    Veteran Аватар для Vslav
    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    1,346
    Благодарностей: 1849
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Однако, команда DAD единственная из тех, что использует машинные циклы М2 и М3, но при этом ей не нужна шина
    Ну название Mn оно достаточно условно, n - это обычно номер цикла, а не тип, который используется в документации на процессор. Хотя M1 совпадает как по номеру так и по типу. На DAD есть переход M1->M4, а не M1->M2, поэтому и блокировка генерации внешнего цикла шины на M4/M5.

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Не понятно, почему сигнал назван именно как READY_INT
    ...
    быть может как READY INTERNALLY?
    Угу, это READY internal, потому что когда оно реверсилось было сразу видно что сигнал влияет на готовность и уходит куда-то глубоко внутрь. А куда именно - сразу не раскопаешь, поэтому было принято такое рабочее название, потом так и осталось. А в последней ревизии rtl (когда я все причесал под монофазность) оно называется dad_m45, так нагляднее.

  4. #433
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    Павлодар
    Сообщений
    2,867
    Благодарностей: 1454
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Ну название Mn оно достаточно условно, n - это обычно номер цикла, а не тип, который используется в документации на процессор. Хотя M1 совпадает как по номеру так и по типу. На DAD есть переход M1->M4, а не M1->M2, поэтому и блокировка генерации внешнего цикла шины на M4/M5.
    Я только сейчас понял, почему Lavr недоумевал. Я всегда машинные циклы обозначал как Mn именно как номер машинного цикла во времени: M1 - чтение опкода, M2 дочитка операнда и т.д. Именно поэтому и посчитал ошибкой в схеме, т.к. DAD продолжительностью в 3 машинных цикла и только в 1м есть активность шины. Так описано в оригинальной доке, там M используется только для номера, а в таблице типа нет никаких литер (кроме N как обозначение числа в слове состояния).

    А Lavr смотрел в свою странную книжецу, где Mn это обозначение типа машинного цикла: чтение опкода, чтение данных, запись данных и т.д.

    Вот как бывает важно читать правильные документы.

  5. #434
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    Павлодар
    Сообщений
    2,867
    Благодарностей: 1454
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Оказывается, трюк с обнулением внутренней шины данных используется не только для регистра инструкций. Дело в том, что выборка регистровой пары R0 (напомню, что всего в процессоре 6 регистровых пар, от R0 до R5: PC, HL, DE, BC, SP и WZ) не активируется в Т1 и Т2 в M1. А сброс это растянутый T1 в M1. А защелка адреса может записывать только со внутренней 16ти битной шины регистрового файла. Поэтому, пока удерживается сброс формируются сигналы записи в регистры без указания регистра, что приводит к установке внутренней шины регистров в 0. Это попадает в защелку адреса. 16ти битный сумматор, который может работать в 3х режимах: +1, 0 и -1, тут же высчитывает следующий адрес, который и запишется в PC после загрузки регистра инструкций. Таким образом, при сбросе PC фактически хранит свое состояние до загрузки опкода из ячейки памяти с адресом 0000H. Сам 16ти битный сумматор собран на комбинаторике, со схемой ускоренного переноса. Я еще не проверял, но похоже что INX RP и DCX RP работают через него, поэтому не используют ALU и его флаги.
    Последний раз редактировалось HardWareMan; 16.02.2018 в 12:38.

  6. Эти 2 пользователя(ей) поблагодарили HardWareMan за это полезное сообщение:
    svofski (16.02.2018), Titus (16.02.2018)

  7. #435
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    Павлодар
    Сообщений
    2,867
    Благодарностей: 1454
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Выход HLDA означает, что процессор отработал входной сигнал HOLD запроса доступа к шине и освободил ее. Вот его схема:

    Меня интересует комментарий Vslav: нет ли тут ошибки? Ведь при установке HLDA произойдет блокировка на элементе, эквивалентном 2И-НЕ (транзисторы Т787 и Т788).

    Что касается DAD, он действительно прыгает с M1 на M4 сразу. Ну, по крайней мере, моя моделька прыгает на данном этапе отладки.

    Скрытый текст

    [свернуть]

  8. #436
    Activist Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    379
    Благодарностей: 16
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Меня интересует комментарий Vslav: нет ли тут ошибки? Ведь при установке HLDA произойдет блокировка на элементе, эквивалентном 2И-НЕ (транзисторы Т787 и Т788).
    ИМХО, это будет только при активном F2. После его спада на выходе защёлки будет Z-состояние, что для 2И-НЕ приравнивается к лог. "1", если не ошибаюсь... А при активации F1 следующего цикла это состояние (HLDA после inst 1303) запишется и дальше, что мы и наблюдаем в симуляции выше.
    "Байт-48"

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

  10. #437
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    Павлодар
    Сообщений
    2,867
    Благодарностей: 1454
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    andreil, это полевые транзисторы. В них заряд остается, если цепь разорвана. Не на всегда, но в пределах тактовой частоты считай что статично (эффект регенерации). Именно поэтому, LATCH на них всего 2 транзистора, вместо 6х. Ну и отсутствие заряда как раз и рассматривается - блокировка произойдет.

  11. #438
    Activist Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    379
    Благодарностей: 16
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    andreil, это полевые транзисторы. В них заряд остается, если цепь разорвана. Не на всегда, но в пределах тактовой частоты считай что статично (эффект регенерации). Именно поэтому, LATCH на них всего 2 транзистора, вместо 6х. Ну и отсутствие заряда как раз и рассматривается - блокировка произойдет.
    Возможно и так, в таких схемах быстро запутываюсь, нет опыта. Опирался на схемное представление в углу...
    "Байт-48"

  12. #439
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    Павлодар
    Сообщений
    2,867
    Благодарностей: 1454
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от andreil Посмотреть сообщение
    Возможно и так, в таких схемах быстро запутываюсь, нет опыта. Опирался на схемное представление в углу...
    А схемное то как раз еще проще. Конструкция из 2х транзисторов, когда один разрывает цепь затвора у второго ничто иное как инвертирующая прозрачная защелка. Т.е., пока действует лог.1 на управляющем входе (транзистор в цепи затвора открыт) сигнал беспрепятственно проходит и может меняться сколько угодно. Как только управляющее напряжение падает до лог.0 (транзистор закрылся) последнее состояние сигнала запоминается и выход его будет удерживать до следующей активации. А так как обе защелки работают в разные фазы, то по факту они друг друга поддерживают в кольце.

  13. #440
    Veteran Аватар для Vslav
    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    1,346
    Благодарностей: 1849
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Меня интересует комментарий Vslav: нет ли тут ошибки? Ведь при установке HLDA произойдет блокировка на элементе
    Ошибки нет, ключ к пониманию - транзистор T375, первый лист внизу слева. Нарисован по-идиотски, не влез где положено. Перерисовал его поближе к формирователю HLDA.

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

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    andreil, это полевые транзисторы. В них заряд остается, если цепь разорвана. Не на всегда, но в пределах тактовой частоты считай что статично (эффект регенерации). Именно поэтому, LATCH на них всего 2 транзистора, вместо 6х. Ну и отсутствие заряда как раз и рассматривается - блокировка произойдет.
    Это ты еще LSI-11 древнейшую схемотехнику не видел. Ковыряю потихоньку CP1611, AKA 581ИК1, вот там жесть, понимаешь что это латч, а как оно конкретно работает - непонятно совсем. Потому что там надо знать тип транзистора, кто из двух передавливает, из фото неясно, приходится угадывать по смыслу. Хорошо хоть подробное описание чипсета есть, сильно помогает.

Страница 44 из 45 ПерваяПервая ... 404142434445 ПоследняяПоследняя

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

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

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

Похожие темы

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

Ваши права

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