PDA

Просмотр полной версии : Реверс-инжиниринг УКНЦ (1515ХМ1&2, 1801ВП1, 1801ВМ2)



Страницы : 1 2 3 4 [5] 6 7

Titus
31.08.2020, 12:27
В этом случае у меня он в 1 при активном RAS (ст. разряды) и в 0 при активном CAS (мл. разр.). Логику проверил, вроде как у тебя.
А какой вопрос-то тогда? Если что-то отличается от графиков, которые я нарисовал, то спрашивай конкретнее.

Ynicky
31.08.2020, 22:17
А какой вопрос-то тогда? Если что-то отличается от графиков, которые я нарисовал, то спрашивай конкретнее.
Старый стал, забыл что по RAS запоминаются младшие разряды адреса. Проверяю регистровую запись в обе DRAM, 8 и 16 разрядные из ПП. Все пишется и читается как надо.

Titus
31.08.2020, 22:35
Старый стал, забыл что по RAS запоминаются младшие разряды адреса. Проверяю регистровую запись в обе DRAM, 8 и 16 разрядные из ПП. Все пишется и читается как надо.

Что уже реализовано и функционирует? И в виде чего?

Ynicky
01.09.2020, 06:30
Пока только моделирую. Пишу тестовые программки и проверяю на диаграммах моделирования работу. А соединил почти все, кроме 065 и 055. Вместо буфера подсоединил сигналы напрямую.

Titus
01.09.2020, 11:35
Пока только моделирую. Пишу тестовые программки и проверяю на диаграммах моделирования работу. А соединил почти все, кроме 065 и 055. Вместо буфера подсоединил сигналы напрямую.
65 нафиг не нужен пока, а 55 лучше реализовать для правильности, я думаю. Это ж всего лишь двунаправленный буфер, плюс кусочек однонаправленного.

Ynicky
01.09.2020, 12:26
65 нафиг не нужен пока, а 55 лучше реализовать для правильности, я думаю. Это ж всего лишь двунаправленный буфер, плюс кусочек однонаправленного.

Ок, сделаю. Еще забыл сказать. В 136, буфер U19 я еще давно сделал без инверсии. Иначе не правильно работало. Это я опять где-то нахимичил?

Titus
01.09.2020, 14:43
Ок, сделаю. Еще забыл сказать. В 136, буфер U19 я еще давно сделал без инверсии. Иначе не правильно работало. Это я опять где-то нахимичил?
Нет, его нельзя делать неинверсным. Он специально инвертирует сигнал. И антагонистом его является U18, который инвертирует сигнал обратно.

Titus
02.09.2020, 11:55
Для Vslav'а:

Поковырялся в ВМ2. Там огромная туча RS-триггеров, управляемых так, что у них может быть потенциально третье состояние (это сложно проверить сразу, т.к. сложно проследить сходу все зависимости управляющих сигналов).
Как ты их перевел в синхронную схему? Ты уверен, что не потерялась совместимость? Я бы тут весьма был аккуратен)

Vslav
02.09.2020, 20:23
Для Vslav'а:

Поковырялся в ВМ2. Там огромная туча RS-триггеров, управляемых так, что у них может быть потенциально третье состояние (это сложно проверить сразу, т.к. сложно проследить сходу все зависимости управляющих сигналов).
Как ты их перевел в синхронную схему? Ты уверен, что не потерялась совместимость? Я бы тут весьма был аккуратен)
Что, сложно? В-о-о-о-т, цени :)
А гарантию только бог дает, и то не на все :)
Тестировать, тестировать и тестировать - это основа нашей уверенности.

Titus
02.09.2020, 20:43
Что, сложно? В-о-о-о-т, цени
То, что работа по реверсу ВМ2 грандиозная - это я очень ценю) Одних трам... транзисторов там стотыщпятьсот)

Вот смотри, например, триггер, который управляет противофазной парой IRSTB_SRC, и /IRSTB_SRC, вполне себе может встать в третье состояние (тут, конечно, надо проверять по всем входным сигналам, но одно только RESET наводит на мысли, что он может прийти одновременно с F1 и BRA_REQ). Тогда мощный каскад, управляющий формированием IR_STB и /IR_STB встанет раком, извиняюсь за прямоту.

Vslav
02.09.2020, 21:18
Вот смотри, например, триггер, который управляет противофазной парой IRSTB_SRC, и /IRSTB_SRC, вполне себе может встать в третье состояние

Если уж совсем не повезет, то будет оба низких на выходах, и состояние IR_STB и CLR_CEND просто нее изменится. Две единицы на выходе не бывает, иначе на T17408/17409 мы увидели бы сквозной ток. Но это ты взял совсем сложный кусочек, таких там немного. Это можно обработать только при помощи моделирования, глядя на диаграмму соотношение сигналов становится понятным.

http://www.1801bm1.com/files/images/vm2_async_ir_stb.png

И все сигналы привязаны к изменению фаз, то есть, грубо можно выделить четыре события в периоде - фронты и срезы F1 и F2, и все изменения привязать к ним, временем распространения можно пренебречь, понятно, что в реальном процессоре тактовая частота такая, что все успевает. Главная сложность тут в том, что сигнал может распространяться через латч и нужно отловить все латчи на одной фазе в цепочке и откорректировать распространение для флип-флопов, иначе сигнал запоздает на такт(ы). Такие косяки часто вылавливались по общему фейлу теста или по изменению числа тактов на весь тест. Все тесты T40x на асинхронной модели и синхронной выполняются одинаковое количество тактов. Ну и когда применили модель в реальной системе и попытались запустить 055-ую прошивку повылазила пара проблем, связанных с пультовым режимом, который T40x не проверяет основательно. Поэтому буду делать еще проект ДВК и буду гонять ПЗУ и грузить RT-11 для более полного покрытия. И то это не гарантия, а просто верификация.

Alex_K
02.09.2020, 21:43
Ну и когда применили модель в реальной системе и попытались запустить 055-ую прошивку повылазила пара проблем, связанных с пультовым режимом, который T40x не проверяет основательно.
А хотелось бы узнать, что это за проблемы?

Ну и пользуясь случаем, хотел бы узнать, что делает в 1801ВМ2 в HALT-режиме команда с кодом 030. По описанию, она должна исполняться также, как и команда с кодом 020, т.е. читать безадресный регистр. Но в 1801ВМ2 судя по всему допустили ошибку в микрокоде. В 1806ВМ2 эту ошибку убрали, и 030 исполняется также, как и 020.

Vslav
02.09.2020, 22:10
А хотелось бы узнать, что это за проблемы?

#2005 (https://zx-pk.ru/threads/23978-tsifrovaya-arkheologiya-1801-i-vse-vse-vse.html?p=1069710&viewfull=1#post1069710)
#2007 (https://zx-pk.ru/threads/23978-tsifrovaya-arkheologiya-1801-i-vse-vse-vse.html?p=1070695&viewfull=1#post1070695)
#2021 (https://zx-pk.ru/threads/23978-tsifrovaya-arkheologiya-1801-i-vse-vse-vse.html?p=1070986&viewfull=1#post1070986)
Fix: vm2: cumulative fix reported by forth32 (https://github.com/1801BM1/cpu11/commit/a3f2aa0c253e51aa6acecbfe2b60b2b2ba7b921f)

Titus
02.09.2020, 23:01
Но это ты взял совсем сложный кусочек, таких там немного. Это можно обработать только при помощи моделирования, глядя на диаграмму соотношение сигналов становится понятным.
Но у тебя нет диаграммы, где внезапно стал активен сигнал RESET)

Кстати, что означает транзистор, у которого сток и исток закорочены? Остается вместо него какой-нибудь паразитный диод? Или что? Обычно такие тут стоят в мощных каскадах.

Vslav
02.09.2020, 23:35
Но у тебя нет диаграммы, где внезапно стал активен сигнал RESET)
Внезапно там ничего не бывает, даже входной DCLO "внезапно" синхронизирован с тактовой частотой.



Кстати, что означает транзистор, у которого сток и исток закорочены?
Конденсатор, вторая обкладка - изолированный затвор.


Обычно такие тут стоят в мощных каскадах.
Ускоряющий конденсатор, обычно для генерации вольт-добавки - помогает импульсно увеличить напряжение на затворе следующего транзистора для ускорения переключения. Емкость-то затвора мощного транзистора большая, пока там через обычный depletion load натечет.

Titus
02.09.2020, 23:57
Внезапно там ничего не бывает, даже входной DCLO "внезапно" синхронизирован с тактовой частотой.
Понятно, что там все синхронизированно с F1 и F2 )

- - - Добавлено - - -


Конденсатор, вторая обкладка - изолированный затвор.
А какое сопротивление закрытого транзистора (по сути резистора), стоящего в роли этого самого depletion load?

Vslav
03.09.2020, 07:59
А какое сопротивление закрытого транзистора (по сути резистора), стоящего в роли этого самого depletion load?
- он не закрытый, он в насыщении
- это нелинейный элемент, то есть - отнюдь не резистор
- поэтому о сопротивлении говорить не приходится, правильно - ток насыщения
- конкретное значение тока зависит от технологии - линейных размеров, степени и типа легирования и прочее

Titus
03.09.2020, 09:55
Если уж совсем не повезет, то будет оба низких на выходах, и состояние IR_STB и CLR_CEND просто нее изменится.
CLR_CEND не изменится, т.к. там стоит обычный RS-триггер.
А вот с IR_STB гораздо интереснее. Это не RS-триггер.
Если IRSTB_SRC и /IRSTB_SRC в нуле, то выходные каскады некоторое время удержат информацию на затворах 17426, 17442, 17473 (для верхнего плеча), пока не разрядятся, а потом на IR_STB появится единица, и на /IR_STB тоже будет единица.
Другой вопрос, что конечно, за несколько тактов они не разрядятся, но все равно как-то не айс)

Ynicky
03.09.2020, 11:02
Не могу совлалать с записью в раритетные регистры. Выход H61.2 имеет пички и диаграмма RARE REG AUTOMAT не соответствует рисунку.

Titus
03.09.2020, 11:27
Не могу совлалать с записью в раритетные регистры. Выход H61.2 имеет пички и диаграмма RARE REG AUTOMAT не соответствует рисунку.
Поподробнее.

Ynicky
03.09.2020, 18:31
Поподробнее.
Для лучшего видения пичка сделал задержку на триггерах в 5 нс для моделирования.
https://pic.maxiol.com/thumbs2/1599142747.1845266995.writerarereg.png (https://pic.maxiol.com/?v=1599142747.1845266995.writerarereg.png&dp=2)

- - - Добавлено - - -

Диаграмма совпала с рисунком, если вход 1 у элемента Н65.1 сделать инверсным, ну и задержать RPLY на PPU.

- - - Добавлено - - -

https://pic.maxiol.com/thumbs2/1599147051.1845266995.writerarereg2.png (https://pic.maxiol.com/?v=1599147051.1845266995.writerarereg2.png&dp=2)

Titus
03.09.2020, 20:11
Диаграмма совпала с рисунком, если вход 1 у элемента Н65.1 сделать инверсным, ну и задержать RPLY на PPU.
Хм... на первый взгляд оптимизированная схема не отличается от оригинального реверса. Придется сравнивать с фоткой кристалла, но это не раньше следующей недели я смогу только сделать, так как на даче, огород и все такое. Так что пока оставь так, как есть, тем более, что раритетные регистры не используются вообще. Для совместимости они должны быть, но пока можно и без них все остальное тестировать.

Ynicky
04.09.2020, 15:08
Еще обнаружил несовпадение диаграммы WRITE PLANE ADDRESS. Сигнал LATCH_DATA в 136й у меня совпадает с сигналом CAS как по положению, так и по длительности. Хотя тесты записи/чтения в/из планы/ов проходят.
https://pic.maxiol.com/thumbs2/1599221202.1845266995.writeplaneaddress.png (https://pic.maxiol.com/?v=1599221202.1845266995.writeplaneaddress.png&dp=2)

Titus
04.09.2020, 16:08
Еще обнаружил несовпадение диаграммы WRITE PLANE ADDRESS. Сигнал LATCH_DATA в 136й у меня совпадает с сигналом CAS как по положению, так и по длительности. Хотя тесты записи/чтения в/из планы/ов проходят.
А где несовпадение? DC_LATCH на моей диаграмме совпадает с CAS.

Ynicky
04.09.2020, 16:13
А где несовпадение? DC_LATCH на моей диаграмме совпадает с CAS.Тогда что за сигнал (136)A_D_LATCH в 032й rev43?

Titus
04.09.2020, 16:22
Тогда что за сигнал (136)A_D_LATCH в 032й rev43?
Очевидно, это CC_WRITE_PLANE_ADR по которому с шин A и D защелкивается адрес планов в регистрах PLANE_ADR_L и PLANE_ADR_H.

Ynicky
04.09.2020, 16:34
Очевидно, это CC_WRITE_PLANE_ADR по которому с шин A и D защелкивается адрес планов в регистрах PLANE_ADR_L и PLANE_ADR_H.
Он самый, и длительность совпала с диаграммой в 136й.

Titus
04.09.2020, 22:36
Vslav, обратил внимание, что схема ветвлений тоже не должна работать в статике. Правда, подробно еще не разбирался, но похоже, PLM ветвлений чисто динамическая.

Titus
05.09.2020, 21:09
Рассматривал счетчик таймаута в ВМ2, получилось, что TOUT срабатывает на 53-м тике /F1, а TINIT на 511-тике. Интересно, так ли это в реальности.

Alex_K
05.09.2020, 23:08
Рассматривал счетчик таймаута в ВМ2, получилось, что TOUT срабатывает на 53-м тике /F1
У меня в описании 1801ВМ2 тоже было указано, что RPLY ждёт 54 такта. Информация бралась здесь (http://vak.ru/doku.php/proj/bk/1801vm-series), раздел [Отличия от 1806ВМ2]. Так как этот счётчик используется и для ожидания RPLY, и для формирования INIT, то в ТО на 1801ВМ2 сказано, что активная фаза сигнала INIT равна 105 периодам CLCI, делим на два, где-то 53 и есть. Но в том же ТО сказано, что RPLY процессор ждёт 64 такта. Ну а 511, так и должно быть, счётчик 9-разрядный.

Titus
05.09.2020, 23:11
Но в том же ТО сказано, что RPLY процессор ждёт 64 такта.
Счетчика на 64 я пока там не встретил.

Alex_K
05.09.2020, 23:14
Счетчика на 64 я пока там не встретил.
От нуля до 53 - ожидание прихода RPLY или активная фаза сигнала INIT. От 54 до 511 - пауза после снятия сигнала INIT. Вроде так.

Titus
05.09.2020, 23:16
От 54 до 511 - пауза после снятия сигнала INIT. Вроде так.
Зачем нужна эта пауза?

Alex_K
05.09.2020, 23:22
Зачем нужна эта пауза?
Т.к. сигнал INIT сбрасывает внешние устройства, то видно после снятия сигнала INIT нужна пауза, чтобы во внешних устройствах всё устаканилось после сброса.

Titus
06.09.2020, 00:12
Если перевести монстроидальную потранзисторную схему счетчика таймаута в логическую, то получится такое компактное и изящное (и, самое главное, сразу всем понятное) представление.


https://pic.maxiol.com/images2/1599340195.2997898940.01z.png

Ynicky
06.09.2020, 07:45
Titus, моделирую ЦП. В начале работы при чтении адресов о160000 и о160002 вырабатывается сигнал WE. Если для формировании сигнала WE с триггера С43 беру прямой выход, то сигнал WE не формируется. Зашивка ХМ2-003 rev 27.

Vslav
06.09.2020, 09:44
Если перевести монстроидальную потранзисторную схему счетчика таймаута в логическую, то получится такое компактное и изящное (и, самое главное, сразу всем понятное) представление.

"Если перевести монстроидальную логическую схему счетчика таймаута в HDL-описание, то получится такое компактное и изящное (и, самое главное, сразу всем понятное) представление."



//__________________________________________________ ____________________________
//
// Q-bus timer, also involved in INIT command pulse timing
//
assign tout = qtim[0] & qtim[2] & qtim[4] & qtim[5];

always @(posedge vm_clk_n)
begin
if (!tena)
qtim <= 9'o000;
else
qtim <= qtim + 9'o001;
end


Но ты торопишься, а "какие Ваши доказательства" что схема эквивалентна? Там не приличный параллельный счетчик, а с последовательным переносом (ripple counter), поэтому у меня сначала было честное представление на латчах в асинхронной модели:


//__________________________________________________ ____________________________
//
// Q-bus timer, also involved in INIT command pulse timing
//
assign qct_ck[0] = tena & ~f1;
assign qct_ck[1] = tena & qct_ta[0];
assign qct_ck[2] = qct_ck[1] & qct_tb[1];
assign qct_ck[3] = qct_ck[2] & qct_tb[2];
assign qct_ck[4] = qct_ck[3] & qct_tb[3];
assign qct_ck[5] = qct_ck[4] & qct_tb[4];
assign qct_ck[6] = qct_ck[5] & qct_tb[5];
assign qct_ck[7] = qct_ck[6] & qct_tb[6];
assign qct_ck[8] = qct_ck[7] & qct_tb[7];
assign tout = qct_ta[0] & qct_tb[2] & qct_tb[4] & qct_tb[5];
assign tinit = qct_tb[8] & qct_ck[8];

always @(*)
begin
if (!tena)
begin
qct_ta <= 9'o000;
qct_tb <= 9'o000;
end
else
begin
if (qct_ck[0]) qct_ta[0] <= ~qct_tb[0];
if (qct_ck[1]) qct_ta[1] <= ~qct_tb[1];
if (qct_ck[2]) qct_ta[2] <= ~qct_tb[2];
if (qct_ck[3]) qct_ta[3] <= ~qct_tb[3];
if (qct_ck[4]) qct_ta[4] <= ~qct_tb[4];
if (qct_ck[5]) qct_ta[5] <= ~qct_tb[5];
if (qct_ck[6]) qct_ta[6] <= ~qct_tb[6];
if (qct_ck[7]) qct_ta[7] <= ~qct_tb[7];
if (qct_ck[8]) qct_ta[8] <= ~qct_tb[8];

if (~qct_ck[0]) qct_tb[0] <= qct_ta[0];
if (~qct_ck[1]) qct_tb[1] <= qct_ta[1];
if (~qct_ck[2]) qct_tb[2] <= qct_ta[2];
if (~qct_ck[3]) qct_tb[3] <= qct_ta[3];
if (~qct_ck[4]) qct_tb[4] <= qct_ta[4];
if (~qct_ck[5]) qct_tb[5] <= qct_ta[5];
if (~qct_ck[6]) qct_tb[6] <= qct_ta[6];
if (~qct_ck[7]) qct_tb[7] <= qct_ta[7];
if (~qct_ck[8]) qct_tb[8] <= qct_ta[8];
end
end

Промоделировано и только потом переведено в синхронную схему с сравнением выходных времянок. Нельзя "просто так взять и" перескочить этап, потому что "легко накосячить".

Titus
06.09.2020, 10:11
Но ты торопишься, а "какие Ваши доказательства" что схема эквивалентна? Там не приличный параллельный счетчик, а с последовательным переносом (ripple counter), поэтому у меня сначала было честное представление на латчах в асинхронной модели:
Нет, не тороплюсь. Я сначала перевел в честные RS-триггеры, потом в D-триггеры, потом в счетчик.

- - - Добавлено - - -


Если для формировании сигнала WE с триггера С43 беру прямой выход, то сигнал WE не формируется. Зашивка ХМ2-003 rev 27.
Не совсем понял, что ты берешь. Но если смотреть rev 27, то, похоже, надо исправить вход C40-1 должен быть инверсный. Т.е. инверсный выход триггера C43 идет на инверсный вход C40.

Vslav
06.09.2020, 10:17
Нет, не тороплюсь. Я сначала перевел в честные RS-триггеры, потом в D-триггеры, потом в счетчик.
Но из твоей схемы этого не видно. Будешь рисовать и предоставлять несколько схем для каждого этапа? :)
Ладно, это неважно, просто надо быть очень осторожным с wishful thinking, мне тоже хотелось сразу синхронный счетчик в начальной модели нарисовать и не возиться - "оно ж тут все сразу понятно". Но так нельзя - при этом сразу теряется куча деталей, ни из твоей схемы, ни из моего синхронного описания непонятно что счетчик последовательный, а вот в оригинальной заводской схеме (этот блок там нарисован на латчах) и асинхронной модели - это видно.

