nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 18 Mar 2024 22:47



Reply to topic  [ 128 posts ]  Go to page Previous  1 ... 5, 6, 7, 8, 9  Next
Z80 Finite State Machine 
Author Message
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
С счётчиками тактов-циклов для команд без префиксов вроде разобрался, но... все источники утверждают, что команды условных переходов при невыполнении условия выполняются за 5 тактов. Эту часть схемы всю перерыл, но так и не нашёл ничего, что могло бы M1 прервать на 5-м такте. M1 или 4 такта, или 6. И вообще в блоке C0h...FFh много странного.

А работа с частями шины данных и флагами - вообще жесть.


08 Apr 2014 01:58
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Нашёл интересный файл, "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
Profile
Banned
User avatar

Joined: 04 Jan 2013 10:09
Posts: 397
Location: 95.24.178.158
Reply with quote
Post 
pfgx wrote:
Нашёл интересный файл...
https://archive.org/details/Z80ProgrammingManual

Спасибо! Хорошая ссылочка!

pfgx wrote:
И вот такая ещё ссылка http://mpsystems.narod.ru/downloads.htm

А вот тут, хотя и хорошая подборка, но часть ссылок подпрокисла уже. :(


09 Apr 2014 04:44
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Stan wrote:
часть ссылок подпрокисла уже. :(

Да, действительно. Я не всё оттуда качал.

О результатах на сегодняшний день.
http://yadi.sk/d/dRjadx5UM7bxy
Verilog с комментариями. Жду ваших вопросов и комментариев :)
Code:
// что есть в этом файле:
   // регистр текущей инструкции, декодер инструкций, группировка инструкций, прочая логика декодера
   // счётчик M-циклов и T-тактов (почти рабочий)
   // формирование сигналов управления блоком регистров: выбор регистров, управление буферами чтения-записи
   // ошибки :)

// чего нет в этом файле:
   // формирования сигналов управления АЛУ, самого АЛУ, формирования флагов
   // внутренних шин, коммутаторов на шинах, управления коммутаторами
   // внешних шин (адреса, данных)
   // внешних сигналов управления (M1, REFRESH, IRQ, NMI...), блока обработки и формирования этих сигналов
   // прочей управляющей логики (условные переходы, обмен регистров, префиксы и т.п.)


09 Apr 2014 05:01
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Stan wrote:
А из Ваших разработок не видно пока, как выполняется команда DAD RP?
Судя по тому, что АЛУ 4-битное, там должно быть 4 прохода через АЛУ, нет?

АЛУ 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
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Изучаю управление АЛУ. Опять новый стиль рисования триггеров, а местами вообще на первый взгляд каша из транзисторов, даже входы/выходы определить не удаётся, пока не вникну в работу схемы.

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


11 Apr 2014 11:37
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Нашёл интересную вещь...

В некоторых инструкциях 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
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Как всегда есть вероятность наличия ошибки, но вроде ничего не забыл.

При выполнении mov R,R между отключением драйверов от внутренней шины данных (это происходит в момент перепада M1 1->0, то есть при начале чтения следующей иструкции) и началом записи проходит 1,5 такта (запись в регистр назначения завершается при перепаде M1 0->1, то есть при окончании чтения следующей инструкции). Если процессор работает на низкой частоте или в этот момент остановить тактирование, то шина может разрядиться и в регистр назначения запишется FFh (шина данных инвертирована).

Схема http://yadi.sk/d/QmxKHFc8NuBTq
Quote:
// при CLK 1->0 :
// сигналы выборки sel*, записи reg_wr*, чтения reg_rd* "отрываются" от своих источников
// то есть используется те сигналы, которые были в момент CLK=1, при этом через небольшое время сигналы (которые до транзисторов) изменяются (!)
// активируются драйвера записи (драйвера чтения не меняют режим работы)
// регистры подключаются к шинам, происходит запись ИЛИ на 8-разрядных шинах появляются данные
// при CLK 0->1 :
// сигналы выборки, записи, чтения опять подключаются к источникам
// за счёт "ИЛИ-НЕ CLK" сразу же отключаются драйвера записи (данные на шинах регистров сохраняются какое-то время за счёт ёмкости проводников)
// за счёт "ИЛИ-НЕ CLK" регистры сразу же отключаются от шин
// из-за "замкнувшегося" транзистора сразу же активируются/деактивируются драйвера чтения (но выдают на шину данных какую-то хрень?)
// через некоторое время (4 инвертора) прямые и инверсные провода шины основных регистров подключается к "+" питания (precharge?)
// если активны драйвера чтения - через драйвера чтения этот "+" питания (лог. 1) попадает на 8-разрядные шины данных


02 May 2014 16:21
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Хм, сейчас задумался - а может оно не в ёмкости проводников, а в АЛУ хранится? Надо всё-таки им заняться...

И ещё: специалисты по Verilog есть? Кто-нибудь может помочь описать шины со всеми их зарядами и коммутаторами?


08 May 2014 12:10
Profile
Writer

Joined: 19 May 2014 03:47
Posts: 17
Location: Челябинск
Reply with quote
Post 
pfgx wrote:
О микрокоде (там обсуждалось http://www.nedopc.org/forum/viewtopic.php?t=7790 )
Если микрокодом считать регулярную структуру логических элементов, которая что-то декодирует и выдаёт управляющие сигналы, то там таких структур, если не придираться к регулярности, аж три штуки.
У вас скорее "hardware decoding"
чем микрокодирование...
Микрокодинг в дикретных процах изготовлялся ввиде полей из диодов...
почти как ферритовая память (если видели)....
только без ферритов )))


19 May 2014 04:09
Profile
Writer

Joined: 19 May 2014 03:47
Posts: 17
Location: Челябинск
Reply with quote
Post 
pfgx wrote:
Хм, сейчас задумался - а может оно не в ёмкости проводников, а в АЛУ хранится? Надо всё-таки им заняться...

И ещё: специалисты по Verilog есть? Кто-нибудь может помочь описать шины со всеми их зарядами и коммутаторами?

Не проще-ли на реальном проце проверить?
И достоверность будет полная, в отличие от верилоговской модели.
Отладочный модуль же очень прост - D-триггер и всё. Выход его на сигнал готовности проца.


19 May 2014 10:46
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Что на реальном проце проверить?


19 May 2014 11:36
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
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
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Добрался до IFF1/IFF2 и что-то мне кажется, что описание ошибки http://ivr.webzone.ru/articles/ldar_new/index.htm не совсем точное...


24 May 2014 05:50
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Нет, там всё верно, 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
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 128 posts ]  Go to page Previous  1 ... 5, 6, 7, 8, 9  Next

Who is online

Users browsing this forum: No registered users and 5 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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.