|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
С счётчиками тактов-циклов для команд без префиксов вроде разобрался, но... все источники утверждают, что команды условных переходов при невыполнении условия выполняются за 5 тактов. Эту часть схемы всю перерыл, но так и не нашёл ничего, что могло бы M1 прервать на 5-м такте. M1 или 4 такта, или 6. И вообще в блоке C0h...FFh много странного.
А работа с частями шины данных и флагами - вообще жесть.
|
08 Apr 2014 01:58 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Нашёл интересный файл, "MOSTEK, Z80 microcomputer software, programming guide, Z80 programming manual", внутри есть длительности M-циклов в тактах.
https://archive.org/details/Z80ProgrammingManual
И вот такая ещё ссылка http://mpsystems.narod.ru/downloads.htm
|
09 Apr 2014 00:24 |
|
|
Stan
Banned
Joined: 04 Jan 2013 10:09 Posts: 397 Location: 95.24.178.158
|
Спасибо! Хорошая ссылочка!
А вот тут, хотя и хорошая подборка, но часть ссылок подпрокисла уже.
|
09 Apr 2014 04:44 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Да, действительно. Я не всё оттуда качал.
О результатах на сегодняшний день.
http://yadi.sk/d/dRjadx5UM7bxy
Verilog с комментариями. Жду ваших вопросов и комментариев
| | | | Code: // что есть в этом файле: // регистр текущей инструкции, декодер инструкций, группировка инструкций, прочая логика декодера // счётчик M-циклов и T-тактов (почти рабочий) // формирование сигналов управления блоком регистров: выбор регистров, управление буферами чтения-записи // ошибки :)
// чего нет в этом файле: // формирования сигналов управления АЛУ, самого АЛУ, формирования флагов // внутренних шин, коммутаторов на шинах, управления коммутаторами // внешних шин (адреса, данных) // внешних сигналов управления (M1, REFRESH, IRQ, NMI...), блока обработки и формирования этих сигналов // прочей управляющей логики (условные переходы, обмен регистров, префиксы и т.п.)
| | | | |
|
09 Apr 2014 05:01 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
АЛУ 4-битное, но оно всё-таки работает с байтами.
Что известно о выполнении DAD RP на данный момент (всё может быть сдвинуто на полтакта или такт, так как я пока не уверен в работе синхронных частей схемы):
M1T1 - выполняется предыдущая инструкция
M1T2 - защёлкивается опкод 09h
M1T3 - чтение A и F
M1T4 - чтение L
M4T1 - чтение C
M4T2 - нет операций с регистрами
M4T3 - запись L
M4T4 - чтение H
M5T1 - чтение B
M5T2 - нет операций с регистрами
M5T3 - запись H
M1T1 - нет операций с регистрами
M1T2 - нет операций с регистрами
M1T3 - чтение A, запись F
M1T4 - выполняется следующая инструкция
|
10 Apr 2014 11:09 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Изучаю управление АЛУ. Опять новый стиль рисования триггеров, а местами вообще на первый взгляд каша из транзисторов, даже входы/выходы определить не удаётся, пока не вникну в работу схемы.
Или процессор рисовало несколько человек, каждый свой блок в своём стиле, или по ходу рисования внезапно обнаруживалась более эффективная реализация того или иного триггера, и переходили на неё. Склоняюсь к первому варианту, потому что очень уж выделяются отдельные блоки процессора и построение схемы в каждом блоке.
|
11 Apr 2014 11:37 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Нашёл интересную вещь...
В некоторых инструкциях M-цикл занимает 5 тактов, например, относительный условный переход выполняется за 4+3+5 тактов, причём последние 5 выполняются только при реальном переходе. То есть чтение опкода (4 такта) и смещения (3 такта) выполняется всегда, а 5 тактов вычисления адреса только если условие выполнено. Вычисляется адрес, кстати, при помощи АЛУ.
Есть и другие инструкции с 5-тактовыми циклами, но у меня они все выполнялись за 6-тактов. 6 тактов это максимум, на 6-м такте всегда происходит переход на следующий M-цикл. Причём T6 заведён только на схему "переноса" и больше никуда, то есть T6 вроде как холостой, никаких действий не производится, но с этим надо ещё разбираться.
T5 в схему переноса заведён только в одном месте - "T5 and M5 and w249". w249 равен 0 для некоторых инструкций, в которых есть 6-тактовые циклы, при их выполнении импульс во время T5 не формируется, происходит переход на T6, после чего начинается новый M-цикл. И произойти это может только на M5! А вот если убрать один транзистор, то "T5 and w249" выполняется корректно и 5-тактовым может быть любой M-цикл, не только M5.
Не та ли это "закладка" для защиты от копирования? Копия работать будет, но, например, условный переход будет выполняться не за 7/12, а за 7/13 тактов, и тестами можно определить оригинальный это процессор или копия. Могло быть так задумано?
Картинки и ответ местного художника там: http://forum.emu-russia.net/viewtopic.php?f=13&t=5380
добавлено
Сейчас подумал... это же все операции с IX+nn и IY+nn будут на 1 такт дольше выполняться!
|
15 Apr 2014 14:20 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Как всегда есть вероятность наличия ошибки, но вроде ничего не забыл.
При выполнении mov R,R между отключением драйверов от внутренней шины данных (это происходит в момент перепада M1 1->0, то есть при начале чтения следующей иструкции) и началом записи проходит 1,5 такта (запись в регистр назначения завершается при перепаде M1 0->1, то есть при окончании чтения следующей инструкции). Если процессор работает на низкой частоте или в этот момент остановить тактирование, то шина может разрядиться и в регистр назначения запишется FFh (шина данных инвертирована).
Схема http://yadi.sk/d/QmxKHFc8NuBTq
|
02 May 2014 16:21 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Хм, сейчас задумался - а может оно не в ёмкости проводников, а в АЛУ хранится? Надо всё-таки им заняться...
И ещё: специалисты по Verilog есть? Кто-нибудь может помочь описать шины со всеми их зарядами и коммутаторами?
|
08 May 2014 12:10 |
|
|
Bronto
Writer
Joined: 19 May 2014 03:47 Posts: 17 Location: Челябинск
|
У вас скорее "hardware decoding"
чем микрокодирование...
Микрокодинг в дикретных процах изготовлялся ввиде полей из диодов...
почти как ферритовая память (если видели)....
только без ферритов )))
|
19 May 2014 04:09 |
|
|
Bronto
Writer
Joined: 19 May 2014 03:47 Posts: 17 Location: Челябинск
|
Не проще-ли на реальном проце проверить?
И достоверность будет полная, в отличие от верилоговской модели.
Отладочный модуль же очень прост - D-триггер и всё. Выход его на сигнал готовности проца.
|
19 May 2014 10:46 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Что на реальном проце проверить?
|
19 May 2014 11:36 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
http://yadi.sk/d/pDm0-qI6QxwdW
// что есть в этом файле:
// регистр текущей инструкции, декодер инструкций, группировка инструкций, прочая логика декодера
// логика условных инструкций (переходы, возвраты, ldir/lddr)
// счётчик M-циклов и T-тактов (почти рабочий)
// управление коммутаторами внутренней шины данных
// входы INT и NMI, выход HALT (частично) TODO
// вход BUSRQ и выход BUSACK (частично) TODO
// выходы M1, REFRESH, MREQ, IORQ, RD, WR
// формирование сигналов управления АЛУ (частично)
// формирование сигналов управления блоком регистров: выбор регистров, управление буферами чтения-записи
// todo и ошибки
// чего нет в этом файле:
// регистров
// АЛУ, формирования флагов
// внутренних шин, коммутаторов на шинах
// внешних шин (адреса, данных)
// прочей управляющей логики (обмен регистров, префиксы, прерывания и т.п.)
|
22 May 2014 00:43 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Добрался до IFF1/IFF2 и что-то мне кажется, что описание ошибки http://ivr.webzone.ru/articles/ldar_new/index.htm не совсем точное...
|
24 May 2014 05:50 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Нет, там всё верно, IFF1 и IFF2 при прерывании сбрасываются на последнем такте текущей инструкции, а флаги сохраняются при чтении следующей (конвейер...). Меня сбило с толку то, что при IFF2=0 блокируется выход декодера для инструкций ld a,r и ld a,i. У декодера 3 таких выхода, блокируется только тот, который отвечает за копирование IFF2 в флаг чётности. У авторов была идея блокировать прерывания на время выполнения этой инструкции, но потом они почему-то передумали (удалён проводник в слое металлизации). На время выполнения ei/di прерывания блокируются, но с учётом особенностей синхронизации прерывание будет обработано только после выполнения следующей за ei/di инструкции.
Ещё я не нашёл разницы между retn и reti. Обе (или 8, если считать и недокументированные, декодер их не различает) выполняются как обычный ret, но при этом копируют IFF2 в IFF1.
|
24 May 2014 10:21 |
|
|
Who is online |
Users browsing this forum: No registered users and 27 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|