Titus
06.09.2020, 10:21
Но из твоей схемы этого не видно. Будешь рисовать и предоставлять несколько схем для каждого этапа?
Поверь, я очень дотошный в вопросах точности логики) Если я говорю, что сперва нарисовал так, потом так, потом так, значит так оно и было)


https://pic.maxiol.com/images2/1599376817.531452422.01x.png

Vslav
06.09.2020, 10:38
Vslav, обратил внимание, что схема ветвлений тоже не должна работать в статике. Правда, подробно еще не разбирался, но похоже, PLM ветвлений чисто динамическая.
М-м-м...
1. Что значит "не должна" ? Реальный ВМ2 успешно работает в статике.
2. Что значит "тоже"? Если ты про IR_STB, то я уверен что там некомплементарных состояний не бывает.

По поводу пункта 2. Такие триггеры c потенциальным некомплементарным учитывались и анализировались (я не помню конкретно про IR_STB, скорее всего - да, он прошел через эту итерацию, потому что прямой анализ там сложноват):
- если у триггера используется только один выход, то он "правильно" учитывает зависимость от входных RS
- если у триггера используется оба выхода (Q и ~Q) и есть оба RS и предпосылки к проблемам, то при начальном моделировании создавалось ДВА триггера, name_p и name_n, и сигнал разницы name_cmp = name_p ^ ~name_q
- на сигнал разницы name_cmp ставился assert - если name_cmp высокий, то выводится сообщение и моделирование останавливается
- прогонялись тесты 40x, плюс иногда дополнительно моделировались дополнительные сигналы (помню с прерываниями возни много было - надо было несколько фаз пробовать, делал счетчик, привязанный к IR_STB, и прерывание генерировалось на 0..15 такте этого счетчика)
В итоге я могу сказать, что верификация возможного некомплементарного состояния проводилась, и вероятность что оно там есть - очень небольшая. Возможно, где-то некомплементарность и возникала (я уже не помню сейчас), но влияние на потребителей анализировалось и учитывалось. Но, ЕМНИП, ничего существенного найдено не было - иначе мы увидели бы в модели такие спаренные латчи.

Hunta
06.09.2020, 10:40
Поверь,
"Никому нельзя верить. Мне - можно." (с) Мюллер

Vslav
06.09.2020, 10:42
Поверь, я очень дотошный в вопросах точности логики) Если я говорю, что сперва нарисовал так, потом так, потом так, значит так оно и было)
Дык, дело не в недоверии, жаль что детали теряются. У меня тоже, я вот подумываю побольше коммитов в гите делать, чтобы путь можно было отследить, но это такая морока.

Hunta
06.09.2020, 11:13
но это такая морока.
Почему морока? Если ветка одна - даже когда несколько человек коммитят - особых проблем нет. А уж когда один коммит - какие проблемы?

Вот когда несколько веток и коммиты между ветками - тут можно легко армаггедец устроить

Titus
06.09.2020, 11:40
Дык, дело не в недоверии, жаль что детали теряются. У меня тоже, я вот подумываю побольше коммитов в гите делать, чтобы путь можно было отследить, но это такая морока.
Детали никуда не теряются. Есть потранзисторный оригинальный реверс твой, а есть логическое оптимизированное представление, которое ПОЛНОСТЬЮ идентично потранзисторной схеме. За исключением одного - убрана всякая избыточность затрудняющая понимание логики этой схемы.
Представь, что если бы тебе предложили бегло поискать по карте города районы с круглыми домами, но при этом дали карту размером с футбольное поле. Вот так же и транзисторная схема - вроде все четко и оригинально, но ориентироваться, тем более бегло - нереально. Ну разве что только тебе. Но я говорю об обычных, человеческих людях, которым нужен смысл, а не незначительные детали.

- - - Добавлено - - -


1. Что значит "не должна" ? Реальный ВМ2 успешно работает в статике.
Давай уточним - в статике - это при приостановке тактирования по CLCI, или же просто в пошаговом режиме?

- - - Добавлено - - -


- на сигнал разницы name_cmp ставился assert - если name_cmp высокий, то выводится сообщение и моделирование останавливается
Это попытка выловить последствия на конкретных примерах. Однако прогнанные примеры могут не задействовать это третье состояние.

- - - Добавлено - - -


- прогонялись тесты 40x
Тест должен быть написан для вылавливания конкретной особенности. Если тест ничего не знает о ней, то 100500 других тестов ее могут никогда не показать.

- - - Добавлено - - -


В итоге я могу сказать, что верификация возможного некомплементарного состояния проводилась, и вероятность что оно там есть - очень небольшая.
Когда перевожу схему в логику, у меня такой вероятности нет вообще. Потому что я смотрю не последствия, а первопричины, и переделываю комплиментарный RS в однофазный лишь тогда, когда точно логически выверил, что комплименарной коллизии быть не может.

Vslav
06.09.2020, 12:46
Давай уточним - в статике - это при приостановке тактирования по CLCI, или же просто в пошаговом режиме?

Какой-такой пошаговый режим? RPLY задержать для 1801 надолго нельзя, будет тайм-аут шины, задерживать AR особо смысла нет. ЕМНИП, Mix64 делал стенд на ВМ2, и тактировал от порта микроконтроллера.



Это попытка выловить последствия на конкретных примерах. Однако прогнанные примеры могут не задействовать это третье состояние.
Тест должен быть написан для вылавливания конкретной особенности. Если тест ничего не знает о ней, то 100500 других тестов ее могут никогда не показать.

По возможности моделировались все входы. Вот тот же, IR_STB - с чего ты взял что там будет некомплиментарное состояние? А потому что оно все упирается в сложный автомат состояний, который ты проанализировать без инструмента не можешь, более того - этот совокупный автомат рулится микрокодом, матрицу которого "человеческий человек", без аутизма, проанализировать "руками" не может. Вот именно поэтому инструмент (моделирование) и применялось. Я понимаю, что гораздо проще сказать - "хей, у тебя два RS входа, оно непонятно, значит будет неверная работа". Так вот - я прилагал максимум усилий, чтобы "стало понятно", используя известные мне инструменты. Есть предложения лучше? Ну, давай свой анализ. Примитив - "Есть RS и оно может одновременно быть активным" - не катит, нужен полный развернутый анализ всего автомата и микрокода. Полный анализ и документирование микрокода 1801ВМ1 занял примерно год, для ВМ2 я делал уже очень ограниченный анализ - времени жрет много, результат непонятный.



Когда перевожу схему в логику, у меня такой вероятности нет вообще.
Ты посмотри чего и как там рулится микрокодом, потом поговорим про прямой анализ и вероятности. CEND - это command end, как раз рулится из микроинструкций (строб генерируется последней микроинструкцией обработки команды PDP-11, перед переходом на начало рабочего цикла). Есть вероятность ошибки в микрокоде? Есть. Вот тогда IR_STB теоретически может быть неверным. Найдешь анализом ошибку в микрокоде? Я - точно нет, по крайней мере за разумное время. Хотя, если ты собираешься делать программный эмулятор на базе микрокода, то баги микрокода могут и повылазить, было бы интеренсно.

- - - Добавлено - - -

BTW, я сейчас микрокод М4 разбираю, там неверной комбинацией микроинструкции можно вообще конфликты на шинах создавать, но как-то люди все правильно написали и работает :)

Titus
06.09.2020, 12:54
Да, надо анализировать микрокод. Без этого никак.

Vslav
06.09.2020, 13:05
Да, надо анализировать микрокод. Без этого никак.
Эмулятор микрокода собираешься делать?
Посмотрел сейчас свой анализатор микрокода ВМ1, примерно 200К сишного голого исходника, там в-основном ручками прописывался интересующий код на выходе (какое-то поле выходных сигналов матрицы), а потом запускался перебор всех допустимых входных значений, считалось минутами. Сейчас я бы это с AVX инструкциями переписал, если будешь делать эмулятор - то использовать AVX для вычисления выходов матрицы plm - самое оно. Возможно попробую реализовать для анализатора ВМ3.

Titus
06.09.2020, 15:04
Эмулятор микрокода собираешься делать?
Вряд ли. Скорее преобразую микрокод в что-нибудь.

Ты как проверял соответствие PLM-ок в реверсе оригиналу? Сравнивал ли нарисованное с оригиналом 10 раз? )
Потому что если накосячил в схеме, это скорее всего будет заметно, а вот косяк в ПЛМ может всплыть через 100 лет или никогда.

Vslav
06.09.2020, 15:29
Вряд ли. Скорее преобразую микрокод в что-нибудь.
Во что? :)



Ты как проверял соответствие PLM-ок в реверсе оригиналу? Сравнивал ли нарисованное с оригиналом 10 раз? )

Вроде того, в Sprint Layout по фоновой фотографии это несложно. Далее, написал экстрактор списка цепей PCAD - сразу верилог на выходе дает (не хватало еще такое ручками переводить).
Есть другой путь - утилита bitract (https://github.com/SiliconAnalysis/bitract), но у нее точность 99+ процентов, как верифицировать не очень понятно, автор ее для экстрации ROM использует.



Потому что если накосячил в схеме, это скорее всего будет заметно, а вот косяк в ПЛМ может всплыть через 100 лет или никогда.
Если никогда - то это вообще неважно. А так, по моему опыту - одиночные ошибки в PLM тесты выявляют вполне надежно, для двойных и выше - вероятность маленькая ну очень.
Тебе надо с Сергеем Вакуленко пообщаться, он вроде занимался верификацией ядер на математической основе, можешь попробовать его уговорить доказать что ВМ1/ВМ2 работают верно :)

Titus
06.09.2020, 16:21
Во что?
Пока не знаю, не разбирался. Тем более там несколько PLM-ок - прерывания, ветвления и т.д.

- - - Добавлено - - -


Тебе надо с Сергеем Вакуленко пообщаться, он вроде занимался верификацией ядер на математической основе, можешь попробовать его уговорить доказать что ВМ1/ВМ2 работают верно
Не знаю, кто это) А 'верификация ядер на математической основе' звучит, как 'сферический конь в вакууме' )

- - - Добавлено - - -


Полный анализ и документирование микрокода 1801ВМ1 занял примерно год
Год - это жестко) Что же там можно год анализировать)

Я понимаю - год перерисовывать 20000 транзисторов, или сколько там в ВМ2 и ВМ1.

Vslav
06.09.2020, 17:00
Не знаю, кто это) А 'верификация ядер на математической основе' звучит, как 'сферический конь в вакууме' )

И близко "не конь", formal verification - это вполне оформившийся научный подход. Люди разрабатывают ядро, а потом математически
доказывают что там не ошибок и оно соответствует спецификации.



Год - это жестко) Что же там можно год анализировать)

Для хобби - норм. И сравнить по скорости не с чем, пока существует только мое единственное описание микрокода ВМ1 и все :)

Titus
06.09.2020, 18:15
Люди разрабатывают ядро, а потом математически
доказывают что там не ошибок и оно соответствует спецификации.
Ну, я не математик, университетов не кончал. У меня свои методы) ('Нет у вас методов против Кости Сапрыкина' (c))

- - - Добавлено - - -


Для хобби - норм. И сравнить по скорости не с чем, пока существует только мое единственное описание микрокода ВМ1 и все
Я пока что этого ничего не читал, и даже достатую из Зеленограда мною документацию на ВМ2 не смотрю, чтобы анализировать транзисторную схему по возможности беспристрастно.

Так сколько ты реверсил ВМ2 по времени?

nzeemin
06.09.2020, 18:35
Не знаю, кто это)

https://ru.wikipedia.org/wiki/%D0%92%D0%B0%D0%BA%D1%83%D0%BB%D0%B5%D0%BD%D0%BA%D 0%BE,_%D0%A1%D0%B5%D1%80%D0%B3%D0%B5%D0%B9_%D0%92% D0%B8%D0%BA%D1%82%D0%BE%D1%80%D0%BE%D0%B2%D0%B8%D1 %87
http://vak.ru/doku.php/proj
https://ramlamyammambam.livejournal.com/
https://github.com/sergev

Titus
06.09.2020, 19:42
Мне это говорит только то, что он какой-то PDP-шник и все)

Пока что мне не нужны чужие методы верификации, т.к. люблю ходить своим путем. Вдруг чего интересного откроешь)

Hunta
06.09.2020, 20:55
он какой-то PDP-шник
нет

Vslav
07.09.2020, 11:57
Так сколько ты реверсил ВМ2 по времени?
Та кто его знает, начато было осенью 2015, закончено летом 2019, но это, ессно, не чистое время. Если буду реверсить F11, то попробую почасовой учет вести.

Titus
07.09.2020, 12:09
Та кто его знает, начато было осенью 2015, закончено летом 2019, но это, ессно, не чистое время. Если буду реверсить F11, то попробую почасовой учет вести.
Жестко)

Посмотрел АЛУ. В общем, достаточно простое и универсальное. Сумматор, сдвигатель вправо-влево, ускоренный перенос сгруппированный по 4 бита.

- - - Добавлено - - -


Если буду реверсить F11
Кстати, никто не в курсе, фоткались ли амижные чипы, хотя бы от самых младших Амиг (Агнус, Паула, Денис и т.д.).

tnt23
07.09.2020, 22:39
Кстати, никто не в курсе, фоткались ли амижные чипы, хотя бы от самых младших Амиг (Агнус, Паула, Денис и т.д.).

Про эти не знаю, но, например, Buster (контроллер шины Zorro) почти целиком описан в патентах на уровне логических элементов.

Titus
07.09.2020, 23:59
Про эти не знаю, но, например, Buster (контроллер шины Zorro) почти целиком описан в патентах на уровне логических элементов.
Нет, бустер не интересен. Интересна базовая амига. Или хотя бы A1200.

xolod
08.09.2020, 06:02
Нет, бустер не интересен. Интересна базовая амига. Или хотя бы A1200.

https://www.fpgaarcade.com/alice-decap-and-imaged/

Ynicky
08.09.2020, 20:00
Не удержался и синтезировал проект как есть, без тщательной проверки и исключения латчей, чтобы посмотреть что же увижу на экране телевизора/монитора. Сначала подключился к монитору компьютера, но тот написал что нет сигнала. Тогда подключился к телевизору и увидел следующую картинку:
https://pic.maxiol.com/thumbs2/1599584330.1845266995.hdmiuknc1.jpg (https://pic.maxiol.com/?v=1599584330.1845266995.hdmiuknc1.jpg&dp=2)
Не поленился и подсчитал сколько пикселей покажет по горизонтали. Оказалось 632, хотя телевизор показывал формат изображения 1280х288@49Гц. При растяжке изображения на полный экран оказалось, что первое знакоместо показывает черным цветом, второе серое, а остальные 78 полосатые. Т.е. всего 640 пикселей. Подключил второй телевизор. Тот показал аналогичный результат, только не выводил формат изображения как первый.

Titus
09.09.2020, 00:01
Оказалось 632, хотя телевизор показывал формат изображения 1280х288@49Гц
Т.е. это через HDMI?

- - - Добавлено - - -


Оказалось 632
Первое - это скорее всего курсор.

- - - Добавлено - - -

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

nzeemin
09.09.2020, 00:16
Тогда подключился к телевизору и увидел следующую картинку:

В программном эмуляторе тоже первое что получили это вертикальные полосы.
Следующий шаг - ошибки стартового теста: https://web.archive.org/web/20141108004225/http://www.felixl.com/Image:Uknc-errors1.png

