nedoPC.org

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



Reply to topic  [ 128 posts ]  Go to page Previous  1 ... 3, 4, 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 
Думал о рисовании на компьютере, но когда обводил слои рука сильно уставала, под конец уже левой рисовал, поэтому я пока лучше карандашиком... :) И почему-то на бумаге мне показалось удобнее, чем даже на двух мониторах. Площадь рабочая больше, что ли.

В бумажках я не путаюсь (пока?), проблема в другом.
- Придумываем архитектуру процессора.
- Рисуем схему на логических элементах. Карандашом на бумаге. Большой блок перерисовать или переместить - сложно.
- Не знаю было ли моделирование, но ошибки надо искать и исправлять. Желательно не перерисовывая всю схему.
- Рисуем кристалл. Не карандашом на бумаге, но близко к этому. Опять же большой кусок при нехватке места не переместишь, поэтому, например, один логический элемент может оказаться далеко от основной части схемы.
- Рисуют несколько человек, у каждого свой стиль перевода логических элементов в транзисторы.
- Внезапно обнаруживаются ошибки (логические, электрические), поэтому на кристалле есть и проводники в никуда, и неподключенные переходные отверстия, и перемычки... Есть даже задержка в виде нескольких последовательных инверторов, потом это складывается с исходным сигналом и это, если я правильно понял, управление precharge шины.
То есть процессор пропущен через хороший такой обфускатор и обратный процесс сильно затруднён. Разобрать схему целиком скорее всего не получится, да и не было у меня такой цели, но в процессе хотелось бы проверять работу уже разобранного. Моделировать на Паскале? Verilog + симулятор? ПЛИС? Может как-то по-другому? От советов не откажусь ;)


08 Aug 2013 03:09
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
pfgx wrote:
И почему-то на бумаге мне показалось удобнее, чем даже на двух мониторах. Площадь рабочая больше, что ли.

Ну - тебе виднее... как оно тебе удобнее...

pfgx wrote:
То есть процессор пропущен через хороший такой обфускатор и обратный процесс сильно затруднён. Разобрать схему целиком скорее всего не получится, да и не было у меня такой цели, но в процессе хотелось бы проверять работу уже разобранного.

Про "обфускатор" сильно сомневаюсь - где-то читал от самих авторов- то ли 10...
то ли 16 подлянок вделаны были в уже готовую схему, когда они чухнУли, что схему
могут передрать...

Про пакет моделирования - ничего не посоветую: оба моих любимых пакета тебе,
похоже, не подойдут..

Паскаль лучше бы не трогать, а вот "Verilog + симулятор? ПЛИС..." - посмотрим, что наши
специалисты скажут! :wink:

_________________
iLavr


08 Aug 2013 04:19
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Lavr wrote:
Про "обфускатор" сильно сомневаюсь - где-то читал от самих авторов- то ли 10... то ли 16 подлянок вделаны были в уже готовую схему, когда они чухнУли, что схему могут передрать...
А, так это не баги, это фичи? :)
Lavr wrote:
Про пакет моделирования - ничего не посоветую: оба моих любимых пакета тебе, похоже, не подойдут..
А вдруг?
Lavr wrote:
Паскаль лучше бы не трогать, а вот "Verilog + симулятор? ПЛИС..." - посмотрим, что наши специалисты скажут! :wink:
Чем вам Паскаль не угодил? :)


08 Aug 2013 06:16
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
pfgx wrote:
Чем вам Паскаль не угодил? :)

На мой взгляд, применительно к данной задаче, из богатого выбора инструментов -
Паскаль бы я применил самым последним...
Да и то - в неурожайный год и за мешок картошки... :wink:

Насчет пакета моделирования: ну мне привычно на уровне вентилей моделировать,
а как тебе привычнее и удобнее - мне предположить трудно, поскольку от
Паскаля до Verilog - диапазон довольно широкий...

_________________
iLavr


08 Aug 2013 06:46
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Lavr wrote:
ну мне привычно на уровне вентилей моделировать, а как тебе привычнее и удобнее - мне предположить трудно, поскольку от Паскаля до Verilog - диапазон довольно широкий...
Да я ж сам ещё не знаю как мне это удобнее, поэтому и диапазон такой.


