Z80 Finite State Machine

Микропроцессоры и микроконтроллеры от фирмы Zilog, а также компьютеры на них построенные

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

pfgx wrote:Да на этом форуме столько всего написано!.. Надо будет потом отдельно заняться только чтением...
Да я сам его (форум) с год примерно почитывал... жалко некому всё это упорядочить,
ибо - работа огромная!... :(

Но я хоть немного в общих чертах стал представлять где и что у нас лежит... :wink:
Конечно же, Shaos это всё лучше знает и помнит!
iLavr
User avatar
Shaos
Admin
Posts: 24014
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos к сожалению не всё помнит - иногда только Search спасает, да и то не всегда...
Я тут за главного - если что шлите мыло на me собака shaos точка net
pfgx
Senior
Posts: 137
Joined: 20 Mar 2013 03:36
Location: Ростов-на-Дону

Post by pfgx »

Lavr wrote:Мне кажется, пора бы делать прикидку на соответствие топологии командам z80...
Вот тут можно уже и прикидывать, это "ядро" АЛУ http://yadi.sk/d/-UL-KbU05fDn6

Я нашёл ещё 4 защёлки :) Находятся между выходом АЛУ и младшими разрядами локальной шины. http://yadi.sk/d/75ZpHn-i5fP8M
pfgx
Senior
Posts: 137
Joined: 20 Mar 2013 03:36
Location: Ростов-на-Дону

Post by pfgx »

Вопросов пока больше нет? ;)

Попытался нарисовать управление блоком АЛУ. Запутался в сигналах, поэтому продолжил рисовать от instruction register. В направлении к РОН там только комбинационная логика с мелкими вкраплениями триггеров различной конструкции для, например, exx или ex DE,HL. Расположение РОН скорее всего всё-таки соответствует иллюстрации из книги.

Что обработано:
- instruction register
- "распознаватель" команд
- комбинационная логика после "распознавателя"
- комбинационная логика с сигналами от блока управления (почти готово)
- блок АЛУ
- блок РОН

Что осталось:
- логика управления блоком АЛУ, блоком РОН, коммутацией шин и т.п.
- формирование флагов
- блок управления (reset, wait, interrupt, машинные циклы и т.п.)
- подключение выводов D0...D7 к внутренней шине данных
- прочие мелочи

Блок управления наверное будет самым сложным, он занимает 20% площади кристалла, в нём куча логики с обратными связями (триггеры, причём, кажется, многофазные) и нет никакой системы.
pfgx
Senior
Posts: 137
Joined: 20 Mar 2013 03:36
Location: Ростов-на-Дону

Post by pfgx »

Картинка ещё раз http://yadi.sk/d/75ZpHn-i5fP8M
Сигнал 10 соединён с 24, а 11 и 25 это инвертированные 10 и 24, то есть одно и то же. Перекрёстное соединение полубайтов видимо используется только для rrd.

Примерный порядок работы блока АЛУ.

С ШД процессора через коммутатор-сдвигатель аргументы записываются в 8-битные регистры (прямоугольные блоки слева и справа). Левый регистр может инвертировать данные.

На АЛУ подаются младшие полубайты (открыты транзисторы, управляемые сигналами 24 и 10), при этом также выход АЛУ соединён с 4-битным регистром (квадратный блок в середине).

На АЛУ подаются старшие полубайты (открыты транзисторы 25 и 11), при этом 4-битный регистр отключается от АЛУ и хранит младший полубайт результата.

Затем подаётся сигнал 15, открываются транзисторы, на локальную шину блока АЛУ подаётся байт результата, активируются драйверы (сигнал 34) и результат попадает на шину процессора.

Точные фазы работы смогу сказать после того, как разберу схему управления.
Mixa64
Doomed
Posts: 480
Joined: 25 Aug 2009 07:02
Location: Москва

Post by Mixa64 »

А вот интересно, ИП3 круче, чем АЛУ сабжа?
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

pfgx wrote:Вопросов пока больше нет? ;)

Попытался нарисовать управление блоком АЛУ. Запутался в сигналах, поэтому продолжил
рисовать от instruction register.
Я не знаю, увидел ты или нет, но вот здесь коллега sheff440 свой вклад в понимание и объяснение реализации 4-битного АЛУ у Z80 оставил...
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Mixa64 wrote:А вот интересно, ИП3 круче, чем АЛУ сабжа?
На мой взгляд, здесь не может быть совсем уж адекватного сравнения,
поскольку вещи несколько разные...