Ynicky
09.09.2020, 06:45
Т.е. это через HDMI?
Да, это через HDMI.

- - - Добавлено - - -
Можно принудительно создать в памяти список строк, какое-нибудь изображение, и попытаться это вывести.
Я думаю то, что на картинке - это содержимое SDRAM (планы 1 и 2). А вот в план 0, которая у меня во внутренней памяти, могу любую информацию записать.
А чтобы список строк создать, наверное, надо тестовую программку сварганить. Буду разбираться с выводом на экран.

Alex_K
09.09.2020, 09:44
Я думаю то, что на картинке - это содержимое SDRAM (планы 1 и 2). А вот в план 0, которая у меня во внутренней памяти, могу любую информацию записать.
А при выводе в плане 0 уже было что-то записано или он был абсолютно чистый?

Titus
09.09.2020, 09:57
Сначала подключился к монитору компьютера, но тот написал что нет сигнала.
О чем я и говорил, что вполне возможно, что такое разрешение (1280x288) смогут показать не только лишь все мониторы. Я думаю, что надо хотя бы скандаблинг делать (удваивать строки и получать 1280x576).

nzeemin
09.09.2020, 10:51
Я думаю то, что на картинке - это содержимое SDRAM (планы 1 и 2). А вот в план 0, которая у меня во внутренней памяти, могу любую информацию записать.
А чтобы список строк создать, наверное, надо тестовую программку сварганить. Буду разбираться с выводом на экран.

Напомню, что в эмуляторе UKNCBTL можно рядом с .exe положить файл uknc_rom.bin с другой прошивкой, и загрузится он вместо файла из ресурсов программы.
Также там есть команда отладчика udl, сохраняющая текущий список строк экрана в текстовый файл displaylist.txt.
Простейший display list можно сделать даже из одной строки, зацикленной на саму себя - тогда все строки экрана будут одинаковые - будут вертикальные полосы.

Ynicky
09.09.2020, 18:26
А при выводе в плане 0 уже было что-то записано или он был абсолютно чистый?Файл инициализации не указан, поэтому я думаю там все 0.

- - - Добавлено - - -


Напомню, что в эмуляторе UKNCBTL можно рядом с .exe положить файл uknc_rom.bin с другой прошивкой, и загрузится он вместо файла из ресурсов программы.
Так я и делал в BKBTL, когда проверял свои тестовые программы для моего проекта BK0010 на FPGA.

- - - Добавлено - - -

А еще у меня вопрос. При моделировании вижу, что сигнал MODE2 идущий из ПП на HALT ЦП в 1, т.е. как я понимаю он в неактивном состоянии. А в ТО на УКНЦ сказано, что в начале работы ЦП находится в режиме HALT. Так каким сигнал MODE2 должен быть? И еще я вижу, что сигнал SEL2, выходящий из SEL ЦП формируется при каждом обращении DIN, хотя в ПП такой же сигнал только на первых 3х чтениях.

Titus
09.09.2020, 18:40
При моделировании вижу, что сигнал MODE2 идущий из ПП на HALT ЦП в 1, т.е. как я понимаю он в неактивном состоянии.
MODE2 идет не из ПП, а из ХМ2-001. Это /IO1.
Все верно, по ресету (DCLO) он сбрасывается. Т.е. на нем должна быть логическая 1.

Alex_K
09.09.2020, 18:41
А еще у меня вопрос. При моделировании вижу, что сигнал MODE2 идущий из ПП на HALT ЦП в 1, т.е. как я понимаю он в неактивном состоянии. А в ТО на УКНЦ сказано, что в начале работы ЦП находится в режиме HALT. Так каким сигнал MODE2 должен быть? И еще я вижу, что сигнал SEL2, выходящий из SEL ЦП формируется при каждом обращении DIN, хотя в ПП такой же сигнал только на первых 3х чтениях.
Режим процессора HALT и нога HALT - это совершенно разные вещи. Сигнал на ноге HALT требует от процессора прерывания в режим HALT (вектор SEL170). А режим процессора задаётся восьмым разрядом PSW. И ЦП стартует в режиме HALT, т.к. в векторе начального пуска в ячейке -0160002 находится 0600, т.е. разряд 8 установлен. А в ПП в ячейке 0160002 находится 0200, потому ПП стартует в режиме USER.

Ynicky
09.09.2020, 18:44
в векторе начального пуска в ячейке -0160002 находится 0600, т.е. разряд 8 установлен. А в ПП в ячейке 0160002 находится 0200, потому ПП стартует в режиме USER.Все так и есть.

Ynicky
11.09.2020, 21:18
Не могу понять как работать с экраном. Пишу тесты и подставляю их в эмулятор UKNCBTL.
Создал список строк как написано в ТО. Пишу в адреса начало строк любую информацию. На экране эмулятора черный экран. И как это связано планами 0, 1 и 2 - не понятно.

nzeemin
11.09.2020, 21:48
Не могу понять как работать с экраном. Пишу тесты и подставляю их в эмулятор UKNCBTL.
Создал список строк как написано в ТО. Пишу в адреса начало строк любую информацию. На экране эмулятора черный экран. И как это связано планами 0, 1 и 2 - не понятно.

Надо смотреть как у вас выглядит таблица строк ("display list") - выдайте его в файл командой udl в отладочной консоли эмулятора.
Посмотрите как устроена стандартная таблица строк.
Думаю, нужно как минимум инициализировать палитру.

- - - Updated - - -

Формирование таблицы строк можно посмотреть в дизасме ПЗУ от Alex_K - http://www.emuverse.ru/wiki/%D0%A3%D0%9A%D0%9D%D0%A6_ROM_disasm_3 - см. код после метки 110110$, с использованием таблицы 112040$ и соседних.

Ynicky
11.09.2020, 22:27
Получилось, разбираюсь дальше.

Alex_K
11.09.2020, 22:56
На экране эмулятора черный экран. И как это связано планами 0, 1 и 2 - не понятно.

Думаю, нужно как минимум инициализировать палитру.
Кстати, по итогам реверса, при сигнале EVNT, когда счёт начинается заново, регистры цвета устанавливаются в 073124 (старшая часть) и 031020 (младшая часть). Первое слово регистра отображения устанавливается в 010, во втором слове очищаются только биты 4 и 5 (масштаб). Курсор также гасится.
Надо предусмотреть в эмуляторе.

- - - Добавлено - - -


Формирование таблицы строк можно посмотреть в дизасме ПЗУ от Alex_K - http://www.emuverse.ru/wiki/%D0%A3%D...6_ROM_disasm_3 - см. код после метки 110110$, с использованием таблицы 112040$ и соседних.
Лучше посмотреть в описании ОЗУ - СПИСКИ ВИДЕОСТРОК (2270-7037) (http://www.emuverse.ru/wiki/УКНЦ_RAM.LST#.D0.A1.D0.9F.D0.98.D0.A1.D0.9A.D0 .98_.D0.92.D0.98.D0.94.D0.95.D0.9E.D0.A1.D0.A2.D0. A0.D0.9E.D0.9A_.282270-7037.29).

Alex_K
12.09.2020, 11:42
см. код после метки 110110$, с использованием таблицы 112040$ и соседних.
А вот это не надо. В данном случае ТВ, это не таблица видеострок, а таблица видеопараметров. Таблица видеопараметров описывает параметры отдельных экранов - верхней и нижней информационной строки, экрана пользователя и экрана установки.
Собственно программирование таблицы видеострок - это подпрограмма с адресом 110266$.

Titus
13.09.2020, 22:52
Для Vslav по поводу ВМ2:

Немного странноватая шина AX и /AY, которая работает в комплиментарном режиме.
1. На шину в комплиментарном виде информация выставляется посредством 'блока обмена байт и схемы записи'. Причем, младшая часть выставляется при активном RD2, а старшая при активном RD2H.
2. Шина с открытым коллектором, однако имеет подтяжку управляемую сигналом PULL_AXY.
3. Пока еще не прослеживал, но если запись в регистры произойдет при активном PULL_AXY, то регистры встанут в неопределенное состояние.
4. Есть блок, который использует только одно плечо шины - AY, либо AX.

Vslav
14.09.2020, 00:31
3. Пока еще не прослеживал, но если запись в регистры произойдет при активном PULL_AXY, то регистры встанут в неопределенное состояние.
Не встанут, все стробы управляются автоматом состояний, на моей схеме это цепи ALU_S[5..1], PULL_AXY = ~RD2, все записи в регистры завязаны на ~WR2.



4. Есть блок, который использует только одно плечо шины - AY, либо AX.
Шины эквивалентны с точностью до инверсии, в синхронных моделях AY просто выбросил за ненадобностью.

Titus
14.09.2020, 01:08
Зачем PULL_AXY отключаемый? (так же, как и подтяжки для двух других шин AD и X,/Y?)

Vslav
14.09.2020, 08:24
Зачем PULL_AXY отключаемый? (так же, как и подтяжки для двух других шин AD и X,/Y?)
Потому что это цепь с очень высоким fan-out, здоровая шина и, соответственно, с большой электрической емкостью. Простой depletion load тут физически быстро работать не сможет - не успеет сформировать высокий уровень, поэтому поставили сдвоенный транзистор и сделали для него отдельный строб.

Titus
14.09.2020, 09:31
Логично)

- - - Добавлено - - -


Простой depletion load тут физически быстро работать не сможет
Опять же возникает вопрос, есть ли постоянный верхний depletion load в этих цепях, или же на плюс они заряжаются только в момент активности Pull-Up? Если постоянного верхнего depletion load нет, то это цепи также динамические, и в статике работать не будут.

Titus
14.09.2020, 12:33
Поэкспериментировал, и перевел в первом приближении потранзисторную схему, отреверсенную нашим уважаемым Vslav'ом, в логическую схему. Пока что без ПЛМ-ок, и без шин. Но даже в таком виде она получилась в более, чем 1000 логических элементов. Оптимизированна в первом приближении. По хорошему там работы еще очень много.

Вопрос: Зачем это нужно? Ведь есть потранзисторный реверс и перевод его в Verilog.

Ответ: Я ничегошеньки не понимаю в верилоге, и ни один человеческий человек не сможет бегло ориентироваться в потранзисторной схеме (кроме Vslav'а). К тому же, верилог - это уже пропускание схемы через представление вериложника о том, что схема делает. А логическая схема - это просто выделение логических блоков из потранзисторной схемы, компановка, и логическая оптимизация без какого-либо изменения логики схемы. Как и в случае реверса 1515ХМ1/2.

1801VM2 - Optimizied - rev 1.pdf (https://yadi.sk/i/QEhIc-uhzT1F4g) (Схема гигантская, брать лупу у Бастрыкина)

Ynicky
14.09.2020, 18:17
Titus, а какому сигналу в 032 соответствует LATCH_PLANE12 на диаграмме WRITE PLANE ADDRESS?

Titus
14.09.2020, 21:00
@Titus, а какому сигналу в 032 соответствует LATCH_PLANE12 на диаграмме WRITE PLANE ADDRESS?
Как видно из диаграммы, этот сигнал тактируется сигналом CLCA4_F4. Ищем, и сразу находим - это сигналы WRITE_PLANE1_DATA и WRITE_PLANE2_DATA.

- - - Добавлено - - -
Vslav, наконец-то нашел избыточность в ВМ2! Все пытался поймать, но никак не находилось. Но вот теперь есть)

1. Команды IO_CMD и IO_RCD не могут быть установленны одновременно, потому что для IO_CMD нужно, чтобы PLR21=0, а для IO_RCD, PLR21=1.
2. Триггер, устанавливающий по IO_CMD сигнал IO_CMDR, при этом сбрасывает триггер IO_RCDR, устанавливающийся по IO_RCD. Однако, т.к. одновременно IO_CMD и IO_RCD установлены быть не могут, при установленном IO_CMDR, IO_RCDR уже будет сброшен. Итого - сброс не нужен, лишний транзистор T6716 можно выкинуть. Бинго!

Vslav
15.09.2020, 08:53
наконец-то нашел избыточность в ВМ2! Все пытался поймать, но никак не находилось. Но вот теперь есть)

Мм.... Зачем? Процессор разрабатывался вручную и для такого способа разработки проект достаточно большой. Конечно, где-то будут обрывки и недочеты, и даже, страшно себе представить, ошибки :)
В программе на 17К строк таких обрывков тоже обычно хватает.

Titus
15.09.2020, 11:29
Мм.... Зачем?
Спортивный интерес)

Titus
15.09.2020, 14:05
Vslav не ответил на вопрос:

Вопрос Раз (https://zx-pk.ru/threads/30964-revers-inzhiniring-bmk-1515khm1-2.html?p=1080804&viewfull=1#post1080804)

И еще один вопрос:
1. Входные цепи регистров комплиментарные, AX и /AY. Соответственно, могут иметь 4 состояния - 01, 10 (обычные данные), а так же 00 (в этом случае даже при активном стробе _WA содержимое регистра не изменится), и 11 (в этом случае состояние регистра будет непредсказуемым, запрещенная комбинация).
2. Вывод на шину AX, /AY управляется сигналами RD2 (младший байт) и RD2H (старший байт). Если разрешения вывода на шину нет, то какой уровень на линиях AX, /AY? С точки зрения логики, 11 там быть не должно, т.к. это поставит регистры в неопределенное состояние. Однако, ровно перед активацией вывода на шину (по RD2), шина была заряжена подтяжкой PULL_AXY до высокого уровня, значит на шине может быть 11. А это запрещенная комбинация. Внимание, вопрос как это так?

- - - Добавлено - - -

Так, похоже, на второй вопрос я ответ уже сам нахожу)

Titus
15.09.2020, 17:38
Vslav остались такие вопросы относительно шины - что означают сигналы SXT_RXY и SXT_Y и QSWP?

Vslav
15.09.2020, 18:40
Vslav не ответил на вопрос:
Вопрос Раз (https://zx-pk.ru/threads/30964-revers-inzhiniring-bmk-1515khm1-2.html?p=1080804&viewfull=1#post1080804)
Это вот на этот?


Опять же возникает вопрос, есть ли постоянный верхний depletion load в этих цепях, или же на плюс они заряжаются только в момент активности Pull-Up? Если постоянного верхнего depletion load нет, то это цепи также динамические, и в статике работать не будут.
Так ответ такой же как и ранее - степень легирования транзисторов неизвестна (скажем T6841 и T6873), вполне могут обеспечивать некоторый слабый Pull-Up в закрытом состоянии. А могут не обеспечивать. Но процессор заявлен производителем как статический, значит - скорее всего, подтяжка там есть.



1. Входные цепи регистров комплиментарные, AX и /AY. Соответственно, могут иметь 4 состояния - 01, 10 (обычные данные), а так же 00 (в этом случае даже при активном стробе _WA содержимое регистра не изменится), и 11 (в этом случае состояние регистра будет непредсказуемым, запрещенная комбинация).

А в чем вопрос? Значения AX и /AY всегда комплиментарные, никто специально мусор в регистры заносить не будет, поэтому управляется все разнесенными стробами генерируемым от автомата состояний ALU_ST[]. Специально режимы когда будет некомплиментарность я не выискивал, все делал по стандартной методике - создал компаратор шин, прогнал заводские тесты, автоматизированнм методом убедился что комплиментарность всегда наблюдается и потом ненужную AY в синхронных моделях выбросил. Хочешь поискать некомплиментарность сам? Я особого смысла не вижу, но направление в сторону ALU_ST я тебе указал.



2. Вывод на шину AX, /AY управляется сигналами RD2 (младший байт) и RD2H (старший байт). Если разрешения вывода на шину нет, то какой уровень на линиях AX, /AY? С точки зрения логики, 11 там

Ты расширение знака пропустил для старшего байта - SXT_RXY


быть не должно, т.к. это поставит регистры в неопределенное состояние. Однако, ровно перед активацией вывода на шину (по RD2), шина была заряжена подтяжкой PULL_AXY до высокого уровня, значит на шине может быть 11. А это запрещенная комбинация. Внимание, вопрос как это так?

Да не бывает там такого, кури автомат состояний и как стробы генерируются. Вот картинка:

http://www.1801bm1.com/files/images/vm2_dia0.png

Видишь как RD2/RD2H/SXT_RXY обрамляют строб записи WR2? Когда RD2 нулевой у нас работает подтяжка на AX/AY, потом RD2 переходит в высокий, подтяжка отключается и схема расширения знака приведет шины в комплиментарное состояние.

- - - Добавлено - - -


Vslav остались такие вопросы относительно шины - что означают сигналы SXT_RXY и SXT_Y и QSWP?
SXT_RXY активирует расширение знака
SXT_Y=0 - расширять по старшему биту младшего байта, SXT_Y=1 - расширить нулевым байтом.
QSWP - на буферный регистр данных (на Q-bus) выполняется запись по нечетному адресу, соответственно надо блокировать расширение знака (а то затрет старший байт, который собственно всегда нужен при такой записи)

Titus
15.09.2020, 19:52
Специально режимы когда будет некомплиментарность я не выискивал, все делал по стандартной методике - создал компаратор шин, прогнал заводские тесты, автоматизированнм методом убедился что комплиментарность всегда наблюдается и потом ненужную AY в синхронных моделях выбросил. Хочешь поискать некомплиментарность сам?
Я уже нашел все, и выяснил что некомплиментарности там нет) Я же приписал потом, что ответ на второй вопрос я сам нашел)

- - - Добавлено - - -


SXT_RXY активирует расширение знака
SXT_Y=0 - расширять по старшему биту младшего байта, SXT_Y=1 - расширить нулевым байтом.
QSWP - на буферный регистр данных (на Q-bus) выполняется запись по нечетному адресу, соответственно надо блокировать расширение знака (а то затрет старший байт, который собственно всегда нужен при такой записи)