08 Aug 2013 09:56
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
pfgx wrote:
Да я ж сам ещё не знаю как мне это удобнее, поэтому и диапазон такой.

С учетом того, что:
pfgx wrote:
...в процессе хотелось бы проверять работу уже разобранного...

Мне кажется, что на логических вентилях тебе это будет неудобно, ты же транзисторы
видишь и срисовываешь...

Да и опыт Хардвермена мне помнится - он участвовал в похожей попытке, так там
некоторые вещи в вентиля запросто сходу не перведешь...

К примеру - как вот здесь:

Image

Хорошо видны места, где канал - просто выключатель или управляемый соединитель.

А на вентилях тут бы мультиплексоры понадобились... или с z-состоянием элементы.

Так что, как мне кажется, тебе нужен пакет, куда такую схемотехнику можно
перенести напрямую.

_________________
iLavr


08 Aug 2013 10:51
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Lavr wrote:
Ну так "хардварный" он получается наш любимый Z80 - так?
Хардварный, хардварный :idea: Почти разобрал счётчики тактов и циклов, выполнены на сдвиговых регистрах. 5 T-циклов, 5 M-циклов. А вот сброс-перенос, что на каком такте для какой команды - всё на комбинационной логике :)


11 Aug 2013 12:34
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Обнародуй промежуточные результаты. Интересно же.


