|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Т.е., при активации BUSR процессор должен встать в пассивной позиции иначе мы получаем ОК на шинах управления? И, соответственно, захват шины обрабатывается в строго определенный момент времени (предполагаю непосредственно перед М1)?
|
08 Nov 2013 06:46 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Да, именно так. Надо будет в Verilog учесть этот ОК, спасибо за замечание. Выходной драйвер #BUSACK и отключение верхнего транзистора управляются одним и тем же сигналом, то есть если #BUSACK=0 - транзистор отключен. Сигнал активируется в какой-то сложный момент времени, но на эти же триггеры кроме #RESET, #BUSRQ и #CLK заведён сигнал 609 - завершение M-циклов текущей операции и переход к новой (M1).
|
10 Nov 2013 11:27 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Понял, что Z80 слишком сложен для "посмотреть как устроен процессор", да и в целом уже стало понятно как это делается, но постараюсь завершить начатое.
Пробую писать на Verilog. Из черновика (код нерабочий, в нём точно есть ошибки ):
| | | | Code: module mod_state ( input wire [200:131] w, input wire w127, input wire clk, input wire w_reset, output reg [6:1] Tstate, output reg [5:1] Mstate );
wire w249;
wire w609; // w609=1 - начать новый M-цикл wire w609a, w609b, w609c; assign w609a = Tstate[3] & Mstate[2]; // по 3 такта только M2 assign w609b = Tstate[4] & Mstate[1] & w[155]; // по 4 такта только M1 и только для w155 assign w609c = Tstate[5] & Mstate[5] & w249; // по 5 тактов только M5 для w249 assign w609 = w609a | w609b | w609c | Tstate[6] | w_reset; // M-цикл всегда заканчивается при T=6 или при reset=1
always @(negedge clk) begin if (w609) Tstate='b000001; else Tstate[6:1]={Tstate[5:1],1'b0}; // сдвиг на 1 разряд end
wire w627; // w627=1 - перейти на M1 // приоритет у перехода на M1 wire w626; // w626=1 - перейти на M4
// перейти на M1 (то есть начать новую команду) wire w627a,w627b,w627c; assign w627a = Mstate[1] & w[171] & w[172] & w[173] & w[177]; // при M1 только для этих команд assign w627b = Mstate[2] & (~w[172]) & w[173] & w[199] & (0|w[177]); // при M2 только для этих assign w627c = Mstate[3] & (w127 | (w[158] & (w[175] | (~w[156]))) ); // при M3 для этих assign w627 = w627a | w627b | w627c | Mstate[5] | w_reset ; // переход на M1 также всегда при M5 и при reset // команд, завершающихся на M4, не бывает // M3 это (для определённых команд) чтение байта смещения и расчёт адреса (5 тактов) для IX/IY+offset и относительных переходов
// перейти на М4 // т.е. пропуск M3 (чтения байта смещения и вычисления адреса) и иногда M2 (если w[172]=1) wire w626a,w626b; assign w626a = (Mstate[1] & w[172]) | Mstate[2]; // такие пропуски бывают на M1 для w172 и на M2 assign w626b = w[173]&(~w[177]) | ((0)&w[177]); // дополнительное условие такого пропуска assign w626 = w626a & w626b;
always @(negedge clk) begin if (w627) Mstate='b00001; // перейти на M1 else if (w626) Mstate='b01000; // перейти на M4 else Mstate[5:1]={Mstate[4:1],1'b0}; // сдвиг на 1 разряд end
endmodule | | | | |
|
09 Dec 2013 16:22 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да ты огромнейшую работу проделал! Я даже не думал, что это лишь для того,
чтобы "посмотреть как устроен процессор"!
Ты материалы всё же где-нибуть выложи свои - чтобы пройденной тобой дорогой
никому не пришлось бы пройти сначала...
_________________ iLavr
|
10 Dec 2013 08:50 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Да, я не понимал как сделать вот такую большую схему, в которой одновременно работает несколько блоков, и как их между собой согласовать. Решил посмотреть как оно в реальном процессоре, заодно разобраться с недокументированными командами. Теперь пытаюсь переложить это на Verilog.
Материалы выложу обязательно. А идущих этой дорогой много, я смотрю народ основательно взялся за NES, PlayStation и прочее, что можно рассмотреть в микроскоп
|
11 Dec 2013 03:04 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Поработал, отдохнул, продолжаю
Вот есть эти счётчики (которые на самом деле сдвиговые регистры) тактов и циклов. Строб записи инструкции в буфер сделан просто: M1&T3. То есть в момент наступления 3-го такта цикла M1 инструкция с шины защёлкивается в буфер. Допустим, последний цикл предыдущей инструкции был длиной 3 такта, тогда при очередном перепаде тактового сигнала сбросится T3, установится T1, сбросится Mn и установится M1, но произойдёт это практически одновременно, неизвестно в каком порядке, и возможна ситуация, когда T3 ещё не сбросился, а M1 уже установлен, что вызовет "иголку" в стробе записи. Весь вечер пересматривал схему, но то ли я чего-то не замечаю, то ли эта иголка не влияет на работу, то ли случайно (или не совсем случайно) на кристалле получилось так, что T3 сбрасывается раньше. В любом случае в Verilog это надо учесть. Например, сделать так:
|
15 Mar 2014 13:40 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Счётчики для беспрефиксных опкодов уже почти работают, основные проблемы с опкодами С0h...FFh, так как там есть исключения и много условных команд, длительность которых может изменяться.
Попробую перевести следующую часть схемы:
|
17 Mar 2014 00:26 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Вся дальнейшая логика сильно привязана к выходам счётчика тактов-циклов, но в этой "шине" счётчиков кроме 10 уже известных проводов есть ещё провод под условным номером 201 и расположенный как бы отдельно от них провод под номером 212. После этой логики ещё один "слой", который и формирует сигналы выборки-чтения-записи регистров.
Ещё в процессоре есть провод 612, который часто используется, но пока совершенно непонятно откуда он идёт и зачем он нужен.
|
18 Mar 2014 13:31 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Ой, а там за этим AND ещё RS-триггер есть
|
20 Mar 2014 09:48 |
|
|
Stan
Banned
Joined: 04 Jan 2013 10:09 Posts: 397 Location: 95.24.178.158
|
А из Ваших разработок не видно пока, как выполняется команда DAD RP?
Судя по тому, что АЛУ 4-битное, там должно быть 4 прохода через АЛУ, нет?
|
22 Mar 2014 08:48 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Пока не видно, но теоретически да, должно быть 4 прохода.
Выполняется она за 11 тактов, состоит из трёх M-циклов: M1 и M4 по 4 такта и M5 3 такта. На M4T3 и M5T3 есть строб записи в младший и старший байты.
Для желающих порассматривать черновики с кучей недоделок:
http://yadi.sk/d/Wg0bpuKAKzeu6
http://yadi.sk/d/I65stOaiKzehQ
|
22 Mar 2014 09:12 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Вопрос. После PUSH AF, POP BC куда попадёт A? В регистр B или C? Может кто-нибудь проверить на реальном Z80?
|
23 Mar 2014 10:52 |
|
|
Stan
Banned
Joined: 04 Jan 2013 10:09 Posts: 397 Location: 95.24.178.158
|
В реальном К580ВМ80А - вроде как в B, a в С - флаги.
По крайней мере, так видно под отладчиком.
А что, у Z80 есть отличие в исполнении этих команд?
Нет, всё верно - Особенности процессора Z80:
Коли аккумулятора А (старший байт), то он и попадет при РОР в В - тоже старший байт.
|
23 Mar 2014 12:47 |
|
|
bigmax
Fanat
Joined: 10 Feb 2014 03:37 Posts: 79
|
Я думаю, что не зря команду назвали PUSH AF а не PUSH FA. Но лучше конечно проверить.
|
24 Mar 2014 04:12 |
|
|
pfgx
Senior
Joined: 20 Mar 2013 03:36 Posts: 137 Location: Ростов-на-Дону
|
Оно вроде всё элементарно, но путаница небольшая есть, как и с RLC/RLNC, например.
Да, похоже что действительно AF, а не FA. Но тогда зачем происходит "refresh" регистра флагов на каждом M1T3? А может это у меня криво формируются сигналы чтения-записи регистров. Там же как: при рисовании одну стравленную перемычку где-то пропустил - всё поплыло, а кое-что даже инвертировалось.
|
26 Mar 2014 23:11 |
|
|
Who is online |
Users browsing this forum: No registered users and 3 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
|
|