А вот тут какая-то нестыковка, когда SXT_Y=1.
Смотри, SXT_Y = 1, значит T7364 и T7382 закрыты, а значит линии NET01970 и NET01973 подтянуты к плюсу.
А значит при установленном SXT_RXY, шина AX8..15 и /AY8..15 будут в нуле (вышеописанные 00 на комплиментарных шинах). А раз шины в 0, то запись в старшую часть регистров произойти не сможет, в них останется то, что было до этого.

Vslav
15.09.2020, 20:19
А раз шины в 0, то запись в старшую часть регистров произойти не сможет, в них останется то, что было до этого.
Да, это я забыл:

assign axy_wh = ~(sxt_rxy & sxt_y);
SXT_RXY=1 и SXT_Y=1 маскирует запись в старшую половину словного регистра.
Но, ЕМНИП, не все регистры пишуться с AX/AY, и если выбросить SXT_Y из уравнения AX, то процессор какие-то тесты фейлил (ЕМНИП).

Titus
15.09.2020, 21:14
Но, ЕМНИП, не все регистры пишуться с AX/AY, и если выбросить SXT_Y из уравнения AX, то процессор какие-то тесты фейлил (ЕМНИП).
Вот это я не понял, какие тесты.

Ynicky
15.09.2020, 21:30
Пока вот так:
https://pic.maxiol.com/thumbs2/1600194578.1845266995.hdmiuknc2.jpg (https://pic.maxiol.com/?v=1600194578.1845266995.hdmiuknc2.jpg&dp=2)

Titus
15.09.2020, 21:33
На счет некомплиментарной записи - есть запись только с шины AX. Например, PC_WAX.

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

Vslav
15.09.2020, 21:33
Вот это я не понял, какие тесты.
Заводские 7914xx. Сначала отлаживалась оригинальная асинхронная модель. А переход к синхронной делался маленькими шажками.
И после каждого маленького шажка прогонялся набор заводских тестов 401, 402, 404 и сравнивалось время исполнения в тактах относительно эталона.
Вот выкидывание sxt_y вызывало сбой тестов.

Titus
15.09.2020, 21:34
Пока вот так:
Красиво, и курсор есть)

Titus
16.09.2020, 04:42
Vslav, покажи, плиз, графики вот этих сигналов:

https://pic.maxiol.com/images2/1600220451.2997897691.01333.png

Еще одну избыточность нашел (предварительно) - это логика получения сигнала RD2. Он получается, если совпадают сигналы /ALU_S3 и ALU_S5. Но они по фазе никогда не совпадают, поэтому RD2 всегда равен ALU_S5.

Vslav
16.09.2020, 08:11
https://www.1801bm1.com/files/images/vm2_dia1.png

Из всего этого безобразия alu_s[5..0], в синхронной модели осталось только два сигнала.

Titus
16.09.2020, 10:54
Из всего этого безобразия alu_s[5..0], в синхронной модели осталось только два сигнала.
Есть два момента.

1. Меня очень радует, что мои теоретические графики совпали с Verilog'истыми.
2. Нашел ошибочку в твоем графике: SALU должен быть как ALU_S1 or ALU_S3. У тебя же он равен ALU_S3.

p.s.: Видишь, как хорошо, когда каждым своим путем идет. Потом сравниваешь реверсы, и находишь ошибочки)

Vslav
16.09.2020, 11:47
Да, SALU должен быть как ALU_S1 or ALU_S3. Сигнал SALU управляет функцией ALU, просто немножко раньше случается конфигурация, результат фиксируется все равно в конце (то есть по ALU_S3), поэтому логической ошибки нет. В синхронных моделях сигнала SALU вообще нет, но поправить стоит, да.

Titus
16.09.2020, 12:19
Сигнал SALU управляет функцией ALU, просто немножко раньше случается конфигурация, результат фиксируется все равно в конце (то есть по ALU_S3)
Конечно, есть такой класс ошибок, которые могут вообще ни на что не влиять.
А могут и влиять. Тайно и коварно)
А могут влиять и явно, что предпочтительнее всего.

Titus
16.09.2020, 20:23
Vslav, что означают сигналы ABORT и RESET? Ну и производная от них MCRES.

Vslav
16.09.2020, 20:59
что означают сигналы ABORT и RESET? Ну и производная от них MCRES.
RESET - внешний сброс по DCLO/ACLO
ABORT - ошибка шины (тайм-аут)
MCRES - сброс микропрограммного автомата

Titus
17.09.2020, 15:23
Посмотрел на цепи DCLO и ACLO.
Думаю, что если не реализовать их правильно, то в УКНЦ можно такой косяк выловить, т.к. ПП может программно рулить этими линиями для ЦП.

- - - Добавлено - - -

В общем, по DCLO ровным счетом ничего не происходит, кроме как устанавливается INIT, сбрасывается и останавливается тактирование, и идет принудительно подтверждение завершения цикла ACLO.
А учитывая то, что при отрицательном фронте CLCI тактирование по приходу DCLO останавливается мгновенно, возможны иголки и глюки на внутренних цепях, тактируемых F1 и /F1.

Titus
18.09.2020, 17:31
В общем, еще больше склоняюсь к выводу, что процессор не может работать в статике.
Тот, кто тестировал на стенде с медленным CLCI, видимо, не очень медленно его тактировал. Надо попробовать ОООЧЕНЬ медленно. Прям совсем.
Что же касается существования верхних транзисторов, которые, якобы, могут быть одновременно и слабыми источниками тока, играя роль depletion load, и при этом управляться, давая сильный ток - еще более усомнился, увидев в PLM условных переходов сочетание в верхнем плече обычного силового транзистора на плюс, и обычного depletion load (например T13512 и T13517). Т.е. там, где надо ставят такую пару, и никакого тайного другого depletion load не существует.

- - - Добавлено - - -

Да, и еще у PLM ветвлений три линии (B3, B4, B5) одинаковые. Можно выкинуть, оставив одну.
Отвечаю они за биты на шине AD - 12, 13 и 15 соответственно.

Ynicky
19.09.2020, 08:06
Хочу проверить в ЦП регистровый механизм доступа к планам памяти 1 и 2.
А какой командой снять режим HALT в ЦП, чтобы был доступ к регистрам ввода/вывода?

Vslav
19.09.2020, 09:00
В общем, еще больше склоняюсь к выводу, что процессор не может работать в статике.
Я придерживаюсь другого мнения - есть вероятность что производитель статику проверял, раз в документации заявлено - испытания могли проводиться.



и никакого тайного другого depletion load не существует.
Недоказуемо, по-крайней мере, с обычным микроскопом.



три линии (B3, B4, B5) одинаковые. Можно выкинуть, оставив одну.
Не совсем так - функция в матрице ветвления формируется по вертикали, а не по горизонтали. Можно было бы подать на один ряд B3 | B4 | B5, и это повлияет на времянку. Но матрица она и есть матрица, топологически так задумано чтобы набирать функции в канонической форме, поэтому оптимизация тут намеренно исключена. Для FPGA тоже нет смысла оптимизировать руками, синтезатор и фиттер сами сделают это совсем нечеловеческим образом.

Titus
19.09.2020, 10:30
Я придерживаюсь другого мнения - есть вероятность что производитель статику проверял, раз в документации заявлено - испытания могли проводиться.
Логика подсказывает иное.
Но проверить это можно только на стенде.

- - - Добавлено - - -


Можно было бы подать на один ряд B3 | B4 | B5, и это повлияет на времянку. Но матрица она и есть матрица, топологически так задумано чтобы набирать функции в канонической форме, поэтому оптимизация тут намеренно исключена. Для FPGA тоже нет смысла оптимизировать руками, синтезатор и фиттер сами сделают это совсем нечеловеческим образом.
Не можно, а нужно обьеденить все три линии по OR. И выкинуть две строки в матрице.
Это для FPGA оптимизирует синтезатор, а я программист и мне нравится оптимизированная логическая схема.

- - - Добавлено - - -
Vslav, а линии NA как расшифровываются? Как линии с неопознанной деятельностью?

- - - Добавлено - - -


А какой командой снять режим HALT в ЦП, чтобы был доступ к регистрам ввода/вывода?
Очевидно, нужно вызвать прерывание, переводящее процессор в режим USER.
Но это лучше скажут специалисты по процессору Alex_K и Vslav.

Alex_K
19.09.2020, 10:46
Хочу проверить в ЦП регистровый механизм доступа к планам памяти 1 и 2.
А какой командой снять режим HALT в ЦП, чтобы был доступ к регистрам ввода/вывода?
Как я понимаю, уже закачана тестовая программа в системное ОЗУ ЦП с адресами 0160000-0177777? Если так, то доступ к пространству USER из HALT-режима можно организовать командами MFUS (код 021) и MTUS (код 031). Эти команды можно употреблять только в HALT-режиме. Команда чтения MFUS фактически исполняет команду MOV (R5)+,R0, читая из адресного пространства USER. Команда записи MTUS фактически исполняет команду MOV -(R5),R0, записывая в адресное пространство USER.

Либо можно закачать тестовую программу в диапазон 0-0157777 и перейти на неё командой START (код 012). Для начала необходимо установить копии PC и PSW командами WCPC (код 032) и WCPS (код 034), а затем дать команду START. Установка копий PC и PSW обязательно должно производится при запрещённых прерываниях.

MTPS #200
MOV #1000,R0
WCPC
MOV #200,R0
WCPS
START

Ynicky
19.09.2020, 11:50
Да, сложновато.
Выкрутился по другому. Из ПП с помощью регистрового механизма записываю в ЦП по адресам o160000 и o160002 следующие значения: #100000 и #200, а тестовую программу с адреса o100000.
Тест при моделировании проходит, а в железе нет. Буду разбираться. Хотя тесты регистрового механизма в ПП работают в железе.

Alex_K
19.09.2020, 12:04
Да, сложновато.
Выкрутился по другому. Из ПП с помощью регистрового механизма записываю в ЦП по адресам o160000 и o160002 следующие значения: #100000 и #200, а тестовую программу с адреса o100000.
Ну можно и так, хотя никакой сложности, по моему, нет. А что в железе конкретно не проходит? Регистр адреса планов там просто регистр, должен читаться и записываться через адрес 0176640. А вся работа происходит при чтении и записи регистра данных 0176642. В этом отличие от контроллера ПП.

Titus
19.09.2020, 12:41
Расшифровал PLM условных переходов.

Вернее, написал программу, которая по матрице все расшифровала, а я уже потом вручную подписал мнемоники, соответствующие кодовым маскам.

Условные обозначения:
NA4, NA5 - пока что неведомый мне код режима.
Ну а остальное все понятно - битовая маска кода операции, флаги и расшифровка мнемоники



NA4 = 1, NA5 = 1:

0.000.x00.1xx BR
0.000.xx1.1xx Z=1 BEQ, BLE
x.000.x01.1xx Z=1 BEQ, BLOS
1.000.x11.0xx C=0 BCC
1.000.xx1.1xx C=1 BCS, BLOS
1.000.x00.0xx N=0 BPL
1.000.x00.1xx N=1 BMI
1.000.x10.0xx V=0 BVC
1.000.x10.1xx V=1 BVS
0.000.x10.0xx V=1,N=1 BGE
0.000.x10.0xx V=0,N=0 BGE
0.000.x1x.1xx V=1,N=0 BLT, BLE
0.000.x1x.1xx V=0,N=1 BLT, BLE


NA4 = 1:

0.000.x01.0xx Z=0, BNE
1.000.x01.0xx C=0,Z=0 BHI
0.000.x11.0xx V=1,Z=0,N=1 BGT
0.000.x1x.0xx V=0,Z=0,N=0 BGT, BGE


NA4 = 0, NA5 = 1:

BIT_13 | BIT_14 | BIT_15 = 1


NA4 = 1, NA5 = 0:

Z=0


NA4 = 0, NA5 = 0:

N=0

Vslav
19.09.2020, 12:59
Не можно, а нужно обьеденить все три линии по OR. И выкинуть две строки в матрице.
Это для FPGA оптимизирует синтезатор, а я программист и мне нравится оптимизированная логическая схема.

Ты не видишь всей картины целиком, повторюсь - функция считается по вертикали (если смотреть на мою схему), даже с точки зрения эмулятора твоя "оптимизация" потребует лишней операции в программе. Твой дополнительный "if (rq & (0x7 << 3))" будет совсем не в тему (потому что он дублирует & при вычислении столбцов). Открой vm2_oplm.v, и посмотри как матрица описана и подумай как это оптимально сделать на Си, раз уж ты программист :). И, тем более, про SSE2 я не просто так писал :) Всю эту матрицу ветвления можно чпокнуть целиком за 3-4 векторных инструкции x86.



а линии NA как расшифровываются? Как линии с неопознанной деятельностью?

Next Address (Field).



Очевидно, нужно вызвать прерывание, переводящее процессор в режим USER.

Или использовать инструкции "доступ к чужому пространству"

Hunta
19.09.2020, 13:05
Пока эта "схема не на транзисторах" не будет доказана хотя бы прохождением тестов - толку от неё никакого.
Ибо нарисовать можно что угодно и отдельные части могут даже работать, а на интеграционных тестах всё полетит лесом.

Vslav
19.09.2020, 13:16
Вот код матрицы на Verilog


module vm2_plb_model
(
input [13:0] rq,
output sp
);
wire [19:0] p;

function cmp
(
input [13:0] ai,
input [13:0] mi
);
begin
casex(ai)
mi: cmp = 1'b1;
default: cmp = 1'b0;
endcase
end
endfunction