12 Aug 2013 01:44
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Да он же выкладывал тут ссылки... но бумаги с фотографий читаются с трудом... :(

Почему я и намекнул, что может пора к электронке переходить...

_________________
iLavr


12 Aug 2013 02:50
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Счётчики тактов и циклов, фотография с бумаги: http://yadi.sk/d/Sr-tAUhq7uKGG

Команда (машинная инструкция) делится на М-циклы, каждый М-цикл делится на Т-такты.

Вверху слева - счётчик на 5 тактов. Про 6-й такт пока ничего не скажу, но он зачем-то есть. Сюда же на 3-й разряд заведён сигнал wait.

Внизу слева - схема определяющая окончание М-цикла.
- Для команд 155 (выход декодера команд) окончание М-цикла происходит в момент М1Т4
- На Т3 М-цикл заканчивается если это М2 (то есть все циклы М2 длиной 3 такта), если это М3 для команд <...>, если это М4 для команд <...>, если это М5 для команд #115 (выход декодера команд).
- На Т4 М-цикл заканчивается если это М3 или М4 (для определённых команд).
- На Т5 цикл заканчивается только если это М5 (также только для определённых команд).
- Если ни одно условие не выполнилось - М-цикл выполняется за 6 тактов.

Сигнал #609 сбрасывает счётчик тактов и увеличивает счётчик М-циклов (вверху справа).

Внизу справа схема сброса счётчика М-циклов, сигнал 627 формируется для одних команд на М1, для других на М2, и т.д. При М5 сигнал сброса формируется всегда. Сброс, как и инкремент, происходит по сигналу #609.
Ещё есть странный сигнал 626, который с цикла М1 или М2 переводит счётчик сразу на М4. Возможно это команды вида 00xxx110, 11xxx110 и подобные, точнее в декодере команд буду разбираться потом.


14 Aug 2013 04:13
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Переход на М4 по сигналу 626 это пропуск вычисления IX/IY+d.

Последовательность М-циклов для команд без префиксов:
Code:
0x:  1     123   123   1     1     1     12    1     1     123   123   1     1     1     12    1
1x:  12    123   123   1     1     1     12    1     12    123   123   1     1     1     12    1
2x:  12    123   12345 1     1     1     12    1     12    123   12345 1     1     1     12    1
3x:  12    123   1234  1     145   145   12    1     12    123   1234  1     1     1     12    1
4x:  1     1     1     1     1     1     14    1     1     1     1     1     1     1     14    1
5x:  1     1     1     1     1     1     14    1     1     1     1     1     1     1     14    1
6x:  1     1     1     1     1     1     14    1     1     1     1     1     1     1     14    1
7x:  14    14    14    14    14    14    14    14    1     1     1     1     1     1     14    1
8x:  1     1     1     1     1     1     14    1     1     1     1     1     1     1     14    1
9x:  1     1     1     1     1     1     14    1     1     1     1     1     1     1     14    1
Ax:  1     1     1     1     1     1     14    1     1     1     1     1     1     1     14    1
Bx:  1     1     1     1     1     1     14    1     1     1     1     1     1     1     14    1
Cx:  123   123   123   123   12345 123   12    1     123   123   123   1     12345 12345 12    1
Dx:  123   123   123   12    12345 123   12    1     123   1     123   12    12345 1     12    1
Ex:  123   123   123   12345 12345 123   12    1     123   1     123   1     12345 1     12    1
Fx:  123   123   123   1     12345 123   12    1     123   1     123   1     12345 1     12    1


17 Aug 2013 16:22
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
После перерыва продолжаю разбирать z80.

Обработка префиксов (предварительное описание).

Декодер команд (это у которого сотня выходов) состоит из нескольких частей:
- команды без префиксов;
- команды с префиксом ED (тут много дублирующихся и пересекающихся, видимо всё по той же причине - чтобы не тянуть проводник через весь кристалл);
- команды с префиксом CB;
- прочее (например, 8 "команд" xxNNNxxx).
При этом декодером также распознаётся комбинированный префикс DD/FD CB. Каждая часть декодера имеет свой сигнал запрета декодирования, всего таких сигналов 6, в том числе, например, halt (76) блокирует декодирование 01xxx110 и 01110xxx.

Команды с префиксами DD/FD особым образом в декодере не выделены, их обработкой занимается счётчик M-циклов, выполняя циклы M2 и M3 (чтение смещения и вычисление адреса, 3 и 5 тактов соответственно, для команд без префиксов они пропускаются), и какая-то дополнительная логика (не в декодере).

Префиксы DD и FD не различаются. Принцип такой же, как для F3 и FB - декодер распознаёт обе эти команды, но один из битов команды защёлкивается в триггере (разрешение прерываний; работа с IX или IY).

Префикс (CB, DD, ED, FD) это обычная инструкция, которая выполняется за 1 M-цикл длиной 4 такта. При её выполнении устанавливается соответствующий триггер и при выполнении следующей будет работать уже другая часть декодера, выдавая уже другие управляющие сигналы. Именно так распознаются комбинированные префиксы и именно поэтому в цепочке префиксов действует только последний и не обрабатываются прерывания.

Как устроены эти триггеры и что в какой момент с ними происходит - особая транзисторная магия :)


04 Oct 2013 18:57
Profile
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Про АЛУ Z80, и вообще интересный блог:
http://www.righto.com/2013/09/the-z-80- ... ow-it.html


08 Oct 2013 12:41
Profile
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
Post 
pfgx, нужна помощь.
можешь рассказать про in a,(xx) и in a,(c).
Хотелось бы точную растактовку выполнения оных. Особенно с точностью до такта состояние n_iorq и n_rd, и что может повлиять на состояние этих сигналов. В частности может ли z80 сгенерить иголку по каким либо причинам(wait,int,nmi и всё что угодно) на этих двух ногах?


03 Nov 2013 08:48
Profile ICQ
Senior

Joined: 20 Mar 2013 03:36
Posts: 137
Location: Ростов-на-Дону
Reply with quote
Post 
Выходные буферы #MREQ, #IORQ, #RD, #WR управляются через RS-триггеры, так что иголок быть не должно, но имеется интересная особенность: при переводе в Z-состояние у выходных буферов отключается только верхний транзистор, то есть RS-триггер при этом должен находиться в состоянии 1. Находится ли он в нём?

Про состояние с точностью до такта пока не скажу, не добрался. Сейчас тренируюсь в Verilog'е и думаю как это всё туда перенести. Железо для опытов уже есть (Cyclone II, EP2C5Q208C8N), никаких симуляторов :)


08 Nov 2013 01:21
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 128 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8, 9  Next

Who is online

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