Но если сравнивать что называется "в лоб" - то ИП3 - НЕ круче, поскольку
не может делать RAL, RAR, RRC, да и набор флагов победнее будет...
iLavr
pfgx
Senior
Posts: 137
Joined: 20 Mar 2013 03:36
Location: Ростов-на-Дону

Post by pfgx »

Как оно внутри устроено я понял (viewtopic.php?p=105741#105741), но к блоку АЛУ подходит около 30 управляющих сигналов, которые формируются отдельной схемой. В эту же схему идёт десяток выходов АЛУ, и она же участвует в формировании флагов. Вот в этой схеме я и запутался.
pfgx
Senior
Posts: 137
Joined: 20 Mar 2013 03:36
Location: Ростов-на-Дону

Post by pfgx »

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

Процесс движется, надо будет отдельно заняться упрощением схемы. Сейчас это почти 40 страниц А4 и около 400 сигналов, рисовавшихся по принципу "что вижу, то пою" :)
pfgx
Senior
Posts: 137
Joined: 20 Mar 2013 03:36
Location: Ростов-на-Дону

Post by pfgx »

Дорисовал схему управления. На эту схему завязаны все входящие и выходящие управляющие сигналы микропроцессора (CLK, RESET, RD, WR, BUSRQ...), также она содержит два "счётчика" тактов (или FSM, не знаю как точно назвать). Один счётчик считает такты, сброс по условию, второй счётчик несколько сложнее. Выходы счётчиков заведены на огромную комбинационную схему, которая в зависимости от декодированной команды и номера такта (и цикла?) формирует сигналы управления для АЛУ, чтения-записи регистров, сброса счётчиков и т.д.

На рисунке http://yadi.sk/d/hHdabDM46f1UY слева второй счётчик (счётный вход 625, выходы 202...206), справа схема разрешения тактирования этого счётчика (выход 609 комбинируется с CLK и получается 625). То есть условие, при котором меняется состояние этого "счётчика", достаточно сложное.
Сигналы 1xx, 2xx (кроме 20x, это выходы счётчиков) формируются той самой комбинационной схемой.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

pfgx wrote:Выходы счётчиков заведены на огромную комбинационную схему, которая в зависимости от декодированной команды и номера такта (и цикла?) формирует сигналы управления для АЛУ, чтения-записи регистров, сброса счётчиков и т.д.
Ну так "хардварный" он получается наш любимый Z80 - так?
iLavr
pfgx
Senior
Posts: 137
Joined: 20 Mar 2013 03:36
Location: Ростов-на-Дону

Post by pfgx »

Как бы да, но в схеме много "табличных" преобразований.
pfgx
Senior
Posts: 137
Joined: 20 Mar 2013 03:36
Location: Ростов-на-Дону

Post by pfgx »

http://yadi.sk/d/s5RRVIjP7cRgA
Похоже что это всё-таки "счётчик" циклов.

Сигнал 627 - запись "10000", сброс. Формируется очень просто: для каждого цикла (их 5, сигналы 206, 205, 204, 203, 202) существует группа команд, при которых формируется сигнал 613. Например, для цикла 206 (первого) это выходы декодера 171, 172, 173, 177. Проверил - да, это одноцикловые команды.

Сигнал 626 - запись "x001x", переход с цикла 1 или 2 на цикл 4. Используются выходы декодера команд 49, 172, 173, 177. Какие это команды сложно сказать, в декодере не всё так просто. (Впрочем, как и везде в этом процессоре.)

Сигнал 609 - переход на следующий цикл. Логику формирования объяснить не возьмусь :)

Вверху схема #BUSRQ и #BUSACK, на неё же заведён 609, то есть запрос будет обработан только после окончания очередного цикла. 606 это, видимо, блокировка тактирования счётчика тактов (сигналы 211, 210, 209, 208...).
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

pfgx wrote:...надо будет отдельно заняться упрощением схемы. Сейчас это почти 40 страниц А4
и около 400 сигналов, рисовавшихся по принципу "что вижу, то пою" :)
Ты извини, не подумай, что под работающую руку лезу тебе с советами...

Может в момент "упрощения схемы" тебе перейти к отрисовке в электронном виде?
А то, на мой взгляд, ты скоро с бумажками путаться начнешь...

Элементов у тебя немного - в основном это вентили однотипные... отрисуй их один раз
все по одному красиво, а потом - вставляй методом "копи-паст" и соединяй мышью.

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

Я как-то, начиная со "Специалиста", отвык схемы руками на бумаге рисовать, хотя и
граф-редактор у "Специалиста" был не в пример даже Пейнту убогий...
Но всё-равно, на мой взгляд, в итоге это удобней и быстрее выходит, да и рисунок -
более разборчивый обычно.
iLavr