assign p[0] = cmp(rq[13:0], 14'b111x1xx0000100);
assign p[1] = cmp(rq[13:0], 14'bx1000xx00001x0);
assign p[2] = cmp(rq[13:0], 14'b110xxxx1000000);
assign p[3] = cmp(rq[13:0], 14'bx1101xx0000110);
assign p[4] = cmp(rq[13:0], 14'b11xx1xx1000101);
assign p[5] = cmp(rq[13:0], 14'b11xxxxx0000001);
assign p[6] = cmp(rq[13:0], 14'bx1x0xxx0000010);
assign p[7] = cmp(rq[13:0], 14'bx1x0x0x1000010);
assign p[8] = cmp(rq[13:0], 14'b11xx0xx1000100);
assign p[9] = cmp(rq[13:0], 14'b11xxx1x1000x11);
assign p[10] = cmp(rq[13:0], 14'b110x0xx0000100);
assign p[11] = cmp(rq[13:0], 14'b110x1xx00001x1);
assign p[12] = cmp(rq[13:0], 14'b11xxx0x1000110);
assign p[13] = cmp(rq[13:0], 14'b111x0xx00001x1);
assign p[14] = cmp(rq[13:0], 14'b111xxxx1000001);
assign p[15] = cmp(rq[13:0], 14'b10xxxx0xxxxxxx);
assign p[16] = cmp(rq[13:0], 14'b11x1xxx0000x11);
assign p[17] = cmp(rq[13:0], 14'b01x0xxxxxxxxxx);
assign p[18] = cmp(rq[13:0], 14'b11x1xxxx000011);
assign p[19] = cmp(rq[13:0], 14'b000xxxxxxxxxxx);

assign sp = ~|p[19:0];
endmodule


Вот прототип функции на С без векторных инструкций:


#define cmp(x, value, mask) !((x) ^ (values)) & (mask)

unsigned int vm2_plb(unsigned int rq)
{
return !(cmp(rq, 0b11101000000100, 0b11101001111111) ||
...
cmp(rq, 0b11101000000100, 0b11101001111111));
}

Как только какой-то cmp() выдаст совпадение - вычисление прекратиться. При наличии SSE2 cmp() можно делать не 20 раз по 14 бит, а сразу вломить одним 512 битным.
PS. Камрады, а вам не кажется что ВМ2 тут оффтопик? И потом - эти посты тут будет сложновато найти.

Titus
19.09.2020, 13:45
PS. Камрады, а вам не кажется что ВМ2 тут оффтопик? И потом - эти посты тут будет сложновато найти.
Можно переименовать тему в ХМ1515 и ВМ2)

- - - Добавлено - - -


Ты не видишь всей картины целиком, повторюсь - функция считается по вертикали
Я все прекрасно вижу)
Ты смотришь глазами железячника, и даже советы твои по поводу SSE и сверх-широких операций идут с точки зрения железячника)

- - - Добавлено - - -


Пока эта "схема не на транзисторах" не будет доказана хотя бы прохождением тестов - толку от неё никакого.
Ибо нарисовать можно что угодно и отдельные части могут даже работать, а на интеграционных тестах всё полетит лесом.
А это к чему фраза? )

Hunta
19.09.2020, 13:50
Можно переименовать тему в ХМ1515 и ВМ2)
И как это поможет с

эти посты тут будет сложновато найти.


А это к чему фраза?
К факту наличия доказательств корректности работы схемы "не в транзисторах"

Результат работы Vslav очень просто пощупать и проверить. Как это сделать с твоей схемой - я пока не понимаю.

Titus
19.09.2020, 13:54
Как это сделать с твоей схемой - я пока не понимаю.
Думаю, что варианта как минимум два. Когда схема будет дорисована и дооптимизирована, то:
1. Реализовать ее в Verilog'e, как любит Vslav и Yniky.
2. Написать по логической схеме эмулятор.

Hunta
19.09.2020, 14:05
Написать по логической схеме эмулято
Это не будет доказательством, ибо сначала надо будет доказать, что эмулятор написан именно по логической схеме, а не по тому, как автор эмулятора ей понял.


Реализовать ее в Verilog'e, как любит Vslav и Yniky.
Уже есть. Поэтому совсем не понятно - кто будет ещё раз это делать?

Vslav
19.09.2020, 14:18
Ты смотришь глазами железячника, и даже советы твои по поводу SSE и сверх-широких операций идут с точки зрения железячника)

Пожалуйста, не приписывай мне ограниченную точку зрения, потому что я стек технологий от отдельного транзистора до HTTP GET вижу целиком.
Открытым текстом же написал - эти матрицы моделировались на Си, там исходник выше, где тут "точка зрения железячника" ? SSE пользуются тоже "железячники"? Ну... OK.
Давай ты напишешь эту функцию со своей "оптимизацией" и мы потом покурим листинги и сравним чья реализация быстрее?

- - - Добавлено - - -



1. Реализовать ее в Verilog'e, как любит Vslav и Yniky.

Это не Vslav и Yniсky любят, это как бы индустрия к этому пришла - сложные схемы разрабатывать и описывать на HDL. И пришла не просто так :)
Поэтому ситуация-то на самом деле выглядит - "перерисовать схему в нестандартных и произвольных логических элементах так как нравится Titus".
Но мы на любительском форуме, поэтому можно эффективному подходу не следовать, это ОК, делаем как нравится. И, да, в "логических элементах" есть заводская схема 1801ВМ2, ну не было тогда HDL. Тот же Интел до середины 90-х разрабатывал в логике. Вроде Pentium уже на HDL был написан.

Titus
19.09.2020, 14:25
Поэтому ситуация-то на самом деле выглядит - "перерисовать схему в нестандартных и произвольных логических элементах так как нравится Titus".
Вот уж они нестандартные, что просто глядя на схему Ynicky взял, и сделал Verilog-версию)

- - - Добавлено - - -


И, да, в "логических элементах" есть заводская схема 1801ВМ2, ну не было тогда HDL
Там, на сколько я помню, схема не целиком, да и могут быть ошибки.

- - - Добавлено - - -


Это не Vslav и Yniсky любят, это как бы индустрия к этому пришла - сложные схемы разрабатывать и описывать на HDL. И пришла не просто так
Это потому что вы делаете под железо. А я эмуляторщик, поэтому мне HDL нафиг не нужен для понимания логики и написания эмулятора.

- - - Добавлено - - -


Это не будет доказательством, ибо сначала надо будет доказать, что эмулятор написан именно по логической схеме, а не по тому, как автор эмулятора ей понял.
Вообще-то любое описание, даже Verilog написано так, как описатель ее понял) И проверяется все тестами, если они вообще способны это проверить.

Hunta
19.09.2020, 14:34
Вообще-то любое описание, даже Verilog написано так, как описатель ее понял
Безусловно.


И проверяется все тестами, если они вообще способны это проверить.
Безусловно.

А теперь берём описание на Verilog Vslav. К использованию готово? Да. Тестами проверено? Да, причём стандартными, а не те, которые автор сам написал.

И сравниваем с твоей. Твоё видение того, как транзисторная модель ложится на логические элементы. Затем кто-то берет твою модель и в соответствии уже со своим видением пишет Verilog модель, которую проверяет.

Вопрос в студию - является ли эта проверка доказательством верности твоей "нетранзисторной" модели? Нет. Она является доказательством верности второй модели Verilog, которую нарисовал неизвестный герой.

Так что как как доказать верность "нетранзисторной" модели - вопрос по прежнему открытый.

Titus
19.09.2020, 14:38
Так что как как доказать верность "нетранзисторной" модели - вопрос по прежнему открытый.
Да нет еще нетранзисторной модели. Он сырая и не оптимизированная.

И еще раз повторюсь, зачем она была затеяна:
1) Я люблю точную эмуляцию, и, возможно, захочу написать ВМ2.
2) Чтобы точно знать, как ВМ2 работает мне нужна логическая схема.
3) Я беру и делаю логическую схему из транзисторной. Бинго!

А всякие побочные версии применения логической схемы могут быть, а могут и не быть.

Hunta
19.09.2020, 14:45
Чтобы точно знать, как ВМ2 работает мне нужна логическая схема.
Как насчёт вопроса, что логическая схема ТОЧНО описывает работу ВМ2?

Titus
19.09.2020, 14:47
Как насчёт вопроса, что логическая схема ТОЧНО описывает работу ВМ2?
Это риторический вопрос.
Как можно это доказать? Позвать экспертов для сравнения) Ведь я могу ошибиться, и ошибаюсь, как и все люди на Земле)

Vslav
19.09.2020, 15:10
Вот уж они нестандартные, что просто глядя на схему Ynicky взял, и сделал Verilog-версию)
Конечно нестандартные. Соответствуют логическим элементам серии 74xxx ? Нет. Соответствуют Библиотеке Функциональных Ячеек серии 1515ХМ1? Опять нет. Стиль акына - "что вижу о том пою". Имеешь право, хобби, фан, все дела. Но повторное использование это не облегчает - надо быть "on the same page" с остальными. Как я сказал - на сегодня для сложных схем рисование в логических элементах не применяется. Опять-таки - не хочешь изучать HDL? Не вопрос - имеешь право оставаться на своей ограниченной "точке зрения программиста", но это именно ограниченность, а не преимущество или достижение.

На самом деле основа процессора это набор битов памяти и комбинационная схема между ними в рамках нескольких тактовых доменов. Это суть. А как это представить - дело такое, может быть HDL, могут быть логические элементы, может быть поведенческое описание или процедурное на ЯВУ. Транзисторы - то вторично, физическая основа, может быть пневматика или бумажные элементы, пофиг.

Titus
19.09.2020, 15:15
Опять-таки - не хочешь изучать HDL? Не вопрос - имеешь право оставаться на своей ограниченной "точке зрения программиста", но это именно ограниченность, а не преимущество или достижение.
Каждый смотрит из своей мировоззренческой призмы.
Ну на кой шут мне схема 1515 в Verilog'е, если я не собираюсь делать по ней железяку, а хочу понять нюансы работы, и возможно сделать эмуляцию.
А вот по логической схеме можно и эмуляцию, и верилог написать (как, повторюсь, легко и непринужденно сделал Ynicky).

- - - Добавлено - - -


Конечно нестандартные. Соответствуют логическим элементам серии 74xxx ? Нет.
Они соответствуют советским стандартам с небольшим дополнением)
То, к чему большинство из нас привыкло с детства.
Я имею в виду обозначение, а не представление в виде существующей микросхемы.

Vslav
19.09.2020, 15:23
Ну накой шут мне схема 1515 в Verilog'е, если я не собираюсь делать по ней железяку, а хочу понять нюансы работы, и возможно сделать эмуляцию.

Потому что на сегодня HDL это компактно и стандартно, индустрия не просто так выкинула ЛЭ и перешла на HDL, это намного более эффективный подход. И это расширение "мировоззрения". Я вот могу посмотреть с обеих точек зрения, и понимаю что ЛЭ на сегодня - подход не алё. В мире почти все микросхемы разработанные за последние четверть века уже просто не имеют схем в виде ЛЭ.

Hunta
19.09.2020, 15:26
Если

Я люблю точную эмуляцию, и, возможно, захочу написать ВМ2.
то это НЕ

Это риторический вопрос.

Vslav
19.09.2020, 15:33
Разница между ЛЭ и HDL примерно как между пиктографическим и фонетическим письмом. Первая имеет ряд серьезных недостатков и в-общем-то исторически ограничивала развитие этносов. Словари в тысячи иероглифов серьезно ограничивают страту популяции которая может их полноценно использовать.

- - - Добавлено - - -

По поводу точности.
Берем черный ящик, я туда ставлю плату DE0, к ней подключаю реальный ВМ2 на "экспериментальном модуле" или модель. Даю 32К памяти + 055 ПЗУ и прокидываю UART на TCP.
И вперед, пробуйте - отличите реальный ВМ2 от модели?

Titus
19.09.2020, 15:34
Потому что на сегодня HDL это компактно и стандартно, индустрия не просто так выкинула ЛЭ и перешла на HDL, это намного более эффективный подход. И это расширение "мировоззрения". Я вот могу посмотреть с обеих точек зрения, и понимаю что ЛЭ на сегодня - подход не алё. В мире почти все микросхемы разработанные за последние четверть века уже просто не имеют схем в виде ЛЭ.
Как будто я не писал об этом выше, выше, и еще раз выше)
Мне Verilog не подходит для понимания схемы и беглой в ней ориентации.
На логическую схему я смотрю, как на карту Москвы, и сразу все вижу. Еще и поисковик есть по улицам.
А верилог - это толстый справочник 'Моя Москва' с номерами телефонов и адресами, но БЕЗ карты.

- - - Добавлено - - -


И вперед, пробуйте - отличите реальный ВМ2 от модели?
Чтобы отличить, нужны тесты, знающие нюансы ВМ2. Я этих нюансов еще пока не знаю.

Vslav
19.09.2020, 15:38
Как будто я не писал об этом выше, выше, и еще раз выше)
Мне Verilog не подходит для понимания схемы и беглой в ней ориентации.
На логическую схему я смотрю, как на карту Москвы, и сразу все вижу. Еще и поисковик есть по улицам.
А верилог - это толстый справочник 'Моя Москва' с номерами телефонов и адресами, но БЕЗ карты.

Отличная аналогия.
Карта нужна если надо доехать - нужны улицы, маршрут, разметка ПДД.
А для понимания логики надо просто позвонить. Тут телефонный справочник покроет карту как бык овцу.

Titus
19.09.2020, 15:47
Отличная аналогия.
Карта нужна если надо доехать - нужны улицы, маршрут, разметка ПДД.
А для понимания логики надо просто позвонить. Тут телефонный справочник покроет карту как бык овцу.
А мне не надо звонить какому-то одному элементу или сигналу. Мне надо видеть весь город, как целиком, так и по площадям, улицам, домам. Компоновать, разделять и властвовать)

Hunta
19.09.2020, 16:01
Ко мне прошивка для 1201.2018 и мультиконтроллера попала в виде схемного (читай - логического) дизайна.

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

После того, как я переписал её на VHDL - всё стало гораздо понятней, как это не странно. Не говоря о том, что и вносить изменения стало легче

Но самое главное. Когда приходилось что то менять, понять, что изменил в последний раз (на самом деле - по всей цепочки изменений) и где мог накосячить - стало на порядки легче, ибо инструментов для сравнения текстовых файлов и/или управления версиями - вагон и ещё два вагона - начиная от банального fc и заканчиваю гитом или TFS.

Titus
19.09.2020, 16:29
После того, как я переписал её на VHDL - всё стало гораздо понятней, как это не странно. Не говоря о том, что и вносить изменения стало легче
Значит тебе проще так, а мне иначе.

'Возможно, Айседора Дункан и переводит схему в VHDL. Но я не Айседора Дункан. Я хочу видеть схему в виде схемы)'


https://www.youtube.com/watch?v=jzewdidW2XQ

Hunta
19.09.2020, 16:35
Могу только повторить


Если

Я люблю точную эмуляцию, и, возможно, захочу написать ВМ2.
то это НЕ

Это риторический вопрос.

Titus
19.09.2020, 16:45
Могу только повторить
У меня нет для тебя других ответов)

Vslav
19.09.2020, 16:48
1. Элемент 155ЛА3 в транзисторном представлении.
https://www.1801bm1.com/files/images/la3_ttl.jpg

Много всего, куча пиктограмм, как-то соединенных, отсутствует куча параметров (сопротивления, параметры транзисторов, и прочее), интегральный многоэмиттерный транзистор. Круг людей, которые отсюда вытащат логику работы относительно неширок. Но изучить и понять можно, и можно понять много интересного про физическую основу. Но логика работы, которая нас интересует- тут составляет десятую часть информации. Количество иероглифов ограничено (транзистор, резистор, диод), по уровню уже соответствует наскальной надписи пещерного человека.

2. Элемент 155ЛА3 как логический элемент.
https://www.1801bm1.com/files/images/la3_le.jpg

Одна пиктограмма. Но словарь-то огромный (да еще и разные словари-то бывают - сравним УГО по ЕСКД и IEEE), уже намного больше, открой раздел справочника ЕСКД (у меня на столе лежит сейчас) - там десятки всякого. Это уже начальный диалект китайского, уровень начальной школы (десятки-сотни иероглифов).

3. Элемент 155ЛА3, HDL описание


Q = ~(A & B)

А это уже фонетическое письмо, высшая категория. Набор правил соответствует примерно количеству букв в алфавите. И, прикинь, мне даже не пришлось корячится и искать и вставлять картинку, ага.
Ты как китаец, которому советуют изучить английский, хотя бы читать и писать и сделать карьеру - "не, мне иероглифов хватает". А если не хватает - то ты придумываешь новый, (я про нестандарт) :).

Titus
19.09.2020, 17:10
Ты как китаец, которому советуют изучить английский, хотя бы читать и писать и сделать карьеру - "не, мне иероглифов хватает". А если не хватает - то ты придумываешь новый, (я про нестандарт) .
Чтобы не поддерживать этот спор, я просто его прекращу) Ибо, говорить десятый раз одно и то же мне кажется уже контрпродуктивно. Тем более, что каждый останется при своем)

Vslav
19.09.2020, 17:17
Чтобы не поддерживать этот спор, я просто его прекращу) Ибо, говорить десятый раз одно и то же мне кажется уже контрпродуктивно. Тем более, что каждый останется при своем)
Но попытаться вывести застрявшего товарища на стратегическое направление стоило, открыл бы для себя мир FPGA. А то Quartus рисовалку в логических элементах уже лет 10 не поддерживает:biggrin:
Update: насчет Quartus, оказывается я неправ, схему ввести можно. Вернули что ли? Я помню что они когда-то схемный ввод дропнули.

Titus
19.09.2020, 17:43
Но попытаться вывести застрявшего товарища на стратегическое направление стоило, открыл бы для себя мир FPGA. А то Quartus рисовалку в логических элементах уже лет 10 не поддерживает
Смысла нет, т.к. пока что я не занимаюсь ФПГАшками. И так проектов много, не говоря уже о всякой мелочи. Некоторые бы надо и в утиль сдать уже.

- - - Добавлено - - -

Пока что, кстати, проверил некоторое количество RS-триггеров, убедился, что в 3-е состояние встать не могут, и оптимизировал схему.

- - - Добавлено - - -
Vslav, посчитай, плиз, вот эти сигнальчики:

https://pic.maxiol.com/images2/1600526538.1315645218.01.png

Vslav
19.09.2020, 17:43
А как с оптимизацией матрицы ветвлений? Посоревнуемся в наиболее быстрой реализации? Потому что я полагаю что твоя оптимизация и в программной реализации не нужна. А вдруг я ошибся? :)
Честно говоря, моя первая реализация основной матрицы ВМ1 на Си была не очень оптимальной, потом gid (ЕМНИП) писал эмулятор и предложил намного более быстродействующий вариант. Мне это было важно, я не заморачивался ни c векторизацией ни c многопоточностью, просто на одном ядре перебирал все варианты входных переменных (31 штука, ЕМНИП - 2 миллиарда вариантов), было минут 30 за итерацию, после оптимизации хватало пары минут.

Titus
19.09.2020, 17:51
Интересно, зачем питание PLM предварительного декодера инструкций (SD1) завязано на BRA_REQ.

- - - Добавлено - - -


А как с оптимизацией матрицы ветвлений? Посоревнуемся в наиболее быстрой реализации? Потому что я полагаю что твоя оптимизация и в программной реализации не нужна. А вдруг я ошибся?
Мне пока не до соревнований. Я готов заранее уступить пальму первенства вместе с кадкой)

- - - Добавлено - - -

Вообще, если посмотреть, то ВМ2 это монстр по размеру по сравнению со всеми 1515ХМ вместе взятыми)

Vslav
19.09.2020, 17:58
https://www.1801bm1.com/files/images/vm2_dia2.png

Titus
19.09.2020, 18:13
В общем, все правильно я нарисовал. Один сигнал подправил и все. Это радует, что теория совпадает с практикой.

AFZ
20.09.2020, 04:57
Кстати, коллеги, а можно вопрос слегка не в тему? Чем вы пользуетесь для программирования FPGA, Верилогом или VHDL ? Я вот тут начал с Верилога, вроде-бы не так страшен черт, как его малюют...

Ynicky
20.09.2020, 07:14
Я в VHDL, так как когда начинал (конец прошлого века), Verilog-а еще не было.

Vslav
20.09.2020, 08:44
Чем вы пользуетесь для программирования FPGA, Верилогом или VHDL ?
VHDL vs Verilog оно примерно как Pascal vs C. VHDL требует более строгой типизации и более громоздок.
Verilog эволюционировал в System Verilog, там много плюшек.
Но я, например, в своих хобби-проектах придерживаюсь канона Verilog-2001 (ну типа C99) чтобы легче портировалось.

TheGWBV
20.09.2020, 22:23
Может кто-то уже поставил себе в УК-НЦ на место 1515ХМ2-001 замену на FPGA?! Вроде бы её место удобное и для размещения расширителя функционала какого-нибудь...

Titus
21.09.2020, 00:00
Может кто-то уже поставил себе в УК-НЦ на место 1515ХМ2-001 замену на FPGA?! Вроде бы её место удобное и для размещения расширителя функционала какого-нибудь...
А смысл расширять функционал? Это будет еще один несовместимый стандарт, имхо.

TheGWBV
21.09.2020, 10:57
А смысл расширять функционал? Это будет еще один несовместимый стандарт, имхо.

Почему сразу - несовместимы %) Можно же просто помимо клавиатуры, параллельно с ней, прикрутить джойстики, которые в итоге будут подключаться по Bluetooth :)

Arseny
21.09.2020, 13:24
Почему сразу - несовместимы %) Можно же просто помимо клавиатуры, параллельно с ней, прикрутить джойстики, которые в итоге будут подключаться по Bluetooth :)
Да, хотя бы, PS/2 и USB клавиатуры прикрутить. И отсутствующий Стык С2 подменить (включая поддержку PS/2 и USB мышей).

Titus
21.09.2020, 14:32
Ну разве что так, расширить подключение мышей, клавиатур и всякого внешнего, не теряя совместимости.

yu.zxpk
21.09.2020, 16:44
IMHO, проще будет FPGA засунуть в корпус (мертвой) УКНЦ вместо материнки, подключить только родную матрицу клавиатуры.

Vslav
21.09.2020, 16:48
IMHO, проще будет FPGA засунуть в корпус (мертвой) УКНЦ вместо материнки, подключить только родную матрицу клавиатуры.
Я не думаю что на ЙЦУКЕНГЕ мы жить сможем :)
Надо делать USB-host и пусть цепляют кто что может.

yu.zxpk
21.09.2020, 16:56
Староверам нужен ЙЦУКЕН и "теплая ламповая клавиатура". А что внутри - то такое, особенно, если там "по-тактовый эмулятор ВМ2" :)

Titus
21.09.2020, 16:58
Vslav, как там с растворением в кислоте оставшихся 1515? А так же их фотографированием?

- - - Добавлено - - -


Староверам нужен ЙЦУКЕН и "теплая ламповая клавиатура". А что внутри - то такое, особенно, если там "по-тактовый эмулятор ВМ2"
У старовера есть и родная УКНЦ.
А родной корпус очень большой.

Vslav
21.09.2020, 17:58
Староверам нужен ЙЦУКЕН и "теплая ламповая клавиатура".

пусть цепляют кто что может
Пусть староверы напрягутся и сделают себе ю-эс-банутый ЙЦУКЕН (контроллер сканирующий старую матрицу и прикидывающийся USB клавиатурой), раз он так ценен :), а нет - ну значит нет, не так уж им и хотелось.

- - - Добавлено - - -


Vslav, как там с растворением в кислоте оставшихся 1515? А так же их фотографированием?
Пока никак, только кристаллы выпилил. Когда будет время пересечься с химиком и когда он поедет в лабораторию - не знаю, карантин везде.

Titus
21.09.2020, 17:59
карантин везде.
Как карантин? В Украине жестче, чем в России?
У нас все везде свободно ходят, и спортом занимаются в залах даже.

Vslav
21.09.2020, 18:03
А родной корпус очень большой.
Недостаточно большой для такого - https://habr.com/ru/news/t/520056/
Там платформа Teensy упоминается, хороший старт для любой USB клавиатуры.

- - - Добавлено - - -


Как карантин? В Украине жестче, чем в России?
Киевский Национальный Университет закрыт, дистанционное обучения. Жена лекции по Zoom читает, дочка по Zoom слушает (на другом факультете), химик живет вообще в другом городе и на работу в Киев (в тот же университет) сейчас не ездит.

Titus
21.09.2020, 21:59
Расписал адреса векторов прерываний ВМ2. И почему-то там обнаружился непонятный вектор 250 в восьмеричном. Что бы это могло быть? А может он не используемый?


Константы векторов прерываний (подгруппа RY4):

Набор 0:

VSEL0 -> 0x18 // EMT
VSEL1 -> 0x10 // IOT
VSEL2 -> 0x08
VSEL3 -> 0x0C // BPT, T-разряд
VSEL4 -> 0x04
VSEL5 -> 0x7C // Двойное зависание

Набор 1:

VSEL0 -> 0xA8 // (250 в восьмеричном) ???
VSEL1 -> 0x14 // ACLO
VSEL2 -> 0x40 // EVNT
VSEL3 -> 0x78 // HALT
VSEL4 -> 0x1C // TRAP
VSEL5 -> 0xBC // Зависание при приеме АВП

Alex_K
21.09.2020, 23:12
Расписал адреса векторов прерываний ВМ2. И почему-то там обнаружился непонятный вектор 250 в восьмеричном. Что бы это могло быть? А может он не используемый?
Переделал в восьмеричную систему:

Константы векторов прерываний (подгруппа RY4):

Набор 0:

VSEL0 -> 0030 // EMT
VSEL1 -> 0020 // IOT
VSEL2 -> 0010 // Резервный код, команда FIS
VSEL3 -> 0014 // BPT, T-разряд
VSEL4 -> 0004 // Зависание
VSEL5 -> 0174 // Двойное зависание

Набор 1:

VSEL0 -> 0250 // Запрос окна (вероятно не реализован)
VSEL1 -> 0024 // ACLO
VSEL2 -> 0100 // EVNT
VSEL3 -> 0170 // HALT
VSEL4 -> 0034 // TRAP
VSEL5 -> 0274 // Зависание при приеме АВП

Вектор 0250 - это прерывание захвата магистрали через окно по сигналу WIR, которое реализовано в 1806ВМ2. В 1801ВМ2 такого входа нет. В 1801ВМ2 есть что-то, связанное с этим в виде сигнало WRQ и WACK. А сигнал WIR в 1806ВМ2 используется как высокоприоритетное немаскируемое прерывание.

Vslav
21.09.2020, 23:45
. В 1801ВМ2 такого входа нет.
В таблице блока генератора констант в документации 1801ВМ2 вектор 250 помечен как WIR, и еще есть свободная линия в матрице декодера прерываний. Думаю это и есть нереализованный WIR.


сигнало WRQ и WACK
Окно в 1801ВМ2 очень просто реализовано, там нет никаких прерываний. Если адрес обращения в диапазоне окна - просто ставится WRQ и обмен на шине не начинается пока не прийдет WACK.

Alex_K
21.09.2020, 23:55
В таблице блока генератора констант в документации 1801ВМ2 вектор 250 помечен как WIR, и еще есть свободная линия в матрице декодера прерываний. Думаю это и есть нереализованный WIR.
Да, действительно, таблица 16. Неплохо описано зависание при приёме АВП - обрыв цепочки.

- - - Добавлено - - -


Окно в 1801ВМ2 очень просто реализовано, там нет никаких прерываний. Если адрес обращения в диапазоне окна - просто ставится WRQ и обмен на шине не начинается пока не прийдет WACK.
В документации и советуют при обычном использовании диапазона 0160000-0163777 посадить WACK на землю.

Titus
22.09.2020, 00:16
Вектор 0250 - это прерывание захвата магистрали через окно по сигналу WIR, которое реализовано в 1806ВМ2.
Понятно. Значит из разряда - хотели, но не сделали)

- - - Добавлено - - -


В таблице блока генератора констант в документации 1801ВМ2 вектор 250 помечен как WIR
Я пока в документацию вообще не смотрю, чтобы не быть предвзятым при анализе схемы.

Alex_K
22.09.2020, 00:19
Я пока в документацию вообще не смотрю, чтобы не быть предвзятым при анализе схемы.
А по документации есть ещё VSEL6 со значением 000 - вектор начального пуска.

Titus
22.09.2020, 02:46
А по документации есть ещё VSEL6 со значением 000 - вектор начального пуска.
У меня такого на схеме нет)

Возможно, вектор формируется иначе, учитывая, что есть еще куча констант, которые в половине случаев константами и не являются:


Набор констант 0 (16-битные) (PLM9 = 1):

RY0 -> BIRL0..BIRL7 * 2 с расширением знака до 16 бит
RY1 -> PSW3 записывается во все 16 бит
RY2 -> PSW0 в бит 0, остальные биты равны 0
RY3 -> 0x0000
RY4 -> выбор константы вектора прерывания
RY5 -> 0x0014

Набор констант 1 (8-битные) (PLM9 = 0):

RY0 -> BIRL0..BIRL3 в младший байт. Биты 4..7 равны нулю.
RY1 -> BIRL0..BIRL5 в младший байт. Биты 6..7 равны нулю
RY2 -> 0x01, если ALT_CNST = 0, и
0x02, если ALT_CNST = 1
RY3 -> 0x02
RY4 -> 0x00
RY5 -> 0x04

Titus
22.09.2020, 11:44
Очень миленько соптимизировался счетчик для расширенной арифметики ВМ2.
Гораздо больше места на схеме занял входной инвертор. Заменю его потом на мультиплексор.

https://pic.maxiol.com/images2/1600763213.1315645218.01.png

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

AFZ
22.09.2020, 12:37
Староверам нужен ЙЦУКЕН и "теплая ламповая клавиатура". А что внутри - то такое, особенно, если там "по-тактовый эмулятор ВМ2"Точнее - клавиатура ЙЦУКЕН/JCUKEN. Впрочем, клавиатуре фиолетово, какие там буквы, она шлет скан-коды и все. Никто не мешает исправить надписи на кнопках :) (например, налепить соответствующие наклейки). А вот, если использовать клавиатуру QWERTY/ЙЦУКЕН, т.е. оригинальную современную клавиатуру, то не забудьте, что требуются два раздельных индикатора РУС/ЛАТ, один для клавиатуры, один для экрана.


Может кто-то уже поставил себе в УК-НЦ на место 1515ХМ2-001 замену на FPGA?! Вроде бы её место удобное и для размещения расширителя функционала какого-нибудь...Таких FPGA, чтобы по ногам точно влезли на место 1515ХМ1/2, в природе не существует. И вообще, я вижу УКНЦ с применением FPGA так: плата, на которой два "теплых ламповых" микропроцессора К1801ВМ2, одна "жирная" FPGA, пара микросхем ОЗУ - одна - для ЦП, вторая - для ПП и одна ПЗУха для замены всех 1801РЕ2, и все. Как факультатив, можно предусмотреть место для STM32, в который прописать контроллер AZ. Ну, и в той части прошивки FPGA, которая будет заменять 1515ХМ1-136, предусмотреть выход на VGA-DVI-HDMI...

yu.zxpk
22.09.2020, 13:47
Вижу я противоречивые требования:
- жирная FPGA, но
- старые 5В микросхемы
- видео выход новомодный, но где же video ram? SDRAM? DDR?

AFZ
22.09.2020, 19:40
- жирная FPGA, но - старые 5В микросхемыЭто, как раз, мелочи. Это же n-МОП, а не КМОП. И полная ТТЛ-совместимость. А, значит, этим микропроцессорам достаточно 2.4 В лог. 1, т.е. 3.3 В лог. 1 от ПЛИС однозначно годится. И наоборот, выходная лог. 1 от микропроцессора около 4 В с очень хилым выходным током и, если она (лог 1) попытается стать выше, защитные диоды ПЛИС ее благополучно и безболезненно просадят. Вот с МП серии 1806 - да, будут сложности, а 1801 - без вопросов.

Конечно, про ВМ2 - это мои теоретические измышления, но с ВМ1 всё так. Мы с СуперМаксом сейчас работаем над контроллером AZ для БК 0010/0011, так EP2C8Q208 весело работает прямо на шине БК-шки, которая идет прямо с 1801ВМ1.


- видео выход новомодный, но где же video ram? SDRAM? DDR?Зачем? Видео-RAM лежит на борту у ПП УКНЦ, там ей и место. Это ведь не GE Force и не Radeon. А быстрой двухпортовой памяти для преобразования формата изображения и непосредственного видеовыхода хватит той, что есть на борту у Циклона.

Vslav
22.09.2020, 20:23
так EP2C8Q208 весело работает прямо на шине БК-шки
Есть мнение что CycloneII - "крепкий", при перенапряжении повреждается заметным током.
А следующие CycloneIII+ - "хлипкие", повреждаются просто напряжением.
И там это, защитные диоды на входах катодом на питание стоят. Если вдруг тактирование остановится, циклон перестанет жрать и Uпит может через диоды вырасти до входных напряжений, зарядить конденсаторы по питанию, а там если пробой какой - то энергии в конденсаторах как раз хватит чтобы побежать за новой ПЛИС.

yu.zxpk
22.09.2020, 22:24
Зачем? Видео-RAM лежит на борту у ПП УКНЦ, там ей и место. Это ведь не GE Force и не Radeon. А быстрой двухпортовой памяти для преобразования формата изображения и непосредственного видеовыхода хватит той, что есть на борту у Циклона.

Тут еще один момент про память.
* имеем 2 отдельных микросхемы DRAM (16bit, вестимо), каждая на своем CPU
* значит, надо делать в FPGA два независимых SDRAM контролера, каждому CPU свой.
* SDRAM контролер в FPGA съедает достаточно много места, насколько я помню. В старый Spartan с 4-6K LUT может не поместится все, но это не точно.
* для видео-контролера буферизировать в FPGA sram строку из (медленной) памяти ПП - вариант.

AFZ
23.09.2020, 07:34
И там это, защитные диоды на входах катодом на питание стоят. Если вдруг тактирование остановится, циклон перестанет жрать и Uпит может через диоды вырасти до входных напряжений, зарядить конденсаторы по питанию, а там если пробой какой - то энергии в конденсаторах как раз хватит чтобы побежать за новой ПЛИС.Я этого не знал. Тем не менее, эта проблема легко обходится. Никто не мешает прицепить параллельно питанию Циклона-3+ банальный стабилитрон на 3.6 В (или на сколько надо, подобрать по характеристикам, чтобы при 3.3 В он подгружал источник миллиампер на 5-10, а выше 3.6 не пустил не щадя живота своего :) ). Или не банальный, а специальный, защитный. Как ставят в HDD на +5 и +12. Это не считая вопроса: с чего бы это вдруг остановится основной тактовый генератор?


* имеем 2 отдельных микросхемы DRAM (16bit, вестимо), каждая на своем CPU
* значит, надо делать в FPGA два независимых SDRAM контролера, каждому CPU свой.
* SDRAM контролер в FPGA съедает достаточно много места, насколько я помню. В старый Spartan с 4-6K LUT может не поместится все, но это не точно.:) Зачем SDRAM? Это же не GE Force и не Radeon, нам не нужны бегамайты! Сколько там? 64+192К, да? Да туда можно поставить любую статику. А, чтобы не нарушать УКНЦовые времянки, добавить в цикл обращения к ней холостых тактов, сколько надо. Или не холостых - лишнее свободное время этой памяти можно использовать для переноса очередной графической строки из нее в память FPGA. Или вообще поставить не два чипа памяти, а один, достаточной емкости, и мультиплексировать его между ПП и ЦП, это позволит сэкономить ноги FPGA.

И эти ноги - единственная проблема, которую я вижу. Кажется их потребуется столько, сколько бывает только в кузове BGA, а, значит, печатка потребуется многослойная, читай дорогая. Что понижает и так невысокую вероятность реализации подобного проекта, практически, до нуля. :(

- - - Добавлено - - -

Vslav, собственно, никто не мешает и добавить штук несколько 74LVC245 и им подобных, для согласования 5-вольтовых 1801/06 и FPGA, на цене изделия это почти не отразится, на сложности печатки тоже. То есть, это ни разу не проблема.

Titus
23.09.2020, 08:03
Сколько там? 64+192К
Не надо рассматривать память УКНЦ таким образом. С точки зрения контроллеров памяти - это 3 банка по 64К. И никак иначе. И обращение к ним идет синхронно.

- - - Добавлено - - -


И вообще, я вижу УКНЦ с применением FPGA так: плата, на которой два "теплых ламповых" микропроцессора К1801ВМ2, одна "жирная" FPGA
Нет смысла в лампоых ВМ2, если Verilog-модель полностью соответствует оригиналу. Процессор по сути ничем не отличается от тех же 1515, за исключением того, что в разы больше.

- - - Добавлено - - -

И вообще, обратитесь к опыту Ynicky, который уже сделал FPGA-версию, которая в значительно мере уже работает.

Vslav
23.09.2020, 08:35
Я этого не знал. Тем не менее, эта проблема легко обходится. Никто не мешает прицепить параллельно питанию Циклона-3+ банальный стабилитрон на 3.6 В
ИМХО, если поделка только для себя любимого, то можно рискнуть, хотя лично мне свое время жалко было бы, если вдруг откажет. А если тиражировать - то лучше не нарушать рекомендации производителя. Тем более это будут втыкать в БК, где плата двухслойная, без нормальных опорных слоев и большая - "выбросы" наверняка будут. Ну, дело твое - рискни, посмотрим как оно в серии будет :)

Hunta
23.09.2020, 08:41
Ну, дело твое - рискни, посмотрим как оно в серии будет

Как написано в электричках в Одессе - "Высунь, высунь голову в окно - посмотрим, что обратно засунешь" :)

LeoN65816
23.09.2020, 18:00
И эти ноги - единственная проблема, которую я вижу. Кажется их потребуется столько, сколько бывает только в кузове BGA, а, значит, печатка потребуется многослойная, читай дорогая. Что понижает и так невысокую вероятность реализации подобного проекта, практически, до нуля. :(
164 копыта (https://aliexpress.ru/af/coreep4ce10.html?trafficChannel=af&d=y&CatId=0&SearchText=coreep4ce10&ltype=affiliate&SortType=price_asc&groupsort=1&page=1) хватит? ;)
Есть и на 187 копыт (https://aliexpress.ru/item/4000829848262.html?spm=a2g0o.cart.0.0.10fa3c00FYrW 8p&mp=1&_ga=2.153192701.418120013.1600751283-590717102.1577099030&_gac=1.153283980.1600875257.EAIaIQobChMIiMaXy8z_6w IVxQcZCh08oQhTEAEYASAFEgJi3fD_BwE).

andreil
23.09.2020, 18:42
а, значит, печатка потребуется многослойная, читай дорогая. Что понижает и так невысокую вероятность реализации подобного проекта, практически, до нуля. :(
На JLPCB 4-х слойки очень дешёвые получаются - $7 за 5шт + доставка. До РФ доставка дешёвая доступна, так что вообще никаких проблем.

SuperMax
24.09.2020, 16:06
Есть мнение что CycloneII - "крепкий", при перенапряжении повреждается заметным током.
да, могу точно сказать что они очень живучие
в другом проекте, когда я еще учился, я ухитрился накосячить и включил все на выход - оперативку, ПЛИС и STM32
обнаружил по нагреву - градусов 60 все нагрелось, но ничего не сдохло.


А следующие CycloneIII+ - "хлипкие", повреждаются просто напряжением. И там это, защитные диоды на входах катодом на питание стоят. Если вдруг тактирование остановится, циклон перестанет жрать и Uпит может через диоды вырасти до входных напряжений, зарядить конденсаторы по питанию, а там если пробой какой - то энергии в конденсаторах как раз хватит чтобы побежать за новой ПЛИС.
буду знать

но в случае новодела, можно делать подтяжку не к +5V а к 3.3V - для OK как бы пофиг ? ВМ2й по идее тоже не будет против

Titus
25.09.2020, 20:16
Vslav, нарисуй, плиз, диаграмму, где есть сигналы IO_START, IO_ST1, 2, 3, 4, 5, IO_RDY, SYNC_CLR, IOP_STB, IOP_WR.

hobot
25.09.2020, 20:16
ИМХО: Titus конечно прав , когда пишет, что при 100% соответствии в реальных 1801ВМ2 нет необходимости, но мне (к примеру) очень приятно было бы родные камушки керамику в сердце машинки иметь, знать, что трудятся те самые процессоры, несмотря на прочий новодел. Клавиатуру надо использовать современную, но раскладку делать УК-НЦшную, по примеру той, что успешно работает в (благодаря терпению и старательности Alex_K и nzeemin) UKNCBTL.

(!) Добавлю по поводу реальных процессоров - думаю в интересах разработчиков
планирующих серию удешевление проекта? А возможен вариант с процами и без них?
К примеру клиент-покупатель предоставляет плату классическую для демонтажа свою?

TheGWBV
25.09.2020, 20:43
К примеру клиент-покупатель предоставляет плату классическую для демонтажа свою?
По мне так, это супротив ретрогумманизма :)
Ладно ещё Неон от безвыходности распаяли...
Другое дело, когда матрица 1515 сдохла, её бережно выпаяли, на посадочное место напаяли штырьков под плату расширения с fpga, и машинка снова жива, да ещё удобней прежней стала :)

hobot
25.09.2020, 21:02
Ладно ещё Неон
Неон мертвец по определению, то что мертво умереть не может )
А вот где ВМ-ки брать как не с плат ? Их что в продаже много есть где?

TheGWBV
25.09.2020, 22:47
Неон мертвец по определению, то что мертво умереть не может )
А вот где ВМ-ки брать как не с плат ? Их что в продаже много есть где?

Ну, не знаю, я тоже в молодости думала, что УК-НЦ - это круто :) А теперь ещё больше люблю БКашку, и болею за Союз-Неон))

Titus
26.09.2020, 00:11
@Vslav, нарисуй, плиз, диаграмму, где есть сигналы IO_START, IO_ST1, 2, 3, 4, 5, IO_RDY, SYNC_CLR, IOP_STB, IOP_WR.
И еще DOUT_CLR, BUS_DAT, RPLY, RPLY1, RPLY3, RDAT.

- - - Добавлено - - -

Нашел еще одну ошибку нерациональности в ВМ2.

Одно из условий сброса DOUT_CLR - это RPLY3=1, или RPLY1=0.
Однако, если установлен RPLY3, то RPLY1 всегда сброшен.
Следовательно конструкцию (RPLY3=1) | (RPLY1=0) можно смело заменить на RPLY1 = 0.

Titus
26.09.2020, 02:45
И еще одно лишнее условие:

При установке DIN_CLR=0 требуется условие RDAT=1 или RPLY2=0 или RPLY3=1.
Однако, RDAT может быть равен 1 только если RPLY2 = 0.
Поэтому условие RDAT можно смело выбросить.

hobot
26.09.2020, 03:32
Ну, не знаю
я знаю! это всё оттого, что вы используете правильный DECовский ассемблер на БК, программируя там что-то под ВМ1, но пропускаете мимо замечательную и лучшую в мире ОС RT-11 ) (Ну после RSX так правильней сказать).

и болею за Союз-Неон))
давайте без фанатизма ) я в смысле - болеть не надо )


А теперь ещё больше люблю БКашку
Так, а я же сам такой - это ж мой первый самый самый компьютер.
Только в моём случае речь о классической 10-01 и в ту пору когда кроме
кассет для неё ничего не было, а на УК-НЦ сразу была RT-11 (!)

TheGWBV
26.09.2020, 10:27
а на УК-НЦ сразу была RT-11 (!)
Ну, это у кого как :) Я надеялась, что после включения увижу Бейсик и буду пользоваться магнитофоном ))
Только с этим смирилась и приобрела дисковод и дискеты с софтом, как УК-НЦ стал помирать...
То видеовыход убился, потом вот клава отказала по столбцу с кнопкой К3 (кстати, у меня на УК-НЦ две кнопки К3 прям с завода).
Так вот ещё с первой половины 90-х и чиню свой УК-НЦ )) И, вот, хочется теперь уже сразу продвинутый дизайн вместо 1515XM2-001,
раз уж пыль сдута с машинки снова :) и есть (пока слабая) тяга к RT-11 :cool:

Vslav
26.09.2020, 10:43
Неон мертвец по определению, то что мертво умереть не может )
А вот где ВМ-ки брать как не с плат ?
Давайте запилим pin-2-pin платку, на ПЛИС, с блекджеком и продажными женщинами SDRAM и кешем. Белого цвета :biggrin:

- - - Добавлено - - -


И еще DOUT_CLR, BUS_DAT, RPLY, RPLY1, RPLY3, RDAT.

https://www.1801bm1.com/files/images/vm2_dia3.png

Titus
26.09.2020, 11:28
Давайте запилим pin-2-pin платку, на ПЛИС, с блекджеком и продажными женщинами SDRAM и кешем. Белого цвета

Посмотри еще Тыц (https://zx-pk.ru/threads/30964-revers-inzhiniring-uknts-(1515khm1-amp-2-1801vp1-1801vm2).html?p=1082269&viewfull=1#post1082269)
и Тыц (https://zx-pk.ru/threads/30964-revers-inzhiniring-uknts-(1515khm1-amp-2-1801vp1-1801vm2).html?p=1082279&viewfull=1#post1082279)

- - - Добавлено - - -
Vslav, добавь, плиз, еще к тому же графику несколько сигналов SYNC_SET, BUS_FREE, ADR_REQ, IN_UA.

Vslav
27.09.2020, 12:00
https://www.1801bm1.com/files/images/vm2_dia4.png

Titus
27.09.2020, 22:54
Vslav, что такое IN_UA, UA_REPLY, TO_REPLY, IOP_IAK, IOP_SEL?

Vslav
28.09.2020, 00:13
Vslav, что такое IN_UA, UA_REPLY, TO_REPLY, IOP_IAK, IOP_SEL?
UA - UnAddressed - безадресное обращение, UA_RPLY - это фантомный RPLY, генерируется внутри процессора в циклах безадресного обращения (не требуется внешний RPLY)
TO_REPLY - это фантомный внутренний RPLY, генерируется в транзакциях предвыборки инструкций по тайм-ауту шины для того чтобы избежать исключения. С блокировкой исключений на предвыборке много интересного, я писал про это в своей теме, и у меня есть специальный тест vm2/tst/pcbug.mac который все эти специальные случаи тестирует.
IOP_IAK - команда блоку IO для выполнения транзакции чтения вектора прерывания
IOP_SEL - команда блоку IO для выполнения безадресной транзакции

Titus
28.09.2020, 01:49
Vslav, не очень мне нравится, что триггер IOP_RD не сбрасывается по MCRES.
Это может привести к тому, что если MCRES придет в середине цикла DIN, то DIN встанет в Z-состояние.

Titus
28.09.2020, 03:56
Что за сигналы RA_FWN, RA_FR, RTA, CREQ?

Vslav
28.09.2020, 08:24
Vslav, не очень мне нравится, что триггер IOP_RD не сбрасывается по MCRES.
Это может привести к тому, что если MCRES придет в середине цикла DIN, то DIN встанет в Z-состояние.
IOP - это буферный регистр текущего кода транзакции, он и не должен сбрасываться. MCRES вполне штатно приходит при аквтином DIN/DOUT - при тайм-ауте шины и все работает.

- - - Добавлено - - -


Что за сигналы RA_FWN, RA_FR, RTA, CREQ?
Это я не помню, RTA вроде запрос на транзакцию, и оно было описано в документации на процессор.

Titus
28.09.2020, 09:28
MCRES вполне штатно приходит при аквтином DIN/DOUT - при тайм-ауте шины и все работает.
И все работает - это ненаучный подход)
DIN при этом переходит в Z-состояние из-за того, что выходной буфер использует комплиментарный DIN, /DIN, из которых по MCRES сбрасывается DIN, а /DIN и так был в нуле.

- - - Добавлено - - -

Посмотрел внимательнее выходной буфер DIN.
Там еще хуже. При DIN=0, и /DIN=0 на выходных транзисторах вообще получается сквозной ток.

Vslav
28.09.2020, 11:53
И все работает - это ненаучный подход)

Никогда не говори такого физикам, потому что эксперимент - критерий истины. Это уже твоя проблема как теоретика понять где ты чего упустил и почему твое представление не соответствует экспериментальным данным - "мадам, это Ваш сон" (c) :). DIN_SET снимается при тайм-ауте, похоже потому что rplys становится высоким и никаких проблем с DIN нету.



Там еще хуже. При DIN=0, и /DIN=0 на выходных транзисторах вообще получается сквозной ток.
Чего очевидно не наблюдается в реальном процессоре (иначе горели бы выходы nDIN массово).

Держи картинку отработки тайм-аута шины:

https://www.1801bm1.com/files/images/vm2_dia5.png

Titus
28.09.2020, 12:11
похоже потому что rplys становится высоким и никаких проблем с DIN нету.
Да, ты прав. Проследил всю цепочку. Схема очень большая, иногда логически трассировать сигналы назад непросто)
На твоей модели гораздо проще, нарисовал и все. Но мне хочется, чтобы мои графики, построенные теоретически, совпали с твоими графиками в симуляторе.

А цепочка такая - MCRES=1 -> SYNC_CLR=1 -> SYNC_S0 = 0 -> RPLYS=1 -> DIN_SET=0.

- - - Добавлено - - -

Есть еще один несимметрично воздействующий сигнал RSACK, который, придя в момент DIN, также раскорячил бы выходной каскад, если бы не одно но - этот же RSACK переводит выходной каскад DIN в Z-состояние, поэтому все безобразие нейтрализуется.

Titus
28.09.2020, 20:09
Попробовал нарисовать теоретические графики цикла чтения.

Ох, и сложное это занятие по сравнению с 1515ХМ.
Разумеется, моделировать на симуляторе и проверять в миллион раз практичнее и безошибочнее.
Зато в теории можно нарыть какие-то баги, нюансы и т.д. А уже потом их можно моделировать, чтобы убедиться, что все так.
Например, нарисовал, что минимальный цикл чтения занимает 8 тактов. Стал искать лазейки, и выяснил, что если подать упреждающий RPLY синхронный с SYNC, то цикл можно сократить до 6 тактов. Не знаю, хак это или штатно так положено. И вообще, промоделировать такое не могу, может только владелец модели Vslav. Но как тема для размышления - интересная.

Графики привожу сокращенные, оставив основные сигналы, а то простыня будет на всю страницу.

https://pic.maxiol.com/images2/1601312696.2151951043.01.png


Описание цикла чтения IOP_RD с нормальной последовательностью сигналов (8 тактов):

Начальные условия: BFREE=1 (SYNC=0, AR=0, (RPLY=0 или ARDY=1)) (шина свободна)
Начинается F1=0:

Такт 0: IOP_RD=1 (цикл чтения), WRA=1 (обновлен регистр адреса RA),
BUS_ADR=1 (на шину выставляется адрес).
Такт 1: Ничего не происходит (вероятно, чтобы подольше подержать адрес на шине)
Такт 2: SYNC=1 (строб записи и анализа адреса ведомыми устройствами),
RTA=1 (что это?).
Такт 3: Если SYNC заведен на AR, то в этом такте процессор получает подтверждение принятия адреса.
AR может быть зафиксирован только в течение нечетного такта (F1=1).
Моментально по приходу AR (в любой момент нечетного такта) выставляется DIN=1,
Шина переводится в Z-состояние, а сигнал RPLYS=0 (готовность принятия ответа RPLY).
Такт 4: Если устройство уже ответило сигналом RPLY, то он будет зафиксирован в этом такте.
RPLY может быть зафиксирован в любом четном такте (F1=0), даже в такте 2 или 0,
а принят к обратботке начиная с такта 3.
Такт 5: В ответ на RPLY в нечетном такте (F1=1) формируется RDAT=1 (чтение данных с шины),
который длится 2 такта.
Такт 6: Продолжение чтения данных с шины.
Такт 7: Снимается сигнал DIN. Внешнее устройство может снимать RPLY.
Если устройство не успело снять RPLY до окончания такта 9, то начало DIN следующего
цикла будет задержано за счет продлевания REPLY3 на 2 и более тактов (кратно 2 тактам).

Такт 8: Снимается сигнал SYNC, может быть начат следующий цикл.

Vslav
28.09.2020, 21:15
И вообще, промоделировать такое не могу

Да все ты можешь:
- установить ModelSim (версии 10.1 или старше - пойдет и Altera Edition из Quartus 12.1, например, не забыть полечить)
- скомипилировать желаемую прошивку (./vm2/tst/build.bat t401 - например, надо посмотреть в батнике чего вызывается для эмулятора RT11)
- запустить ModelSim
- File->Change Directory - выбрать ./vm2/hdl/org/sim/de0 например для моделирования оригинальной модели
- в консоли ModelSim набрать do run.do
- смотреть открывшиеся диаграммки



Такт 8: Снимается сигнал SYNC, может быть начат следующий цикл.

Ты имеешь ввиду 8 тактов входной частоты CLCI ? Ну в ней никто не меряет, CLCO типа "несущая" :)

Titus
28.09.2020, 21:45
Ты имеешь ввиду 8 тактов входной частоты CLCI ? Ну в ней никто не меряет, CLCO типа "несущая"
Входной, разумеется.
И все тесты на УКНЦ у меня в тактах входной частоты. Например, простая операция регистр-регистр на ПП - 16 тактов.

- - - Добавлено - - -


Да все ты можешь:
Это хорошо, когда ты с этим уже работал. А чайнику это видится, как:


Положь колдобину со стороны загогулины и два раза дергани за пимпочки. Опосля чего долбани плюхалкой по кувыкалке и, кады чвокнет, – отскочь дальшее, прикинься ветошью и не отсвечивай. Потому как она в энто время шмяк тудыть, сюдыть, ёксель-моксель, ёрш твою медь... Пш-ш-ш! – И ждешь пока остынет.

Titus
29.09.2020, 11:01
Alex_K, что-нибудь известно про ускоренный цикл чтения с упреждающим RPLY?
Vslav, Ynicky, можно ли промоделировать некое устройство, которое отвечает на цикл чтения со стороны ВМ2, выставлением RPLY синхронно с SYNC и AR, как на втором графике?

Vslav
29.09.2020, 12:15
Нет никакого смысла в таком тесте, команду регистр-регистр ВМ2 выполняет минимум за две микрокоманды:
- запуск чтения следующей инструкции PDP-11, PC=PC+2
- собственно выполнение операции регистр-регистр
Каждая микрокоманда требует 2 такта CLCO, итого - минимум 4 такта CLCO на команду. ВМ2 упирается в ALU - оно все время занято. У 1801ВМ3 есть выделенный сумматор для выполнения PC=PC+2, ему АЛУ для этого не нужно, вот он уже производительностью шины ограничен - 3 такта на инструкцию.
Update: возможно ускорятся инструкции с дополнительными операндами в памяти.

Titus
29.09.2020, 12:34
Нет никакого смысла в таком тесте
Смысл все-таки есть)

Ynicky
29.09.2020, 22:08
Ynicky, можно ли промоделировать некое устройство, которое отвечает на цикл чтения со стороны ВМ2, выставлением RPLY синхронно с SYNC и AR, как на втором графике?
Не знаю, правильно ли сделал. В проект добавил к ПП регистр по адресу o177200 (с инверсией шины - o000577). Но при записи в него dout не формируется, зато формируется wtbt.
https://pic.maxiol.com/thumbs2/1601406359.1845266995.ioportread1.jpg (https://pic.maxiol.com/?v=1601406359.1845266995.ioportread1.jpg&dp=2)
https://pic.maxiol.com/thumbs2/1601406403.1845266995.ioportwrite1.jpg (https://pic.maxiol.com/?v=1601406403.1845266995.ioportwrite1.jpg&dp=2)

Titus
30.09.2020, 01:47
Спасибо! Пока я на даче, посмотрю после пятницы.

Ynicky
02.10.2020, 20:09
Народ, а такой документ надо сканировать?
https://pic.maxiol.com/thumbs2/1601658525.1845266995.img202010020002.jpg (https://pic.maxiol.com/?v=1601658525.1845266995.img202010020002.jpg&dp=2)

Hunta
02.10.2020, 20:20
Я бы отсканировал. Хотя бы просто, что бы был :)

Ynicky
03.10.2020, 08:12
Отсканировал.
Отраслевой Стандарт. 1806ВМ2. Руководство по применению.
https://cloud.mail.ru/public/38km/3fkCX2e4r

Titus
03.10.2020, 15:06
Не знаю, правильно ли сделал. В проект добавил к ПП регистр по адресу o177200 (с инверсией шины - o000577). Но при записи в него dout не формируется, зато формируется wtbt.
Работает не так, как я предполагал.
Чтобы понять, в чем отличие, надо добавить на график сигналы DIN_CLR, RPLYS, RPLY3, AD_OE, BUS_ADR.

- - - Добавлено - - -

Нашел еще одну избыточность в ВМ2.

https://pic.maxiol.com/images2/1601726660.2151951043.01.png

Как видно, для установки ответа для безадресного чтения (UA_REPLY) необходимо два условия:
1. Активный DIN или DOUT.
2. Активный DIN и IOP_SEL.

Однако, DIN и DOUT никогда не могут быть установлены одновременно. Поэтому первое условие можно попросту выкинуть.

Vslav
03.10.2020, 15:57
Однако, DIN и DOUT никогда не могут быть установлены одновременно. Поэтому первое условие можно попросту выкинуть.
Это очень важная "избыточность", благодаря ей мы можем быть уверены что ВМ2 никогда не выполняет безадресную запись. Возможно разработчики собирались ее реализовать, но потом отказались. Я бы не стал удалять это из оригинальной схемы - подчеркивает важную особенность, и, возможно несет исторические детали.

Alex_K
03.10.2020, 16:05
Это очень важная "избыточность", благодаря ей мы можем быть уверены что ВМ2 никогда не выполняет безадресную запись. Возможно разработчики собирались ее реализовать, но потом отказались.
Вот поэтому команда с кодом 030 выполняет какой-то бессмысленный алгоритм. Наверное хотели сделать безадресную запись. В 1806ВМ2 команда с кодом 030 отрабатывает также, как и RSEL (код 020).

Titus
03.10.2020, 16:19
Это очень важная "избыточность", благодаря ей мы можем быть уверены что ВМ2 никогда не выполняет безадресную запись. Возможно разработчики собирались ее реализовать, но потом отказались. Я бы не стал удалять это из оригинальной схемы - подчеркивает важную особенность, и, возможно несет исторические детали.
Стоп. Так все-таки может ВМ2 выдать одновременно DIN и DOUT или нет? )

Ynicky
03.10.2020, 17:05
Работает не так, как я предполагал.
Чтобы понять, в чем отличие, надо добавить на график сигналы DIN_CLR, RPLYS, RPLY3, AD_OE, BUS_ADR.
https://pic.maxiol.com/thumbs2/1601733880.1845266995.ioportread2.jpg (https://pic.maxiol.com/?v=1601733880.1845266995.ioportread2.jpg&dp=2)

Titus
03.10.2020, 17:25
https://pic.maxiol.com/thumbs2/1601733880.1845266995.ioportread2.jpg (https://pic.maxiol.com/?v=1601733880.1845266995.ioportread2.jpg&dp=2)

Это уже немного другой график - тут RPLY приходит раньше, чем SYNC.

И заодно уж тогда добавь сигналы RPLY1, RPLY2, DIN_SET, ARDY, SYNC_S0, ARDY_S0.

Vslav
03.10.2020, 17:54
Стоп. Так все-таки может ВМ2 выдать одновременно DIN и DOUT или нет? )
Думаю что не может.

Ynicky
03.10.2020, 17:54
https://pic.maxiol.com/thumbs2/1601736830.1845266995.ioportread3.jpg (https://pic.maxiol.com/?v=1601736830.1845266995.ioportread3.jpg&dp=2)

Titus
03.10.2020, 18:27
Думаю что не может.
Тогда логика подсказывает только одно - выкинуть эту проверку)

- - - Добавлено - - -


https://pic.maxiol.com/thumbs2/1601736830.1845266995.ioportread3.jpg (https://pic.maxiol.com/?v=1601736830.1845266995.ioportread3.jpg&dp=2)

Все понятно, что меня смутило)
У тебя под F1 значится не F1 процессора, а F1 УКНЦ, которая в 2 раз выше.

Итак, по твоему графику подтверждается, что цикл чтения с опережающим RPLY действительно занимает 6 тактов, как на моем графике.

Остается вопрос к эксперту Alex_K, что он об этом скажет.

Titus
03.10.2020, 21:21
Достаточно навороченно и громоздко сделан механизм разруливания ситуации, когда запрос на операцию ввода-вывода (IO_START) пришел раньше, чем закончился SYNC.

А алгоритм простейший:

1. Если IO_START пришел после окончания SYNC, то начать операцию ввода-вывода (IOP_STB).
2. Если IO_START пришел до окончания SYNC, то начать операцию ввода-вывода сразу после окончания SYNC, а пока он не кончился, снять IO_RDY (готовность ввода-вывода).

А навернули - 6 фаз тактирования IO_ST0..ST5, 6 триггеров. Думаю, что можно было это сделать компактнее)

Alex_K
04.10.2020, 11:15
@Alex_K, что-нибудь известно про ускоренный цикл чтения с упреждающим RPLY?
Абсолютно ничего не известно.

Остается вопрос к эксперту @Alex_K, что он об этом скажет.
Вроде, в этих вопросах, я не эксперт. Могу только сказать, что циклам обмена RPLY должно подаваться только после DIN и DOUT. Но предварительная выдача RPLY имеет смысл только для чтения, т.е. если в фазе выдачи адреса не был активен WTBT. Но тут есть тонкий момент - если устройство по фронту SYNC начнёт выдавать данные и RPLY, то на шине AD на некоторое время образуется каша из адреса и данных. Главное, чтобы устройство правильно защёлкнуло адрес (всякие переходные процессы). Процессор уже правильно защёлкнет данные, т.к. он снимет адрес и переключит линии AD в режим входов.

Titus
04.10.2020, 12:02
Но тут есть тонкий момент - если устройство по фронту SYNC начнёт выдавать данные и RPLY, то на шине AD на некоторое время образуется каша из адреса и данных. Главное, чтобы устройство правильно защёлкнуло адрес (всякие переходные процессы).
Я думаю, что проблемы в этом вообще нет, т.к. при опережающем RPLY устройство должно выдавать данные по DIN только на следующем такте, поэтому никакого конфликта не будет.

В общем, запишем эту особенность быстрого чтения в список найденных недокументированных возможностей ВМ2. Впрочем, применить это знание на УКНЦ мы все равно не сможем.

Alex_K
04.10.2020, 12:25
Я думаю, что проблемы в этом вообще нет, т.к. при опережающем RPLY устройство должно выдавать данные по DIN только на следующем такте, поэтому никакого конфликта не будет.
Ну главное, чтобы успело выдать, и с учётом всяких задержек, процессор не прочёл нули.

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

Titus
04.10.2020, 13:17
Текущий прогресс в оптимизации ВМ2.

Дело продвигается медленно, потому что очень сложный процессор по сравнению со всеми 1515ХМ вместе взятыми)

1801VM2-Optimized - rev 34.pdf (https://yadi.sk/d/MwAKw2VNqGG2kA)

Ynicky
04.10.2020, 17:41
Пока не получается оживить проект УКНЦ.
Написал тестовые программы проверки цветных полос.
В первой обнуляю и записываю во все планы цветные полосы регистровым методом из ПП.
В эмуляторе UKNCBTL и железе вижу одинаковые картинки.
https://pic.maxiol.com/thumbs2/1601822267.1845266995.cols2ukncbtl.jpg (https://pic.maxiol.com/?v=1601822267.1845266995.cols2ukncbtl.jpg&dp=2)
https://pic.maxiol.com/thumbs2/1601822335.1845266995.hdmiuknc3.jpg (https://pic.maxiol.com/?v=1601822335.1845266995.hdmiuknc3.jpg&dp=2)
Во второй разделил программу на две части. В первой части из ПП прописываю только план 0,
а затем загружаю в ЦП вторую часть программы записи в планы 1 и 2, и снимаю ACLO с ЦП.
В эмуляторе картинка не изменилась, а в железе стала такой.
https://pic.maxiol.com/thumbs2/1601822380.1845266995.hdmiuknc4.jpg (https://pic.maxiol.com/?v=1601822380.1845266995.hdmiuknc4.jpg&dp=2)
Т.е. из ЦП планы 1 и 2 (SDRAM) не прописываются, хотя из ПП планы и обнуляются и прописываются.
При моделировании все работает правильно в обоих вариантах.
При попытке задать какие-либо констрейны, кроме частот, становится только хуже.
Думаю дело в асинхронном дизайне. Будет настроение - займусь переводом БМК в синхронный дизайн.
А пока хочу сделать временное моделирование после разводки. Может оно что-то покажет.
Сейчас использую бесплатные версии квартуса и моуделсима.
Они почему-то не позволяют промоделировать после разводки.

Alex_K
04.10.2020, 18:05
Во второй разделил программу на две части. В первой части из ПП прописываю только план 0,
а затем загружаю в ЦП вторую часть программы записи в планы 1 и 2, и снимаю ACLO с ЦП.
Лучше сделать так, как в системном ПЗУ. Сначала остановить ЦП, установив DCLO и ACLO. Затем перекачать в системное ОЗУ свою программу. Ну и запустить ЦП, сняв DCLO, небольшая пауза, снимаем ACLO. В системном ПЗУ это с адреса 0160332.

Titus
04.10.2020, 18:17
Думаю дело в асинхронном дизайне. Будет настроение - займусь переводом БМК в синхронный дизайн.
Я бы не рекомендовал уходить от оригинального дизайна, пока проект не заработает.

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

А вообще все круто - вот-вот заработает УКНЦ на ФПГА!

Ynicky
04.10.2020, 18:53
Лучше сделать так, как в системном ПЗУ. Сначала остановить ЦП, установив DCLO и ACLO. Затем перекачать в системное ОЗУ свою программу. Ну и запустить ЦП, сняв DCLO, небольшая пауза, снимаем ACLO. В системном ПЗУ это с адреса 0160332.

Собственно, я так и делаю.

Alex_K
04.10.2020, 19:18
Собственно, я так и делаю.
А не работают именно регистры 0176640 и 0176642, или программа в ЦП не запускается? А 1801ВП1-120 сэмулирована? Можно проверить работу программы в ЦП через каналы обмена.

Ynicky
04.10.2020, 19:31
А не работают именно регистры 0176640 и 0176642, или программа в ЦП не запускается? А 1801ВП1-120 сэмулирована? Можно проверить работу программы в ЦП через каналы обмена.
Похоже что не запускается программа в ЦП. Все реверсы подключены, а также мелкая логика. Как проверить через каналы обмена - не знаю.

Alex_K
04.10.2020, 19:45
Как проверить через каналы обмена - не знаю.
Да очень просто. Со стороны ЦП если это источник, то со стороны ПП - приёмник. Записываем со стороны ЦП в источник (например в 0177566), то стороны ПП в регистре статуса должен установится бит готовности приёмника, это бит 3 в регистре 0177066. И из регистра приёмника ПП 0177060 можно прочесть значение, записанное в регистре источника ЦП 0177566.

Titus
05.10.2020, 19:34
Т.е. из ЦП планы 1 и 2 (SDRAM) не прописываются, хотя из ПП планы и обнуляются и прописываются.
А сам ЦП стартует или нет?
Или не работает именно запись из ЦП в планы?
В принципе, запись в планы практически ничем не отличается от записи в ОЗУ ЦП. Если не работает запись в планы, скорее всего сам ЦП не работает.

Ynicky
05.10.2020, 20:39
А сам ЦП стартует или нет?
Или не работает именно запись из ЦП в планы?
В принципе, запись в планы практически ничем не отличается от записи в ОЗУ ЦП. Если не работает запись в планы, скорее всего сам ЦП не работает.
Память ЦП + планы 1 и 2 находятся в SDRAM. ЦП не стартует (проверяю по регистру с выдачей на светодиоды платы). Похоже, что к памяти нет обращения. Контроллер SDRAM у меня работает на 100 МГц. Видимо при разводке ПП ближе к контроллеру чем ЦП (или наоборот дальше). При моделировании ЦП правильно извлекает и выполняет команды.

Titus
05.10.2020, 20:58
Память ЦП + планы 1 и 2 находятся в SDRAM. ЦП не стартует (проверяю по регистру с выдачей на светодиоды платы). Похоже, что к памяти нет обращения. Контроллер SDRAM у меня работает на 100 МГц. Видимо при разводке ПП ближе к контроллеру чем ЦП (или наоборот дальше). При моделировании ЦП правильно извлекает и выполняет команды.

А при чем тут ближе или дальше?

И что значит контроллер SDRAM на частоте 100МГц? Какая SDRAM у тебя? Почему ей нужен какой-то отдельный контроллер? Ты преобразуешь обращения к DRAM УКНЦ в обращения к SDRAM этого контроллера? Как?

И какая память у тебя для ПП?

Titus
08.10.2020, 12:16
Как только я уезжаю на дачу, тема засыпает)

Titus
09.10.2020, 14:28
Наконец-то сформировал и оформил в виде отдельной наглядной страницы регистры и шины ВМ2.

Краткое описание добавлю позже.

1801VM2 - [Registers & Buses] - rev 39.pdf (https://yadi.sk/d/Dc1v-9cts1qsOA)

Vslav
09.10.2020, 14:54
Наконец-то сформировал и оформил в виде отдельной наглядной страницы регистры и шины ВМ2.
Твою бы энергию - да в мирных целях.
Есть же уже и заводская схема в элементах, и моя в транзисторах, и модель рабочая, и документация заводская....
А вот с ВМ3 затык, вот тут (https://www.1801bm1.com/files/retro/1801/vm3/) лежит текущая версия f5.
Еще примерно 2000 портов не распознаны. Осталась часть которая отвечает за шину, включая предвыборку и конвееризацию.
Вот там бы покопался, да распознал бы где там IOP ходят... Если есть интерес в совместной работе - стучись в личку, там на скайп перейдем.
Я то и сам добью, но это еще долго, вдвоем веселее.

Titus
09.10.2020, 16:32
Есть же уже и заводская схема в элементах, и моя в транзисторах, и модель рабочая, и документация заводская....
Заводская примерная, я в нее не смотрю.
Твоя - это как карта Москвы с увеличением один к одному.
Мне интересно видеть логическую точную и понятную схему.

- - - Добавлено - - -


А вот с ВМ3 затык, вот тут лежит текущая версия f5.

ВМ3 мне не интересен, т.к. он не имеет отношения ни к одной моей любимой ретро-платформе.
Я же любитель УКНЦ, а не ВМ1,2,3.

Vslav
09.10.2020, 16:56
Заводская примерная
Это с чего ты взял? Она очень точная, от маски ТР4 которую я реверсил отличий очень мало, буквально единицы. Нет только матриц, их надо брать у меня. Но матрицы для ручного анализа полностью бесполезны, я там инструментарий простенький писал для матричного анализа, с автоматической экстракцией матриц из списка цепей.

Titus
09.10.2020, 16:59
Это с чего ты взял? Она очень точная, от маски ТР4 которую я реверсил отличий очень мало, буквально единицы.
Даже одно отличие мне не нужно.
Есть оригинальная потранзисторная схема из которой можно получить прекрасную логическую схему. И это мне интересно.

Vslav
09.10.2020, 17:12
Есть оригинальная потранзисторная схема из которой можно получить прекрасную логическую схему. И это мне интересно.
Дык, а какой тут фан? Перерисовать то, что уже известно? Вот 1515ХМ1 ты отреверсил, это отлично, мы узнали много нового, огромное спасибо тебе. Но что нового принесет твоя перерисовка ВМ2? Процессор готов, работает в FPGA, проект закончен. Тем более, как я сказал - твоя трактовка интересна только тебе, она не представляет ни транзисторной точности, ни поможет промоделировать ячейски с реальными задержками, как может заводская схема. Просто промежуточное представление в твоем своеобразном понимании, ничего принципиально оригинального. Дело, конечно, твое куда девать время. А ведь мог бы и реальную пользу принести, вот ВМ3 намного сложнее, там есть нераспознанное, есть где новое слово сказать, а не вторичной переработкой заниматься.

Titus
09.10.2020, 17:45
Дык, а какой тут фан? Перерисовать то, что уже известно? Вот 1515ХМ1 ты отреверсил, это отлично, мы узнали много нового, огромное спасибо тебе. Но что нового принесет твоя перерисовка ВМ2? Процессор готов, работает в FPGA, проект закончен.
Мне это напоминает периодически возникающий диалог с одним из моих приятелей, который 20 лет задается вопросом, зачем я вегетарианец) Я обьясняю, и потом все по новой)
Обьясню еще раз кратко - лично мне не подходит транзисторная схема для беглого и комплексного анализа. VHDL версия не подходит по скольку - для меня этот язык чужд, и это твоя интерпретация транзисторной схемы. А в интерпретации могут быть ошибки. Зачем ехать в Киев через Магадан, переобразуя VHDL в логическую схему (а я напоминаю - мне интересна только логическая схема).
Кроме того, выясняются вещи, которые раньше были неизвестны. Например, возможность быстрого чтения с опережающим RPLY.
Уверен, что будет и еще что-то интересненькое.

Vslav
09.10.2020, 17:59
Обьясню еще раз кратко - лично мне не подходит
Речь не о том что лично тебе подходит или не подходит. И время лично твое ты можешь потратить как хочешь. В данном случае ты его тратишь только на себя, да - имеешь право, но никому перерисовка ВМ2 больше не нужна, польза только тебе.
Вот мне не подходит твой формат реверса ХМ1, но я молчу, потому что это твой проект, ты делаешь как ты его видишь, а мне и остальным приходится брать уж в той форме как есть. Но мне и в голову не прийдет перерисовывать, потому что как-то HDL по твоей схеме написать можно и смысла в перерисовке 0. Прикинь, я тратил бы время на перерисовку ВМ1 в разных позах? Никакого ВМ2 у нас до сих пор и близко не было бы. Реверс занимает дохрена времени, тут есть что делать реально нового, с нуля, а ты страдаешь своей персональной фигней, жуешь давно пережеванное. Ну нет - так нет, страдай дальше, время твое. А мог бы всем пользу принести.

Titus
09.10.2020, 18:03
Вот мне не подходит твой формат реверса ХМ1, но я молчу, потому что это твой проект, ты делаешь как ты его видишь, а мне и остальным приходится брать уж в той форме как есть.
На сколько я понимаю, Ynicky брал мои схемы, и прекрасно безо всяких проблем делал по ним HDL.

- - - Добавлено - - -


но никому перерисовка ВМ2 больше не нужна, польза только тебе.
Хорошо, называй это перерисовкой)
Для меня это анализ)
Но, если больше никому не нужна, так я могу и не выкладывать материалы, если народ скажет - не нужна)

Hunta
09.10.2020, 18:09
прекрасно безо всяких проблем делал по ним HDL.
У него уже заработал проект?

Titus
09.10.2020, 18:11
У него уже заработал проект?
Я так понимаю, что по большей части да, но еще не все.

Hunta
09.10.2020, 18:12
Я так понимаю, что по большей части да, но еще не все.
Значит, проблемы есть и фраза

безо всяких проблем делал по ним HDL.
мягко говоря - не правда

Titus
09.10.2020, 18:15
Значит, проблемы есть и фраза
Ну собрались критики)

Сразу и без ошибок ничего не делается. Это норма.