PDA

Просмотр полной версии : Цифровая археология: 1801 и все-все-все



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

CodeMaster
18.12.2014, 10:28
Vslav, а можно примерно сказать на сколько тактов/нс ускорится работа системы если 1801ВМ1 будет получать и отдавать данные гипотетической памяти абсолютно без задержек с её стороны? Т.е. "чистая" производительность процессора?

Vslav
18.12.2014, 10:56
Vslav, а можно примерно сказать на сколько тактов/нс ускорится работа системы
Пока теоретически сказать не могу, "распутывается" микрокод и автомат состояний. Достаточно много непоняток, поэтому буду поднимать реальный процессор на модуле + плата DE0, для опытов. Там как раз для начала будет максимально быстрая память, вот и сравним быстродействие с реальной БК.

Titus
18.12.2014, 14:35
И что бы два раза не вставать - таки декодирования инструкции MUL я пока не нашел. Она точно кодируется как 070Rss?
Спрощу у Отрохова, может быть, они для 1801ВМ1Г микрокод отдельно допиливали.

Точно.

Возможно, ВМ1Г - этопереразведенка. Надо фоткать)

---------- Post added at 15:35 ---------- Previous post was at 15:32 ----------


Irfaview, меню Image->Replace Color :)

Не помогает) Если меняю, например, на черный, то фон делается черным и ножки делаются черными и их опять не видно)

CodeMaster
18.12.2014, 14:42
Там как раз для начала будет максимально быстрая память, вот и сравним быстродействие с реальной БК.

В принципе даже интересно не только быстрая память, но например работа ВМ1 с МПИ через "чипсет" который бы нивелировал все задержки на шине по максимуму. Ну, а дальше собственно двухпроцессорная система ;-)

CodeMaster
18.12.2014, 14:42
Там как раз для начала будет максимально быстрая память, вот и сравним быстродействие с реальной БК.

В принципе даже интересно не только быстрая память, но например работа ВМ1 с МПИ через "чипсет" который бы нивелировал все задержки на шине по максимуму. Ну, а дальше собственно двухпроцессорная система ;-)

Vslav
18.12.2014, 15:16
Возможно, ВМ1Г - этопереразведенка. Надо фоткать)

Да не дай Бог. Тогда уже сдеру умножение при реверсе ВМ2, а то слишком много возни еще и ВМ1Г снимать и реверсить.



Не помогает) Если меняю, например, на черный, то фон делается черным и ножки делаются черными и их опять не видно)

Настройте предварительно желаемый цвет ножек (белые, загорелые, в чулках и тд :)) в P-CAD (меню Display).

Даже знаю какой следующий вопрос будет, "провода тонкие - их не видно" :). Зайдите в Options->Block Selection, отметьте только провода, потом выберите все провода, ПКМ->Properties->желаемая толщина проводов. Только не сохраняйте, неудобно потом будет работать.

Titus
18.12.2014, 15:19
Да не дай Бог. Тогда уже сдеру умножение при реверсе ВМ2, а то слишком много возни еще и ВМ1Г снимать и реверсить.

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

Vslav
18.12.2014, 15:30
В процессе реверса сразу потихоньку документирую всякие мелкие детальки. Сделал "козу" документа (http://sderni.ru/254513), может быть какие-то замечания, пожелания или дополнения будут, приветствуется.

Titus
18.12.2014, 15:38
В процессе реверса сразу потихоньку документирую всякие мелкие детальки. Сделал "козу" документа (http://sderni.ru/254513), может быть какие-то замечания, пожелания или дополнения будут, приветствуется.

Хорошо бы, чтобы обязательно была в итоге логическая схема процессора, а не только на уровне транзисторов или же верилога.

---------- Post added at 16:38 ---------- Previous post was at 16:33 ----------

Перекрасил ножки)
Кому интересно, вот первый ряд ХМ2-001, если есть замечания - пишите.
http://sderni.ru/254515

Vslav
18.12.2014, 16:36
Кому интересно, вот первый ряд ХМ2-001, если есть замечания - пишите.

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

Titus
18.12.2014, 16:43
"Еще десять тысяч ведер воды и золотой ключик у нас в кармане" (с) Тортилла :).
Ждем продолжения. Надо будет все-таки шины и именованные цепи осваивать, а то по схеме будет разобраться несильно проще чем по кристаллу.

На самом деле, не так уж много работы. Один столбец - это день чистой работы, а там до 60 логических элементов. Всего таких столбцов 19. Итого 1100-1200 логических элементов. В транзисторах это будет... ну, умножим на 6-8. Итого 8-9 тысяч транзисторов. Впрочем, измерять трудоемкость подобной ПЛМ в транзисторах нет смысла, т.к. они преобразуются в библиотеку ЛЭ на первом же столбце.

Vslav
20.12.2014, 01:12
Перенес на верилог и потестировал модуль таймера:


//__________________________________________________ ____________________________
//
// 1801VM1 timer module (rudimentary, VE1-style)
//
module vm1_timer
(
input tve_clk, // main system clock
input tve_ena, // clock enable
input tve_reset, // timer reset
input tve_sp, // external timer clock
//
input [15:0] tve_din, // input data
output [15:0] tve_dout, // output data
//
input tve_csr_oe, // read timer control
input tve_cnt_oe, // read timer counter
input tve_lim_oe, // read timer limit
input tve_csr_wr, // write timer control
input tve_lim_wr // write timer limit
);

reg [15:0] tve_limit; // timer reload & capture register
reg [15:0] tve_count; // timer counter register
reg [7:0] tve_csr; // timer control register
reg [6:0] tve_pre; // clock prescaler counter
reg [5:0] tve_div; // timer clock divisor
reg [2:0] tve_edge; // external falling edge detector
reg tve_tclk; // selected timer clock
reg tve_tclk4; // prescaler /4 output
wire tve_tclk128; // prescaler /128 output
reg [1:0] tve_intrq; // hidden interrupt request

wire tve_zero; // timer counter zero value
wire tve_load; // timer counter load
wire tve_back; // timer capture load

//
// Reading the timer registers content to the shared bus
//
assign tve_dout = (tve_csr_oe ? {8'b11111111, tve_csr} : 0)
| (tve_cnt_oe ? tve_count : 0)
| (tve_lim_oe ? tve_limit : 0);

//
// Hidden clock prescaler, generates the /4 and /128 frequencies
//
assign tve_tclk128 = (tve_pre[6:0] == 7'b1111111);

always @(posedge tve_clk or posedge tve_reset)
begin
if (tve_reset)
begin
//
// Asynchronous prescaler reset, no in original 1801VM1,
// added here to provide the comfortable simulation
//
tve_pre <= 7'b0000000;
tve_div <= 6'b0000000;
tve_tclk4 <= 1'b0;
tve_tclk <= 1'b0;
tve_edge <= 3'b000;
end
else
begin
if (tve_ena)
begin
tve_pre <= tve_pre + 7'b0000001;
tve_tclk4 <= (tve_pre[1:0] == 2'b11);

//
// Documented divisor 1/4, 1/16, 1/64
//
if (tve_tclk128)
tve_div <= tve_div + 6'b000001;

//
// Timer clock selector
//
tve_tclk <= ~tve_csr[0] & ~tve_csr[6] & ~tve_csr[5] & tve_tclk128
| ~tve_csr[0] & tve_csr[6] & ~tve_csr[5] & tve_tclk128 & (tve_div[1:0] == 2'b11)
| ~tve_csr[0] & ~tve_csr[6] & tve_csr[5] & tve_tclk128 & (tve_div[3:0] == 4'b1111)
| ~tve_csr[0] & tve_csr[6] & tve_csr[5] & tve_tclk128 & (tve_div[5:0] == 6'b111111)
| tve_csr[0] & tve_edge[1] & ~tve_edge[2] & (tve_pre[1:0] == 2'b11);
//
// Falling edge detector (raising for the inverted input tve_sp)
//
if (tve_tclk4)
begin
//
// Input metastability eliminator and synchronizer
//
tve_edge[0] <= tve_sp;
tve_edge[1] <= tve_edge[0];
tve_edge[2] <= tve_edge[1];
end
end
end
end

assign tve_zero = (tve_count == 16'h0000) & ~tve_csr[1];
assign tve_back = tve_csr[4] & tve_csr[1] & tve_edge[1] & ~tve_edge[2] & tve_tclk4;
assign tve_load = tve_zero & tve_tclk4 & ~tve_csr[1];
//
// Timer counter, preload/capture and control registers
//
always @(posedge tve_clk or posedge tve_reset)
begin
if (tve_reset)
begin
//
// Asynchronous timer counter and preload reset, no in original 1801VM1,
// added here to provide the comfortable simulation. The control timer
// register reset is implemented in the original chip
//
tve_csr <= 8'b00000000;
tve_count <= 16'h0000;
tve_limit <= 16'h0000;
tve_intrq <= 2'b00;
end
else
begin
if (tve_ena)
begin
//
// Interrupt flags
//
if (tve_csr[2] & (tve_zero | tve_back))
tve_intrq[0] <= 1'b1;

if (~(tve_csr[2] & (tve_zero | tve_back)))
tve_intrq[1] <= tve_intrq[0];

//
// Timer control register
//
// csr[0] - selects external clock source
// csr[1] - selects capture mode
// csr[2] - enables interrupt request
// csr[3] - selects one-shot mode
// csr[4] - timer count enable
// csr[5] - 1/16 divider enable
// csr[6] - 1/4 divider enable
// csr[7] - interrupt overflow flag
//
if (tve_csr_wr)
//
// The prioritized CSR write from bus
//
tve_csr <= tve_din[7:0];
else
begin
if (tve_zero & tve_csr[3])
//
// Reset the RUN bit in one-shot mode
//
tve_csr[4] <= 1'b0;

if (tve_intrq[1] & tve_csr[2] & (tve_zero | tve_back))
//
// Set the interrupt overflow flag if enabled
//
tve_csr[7] <= 1'b1;
end

//
// Timer preload and capture value register
//
if (tve_lim_wr)
//
// The prioritized register write from bus
//
tve_limit <= tve_din;
else
if (tve_back)
//
// Capture the current counter value
//
tve_limit <= tve_count;

//
// Decrementing counter register
//
if (tve_csr_wr | tve_load)
//
// Counter is written unconditionally at every CSR bus write
//
tve_count <= tve_limit;
else
if (tve_tclk & tve_csr[4])
//
// Count selected clock events if enabled
//
tve_count <= tve_count - 16'h0001;
end
end
end
endmodule

По результатам тестирования заполнил главу про таймер
Документация 1.0b (http://sderni.ru/254715)

Дальше конвертирую маленькую ПЛМ контроллера прерываний и буду смотреть начальный старт, там он крепко с многопроцессорностью связан.

Titus
20.12.2014, 03:34
Встроенный таймер К1801ВМ1 является рудиментарными остатками таймера однокристального
микроконтроллера К1801ВЕ1, заводское тестирование схемы таймера не проводится и около 30 процентов
процессоров имеют неработающий таймер.

Откуда известно, что заводское тестирование не производится, и что 30 процентов брака?

---------- Post added at 03:24 ---------- Previous post was at 03:18 ----------


Расшифровал схемы портов в 1515ХМ2-001:

Они 3-х типов:

1) Вход прямой + инверсный
2) Вход прямой + инверсный + выход с открытым коллектором
3) Вход прямой + инверсный + выход с открытым коллектором + открытым эмиттером

Vslav
20.12.2014, 09:33
Откуда известно, что заводское тестирование не производится, и что 30 процентов брака?

Ну то что таймеры встречаются нерабочие это как бы широко известно. А так да, достоверно что и как там тестируют неизвестно, фраза некорректная, исправлю. ТУ и дополнений к ним на ВМ1 полностью нету открытых, к сожалению.



Откуда известно, что заводское тестирование не
3) Вход прямой + инверсный + выход с открытым коллектором + открытым эмиттером

Хм, открытытй эмиттер? Может быть просто двунаправленный, с переводом выхода высокоимпедансное состояние?

bigral
20.12.2014, 12:00
Хм, открытытй эмиттер? Может быть просто двунаправленный, с переводом выхода высокоимпедансное состояние?

Откуда эмиттер? Тут же вроди как не TTL а КМОП. Или там реально биполярные транзисторы стоят? Кстати как выглядят биполярные транзисторы на кристалле по сравнению с МОП (по идее достаточно на подложке влепить 3 "бассейна" дифузии один поверх другого)? И как сделать это высокоимпедансное состояние (это ж вроди как 100% изоляция выхода)?

CodeMaster
20.12.2014, 12:17
Откуда эмиттер?

А откуда коллектор?

Vslav
20.12.2014, 13:13
Да ладно вам придираться :)

Все понимают же что микросхема КМОП и тут стоки-истоки. Название "открытый коллектор" не совсем строгое в нашем случае, но вполне применимое ИМХО.

TTL еще никакие не открывал, пока не знаю как биполярники выглядят "вживую".
Высокоипедансное состояние выхода реализуется через одновременное закрытие верхнего и нижнего транзисторов выходного ключа.

Матрицы ПЛМ в ВМ1 почему-то отключаемые от питания, интересно какой в этом глубокий смысл, снижать потребление в WAIT?

Titus
20.12.2014, 14:06
Да ладно вам придираться :)

Все понимают же что микросхема КМОП и тут стоки-истоки. Название "открытый коллектор" не совсем строгое в нашем случае, но вполне применимое ИМХО.

TTL еще никакие не открывал, пока не знаю как биполярники выглядят "вживую".
Высокоипедансное состояние выхода реализуется через одновременное закрытие верхнего и нижнего транзисторов выходного ключа.

Логическим элементом с открытым эмиттером я назвал верхний ключ в паре. Нижний я обозначил как ромбик с нижним подчеркиванием, а верхний, как ромбик с верхним подчеркиванием.

---------- Post added at 15:06 ---------- Previous post was at 14:46 ----------

Вот как я обозначил двунаправленный порт с открытым коллектором:

http://s009.radikal.ru/i309/1412/84/aa4765d7e9bf.png

Вопрос: как мне ножке порта присвоить еще и название (скажем, Y1), и чтобы это не просто текст, который я могу написать рядом с ножкой, а текст привязанный к этой ножке, чтобы перемещая ножку по схеме, он таскался с нею)

Patron
20.12.2014, 14:28
Перенес на верилог и потестировал модуль таймераУ тестировавшегося мною ВЕ-таймера была такая особенность, что при счёте в режиме автоматической перезагрузки счётчика - в течении 5 тактов в регистре 177710 мог быть прочитан ноль.

В результате такой код ( фрагмент теста VM1VE6.MAC (http://zx-pk.ru/attachment.php?attachmentid=24927) ):



Mov #2, @#177706
Mov #177710, R5

MTPS #340

Mov SP, $SP
Mov #20, @#177712 ; Start VE-timer

Mov (R5), R0
Mov (R5), R1
Mov (R5), R2
Mov (R5), R3
Mov (R5), R4
Mov (R5), SP
Mov (R5), R5

Mov SP, $Res5
Mov $SP, SP

Mov R0, $Res0
Mov R1, $Res1
Mov R2, $Res2
Mov R3, $Res3
Mov R4, $Res4
Mov R5, $Res6

Mov #0, @#177712
MTPS #0



Давал такой результат:

Test 2
------
1 1 2 2 2 2 2
1 1 0 2 2 2 2
1 0 2 2 2 2 1
2 2 2 2 2 1 1
1 1 2 2 2 2 2
2 2 2 1 1 1 1
2 2 2 2 2 1 1
2 2 2 1 1 1 1
1 1 1 1 1 2 2
1 1 1 1 1 2 2
1 1 1 1 1 2 2
1 1 1 1 2 2 2
1 1 1 1 2 2 2
0 2 2 2 2 1 1
1 1 2 2 2 2 1
2 1 1 1 1 1 2
2 2 2 2 1 1 1
2 2 1 1 1 1 1
1 1 1 1 2 2 2
2 1 1 1 1 1 2
1 0 2 2 2 2 1
2 2 2 2 2 1 1
1 2 2 2 2 2 1
2 2 2 1 1 1 1

Vslav
20.12.2014, 15:29
Вопрос: как мне ножке порта присвоить еще и название (скажем, Y1)

Это аттрибут PinName, когда создаете компонент надо его ввести и поставить галочку чтобы оно было видимым. На самой схеме можно отметить только ножку компонента, ПКМ->Properties и управлять видимостью имени вывода на конкретном экземпляре компонента.


У тестировавшегося мною ВЕ-таймера была такая особенность, что при счёте в режиме автоматической перезагрузки счётчика - в течении 5 тактов в регистре 177710 мог быть прочитан ноль.

Угу, есть такое, на модели воспроизводится. Только не 5 тактов, а 4. 5 там никак не может быть, потому что блок таймера тактируется частотой CLC/4, чистая CLC на него нигде не заводится.

Patron
20.12.2014, 15:41
Только не 5 тактов, а 4.
5 там никак не может быть, потому что блок таймера тактируется частотой CLC/4, чистая CLC на него нигде не заводится.Возможно, какие-то задержки роль играют. Я чисто визуально подбирал количество тактов, при котором частота появления нулей при прогоне теста в эмуляторе совпадает с прогоном на реальном таймере.

Vslav
20.12.2014, 15:51
Возможно, какие-то задержки роль играют. Я чисто визуально подбирал количество тактов, при котором частота появления нулей при прогоне теста в эмуляторе совпадает с прогоном на реальном таймере.
Я видел эти 5 тактов по результатам Ваших исследований ранее, поэтому этот момент на модели тщательно проверял и обдумывал где там может лишний такт набежать. В самой схеме таймера - никак, это изолированный тактовый домен CLC/4, может где-то снаружи в схеме сопряжения с шиной, но ей все равно, другие значения тоже на такт "дрожали" бы. В итоге я надеюсь мы Ваш тест прогоним полностью на получившейся реплике и увидим, будет расхождение с реальным ВМ1 или нет.

Update: кстати работу счетчика легко проверить и без программы на реальном ВМ1. Запускаем ВМ1, он запускает таймер, забираем у ВМ1 шину через DMR, запускаем цикл чтения из регистра таймера внешним агентом, цикл не заканчиваем и на nAD0 осциллографом наблюдаем поведение младшего разряда счетчика таймера. Будет у меня рабочий стенд ВМ1 + FPGA - проверю.

Patron
20.12.2014, 16:01
увидим, будет расхождение с реальным ВМ1 или нет.Частота появления нулей в результатах теста напрямую зависит от числа тактов в каждой команде рабочего цикла теста. Вполне может быть, что 5 тактов потребовались в моём эмуляторе для того, чтобы скомпенсировать неправильное число тактов в эмуляции выполнения команд теста.

Vslav
21.12.2014, 09:37
Матрица приоритетного шифратора прерываний основное время отключена от питания, все линии разряжены. При исполнении команды, в фазе проверки наличия запроса на прерывание от основной ПЛМ формируется строб, по этому стробу матрица шифратора "просыпается", фиксирует входные запросы, прогоняет их через себя, фиксирует результаты в выходном латче, возвращает ответный строб готовности и снова отключается. "Зеленые" технологии :). Основная ПЛМ тоже с каким-то хитрым отключением о питания, пока не разобрался.

Входные запросы прерываний ACLO, IRQ1, IRQ2, IRQ3, VIRQ фиксируются на входе шифратора с использованием не нормального триггера, а динамической логики, через емкость затвора транзистора. Фиксация происходит по ниспадающему фронту CLC, поэтому, если "не повезет" и в этот момент будет изменятся уровень входных линий, то транзистор может оказаться в промежуточном состоянии, получим пороговые и переходные процессы на шифраторе и непредсказуемый результат на выходе. В связи с этим рекомендуется все внешние входы IRQ1-3, VIRQ синхронизировать на внешней микросхеме по фронту CLC. В БК все засинхронизировано, на MC1201.01 - не все, по IRQ1 (HALT), IRQ3 и ACLO могут быть проблемы. События редкие, вероятность очень невысокая, но тем не менее.

Update: ответный строб формируется сразу оказывается. Картинка со схемой:
http://s017.radikal.ru/i414/1412/fb/5f5847efb36bt.jpg (http://s017.radikal.ru/i414/1412/fb/5f5847efb36b.png)

RESET - сброс процессорного модуля
REQ - запрос на работу шифратора
ACK - ответный строб
ENA - высокий - постоянная трансляция во входном латче запросов на прерывание, матрица выключена, низкий - латч фиксирует входы, матрица частично разрешается
STB - высокий - матрица полностью разрешена, выходной латч разрешен, низкий - латч фиксирует выходы

Vslav
22.12.2014, 01:32
Разобрал генератор векторов прерываний, долго искал что такое 270 вектор, оказывается в книжке "МикроЭВМ, Том 2" опечатка, и IRQ3 прерывается по 270 вектору (а написано 274). Ниже фрагмент всех векторов, которые вообще есть у процессора в таблице и по которым он может "ходить".
Дальше буду разбирать генератор констант.


always
begin
case(vsel)
4'b0000: vmux = 16'o160006; // double error
4'b0001: vmux = 16'o000020; // IOT instruction
4'b0010: vmux = 16'o000010; // reserved opcode
4'b0011: vmux = 16'o000014; // T-bit trap
4'b0100: vmux = 16'o000004; // invalid opcode
4'b0101: //
case (pa[1:0]) // initial start
2'b00: vmux = 16'o177716; // register base
2'b01: vmux = 16'o177736; // depends on
2'b10: vmux = 16'o177756; // processor number
2'b10: vmux = 16'o177776; //
endcase //
4'b0110: vmux = 16'o000030; // EMT instruction
4'b0111: vmux = 16'o160012; // int ack timeout
4'b1000: vmux = 16'o000270; // IRQ3 falling edge
4'b1001: vmux = 16'o000024; // ACLO falling edge
4'b1010: vmux = 16'o000100; // IRQ2 falling edge
4'b1011: vmux = 16'o160002; // IRQ1 low level/HALT
4'b1100: vmux = 16'o000034; // TRAP instruction
4'b1101: vmux = vreg; // vector register
4'b1110: vmux = svec; // start @177704*
4'b1111: vmux = 16'o000000; // unused vector
default: vmux = 16'o000000; //
endcase
end

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

Titus
22.12.2014, 03:47
Это аттрибут PinName, когда создаете компонент надо его ввести и поставить галочку чтобы оно было видимым. На самой схеме можно отметить только ножку компонента, ПКМ->Properties и управлять видимостью имени вывода на конкретном экземпляре компонента.

Это элемент под названием Port, у него нет в свойствах PinName.

Vslav
22.12.2014, 09:22
Это элемент под названием Port, у него нет в свойствах PinName.
Тогда отметить цепь к которой он подключен, ПКМ->Properties->Net и там ввести нужное имя. Но порт отображает имя всей цеи, если подключите к ней еще порты - то будет то же самое имя. Более того, все фрагменты цепей с одинаковым именем считаются электрически единой цепью.
Если такая функциональность не нужна, то лучше нарисовать компонент с прямоугольником и одним пином без имени и менять у всего компонента аттрибут Value, я так на схемах с ВП1/ВМ1 делаю для внешних пинов, потому что цепи с такими именами могут быть внутри схемы, обзывать коротенький фрагмент от пина до буфера осмысленным полезным именем жалко.

Titus
22.12.2014, 13:12
Тогда отметить цепь к которой он подключен, ПКМ->Properties->Net и там ввести нужное имя. Но порт отображает имя всей цеи, если подключите к ней еще порты - то будет то же самое имя. Более того, все фрагменты цепей с одинаковым именем считаются электрически единой цепью.

Это я все понимаю. И имя Net у меня есть, оно отображается на самом ромбике порта. А мне нужно еще ВТОРОЕ имя, которое будет над ромбиком отображаться. (т.е., например, порт P41 (41 ножка микросхемы значит), а над ней выше пояснение Y1 (т.е. первая линия шины для клавиатуры)).

Vslav
22.12.2014, 14:21
А мне нужно еще ВТОРОЕ имя, которое будет над ромбиком отображаться.

Порт имеет только аттрибут Net Name и все.
Для Ваших целей можно
- использовать только имя порта/цепи
- поставить компонент и использовать его аттрибут value
- просто написать дополнительный текст (не будет привязан, отдельный объект)

Я для обозначения пина ставил компонент вместо порта и использовал Value. На схемах ВП1 этот компонент заменял всю ячейку ввода-вывода, на ВМ1/ВМ80 представлял только пин.

Vslav
22.12.2014, 19:12
Красиво разложился приоритетный шифратор прерываний, это вот там маленькая матричка в правом нижнем углу на нашей фотографии кристалла.
На его работу существенно влияет бит 2 регистра режима (177700), я этот бит назвал ncpu, вот так работает шифратор штатно, при ncpu=0:


//__________________________________________________ ____________________________
//
// ncpu = 0, simplified matrix to demostrate priority encoding
//
// iato & qbto;
// & ~iato & qbto & dble;
// psw[11] & ~iato & qbto & ~dble ;
// psw[10] & ~iato & qbto & ~dble;
// ~psw[11] & ~psw[10] & ~iato & qbto & ~dble;
//
// ~qbto & uerr;
// ~psw[10] & psw[4] & ~qbto & ~uerr;
// ~psw[10] & ~psw[4] & ~qbto & ~uerr & aclo;
// ~psw[11] & ~psw[10] & ~psw[4] & ~qbto & ~uerr & ~aclo & irq[1];
// ~psw[10] & ~psw[4] & ~qbto & ~uerr & ~aclo & ~psw[7] & ~irq[1] & irq[2];
// ~psw[10] & ~psw[4] & ~qbto & ~uerr & ~aclo & ~psw[7] & ~irq[1] & ~irq[2] & irq[3];
// ~psw[10] & ~psw[4] & ~qbto & ~uerr & ~aclo & ~psw[7] & ~irq[1] & ~irq[2] & ~irq[3] & ~virq;
//

Строчки я расписал от наивысшего приоритета к низшему:
- тайм-аут по извлечению вектора прерывания (немаскируемое)
- двойное зависание (немаскируемое)
- зависание шины, (psw[11] и psw[10] как-то управляют реакцией на прерывание)
- недопустимый код инструкции (немаскируемое)
- T-бит (psw[4]) (маскируется psw[10])
- понижение питания nACLO (маскируется psw[10])
- irq[1] (маскируется psw[10] или psw[11])
- irq[2] (маскируется psw[10] или psw[7])
- irq[3] (маскируется psw[10] или psw[7])
- virq (маскируется psw[10] или psw[7]) (низкий уровень активный)

С детектором фронта ACLO тоже понятно, это перезапуск процессора после снятия DCLO. То есть ACLO должен сниматься строго после DCLO, иначе никакого старта не будет.

А вот при ncpu = 1 модифицируется поведение T-бита, он перестает работать как бит ловушки, вместо этого он как-то начинает влиять на внешние прерывания, пока ясности нет. (Позже выяснилось что это бит режима wait)

Вот полная матрица, может у кого мысли будут:


//__________________________________________________ ____________________________
//
// Interrupt matrix rewritten (for clarity and readability)
//
module vm1_pli
(
input [19:0] rq,
output [10:0] sp
);
wire [20:0] p;
wire [10:0] pl;
wire [3:1] irq;
wire [11:0] psw;
wire virq;
wire plir, uerr;
wire ncpu, dble;
wire acok, aclo; // ACLO detector requests
wire iato, qbto; // qbus timeouts and odd address

assign psw[10] = rq[0];
assign plir = rq[1];
assign psw[11] = rq[2];
assign uerr = rq[3];
assign psw[7] = rq[4];
assign virq = rq[8]; // low active level
assign qbto = rq[9];
assign dble = rq[10];
assign aclo = rq[11];
assign ncpu = rq[12]; // low active level
assign acok = rq[13];
assign irq[1] = rq[14];
assign psw[4] = rq[15];
assign irq[2] = rq[16];
assign iato = rq[17];
assign irq[3] = rq[18];

function cmp
(
input [19:0] i,
input [19:0] c,
input [19:0] m
);
cmp = &(~(i ^ c) | m);
endfunction

//__________________________________________________ ____________________________
//
// ncpu = 0, simplified matrix to demostrate priority encoding
//
// iato & qbto;
// & ~iato & qbto & dble;
// psw[11] & ~iato & qbto & ~dble ;
// & psw[10] & ~iato & qbto & ~dble;
// ~psw[11] & ~psw[10] & ~iato & qbto & ~dble;
//
// ~qbto & uerr;
// ~psw[10] & psw[4] & ~qbto & ~uerr;
// ~psw[10] & ~psw[4] & ~qbto & ~uerr & aclo;
// ~psw[11] & ~psw[10] & ~psw[4] & ~qbto & ~uerr & ~aclo & irq[1];
// ~psw[10] & ~psw[4] & ~qbto & ~uerr & ~aclo & ~psw[7] & ~irq[1] & irq[2];
// ~psw[10] & ~psw[4] & ~qbto & ~uerr & ~aclo & ~psw[7] & ~irq[1] & ~irq[2] & irq[3];
// ~psw[10] & ~psw[4] & ~qbto & ~uerr & ~aclo & ~psw[7] & ~irq[1] & ~irq[2] & ~irq[3] & ~virq;
//
assign p[0] = plir & ~qbto & ~aclo & ~uerr & ncpu & ~irq[1] & ~irq[2] & ~irq[3] & virq;
assign p[10] = plir & ~psw[10] & ~qbto & ~aclo & ~uerr & ncpu & ~irq[1];
assign p[3] = plir & ~psw[11] & ~psw[10] & psw[4] & ~qbto & ~aclo & ~uerr & ncpu & irq[1];
assign p[2] = plir & ~psw[11] & ~psw[10] & ~psw[4] & ~qbto & ~aclo & ~uerr & irq[1];
assign p[1] = plir & ~psw[10] & ~qbto & ~aclo & ~uerr & ncpu & ~psw[7] & ~irq[1] & irq[2];
assign p[7] = plir & ~psw[10] & ~psw[4] & ~qbto & ~aclo & ~uerr & ~psw[7] & ~irq[1] & irq[2];
assign p[6] = plir & ~psw[10] & psw[4] & ~qbto & ~aclo & ~uerr & ncpu & ~psw[7] & ~irq[1] & ~irq[2] & irq[3];
assign p[9] = plir & ~psw[10] & ~psw[4] & ~qbto & ~aclo & ~uerr & ~psw[7] & ~irq[1] & ~irq[2] & irq[3];
assign p[4] = plir & ~psw[10] & psw[4] & ~qbto & ~aclo & ~uerr & ncpu & ~psw[7] & ~irq[1] & ~irq[2] & ~irq[3] & ~virq;
assign p[5] = plir & ~psw[10] & ~psw[4] & ~qbto & ~aclo & ~uerr & ~psw[7] & ~irq[1] & ~irq[2] & ~irq[3] & ~virq;
assign p[11] = plir & ~psw[10] & ~psw[4] & ~qbto & aclo & ~uerr;
assign p[12] = plir & ~psw[10] & psw[4] & ~qbto & ~uerr & ~ncpu ;
assign p[13] = plir & ~psw[10] & psw[4] & ~qbto & aclo & ~uerr & ncpu ;
assign p[20] = plir & ~psw[11] & ~psw[10] & ~iato & qbto & ~dble;
assign p[14] = plir & psw[11] & ~iato & qbto & ~dble ;
assign p[18] = plir & psw[10] & ~iato & qbto & ~dble;
assign p[19] = plir & ~iato & qbto & dble;
assign p[16] = plir & iato & qbto;
assign p[15] = plir & uerr & ~qbto;
assign p[8] = ~plir & ~acok;
assign p[17] = ~plir & acok;

assign sp = ~pl;
assign pl[0] = p[20] | p[19] | p[15] | p[9] | p[7] | p[6] | p[1]; // 20, 19, 17, 16, 15, 13,
assign pl[1] = p[20] | p[19] | p[17] | p[13] | p[11] | p[9] | p[6]; // 12, 11, 9, 7, 6, 5, 4, 1
assign pl[2] = p[20] | p[17] | p[16] | p[5] | p[4];
assign pl[3] = p[20] | p[19] | p[17] | p[16] | p[15] | p[12];
assign pl[4] = p[8];
assign pl[5] = p[20] | p[17] | p[15] | p[13] | p[12] | p[11] | p[9] | p[7] | p[6] | p[5] | p[4] | p[1];
assign pl[6] = p[20] | p[19] | p[18] | p[16] | p[15] | p[14] | p[12] | p[10] | p[9] | p[7] | p[5];
assign pl[7] = p[19] | p[18] | p[17] | p[16] | p[14] | p[3] | p[2];
assign pl[8] = p[20] | p[19] | p[18] | p[17] | p[16] | p[15] | p[14] | p[13] | p[11] | p[9] | p[6];
assign pl[9] = p[14] | p[13] | p[12] | p[11] | p[10] | p[9] | p[8] | p[7] | p[5] | p[3] | p[2] | p[0];
assign pl[10] = p[20] | p[19] | p[18] | p[17] | p[16] | p[15] | p[14] | p[13] | p[12] | p[11] | p[5] | p[4];
endmodule

Такое в Сети нашел:


177700
Чтение всегда 177740
Запись
биты 0,1 - "1" в любой разряд - останов процессора
бит 2 - запись "1" приостанавливает процессор в ожидании любого прерывания (аналогично команде wait)

Добавлю от себя что в битах 4 и 3 читается номер процессора (00 для главного, 01/10/11 для ведомого). Да, этот ncpu очень даже на wait похож. Может устанавливаться по сигналу из ядра, надо будет проследить его связь с исполнением инструкции wait. Значит бит T после wait не генерирует исключение, прерывания, если они были замаскированы T-битом, в состоянии wait разрешаются, все логично.

Случайность
24.12.2014, 20:38
хотелось бы уточнить как соденить между собой 4 штуки 1801ВМ1,

примерно вот так?

http://storage.datagrad.ru/download/947072
или как то иначе?

Vslav
24.12.2014, 23:40
хотелось бы уточнить как соденить между собой 4 штуки 1801ВМ1,
примерно вот так?

"Доктор, а откуда у Вас такие интересные картинки?" (с) :)
Да, примерно так. Прерывания VIRQ обрабатывает только процессор с номером 0 (верхний на схеме), поэтому только его IAKO надо взять, если векторные прерывания будут добавлены.

Случайность
24.12.2014, 23:48
этой картинке года два. заброшен был интерес из за того что нет монитора который бы рулил 4 процессорами.
просто был спросил а как примерно соеденить ВМ1 с другими. ну и по обяснениям получилась эта схема.

но в нейполюбому куча косяков. ведь кто знает как они должны объединяться по настоящему.

Titus
26.12.2014, 04:03
Наконец-то мне встретился D-триггер, тактируемый фронтом тактового импульса. Он один из самых навороченных элементов на схеме (причем, не имеет входа R, имеет только вход S):


http://s017.radikal.ru/i405/1412/9a/c7c4181091d2.png


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

http://s019.radikal.ru/i637/1412/99/d30c8a38765f.png

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

---------- Post added at 05:03 ---------- Previous post was at 04:56 ----------

Интересно, что инвертор и элемент ИЛИ-НЕ у этого триггера выполнены в виде одной логической ячейки, но с явным превышением нужного числа транзисторов, причем пара из них вообще посажена принудительно на Vdd. Итого, вместо 6 транзисторов, они потратили на этот элемент целых десять штук. Зачем - не понятно.

http://i077.radikal.ru/1412/46/bf7c43bca012.png

Vslav
27.12.2014, 00:06
Логика работы его такая:
Ноль удерживает как обычный триггер, а единицу удерживает только один такт, потом сбрасывает в ноль.

Одновибратор запускаемый фронтом, встречается, но в виде ячейки еще не попадался :)

А я забрал отдекапленный 1801ВМ1Г.
http://s14.radikal.ru/i187/1412/95/601fcc011369t.jpg (http://s14.radikal.ru/i187/1412/95/601fcc011369.jpg)
На первый взгляд процессор абсолютно такой же. Разумееется, никакого нового блока аппаратного умножения нет - он относительно большой, был бы заметен сразу. Но, микрокод отличается, в ВМ1А было два свободных столбца произведения (P0 и P1, которые отсутствуют на схеме ВМ1А), сейчас вроде бы видно что один из них точно используется. Что говорит в пользу версии, что была сделана модификация микрокода. Также возможно что реализовано не полноценное умножение, а вероятно просто какое-то отдельное исключение (прерывани/ловушка) по MUL. Но без полного анализа микрокода или хотя бы теста на живом ВМ1Г утверждать нельзя.

Titus
27.12.2014, 00:38
Но, микрокод отличается, в ВМ1А было два свободных столбца произведения (P0 и P1, которые отсутствуют на схеме ВМ1А), сейчас вроде бы видно что один из них точно используется. Что говорит в пользу версии, что была сделана модификация микрокода. Также возможно что реализовано не полноценное умножение, а вероятно просто какое-то отдельное исключение (прерывани/ловушка) по MUL. Но без полного анализа микрокода или хотя бы теста на живом ВМ1Г утверждать нельзя.

Ну уж микрокод снять легче, чем реверсить весь проц. Будет два микрокода ВМ1 и ВМ1Г.

Vslav
27.12.2014, 01:31
Ну уж микрокод снять легче, чем реверсить весь проц. Будет два микрокода ВМ1 и ВМ1Г.
Ну, блин, тут хотя бы с одним микрокодом разобраться :)
Пока ВМ1Г отложил в сторонку. Пишу модель ВМ1А, с одного захода сразу код для FPGA (как было с ВМ80А) у меня осилить не получилось. Поэтому для первой итерации будет чисто несинтезируемая модель с латчами, там будет ясность с микрокодом - без моделирования, только в уме и с карандашиком не получается, потом допиливание до FPGA c флип-флопами. Ну и потом только, если силы останутся :), отшлифую ВМ1Г. Щаз я на него как баран на новые ворота смотреть все равно буду - наработок по микрокоду пока нет.

Titus
27.12.2014, 01:41
Ну, блин, тут хотя бы с одним микрокодом разобраться :)
Пока ВМ1Г отложил в сторонку. Пишу модель ВМ1А, с одного захода сразу код для FPGA (как было с ВМ80А) у меня осилить не получилось.

Главное не забывать, что некоторые заинтересованные люди не понимают модели в Верилоге, и необходимо иметь и логическую схему процессора)

Vslav
27.12.2014, 01:52
Главное не забывать, что некоторые заинтересованные люди не понимают модели в Верилоге, и необходимо иметь и логическую схему процессора)
Да мне будет в сто раз проще заинтересовать этих "заинтересованных людей" верилогом, чем логическую схему нарисовать :biggrin:
С реверсом же получилось, значит и на верилог шансы есть :biggrin:

Titus
27.12.2014, 01:54
Да мне будет в сто раз проще заинтересовать этих "заинтересованных людей" верилогом, чем логическую схему нарисовать :biggrin:
С реверсом же получилось, значит и на верилог шансы есть :biggrin:

Меня не заинтересуешь никак.

Я, как программист, который должен ВИЗУАЛЬНО видеть все входы и выходы законченных логических блоков, не могу этого сделать глядя на верилог, т.к. это в некотором смысле просто описание, рассказ, но не блок-схема.

Поэтому и реверс, скажем, той же хм2-001 я делаю именно в виде логических элементов.

Случайность
27.12.2014, 01:57
в любом случае уже ясно что ВМ1 и ВМ1Г это разные процессоры.

и никогда ВМ1 не будет выполнять MUL как ВМ1Г

Vslav
27.12.2014, 02:13
Я, как программист, который должен ВИЗУАЛЬНО видеть все входы и выходы законченных логических блоков, не могу этого сделать глядя на верилог, т.к. это в некотором смысле просто описание, рассказ, но не блок-схема.

Верилог это следующий уровень абстракции. Тут надо просто "просечь фишку" и дальше все пойдет. Далеко не все сложные проекты уже можно описать подробной блок-схемой, вернее, можно, но он будет очень большая, ее не то что нарисовать, ее просто прочитать и вникнуть будет сложно. Ну это примерно как написать Windows 7 целиком на ассемблере.
Вот ВМ1 уже к этой границе сложности подходит (не Windows 7, а описательности мелкой логикой). Посмотрите схему ВМ2 в ТО, там нарисована практически мелкая логика, но "въезжается" трудно. Простую блок-схему процессора из крупных блоков нарисовать-то не вопрос, но их и так в Сети полно. А вот подробную, хотя бы уровня элементов стандартной логики серии 74xxx - это уже может потребовать больше времени и работы чем составление по-транзисторной. Ну, посмотрим что там у HardWareMan со схемой ВМ80А выйдет, он больше сможет рассказать по результатам.



Поэтому и реверс, скажем, той же хм2-001 я делаю именно в виде логических элементов.

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

Titus
27.12.2014, 02:18
Вот ВМ1 уже к этой границе сложности подходит (не Windows 7, а описательности мелкой логикой). Посмотрите схему ВМ2 в ТО, там нарисована практически мелкая логика, но "въезжается" трудно. Простую блок-схему процессора из крупных блоков нарисовать-то не вопрос, но их и так в Сети полно. А вот подробную, хотя бы уровня элементов стандартной логики серии 74xxx - это уже может потребовать больше времени и работы чем составление по-транзисторной. Ну, посмотрим что там у HardWareMan со схемой ВМ80А выйдет, он больше сможет рассказать по результатам.

Блок-схемы, которых в сети полно - никак не катят, т.к. они ПРИМЕРНЫЕ, а не ТОЧНЫЕ. ТО на ВМ2 я разумеется видел) Мелкую логику надо собирать в большую (регистры, счетчики и т.д.), таким образом, организуется ПОДРОБНАЯ, но логическая схема, по которой все видно, что на входе, что на выходе, и с чем взаимосвязано. И все это видно сразу же, тогда как в верилоге нет. Верилоги хороши для зашивки логики работы в ПЛИСЫ, но никак не для визуализирования всего образа вцелом.

Titus
27.12.2014, 06:01
ХМ2-001 (1000 ведер из 10000) в формате P-CAD 2004 (http://sderni.ru/255512)

Еще 9000 ведер воды, и золотой ключик у нас в кармане)

---------- Post added at 05:58 ---------- Previous post was at 05:18 ----------

Очень часто встречается вот такая конструкция:

http://s017.radikal.ru/i408/1412/11/bbd44a8e898a.png

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

---------- Post added at 07:01 ---------- Previous post was at 05:58 ----------

Вопрос по P-CAD - как сделать так, чтобы соединительные линии при перемещении прилепленных к ним компонентов не изменяли углы наклона?

Vslav
27.12.2014, 11:30
Блок-схемы, которых в сети полно - никак не катят, т.к. они ПРИМЕРНЫЕ, а не ТОЧНЫЕ. ТО на ВМ2 я разумеется видел)
Угу, вот точная "блок-схема" ВМ2 отлично мою мысль иллюстрирует - все точно, все подробности есть, а целой картины не видно абсолютно - превышены среднечеловеческие возможности по абстрагированию. Поэтому и появляются крупные "неточные" блок-схемы. Поэтому и появилось объектно-ориентированное программирование, и появился Верилог - сложные проекты потребовали развития соответствующих инструментов. Программу, написанную на C++, можно дизассемблировать, схему, синтезированную с Верилога, можно разобрать на транзисторы, но все равно по мере реверса придется прийти на самый верхний уровень абстракции проекта, собственно это и является целью реверса.



взаимосвязано. И все это видно сразу же, тогда как в верилоге нет.

OK, пример. ПЛМ-ка от ВМ1. Вот у меня строчка:


assign p[36] = cmp({ir, mr}, {16'b0000000000000101, 15'b001xxxxx11111x0});

Это означает что сигнал p[36] примет единичное значение если регистр инструкции будет содержать код 5 (опкод RESET), а регистр микроадреса 176 или 174. подрегистр прерывания -1, остальное в игноре. Изобразить такое схемно - понадобится несколько инверторов, два больших 15-ти и 16-ти-входовых И. Потом еще мучительно по схеме считать разряды - а куда же там цепь приходит. Если рисовать такое на обычных 2-входовых И - вообще макароны будут. И это только один терм, с номером 36, а таких там 250. А потом они еще в суммы складываются, слагаемых так по 50-100 штук. На один листик схема не поместится, придется скакать по кучке из нескольких. Очень "удобно" по сравнению с одной строчкой, ага.

"И чего только люди не придумают, лишь бы Верилог не учить на картошку не ехать" (c) :biggrin:

Я как бы ничего не имею против схемного представления, но для сложных проектов оно очевидно не работает, это написание Windows 7 на ассемблере - можно, но на такой работе даже рабы долго не выдерживают :biggrin:



Вопрос по P-CAD - как сделать так, чтобы соединительные линии при перемещении прилепленных к ним компонентов не изменяли углы наклона?

Увы, этого P-CAD не умеет, или, по-крайней мере, я об этом не знаю.

Посмотрел Вашу схему ХМ-ки, ох и сложный Вы путь выбрали. Получается ручное перерисовывание топологии в схему, а потом ее еще не меньше (а может быть и больше, у меня на ВП1 это занимает 80-90 процентов времени реверса) труда будет переводить в осмысленный вид :(

Вот посмотрите, моя текущая схемка для ВП1-119 (http://sderni.ru/255524). Вот в таком виде автоматически получается после трансляции ECO (уже над ней немного помедитировал, часть "причесана" в "человеческий вид"). Все цепи поименованы и оторваны, завязаны на отдельные автоматически созданные порты. В этом случае очень легко взять и переместить компонент вместе с его связями. И даже при таком подходе "причесывание" и осмысление занимает основное время проекта. Для Вашей схемы это будет намного сложнее, придется делать много ненужных телодвижений по отвязыванию-перемещению-коррекции, трудоемкость растет в разы, не говоря уже о риске ошибок.

И еще момент - при использовании CAD-ов (разных, не только P-CAD и не только печатные платы) иногда бывает такое, что при неоптимально выбранном маршруте, проект заходит в тупик - для движения дальше нужно очень много, неподъемный объем, ручного труда, поэтому надо очень аккуратно к этому (выбору маршрута) подходить. Ваша схема у меня вызвала некоторую интуитивную тревогу - труд огромный и тяжелый, но есть шансы "зайти в тупик", будет обидно очень. Остается надеяться что в случае проблем вместе как-то победим.

Patron
27.12.2014, 12:19
схему, синтезированную с Верилога, можно разобрать на транзисторыНа транзисторы можно разобрать и схему, синтезированную с программы на C++, просто результат такого синтеза будет ещё меньше похож на оригинальную микросхему.

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

Titus
27.12.2014, 15:33
OK, пример. ПЛМ-ка от ВМ1. Вот у меня строчка:


А вот это как раз и не надо в виде блок схемы. Верхнее, на блок схеме должен быть квадрат со входами и выходами, а в отдельном файле таблица с микрокодом.

---------- Post added at 15:23 ---------- Previous post was at 15:21 ----------



Посмотрел Вашу схему ХМ-ки, ох и сложный Вы путь выбрали. Получается ручное перерисовывание топологии в схему, а потом ее еще не меньше (а может быть и больше, у меня на ВП1 это занимает 80-90 процентов времени реверса) труда будет переводить в осмысленный вид :(

Может он и сложный, но единственный для меня интересный. Я сразу вижу, где какой логический элемент, с каким другим он соединяется, мне интересно это рисовать. А если я сперва ВСЮ схему втупую обрисую слоями металлизации, диффузии и кремния, и при этом не видя, что из этого выходит - я потеряю к подобному медитативному процессу интерес еще до первого ведра)

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

---------- Post added at 15:25 ---------- Previous post was at 15:23 ----------


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

Уж на сколько я педантичен к точности эмуляции, но аналоговая эмуляция для меня кажется совершенно бессмысленным перебором.

---------- Post added at 15:29 ---------- Previous post was at 15:25 ----------


Вот посмотрите, моя текущая схемка для ВП1-119 (http://sderni.ru/255524).

Чего-то как-то в ВП1-119 заметно меньше элементов, чем планируемое в ХМ2-001.

Да, перемещать элементы удобнее, когда они не связаны проводами, а связаны шинами. Но вместе с тем и уменьшается наглядность этих взаимосвязей.

Что это там за странная толстая полоска вертикальная на элементах? И почему у элементов дублируются входы и выходы?

---------- Post added at 15:38 ---------- Previous post was at 15:29 ----------

А вот какая функция в P-CAD пригодилась бы, так это чтобы выбрал какое-то соединение, и бац, и оно исчезло и у всех элементов заменилось на площадки в формате NET00000.

---------- Post added at 16:33 ---------- Previous post was at 15:38 ----------

Почитал в википедии про 1515ХМ1/ХМ2.


Микросхема выполнена по КМОП-технологии. Содержит около 3200 ячеек, схема соединений которых задаётся при изготовлении. Каждая ячейка соответствует двухвходовому логическому элементу. Максимальная частота 10 МГц,

Что за ерунда? В ХМ2-001, например, около 1000 ячеек (60 в столбце, всего столбцов 19, итого 1140. Если приплюсовать порты ввода вывода, то, допустим, 1200-1300 ячеек).
Далее, не только схема соединений задается при изготовлении, а все-все задается при изготовлении - выбор нужных ячеек из библиотеки, размещение их и соединение.
И еще бред, что каждая ячейка - двухвходовый логический элемент. Тоже нет. Произвольновходовый и произвольновыходовый.

Vslav
27.12.2014, 16:29
А вот это как раз и не надо в виде блок схемы. Верхнее, на блок схеме должен быть квадрат со входами и выходами, а в отдельном файле таблица с микрокодом.

Ну вот, как всегда - "тут играть, тут не играть, тут рыбу заворачивали", может проще на сольфеджио походить "читателем" верилога заделаться? :) Обогатить свой внутренний мир, так сказать :)
Зы - табличка тоже немалая выйдет. На 2 Гигаслова :). Сократить как-то можно, но у верилога она по читабельности все равно не выиграет.



Может он и сложный, но единственный для меня интересный.

Да все правильно, у нас тут форум энтузиастов, каждый сходит с ума по-своему :biggrin:, поэтому никаких дополнительных пояснений не нужно.



А если я сперва ВСЮ схему втупую обрисую слоями металлизации

"Как, Вы не любите кошек? Да Вы их просто готовить не умеете!" (c)
Уверяю Вас, это тоже достаточно медитативно-психоделический процесс :biggrin:



Уж на сколько я педантичен к точности эмуляции, но аналоговая эмуляция для меня кажется совершенно бессмысленным перебором.

Для наших с Вами БМК-ашек - да, вообще для топологий с нормами выше микрона и с частотами пару десятков МГц обычно особо моделировать нечего. А вот уже хотя бы скоростные печатные платы на Signal Integrity прогонять приходится.



Да, перемещать элементы удобнее, когда они не связаны проводами, а связаны шинами. Но вместе с тем и уменьшается наглядность этих взаимосвязей.

Не-а, вот Вашу схему можно безнапряжно смотреть только в P-CAD, вот в той вертикальной кучке отметили проводник, он подсветился и видно куда он пошел. А напечатайте в pdf, да в мелком формате, да на листик A4 - вот там уже ползать по цепям будет не слишком легко. В отличие от прочтения имени цепи. Да Вы сами по мере черпания новых "ведер воды" это все увидите.



А вот какая функция в P-CAD пригодилась бы, так это чтобы выбрал какое-то соединение, и бац, и оно исчезло и у всех элементов заменилось на площадки в формате NET00000.

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



Почитал в википедии про 1515ХМ1/ХМ2.
Что за ерунда?

Надо исправить, про ХМ2 там действительно откровенная ерунда написана, уж очень сильно оно от ХМ1 отличается. Для ХМ1 тоже неточности есть, но подождем их вскрытия.

Titus
27.12.2014, 16:36
Ну вот, как всегда - "тут играть, тут не играть, тут рыбу заворачивали", может проще на сольфеджио походить "читателем" верилога заделаться? :) Обогатить свой внутренний мир, так сказать :)
Зы - табличка тоже немалая выйдет. На 2 Гигаслова :). Сократить как-то можно, но у верилога она по читабельности все равно не выиграет.

Да какие там 2 гигаслова? Ваша текстовая описаловка микрокода очень компактная, на верилоге или на каком ином языке. Такую и оставить, и дать на нее ссылку в блок-схеме.
Кстати, в ТО на ВМ2 тоже вместо матриц с микрокодом прямоугольники. Жаль, доки с микрокодом мне не достались.

Vslav
27.12.2014, 18:01
Да какие там 2 гигаслова?

Ну 31 переменная на входе, полная таблица и будет 2 Гигаслова. Разумеется такое написать полностью нельзя и бессмысленно, поэтому будет та или иная форма сворачивания.



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

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



Кстати, в ТО на ВМ2 тоже вместо матриц с микрокодом прямоугольники. Жаль, доки с микрокодом мне не достались.

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

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

hobot
27.12.2014, 21:51
Vslav,
Titus,
Patron, и все кто желает прокоментируйте пожалуйста такой вопрос.

Я читаю вникаю и понимаю, что реверс - сложная, времязатратная процедура. Как уже сейчас можно было бы хоть какой-то задел для будущей (пускай и неполной) автоматизации процесса сделать. К примеру - библиотеку каких-то блоков и программную распознавалку-транслятор. Какую операцию легче всего (в теории) доверить программе (роботу). Можно ли прощупать содержимое не вскрывая вообще ничего и получить картинку в виде описание(схемы) на "любом языке",
ведь изучая переломы или микротрещены врачи не делают пациенту вскрытие? Материалы же использ. в МС имеют чёткие характеристики,
должен быть метод получения картинки без проникновения.

ИМХО: самый критичный этап работа с изображением, что бы не вредить
(сажать) глазики пускай робот-камера с библиотекой шаблонов работает.
В 20-40-50-100-150 проходов и верификацией. Здоровье то дороже?

Существуют ли в реальности какие-то наработки для подобных процедур?

(может грубо неточно формулирую - но суть настроение вопроса понятно).

CodeMaster
27.12.2014, 22:05
должен быть метод получения картинки без проникновения.

Рентген?


Какую операцию легче всего (в теории) доверить программе (роботу).

Спрашивал уже, "серьезные" конторы так умеют.

Vslav
27.12.2014, 23:30
Можно ли прощупать содержимое не вскрывая вообще

"Не вскрывая" - это надо какую-то ренгеновскую аппаратуру. Наверняка недешево и труднодоступно. Сейчас со вскрытием проблем больших нет, BarsMonster отработал технологию варки в кислоте, у меня на месте толковый химик практически "влет" успешно повторил. Все что я хотел - на год-два реверса мне уже успешно отдекапили. В любой момент можно договориться и повторить.



иенту вскрытие? Материалы же использ. в МС имеют чёткие характеристики, должен быть метод получения картинки без проникновения.

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



ИМХО: самый критичный этап работа с изображением, что бы не вредить
(сажать) глазики пускай робот-камера с библиотекой шаблонов работает.
В 20-40-50-100-150 проходов и верификацией. Здоровье то дороже?

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



Существуют ли в реальности какие-то наработки для подобных процедур?

Конечно существуют, есть компании которые профессионально реверсом занимаются. Цены высокие, зависит от сложности микросхемы и использованной технологии. Самая известная мне компания - Chipworks (http://www.chipworks.com/), у нее и софт свой и аппаратуры всякой валом. Там у них есть любопытный Store и ряд отчетов по реверсу/анализу и цены на это все. Собственно полные схемы как я понял не особо часто восстанавливают, в-основном, проверка соблюдения технологий, выявление нарушения патентов, выяснение причин отказов и прочее. Но это все не любительский уровень.

hobot
27.12.2014, 23:46
не любительский уровень.
Спасибо за развёрнутый ответ. Я хочу добавить в рамках беседы\общения, ведь и распознавание речи и видеообразов и синтез речи и распознавание письма (шрифтов) - совсем недавно были "не любительского уровня", а 20 лет прошло = чуть ли не бесплатно в он-лайне (я утрирую конечно).



гораздо больше времени занимает осмысление схемы и приведение ее в "человеческий вид"
Возможно ли процесс автоматизировать полностью до последнего "верхнего"
уровня, о которых Patron писал, там уже как я понимаю человек-оператор (да и
на всех этапах) -исследователь-специалист просто не заменим.
абстрактная - логическая - дискретная - аналоговая - вот всё что синим робот, зелёная-уже инженер-специалист-тополог (или все в 1). Как-то так.

Patron
27.12.2014, 23:48
Уж на сколько я педантичен к точности эмуляции, но аналоговая эмуляция для меня кажется совершенно бессмысленным перебором.Если аналоговые характеристики цифровой схемы изначально не интересны, а интересна только логика работы - нет смысла копировать не только топологию, но и вообще что угодно, кроме логической связи входов с выходами.

hobot
27.12.2014, 23:51
а цвет полезен для распознавания
Не играл бы роли если на выходе после n-проходов сразу иметь удобную к изучению
модель где распознавать уже ничего не надо. ) только осмысливать ))) <--- добавил.

Patron
27.12.2014, 23:54
вот всё что синим робот, зелёная-уже инженер-специалистНаоборот - робот довольно легко может определить аналоговые характеристики цифровой схемы по её изображению, но отобразить наблюдаемую топологию схемы в логически эквивалентный абстрактный "алгоритм работы" роботу гораздо сложнее.

hobot
27.12.2014, 23:58
Наоборот
существенно, но простим мне мои заблуждения в этом и суть порассуждать и я заодно
кое что для себя узнаю )

---------- Post added at 23:58 ---------- Previous post was at 23:56 ----------

Patron, чем определение аналоговых характеристик отличаются от испытаний на прочность\температ.режим и проч. проверку соотв. ТЗ?

Vslav
28.12.2014, 00:10
Возможно ли процесс автоматизировать полностью до последнего "верхнего"
уровня

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

Насчет любителей - есть открытый проект degate, так его энтузиасты до приемлемого безглючного уровня допилить не могут, а в нем есть элементы автоматического распознавания.

Определить по виду параметры ячейки.. Ну не знаю, тут по виду n-МОП от p-МОП практически не отличишь, только логически, по примыканию к линии питания. То есть по фотографии даже тип легирования не разобрать, не то что концентрацию, какое уж тут определение аналоговых параметров. А бывают еще всякие карманы/колодцы, которые образуют в толще подложки многослойную структуру, там вообще по одному фото "вид сверху" сказать ничего нельзя.

Patron
28.12.2014, 00:18
чем определение аналоговых характеристик отличаются от испытаний на прочность\температ.режим и проч. проверку соотв. ТЗ?Проще говоря - чем "абстрактные" аналоговые характеристки наблюдаемой топологии отличаются от конкретных физических характеристик испытуемого изделия.

Тем и отличаюся, что фотография - это уже весьма абстрактное представление и увидеть на фотографии можно только то, что на ней видно. Состав примесей в полупроводниках ( например ) на фотографии не видно.

Vslav
28.12.2014, 00:59
Прикол - у меня фронтальная линза объектива 10х была испачкана пластилином, а я на нем ВП1-055 снимал и мучался со сшитием панорамы и даже уже большУю часть по не очень хорошей фотке отреверсил. Помыл объектив изопропилом - стала красота :)

Titus
28.12.2014, 01:07
Прикол - у меня фронтальная линза объектива 10х была испачкана пластилином, а я на нем ВП1-055 снимал и мучался со сшитием панорамы и даже уже большУю часть по не очень хорошей фотке отреверсил. Помыл объектив изопропилом - стала красота :)

Нижняя часть кристалла ХМ2-001 тоже более мутная, чем верхняя. Это из-за чего? И дефектов на ней больше.

Vslav
28.12.2014, 01:33
Нижняя часть кристалла ХМ2-001 тоже более мутная, чем верхняя. Это из-за чего? И дефектов на ней больше.
Да я бы не сказал что нижняя часть менее сфокусирована, примерно вся панорама более-менее одинакова, а по дефектам - ну так вот пластик растворился/отдекапился. А может и на заводе уже так было, сложно сказать.

Titus
28.12.2014, 01:36
Да я бы не сказал что нижняя часть менее сфокусирована, примерно вся панорама более-менее одинакова

Это по общей панораме кажется, что все едино, а когда приглядываешься, видно, что четкость внизу хуже (во всяком случае в левой части).

Titus
28.12.2014, 13:09
Интересно, если УКНЦ напичкана БМК, почему было вообще не убрать всю мелкую логику схемы в эти БМК? Однако, на плате полно микросхем мелкой логики.

---------- Post added at 14:09 ---------- Previous post was at 14:07 ----------

Остался незамеченным мой вопрос по поводу схем 1801ВП1-128 и 119:


Что это там за странная толстая полоска вертикальная на элементах? И почему у элементов дублируются входы и выходы?

Raydac
28.12.2014, 13:10
попался на глаза любопытный блог чел что реверсит, мож кому будет полезно (http://www.righto.com/)

Vslav
28.12.2014, 13:18
Остался незамеченным мой вопрос по поводу схем 1801ВП1-128 и 119:

Топология у ячеек такая, металлическая траcса проходит сквозь ячейку и выходит с двух сторон на две условные ножки. Даже если использована в схеме только одна из них, вторая все равно подключена внутри ячейки. В 1515 точно так же - поликремниемые затворы пересекают ячейку насквозь и подключены к двум условным пинам. На изображении элемента я отобразил это дополнительной тонкой полоской, она означает внутриячеечное соединение.

http://i008.radikal.ru/1412/60/35a45c02fbc9t.jpg (http://i008.radikal.ru/1412/60/35a45c02fbc9.png)

CodeMaster
28.12.2014, 13:20
очему было вообще не убрать всю мелкую логику схемы в эти БМК?

И на каждую модификацию заказывать новую БМК.


Однако, на плате полно микросхем мелкой логики.

Даже в более простом ZX Spectrum она есть.

Titus
28.12.2014, 13:27
Даже в более простом ZX Spectrum она есть.

Если взять наши клоны на базе 1515 (был у меня один, забыл, как называется), так там пустота на плате - БМК, процессор, память и почти что все.

---------- Post added at 14:27 ---------- Previous post was at 14:27 ----------


Топология у ячеек такая, металлическая траcса проходит сквозь ячейку и выходит с двух сторон на две условные ножки. Даже если использована в схеме только одна из них, вторая все равно подключена внутри ячейки. В 1515 точно так же - поликремниемые затворы пересекают ячейку насквозь и подключены к двум условным пинам. На изображении элемента я отобразил это дополнительной тонкой полоской, она означает внутриячеечное соединение.

Так я и думал.
Только для простоты понимания можно было бы на финальной схеме от этого избавиться.

CodeMaster
28.12.2014, 15:02
наши клоны на базе 1515, так там пустота на плате

Схемотехника сэром Клайвом уже была отлажена ;-)

Я уверен, что если взять абстрактную УК-НЦ, то всё можно запихать в БМК как есть. Главное что бы в них не было ошибок, а то придётся опять из рассыпухи костыли лепить.

Titus
28.12.2014, 15:11
Схемотехника сэром Клайвом уже была отлажена ;-)

Но наши клоны ей не соответствовали)

Вообще, УКНЦ пример навороченной и бестолковой машины (при всей моей любви к ней). Наверное, не совру, если скажу, что индекс производительности по отношению к бестолковости у ней по сравнению с тем же Спектрумом в интервале 1:10 до 1:5.

Vamos
28.12.2014, 15:15
УКНЦ пример навороченной и бестолковой машины (при всей моей любви к ней)
Тут для многих УКНЦ первая любовь :)

Titus
28.12.2014, 16:21
Интересная, кстати идея у меня появилась (ну так, на будущее, если что) крекнуть амижные чипы. Не знаю, правда, по какой они технологии и на сколько сложны.

Vslav
28.12.2014, 17:33
Только для простоты понимания можно было бы на финальной схеме от этого избавиться.

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

hobot
28.12.2014, 20:54
Вообще, УКНЦ пример навороченной и бестолковой машины

Это если несбыточного от неё хотеть )
Вот представь ДВК-2 за 25тысяч и для граждан не доступно
и УК-НЦ(при той же и больше производительности) за 500-700-1000 + контроллер и дисководы за сколько договоришься ??? Где тут бестолковость. УК-НЦ учит детей ассемблеру(МАКРО-11), работе с офиц. ОС реального времени + паскаль и даже Си. Где он тут не справляется? Да и +бейсик(несколько вариантов)+Фортран+Форт+Фок ал+несколько изящных портов игровых+несколько эксклюзивных хитов игровых. А самое главное,
это самый доступный и правильный персональный электронный друг(товарищ) во многом благодаря RT-11 конечно ))) Такой каким
ДВК(любой) или БК(любая) никогда не станут и не смогли бы. (по многим причинам).
Бестолковость - повторюсь - это желание несбыточного от УК-НЦ.
(можно привести жизненный пример бестолковости - "аргументы бывшей жены"). Вот насколько я лояльный и добрый человек, но наезды на УК-НЦ
не понимаю, особенно от понимающих людей как вы доктор. Отвечать мне не надо, поскольку вы уже высказались, а я то же высказался.

CodeMaster
28.12.2014, 21:00
или БК(любая) никогда не станут

Чего в БК-то тебе не хватило для "правильности"?

З.Ы. Если только формат клавиатуры не очень "человеческий"

hobot
28.12.2014, 21:06
Чего в БК-то тебе не хватило для "правильности"?

З.Ы. Если только формат клавиатуры не очень "человеческий"

Это обсуждение вне темы тут и если честно мне в бк0010-01 всего хватило и хватает!

Старшие БКшки явились миру после того как УК-НЦ уже сто тысячным тиражом был
отпечатан, поэтому их сюда тянуть несколько не правильно не находите? Легко
критиковать УК-НЦ сидя за БК11 - которая у УК-НЦ перетянула к себе всё, но изначально даже "трусиков" не носила )))


---------- Post added at 21:06 ---------- Previous post was at 21:03 ----------

Давайте не будем флудить как школьники в теме, которую кстати молодежь возможно будет читать, поскольку ссылка с архива на неё ведет ))) Это тема научных изысканий. )))

Vslav
29.12.2014, 13:00
Реверс "выходного дня" - ВП1-055, новогодний вклад в копилку УКНЦ.
Микросхема очень простая - 16-разрядный двунаправленный инвертирующий буфер, отдельную статью писать не буду, совмещу с 120-ой.
ВП1-055 (полное разрешение 370М) (http://u.zeptobars.ru/yuot/1801/KR1801VP1-055-HD.jpg)
ВП1-055 (четвертичное разрешение 32М) (http://u.zeptobars.ru/yuot/1801/KR1801VP1-055-QD.jpg)

Titus
29.12.2014, 13:58
ВП1-055 (полное разрешение 370М) (http://u.zeptobars.ru/yuot/1801/KR1801VP1-055-HD.jpg)
ВП1-055 (четвертичное разрешение 32М) (http://u.zeptobars.ru/yuot/1801/KR1801VP1-055-QD.jpg)

А где же половинное (чтобы 10к на 10к, как 1515)? Полное у меня не влезает в память, а по четвертичному ничего не понятно.

Vslav
29.12.2014, 14:07
А где же половинное (чтобы 10к на 10к, как 1515)? Полное у меня не влезает в память, а по четвертичному ничего не понятно.
Да там и по полному не сильно понятнее :), фотографии не очень качественные получились. Но реверс по ним удалось сделать, совсем немного в микроскоп подглядывать пришлось, фактически только пара мест критична была. Ошибок распознавания топологии не было вообще, то есть ERC сразу ноль показал, ну да микросхема простая очень.
ВП1-055 половинное разрешение (http://u.zeptobars.ru/yuot/1801/KR1801VP1-055-FD.jpg)

Titus
29.12.2014, 14:18
Да там и по полному не сильно понятнее :), фотографии не очень качественные получились. Но реверс по ним удалось сделать, совсем немного в микроскоп подглядывать пришлось, фактически только пара мест критична была. Ошибок распознавания топологии не было вообще, то есть ERC сразу ноль показал, ну да микросхема простая очень.
ВП1-055 половинное разрешение (http://u.zeptobars.ru/yuot/1801/KR1801VP1-055-FD.jpg)

Да, качество ужасное по сравнению с теми же фотками 1515.

Что это за куча зеленых кубиков разной формы? Поликремний? А почему кубиками и почему его так много?

Vslav
29.12.2014, 14:30
Что это за куча зеленых кубиков разной формы? Поликремний? А почему кубиками и почему его так много?

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

Titus
29.12.2014, 14:31
ХМ1, кстати, выглядит, похоже, только еще суровее. Надо память искать, а то ХМ1 уже едут :)

Получается, мне достались самые сливки в виде ХМ2)

Vslav
29.12.2014, 14:35
Получается, мне достались самые сливки в виде ХМ2)
Помнится, кое-кто хотел и исходные версии ХМ1 изучить?
"Слабо Вольдемару нырнуть?" (c) :biggrin:

Titus
29.12.2014, 14:40
Помнится, кое-кто хотел и исходные версии ХМ1 изучить?
"Слабо Вольдемару нырнуть?" (c) :biggrin:

Я и сейчас не против)

ram_scan
29.12.2014, 17:50
Граждане, я рискую нарваться на оффтоп, но сделайте одолжение, нырните в спектрумскую ULA ? Я свою пожертвую ради такого дела.

Vslav
29.12.2014, 18:09
нырните в спектрумскую ULA?
А она разве не разжевана "от и до"? Вроде даже книжка написана?
Речь о КА1515ХМ1-216 она же манька-облигация Т34ВГ1?

piroxilin
29.12.2014, 18:20
Vslav, Не, речь тут про оригинальную УЛА. Но к сожалению их тоже не одна ревизия была. В моих 48-х живых и не очень как минимум 4 разных варианта... :(

Vslav
29.12.2014, 18:31
Так про оригинальную УЛА действительно подробная книжка написана (http://www.zxdesign.info/book/). Насколько понятно из аннотации - написана именно по результатам реверса.

CodeMaster
29.12.2014, 20:31
А также видны обширные поля неиспользованных ячеек.

Там получается 2/3 БМК не используется.

Titus
30.12.2014, 02:07
Так про оригинальную УЛА действительно подробная книжка написана (http://www.zxdesign.info/book/). Насколько понятно из аннотации - написана именно по результатам реверса.

Да, именно все так. Подробно расписан реверс и принцип работы.

ram_scan
30.12.2014, 08:50
Судя по тому что харлеквин, построенный на россыпи в процессе написания этой книги вышел не на 100% совместимым с оригиналом в этой книжке больше мозгового штурма и логического анализатора чем реверса кристалла. Что впрочем не умаляет заслуг автора.

Я ее к сожалению удовольствия прочесть пока не имел.

balu_dark
30.12.2014, 10:24
Арликин вообще то был создан года за 2 до того как чел начал реверсить кристалл!
А вот в книге там именно описан реверс и приведена схема. Не стоит забывать что юла имеет как цифровые так и аналоговые куски.
Кто то из наших - покупал эту книгу , по моему даже из Питера кто-то.

Titus
30.12.2014, 14:06
в этой книжке больше мозгового штурма и логического анализатора чем реверса кристалла. Что впрочем не умаляет заслуг автора.

Я ее к сожалению удовольствия прочесть пока не имел.

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

Santechnik
01.01.2015, 07:50
Наткнулся сегодня на статейку, как человек сделал 143 мегапиксельную камеру из сканера:
http://geektimes.ru/post/243769/
Сразу подумалось, что наверное такой девайс значительно облегчил бы фотографирование чипов - намного меньше склейки потребовалось бы.

Vslav
01.01.2015, 12:40
Думал я насчет сканера.
Сейчас наши микрофотопанорамы, сделанные традиционным способом имеют разрешение порядка 4К/мм. Линейка среднего сканера имеет разрешение 2-3К/дюйм, то есть 25-30 раз меньше, значит все равно нужна оптика микроскопа. Микроскоп просто такое большое поле зрения (чтобы его имело смысл сканером захватывать) с нужным разрешением не даст, сейчас все упирается именно в оптический тракт, имеющейся камеры в 9Мпикс вполне хватает.

Titus
02.01.2015, 19:43
Еще один ряд от ХМ2-001 - http://sderni.ru/256225

С одновибратором я сперва ошибся, там обратная связь с прямым выходом, а не инверсным. И по идее это получается не одновибратор, а делитель тактовой частоты на два с разрешением/запрещением.

http://s017.radikal.ru/i421/1501/ac/e3775cb3ce5c.png

---------- Post added at 20:20 ---------- Previous post was at 20:15 ----------

Как схематически рисуются триггеры с синхронным сбросом и асинхронным?

---------- Post added at 20:40 ---------- Previous post was at 20:20 ----------

Похоже, нагляднее будет изобразить это так:

http://s57.radikal.ru/i155/1501/36/6c0158352011.png

Таким образом, это у нас делитель на 2, с асинхронной установкой и синхронным сбросом.
Причем, установка единицей, а сброс нулем. И все это в виде одного единого библиотечного элемента.

Vslav
02.01.2015, 20:25
Как схематически рисуются триггеры с синхронным сбросом и асинхронным?
По рекомендации ЕСКД - "если взаимосвязь между выводами указывается взаимным расположением выводов, их располагают в одной зоне и адреса взаимодействия не указывают". Поэтому, имхо, синхронный сброс должен быть в одном поле(зоне) с тактовым входом, асинхронный сброс - отделен от этого совместного поля(зоны) чертой, т.е. в отдельном собственном поле.

Sergey
06.01.2015, 13:59
Интересная, кстати идея у меня появилась (ну так, на будущее, если что) крекнуть амижные чипы. Не знаю, правда, по какой они технологии и на сколько сложны.

А смысл их крякать, если на них доступно полное техническое описание (не на все чипсеты, конечно, - но можно по аналогии додумать работу всех)? Разве, если только интерес в том, что бы сделать идентичные.

Titus
06.01.2015, 16:55
А смысл их крякать, если на них доступно полное техническое описание (не на все чипсеты, конечно, - но можно по аналогии додумать работу всех)? Разве, если только интерес в том, что бы сделать идентичные.

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

Vslav
09.01.2015, 16:36
Стало более понятно почему регистр 1777x2 "исчезает". При первой записи в него нормально генерируется RPLY и активируется запрос на стартовое прерывание. Если это запрос не обработан (ведущий процессор не обрабатывает), то при следующем обращении к регистру RPLY не формируется, так как запрос все еще активен. Регистр "исчез" - будет тайм-аут обращения. Сбрасывается запрос либо обработкой, или командой EMT (косячок в схеме, не учитывается один оразряд селектора вектора прерывания). То есть - после исполнения EMT процессором-владельцем регистра 1777x2 он снова "появится".

Vslav
10.01.2015, 10:15
Такой вопрос - а 1801ВМ1 может вообще полностью останавливать исполнение (исключая WAIT)? Бит 0 регистра 1777x0 за это отвечает, если он установлен, то процессор впадает в полный останов, с выключением матриц ПЛМ, повторный запуск или по сбросу процессора или по очистке бита 0 записью внешним агентом (другим процессором, например). Бит 0 может устанавливаться самостоятельно при ряде условий, бит 1 частично определяет эти условия, все "концы" ведут в ПЛМ и ясности что это за условия пока нет.

Vslav
12.01.2015, 01:15
Из 19 страничек схемы осталось перевести в Верилог 3 последних (но самых запутанных) и можно будет пытаться запустить модель в симуляторе, пока с латчами. Из новых интересных осмысленных особенностей:
- инструкция RESET при низком уровне на входе ACLO генерирует сброс процессора. То есть, пришел срез ACLO, возникает прерывание (или не возникает если запрещены), если попадется инструкция RESET - будет сброс процессора
- все, абсолютно все операции идут через АЛУ, это единственный источник записываемых данных на внутренних шинах X и Y, нет никаких других путей пересылки данных, бутылочное горлышко архитектуры
- микрокод ВМ1 имеет общие поля с описанными в ТО на ВМ2, видно что ВМ2 унаследовал ряд функций от ВМ1

Vslav
16.01.2015, 00:13
Граждане, я рискую нарваться на оффтоп, но сделайте одолжение, нырните в спектрумскую ULA ? Я свою пожертвую ради такого дела.
Открыли люди уже ULA, версия 9C17E7 (http://www.visual6502.org/images/pages/Ferranti_ULA_9C018E7_die_shots.html). Это БМК на 990 ячеек, аналоговую часть я что-то сходу не разглядел, может быть сделана на части стандартных ячеек как-то. Качество фотографий плохое, поликремний не видно, структуру ячеек прояснить сложно. Но в целом, реверс не сложнее чем 1801ВП1. Если интерес есть, то можно микросхему отправить BarsMonster - у него и декапинг понадежнее и техника получше, достаточно только фотографии верхнего слоя. Но я бы с книжки все-таки начал, жалко рабочий комп потрошить.

Vslav
16.01.2015, 14:25
Вчера допоздна ковырялся с основным автоматом исполнения микрокода и секвенсеров внешней шины 1801ВМ1. Было как в анекдоте:
Маленькие девочка и мальчик играют на пляже голенькими в куличики. Тут мальчик внезапно замечает что девочка "устроена" не так как он, и спрашивает у нее, показывая свой "краник" и аналогичное место на девочке:

- Потеряла? - с любопытством
- Не-а - отнекивается в ответ девочка
- Оторвали? - с сочувствием
- Не-а - снова мотает головой девочка
- Так и было? - с крайней степенью удивления
- Ага

В-общем, хитро оно в ВМ1 закручено, но вроде бы раскрутилось, модель покажет.
Насчет битов 0 и 1 в регистре 177700 прояснилось.
Бит 0 отвечает за останов процессора, когда он в 1, то процессор останавливается в фазе перед началом исполнения инструкции.
Бит 0 может быть явно установлен/сброшен или прямой записью в регистр, а также автоматически установлен при ряде условий. Одно условие пока неясно (видимо какая-то совсем фатальная ошибка, приходит из матрицы), а второе - останов на каждой инструкции, если установлен бит 1. То есть, бит 1 дополнительно отвечает за пошаговый останов процессора, если бит 1 установлен, то бит 0 будет автоматически устанавливаться на каждой инструкции. Бит 1 может быть только явно записан при записи в регистр и больше ни на что не влияет.
Старт процессора после останова по биту 0 - по явному сбросу бита 0 записью в регистр сторонним агентом (другим процессором).

Vslav
16.01.2015, 18:10
Ах, какая чудесная вещь, этот ваш диметилсульфоксид :biggrin:
Новая картина неизвестного автора - "Буренка с макияжем", растет художник:
http://s019.radikal.ru/i605/1501/b6/104eb7157c93t.jpg (http://s019.radikal.ru/i605/1501/b6/104eb7157c93.jpg)
Это 1515ХМ-032, намек, что пора завязывать с гламурными 1515ХМ2 и переходить на суровые челябинские БМК, их есть у нас.

Titus
16.01.2015, 19:02
Это 1515ХМ-032, намек, что пора завязывать с гламурными 1515ХМ2 и переходить на суровые челябинские БМК, их есть у нас.

Все своим чередом. Тем более ХМ2 у нас всего два кристальчика, один проще другого. Вернее другой проще первого.

А фотки в 10000x10000 пожалуйте в студию, как смогете.

---------- Post added at 19:02 ---------- Previous post was at 19:00 ----------

Хорошо, что ХМ1 тоже кмоп, как я вижу по фотке. И фотки вроде довольно четкие.

Vslav
16.01.2015, 19:32
А фотки в 10000x10000 пожалуйте в студию, как смогете.

Само собой, еще попрошу Воланда отправить мне остальные 1515ХМ1. Также уже нормально открыты 581ИК1, ИК2, РУ1. Как будет время и настроение - сфотаем.



Хорошо, что ХМ1 тоже кмоп, как я вижу по фотке. И фотки вроде довольно четкие.

Да это я на ВП1-055 с микроскопом накосячил, но 055 от реверса это совершенно не спасло :).
ХМ1 кристалл здоровый, больше чем у 1801ВМ1 даже, но там совсем типовые ячейки, надо будет библиотеку пикадную под них замутить.

Titus
16.01.2015, 19:36
ХМ1 кристалл здоровый, больше чем у 1801ВМ1 даже, но там совсем типовые ячейки, надо будет библиотеку пикадную под них замутить.

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

Vslav
16.01.2015, 19:40
А я уж по старинке с ХМ2 поковыряюсь)

Да я Вашим методом восхищаюсь и ужасаюсь одновременно. Это подобно вычерпыванию пруда чайной ложечкой. Ну возьмите ведерко, пожалуйста (жалобным голосом) :)

Titus
16.01.2015, 19:43
Да я Вашим методом восхищаюсь и ужасаюсь одновременно. Это подобно вычерпыванию пруда чайной ложечкой. Ну возьмите ведерко, пожалуйста (жалобным голосом) :)

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

hobot
16.01.2015, 19:45
Это подобно вычерпыванию пруда чайной ложечкой.

Титус - это кузнец из к\ф "ФОРМУЛА ЛЮБВИ", он один быстрей любой бригады, а если за пять дней? Ну тут уже помощники нужны )))

Vslav
16.01.2015, 19:53
Поздно, ибо несколько тысяч ведер воды уже вычерпано)

Полагаете что воде не все равно чем ее вычерпают? :)


но ХМ2 не брошу, потому что он хороший)
А-а-а, ну тогда я спокоен :)


"Юмор вне темы ;-)

Хороший юмор всегда в тему. Значит надо понимать, это Titus при помощи ложечки просто растягивает удовольствие. Так это ему удовольствие, а нам же Золотой Ключик точную реплику УКНЦ за горло в руках подержать охота :)

Titus
16.01.2015, 20:06
точную реплику УКНЦ за горло в руках подержать охота :)

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

Vslav
16.01.2015, 20:13
Мне тоже охота. Правда, в виде эмулятора. Но суть реверса чипов это не меняет.
Нас на этом пути еще ждет кот Базилио пустячок в виде реверса 1801ВМ2, но на него есть заводское ТО и схема, должно быть полегче. Или сразу замахнемся на 1806ВМ2?

PS. Я чо такой веселый - ВМ1 уже полностью на верилоге, готовится с первому пуску.

Titus
16.01.2015, 20:44
Нас на этом пути еще ждет кот Базилио пустячок в виде реверса 1801ВМ2, но на него есть заводское ТО и схема, должно быть полегче. Или сразу замахнемся на 1806ВМ2?

Не, не 1806 для нас не кошерный. Все ретрокомпы в основном сделаны на 1801ВМ2.

Vslav
18.01.2015, 17:41
Полностью закончил модель 1801ВМ1 на верилоге, устранил самые первые грубые ошибки переноса схемы в HDL, и "картинка ожила" :biggrin:
Запустился секвенсер матрицы микрокода, запустился секвенсер матрицы шифратора прерываний, прошло событие старта AC OK, генератор констант выдал законные 177716, они были переданы секвенсеру Q-шины, там бодро снаружи протарахтели SYNC/DIN/SEL1 и неожиданно даже самостоятельно (и абсолютно законно, неожиданно что косяков пока не обнаружено в схеме генерации ответа) закончилось по RPLY. Потом прочитанное значение (пока 0, никого в модели на шине нету) явно попало в PC и пошло новое чтение.

Вообще ВМ1 внутри устроен прекрасно, широко использует возможности транзисторной логики, разрабатывался явно с учетом физической модели, основная матрица микрокода считывается каждые два такта, и потом защелкивается последовательно каждый полутакт в два регистра, от которых и работает управление АЛУ и другими исполнительными механизмами, так достигается максимальное быстродействие на данной физической платформе. Но это все достаточно трудно перенести на FPGA, придется помучаться, если уж делать "как положено". Сейчас Квартус лютует - более 600 латчей ему не нравятся :), но Моделсим вроде моделирует, не без проблем, но все же.

Схему (http://u.zeptobars.ru/yuot/1801/VM1/vm1_sch10a.pdf) немножко причесал, поправил несколько найденных ошибок (веду документацию в файлике errlist.txt) и многие цепи, назначение которых было неясно, получили уже осмысленные имена, типа было USTB3 (unknown strobe 3), а стало ALU_NRDY (ALU not ready).

Если кому интересно - забекапил это все как первую ревизию 1.0a (http://u.zeptobars.ru/yuot/1801/VM1/vm1_rev10a.rar), теперь пришло время прицепить к модели ОЗУ/ПЗУ, вспоминать MACRO-11 и радостно пользоваться им в свежем эмуляторе ДВК для наполнения ПЗУ тестами.

Update: обновил первый пост, прогресс, и копия ссылок, чтобы в теме не потерялись

Vslav
19.01.2015, 00:43
А вы знаете что такое вигдорчик? Я вот полез в отличный эмулятор ДВК от Patron-a и понял что позабыл абсолютно все про RT-11. Но! Вигдорчик! Он у меня есть, настоящий, оригинальный и я даже вспомнил про него и смог найти его в кладовке :biggrin:. Кто не знает или забыл - ответ под катом.

http://s020.radikal.ru/i701/1501/95/15026ca15551t.jpg (http://s020.radikal.ru/i701/1501/95/15026ca15551.jpg)

И, чтобы два раза не вставать, кто-нибудь уже дизассемлировал сдаточные тесты ВМ1 - 791323 и 791401 из ТМОС-а? Может быть уже есть готовые листинги?

hobot
19.01.2015, 01:05
и понял что позабыл абсолютно все про RT-11
Спокойствие!!! На форуме есть кому напомнить, я когда зарегистрировался то же
забыл многое, но многое уже вспомнил.
http://archive.pdp-11.org.ru/BIBLIOTEKA/DVKTXT/RAFOS_II/
http://archive.pdp-11.org.ru/BIBLIOTEKA/dwkbooks/
http://grands.land.ru/docs/fodoshlp.htm
http://grands.land.ru/docs/rafoshlp.htm

Были есть ещё лекции МГИЭтовские сейчас нахрапом что то не нашёл,
там спокойненько так разбор по частям системной дискеты RT-11 версии 4 примерно или 5.0 максимум.

+ на родную документацию ссылок не кидаю, там англ. яз.
+ встроенный HELP по командам.

Vslav
19.01.2015, 01:20
Спокойствие!!! На форуме есть кому напомнить, я когда зарегистрировался то же забыл многое, но многое уже вспомнил.

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

MM
19.01.2015, 01:29
Насчет тестов 1801ВМ1 - можно сделать среду МС1201.01 и "поставить" ПЗУ 054 - там вроде что-то встроенное по тестам есть... ( ? )

Vslav
19.01.2015, 01:42
Насчет тестов 1801ВМ1 - можно сделать среду МС1201.01 и "поставить" ПЗУ 054 - там вроде что-то встроенное по тестам есть... ( ? )
Мне пока самые примитивные надо, сдаточные для начала вполне подойдут, я их сразу в модели из файла в ОЗУ по нужному адресу загружу, терминал я примерно сэмулирую - будет сыпать буквами в отладочный лог верилог-симулятора или в файл, или сначала можно вообще без терминала.

Alex_K
19.01.2015, 01:44
И, чтобы два раза не вставать, кто-нибудь уже дизассемлировал сдаточные тесты ВМ1 - 791323 и 791401 из ТМОС-а? Может быть уже есть готовые листинги?
Исходники тестов есть в Книге 4 по Электронике-60 (http://kisly-alexey.pisem.net/%dd60%20-%20%ea%ed%e8%e3%e04.djvu).
Но для них надо делать терминал с регистрами клавиатуры и дисплея, с поддержкой прерывания (для теста прерываний).

Vslav
26.01.2015, 01:23
Интересно устроен в 1801ВМ1 регистровый блок. Причем впервые нарвался на то, что не все можно увидеть в микроскоп. Пришлось долго логически анализировать, пока паззл сложился во что-то вразумительное.

Фрагмент схемы регистрового блока:
http://s018.radikal.ru/i508/1501/28/cf1eab15745bt.jpg (http://s018.radikal.ru/i508/1501/28/cf1eab15745b.png)

Вертикальный столбец ячеек образует регистр, несколько вертикальных столбцов формируют несколько регистров. Рассмотрим ячейку в левом нижнем углу фрагмента. Видно что бит регистра образован триггером - T3541, T3542, T3573, T3574. Этот триггер может подключаться к двум выходным-входным шинам (горизонтальные линии) через пары транзисторов Т3477/Т3478 и Т3509/Т3510. Удивительно что эти пары управляются всего двумя линиями - RS0/0 и RS0/1, то есть, если смотреть на схему в таком виде как она нарисована, то получается что триггер подключается к обоим шинам одновременно. На основании этой схемы была написана модель и она не заработала.
Тут сделано все хитрее, в n-MOS серии 1801 есть транзисторы двух типов - с индуцированным каналом (открывается если на затвор подать высокий уровень) и со встроенным каналом (закрывается если на затвор подать низкий уровень. То есть - схема-то под микроскопом изучена и нарисована верно, но вот транзисторы там хитрые, а определить "на глаз" какого они именно типа - невозможно, определяется степенью легирования подзатворного кремния.
В итоге, по результатам моделирования, пришел я к выводу что вот в той паре транзисторов, которая подключает триггер к шинам - один (T3477 и T3510) с индуцированным каналом (имеет очень высокое сопротивление в закрытом состоянии), а второй, последовательный с первым (T3478 и T3509), имеет встроенный канал (относительно небольшое сопротивление в закрытом состоянии). Получается что если подать высокий уровень на RS0/0 то T3477 и T3509 откроются, но триггер подключится только к одной шине - через относительно низкоомный закрытый T3478. Второй выход будет отключен через закрытый высокоомный T3510. Соответственно вторая шина будет не занята - и на нее можно подать значение от другого регистра. То есть - имеем две шины, но два выхода, регистровый блок может одновременно выдавать на двух шинах значения двух регистров (одно в прямом виде, второе в инвертированном). Запись триггера осуществляется открытием всех четырех коммутирующих транзисторов.

Модель была исправлена и показала полную работоспобность такого решения. Было исправлено еще несколько ошибок, в том числе с большим кропотливым трудом найдены ошибки (аж семь штук, и может быть что еще не все) векторизации матрицы микрокода и моделька "доехала" уже до исполнения первого заводского теста и успешно умерла на первом bcs :). Кому интересно - текущая версия забекаплена тут (http://u.zeptobars.ru/yuot/1801/VM1/vm1_rev10b.rar).

Vslav
28.01.2015, 23:58
Заводской тест 791401 дошел до конца - до самой инструкции iot по которой выполняется вывод сообщений на терминал. Так что арифметика закончена. Переходим к отладке прерываний и исключений - с выполнением iot и обработкой векторных прерываний точно есть проблемы. Текущая ревизия C - тут (http://u.zeptobars.ru/yuot/1801/VM1/vm1_rev10c.rar)

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

Titus
29.01.2015, 00:21
Текущая ревизия C - тут (http://u.zeptobars.ru/yuot/1801/VM1/vm1_rev10c.rar)

Хорошо бы еще выкладывать актуальные ревизии в виде схем в .pdf, как это было с 10а, а то некоторые товарищи (указываю на себя) в верилогах ничего не понимают.

Vslav
29.01.2015, 00:42
Хорошо бы еще выкладывать актуальные ревизии в виде схем в .pdf, как это было с 10а, а то некоторые товарищи (указываю на себя) в верилогах ничего не понимают.
Держите (http://u.zeptobars.ru/yuot/1801/VM1/vm1_sch10c.pdf).
Схема меняется незначительно, изменения описаны в файлике errlist.txt.
А с Верилогом классно :), в архиве есть файлик wave.do для Моделсима, если запустить проект на моделирование то видно все осциллограммы на всех внутренностях процессора, вплоть до самого конца выполнения теста. Осциллограм до черта, хорошо что их можно в папки с древовидной структурой организовывать, ну и текстовую Верилог-отладку прикрутил, а то уже от графиков в глазах рябило.

Vslav
29.01.2015, 13:21
Модель показывает что инструкция mtps вызывает повторное считывание кода следующей за ней инструкции, то есть новое заполнение регистра инструкций. Может быть кто подскажет - это сделано специально, остаток от переноса с PDP-11 чтобы учесть возможную смену режима (user/kernel), или мне следует поискать глюк?

form
29.01.2015, 16:09
Модель показывает что инструкция mtps вызывает повторное считывание кода следующей за ней инструкции, то есть новое заполнение регистра инструкций. Может быть кто подскажет - это сделано специально, остаток от переноса с PDP-11 чтобы учесть возможную смену режима (user/kernel), или мне следует поискать глюк?

MTPS не может сменить режим процессора по определению ;)

Vslav
29.01.2015, 16:18
MTPS не может сменить режим процессора по определению ;)

То в оригинальной PDP-11 не может, а в собственной разработке "по мотивам" да еще переделанной из НЦ - можно ожидать все что угодно. Придется подсмотреть на реальном 1801ВМ1 сколько там циклов выборки команды после mtps.

form
29.01.2015, 16:19
То в оригинальной PDP-11 не может, а в собственной разработке "по мотивам" да еще переданной из НЦ - можно ожидать все что угодно. Придется подсмотреть на реальном 1801ВМ1 сколько там циклов выборки команды после mtps.

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

Patron
29.01.2015, 19:00
Придется подсмотреть на реальном 1801ВМ1 сколько там циклов выборки команды после mtps.Учитывая, что команда MTPS R0 в реале выполняется на 12 тактов дольше, чем команда MFPS R0 - похоже, что и в реале читает дважды.

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

Alex_K
29.01.2015, 19:44
Модель показывает что инструкция mtps вызывает повторное считывание кода следующей за ней инструкции, то есть новое заполнение регистра инструкций.
Интересно, а что будет, если эту следующую инструкцию невозможно считать, т.е. при чтении не будет ответа RPLY. Возникнет прерывание по TRAP4 или нет?

Vslav
30.01.2015, 01:54
В собственной разработке тоже не может так как и в ней MTPS выполняет ту же функцию: записывает байт, что собственно и не позволяет поменять режим.
Пультовый режим все равно организован своеобразно, вполне могли быть начальные варианты когда признак пульта размещался в битах psw[5] или psw[6].



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

В АЛУ имеется копия регистра инструкций, извлечение нужных полей из опкода выполняется мгновенно в блоке генератора констант. Флаг Т тоже очищается с использованием константы. Вот фрагмент выполнямой последовательности микрокода для clr R0 mtps R0


# plr(173777507057)->(176), op(10, y ), x(17), y(17))
# X=R0 (000000)
# Y=000000 (const)
# Read @ 000206, 106400 ; завершение чтения регистра опкода
# R0=000000 ; окончание clr R0, назначение приемника
# mj(1, 04, 176), ir(106400)
# plm(014733122470)
#
# plr(014733122470)->(057), op(01, x+y ), x(01), y(03))
# X=R7 (000210) ; странный запуск чтения @PC, вместо PC результат попадает в R12
# Y=000002 (const)
# mj(1, 04, 057), ir(106400)
# QBUS=tplm(1), plrt(4), word read
# ADR=000210
# plm(172630146035)
# R12=000212
#
# plr(172630146035)->(110), op(02, x&~y), x(17), y(13))
# X=R0 (000000)
# Y=000020 (const)
# mj(1, 04, 110), ir(106400)
# plm(106674746035)
# DAT=000000 (byte) ; новый PSW со сброшенным T
# R12=000000 (byte)
#
# plr(106674746035)->(111), op(16, x&y ), x(10), y(13))
# Read @ 000210, 005001
# X=PSW (000344)
# Y=000020 (const)
# mj(1, 04, 111), ir(106400)
# plm(100176542075)
# PSW=000000 (byte) ; непонятки
#
# plr(100176542075)->(156), op(12, x|y ), x(10), y(00))
# Y=DAT (000400)
# X=PSW (000000)
# mj(1, 04, 156), ir(106400)
# plm(010737123467)
# PSW=000000 (byte) ; записали сохраненный в DAT PSW
#
# plr(010737123467)->(176), op(01, x+y ), x(01), y(03))
# X=R7 (000210) ; чтение кода инструкции (PC)+
# Y=000002 (const)
# QBUS=tplm(4), plrt(4), word read
# ADR=000210
# R7=000212
# Read @ 000210, 005001
# mj(1, 00, 176), ir(005001)
# plm(010737122431)

При этом 791401 тест mtps проходит нормально. Но надо все равно проверить на реальном ВМ1, вполне может быть что у меня где-то ошибка.


Интересно, а что будет, если эту следующую инструкцию невозможно считать, т.е. при чтении не будет ответа RPLY. Возникнет прерывание по TRAP4 или нет?
После того как оперблок запросил у секвенсера Qbus транзакцию, она может закончится только двумя способами - успешное завершение по RPLY или наступление тайм-аута, при котором всегда безусловно фиксируется запрос на исключение и асинхронно абортируется микрокод - он принудительно переходит на микроадрес 176 - анализ прерываний и начало декодирования новой команды. То есть, на каком бы этапе выполнения команды не возник тайм-аут - исключение обязательно будет - триггер запроса установлен, и может быть сброшен только отработкой 4-го вектора.

form
30.01.2015, 05:12
Пультовый режим все равно организован своеобразно, вполне могли быть начальные варианты когда признак пульта размещался в битах psw[5] или psw[6].

Ну я отвечал на вопрос не наследство ли это от PDP-11 где возможна смена режима USER/KERNEL - я ответил что режим не может смениться после использования команды MTPS так как для этого требуется поменять два старших бита PSW. Именно поэтому на всех машинах с MMU PSW всегда есть в IOPAGE. А вот команд MTPS/MFPS может и не быть. Про пультовый режим я ничего не говорил :)

Использование битов 5 и 6 не по назначению может сделать процессор несовместимым со всеми операционными системами которые когда либо были для PDP-11 (включая советские), а также нарушает совместимость с тем же 1801ВМ3 к примеру.

Vslav
30.01.2015, 11:46
Сохранение состояния при входе в прерывание/исключение починилось - это был тот особый случай когда регистр данных записывался напрямую с шины Х, минуя АЛУ, инструкция iot нормально заработала, тест 791401 теперь проходит полностью.
Приступаем к тесту 791404 - тест прерываний и исключений, нет ли где-нибудь листинга и описания на этот тест?

Patron
30.01.2015, 12:12
Явное лишнее чтение происходит только при выполнении команд типа MTPS Rx, что добавляет к продолжительности команды кучу тактов.

При нахождении аргумента MTPS в памяти ситуация иная. Например - команда MTPS #0 выполняется всего на 6 тактов дольше, чем команда TST #0, поэтому лишнего чтения там может и не быть.

---------- Post added at 12:12 ---------- Previous post was at 11:54 ----------


791404 - тест прерываний и исключений, нет ли где-нибудь листинга и описания на этот тест?Лог успешного прогона теста 791404 на процессоре 1801ВМ1 выглядит так:

791404.log (http://emulator.pdp-11.org.ru/misc/791404.log.zip)

там и без описания вполне понятно, что и как проверяется.

Alex_K
30.01.2015, 19:04
Приступаем к тесту 791404 - тест прерываний и исключений, нет ли где-нибудь листинга и описания на этот тест?
Так в той же самой книге, начиная со страницы 95 (или 45 в WinDjView).

Vslav
30.01.2015, 21:40
Картинки снятые с реального ВМ1 при помощи логического анализатора.

Последовательность: mov #340, R0 / mtps R0:
http://i057.radikal.ru/1501/34/f7bcb7c0d1b7t.jpg (http://i057.radikal.ru/1501/34/f7bcb7c0d1b7.png)

Последовательность clr R0 / mtps @R0:
http://s018.radikal.ru/i506/1501/39/3bd3ad377fd6t.jpg (http://s018.radikal.ru/i506/1501/39/3bd3ad377fd6.png)

Как видно из картинок - mtps R0 реально читает код следующей инструкции дважды. mtps @R0 читает слово из памяти, код следующей инструкции читается один раз. Вот такая особенность, это не ошибка модели. Выполняемое действие над PSW (присваивается только младший байт):

low byte PSW = (PSW & T_bit) | (new & ~T_BIT);
То есть, как положено по документации, значение бита Т - сохраняется.


Так в той же самой книге, начиная со страницы 95 (или 45 в WinDjView).
Действительно, слона-то я и не приметил :)

Update: там на картинках RPLY с левого места мониторился (совпадает с DIN), но для иллюстрации обсуждаемого вопроса это неважно.

Titus
09.02.2015, 20:53
Как там, дело подвигается к началу реверса ВМ2?
Ведь, по мотивам ВМ1 и имея ТО на ВМ2 это наверняка проще сделать?

Vslav
10.02.2015, 08:48
Как там, дело подвигается к началу реверса ВМ2?
Пока в состоянии "микросхемы куплены и лежат на складе".


Ведь, по мотивам ВМ1 и имея ТО на ВМ2 это наверняка проще сделать?

Разобраться проще, но объем требуемой работы от этого никуда не исчезает.

Vslav
10.02.2015, 15:56
Немножко непонятно что должен выполнять Тест 56 из 791404:


tst56: inc @#$testn ; тест 56, rtt - прослеживаемая
cmp #56, @#$testn ; команда
bne 4$ ;
mov #-1, R5 ;
;
1$: mov #buff, SP ;
mov #20, -(SP) ;
mov #2$, -(SP) ;
mov #3$, rtrap4 ;
clr R1 ;
rtt ;
;
2$: inc R1 ;
inc R5 ;
beq 1$ ;
mov #216, @#$fatal ;
inc @R2 ;
halt ; нет прерывания
;
3$: dec R1 ; непонятно, сразу выход
beq tst57 ;
inc R5 ;
beq 1$ ;
;
4$: mov #217, @#$fatal ;
inc @R2 ;
halt ; ошибка rtt или НПТ
;
tst57:
Насколько я понял - rtt выполнит возврат на 2$, выполнится inc R1, произойдет отложенное исключение по T-биту на 3$, там будет dec R1 и завершение теста переходом к tst57. Зачем все остальные инструкции?

Patron
10.02.2015, 17:13
Зачем все остальные инструкции?Похоже, что авторы теста хотели проверить возникновение прерывания не только после установки T-бита командой RTT, но и после снятия, но так до конца и не поняли, как лучше это закодировать. В итоге ( насколько я понял ) - возникновение ровно одного прерывания после снятия T-бита командами RTI / RTT нигде в тесте не проверяется, хотя по идее - обязательно должно проверяться.

---------- Post added at 16:30 ---------- Previous post was at 16:26 ----------

Кстати, когда команда RTT снимает бит T и затем происходит "финальное" прерывание по вектору 014, то в какой момент должно происходить это прерывание - до выполнения следующей за RTT команды или после ?

---------- Post added at 17:13 ---------- Previous post was at 16:30 ----------

Ответ даёт TTST6.SAV (http://emulator.pdp-11.org.ru/misc/TTST6.zip)

Результаты запуска в эмуляторе следующие :



.RU TTST6
LSI-11 Traps Test #6

Mov #00,-(SP)
Mov #L2,-(SP)
Mov #20,-(SP)
Mov #L1,-(SP)
RTT
L1: RTI
L2:
>>> Trap to 014 <<<
NOP

Mov #00,-(SP)
Mov #L4,-(SP)
Mov #20,-(SP)
Mov #L3,-(SP)
RTT
L3: RTT
L4:
>>> Trap to 014 <<<
NOP

.

Vslav
10.02.2015, 18:31
В тесте 791404 вообще хватает ошибок и опечаток, поэтому ничего удивительного.
Насчет инструкции RTT - похоже она блокирует распознавание бита Т в первой микрокоманде следующей инструкции, в которой происходит первичное декодирование и опрос контроллера прерываний. Как дойдут руки потестировать - отпишусь о подробностях.

Patron
10.02.2015, 18:40
Насчет инструкции RTT - похоже она блокирует распознавание бита Т в первой микрокоманде следующей инструкцииВ том и фокус, что в обсуждаемом случае T-Trap происходит при снятом бите T, поэтому блокировка распознавания бита T может в данном случае и не влиять.

Alex_K
10.02.2015, 18:56
Насчет инструкции RTT - похоже она блокирует распознавание бита Т в первой микрокоманде следующей инструкции, в которой происходит первичное декодирование и опрос контроллера прерываний. Как дойдут руки потестировать - отпишусь о подробностях.
По идее если при возврате по RTT устанавливается бит T, то обработка всех прерываний не запускается, аналогично команде STEP. А вот если бит T сбрасывается, то обработка прерываний должна происходить.

Vslav
10.02.2015, 20:16
По идее если при возврате по RTT устанавливается бит T, то обработка всех прерываний не запускается, аналогично команде STEP. А вот если бит T сбрасывается, то обработка прерываний должна происходить.
Пока сложно сказать как оно точно происходит. Т-бит заходит (является аргументом) в матрицу контроллера прерываний, где может маскироваться битом 2 регистра 177700, пока это предположительно режим ожидания (по команде WAIT). Также T-бит заходит и в основную матрицу, поэтому может напрямую влиять на исполнение микрокода.

Alex_K
10.02.2015, 20:22
Т-бит заходит (является аргументом) в матрицу контроллера прерываний
В этом случае он выступает в качестве источника прерываний, в соответствии с приоритетом.

Vslav
10.02.2015, 20:31
В этом случае он выступает в качестве источника прерываний, в соответствии с приоритетом.
Я пока склоняюсь к мнению что в матрице контроллера он маскирует менее приоритетные прерывания. Ну, скоро увидим.

Alex_K
10.02.2015, 20:47
Я пока склоняюсь к мнению что в матрице контроллера он маскирует менее приоритетные прерывания. Ну, скоро увидим.
Ну более приоритетное всегда маскирует менее приоритетное.

А вот ещё вопрос - при исполнении программных прерываний (BPT, IOT, EMT, TRAP) как реализуется прерывание? Устанавливаются ли какие либо признаки в регистре прерываний? И какой микрокод реализует саму команду?

Vslav
10.02.2015, 21:43
А вот ещё вопрос - при исполнении программных прерываний (BPT, IOT, EMT, TRAP) как реализуется прерывание? Устанавливаются ли какие либо признаки в регистре прерываний? И какой микрокод реализует саму команду?

Пока не знаю - временно проект ВМ1 отложен (ненадолго). Но регистра с запросами программных прерываний точно нет, а термы кодов операций BPT IOT EMT TRAP - в декодере есть, значит, скорее всего, микрокод напрямую осуществляет выбор вектора из генератора и далее микропрограмму прерывания.

Titus
16.02.2015, 03:07
Отвлекся от своих мало кому нужных эмуляторов, и за день набросал еще один ряд элементов (http://sderni.ru/261643).

Осталось 8000 ведер воды из 10000.

Ал-р
24.02.2015, 17:10
А зачем реверсить ХМы уровня самоделок в корпусе 4х с заливкой эпоксидкой??? (их много-разных-идиотско-заразных...) - ... неужели их нужно зачем-то потом повторять в другой(совершенно другой) элементной базе (матрице)?

esl
24.02.2015, 17:18
имхо - чтобы понять КАК точно работают железки на них основаные
и при необходимости (а кол-во их в природе конечно) сделать аналог.

Vslav
24.02.2015, 17:25
Прошу прощения что долго нет новостей - у меня сейчас много работы, устаю немножко к вечеру.
Зато MS выпустила новый Image Composer, попробовал им сшивать панорамы - за 10 минут сшились давно сфотанные ВП1-120 и ВП1-95, потом еще примерно час ручной линеаризации в растровом редакторе и получилось вполне приличное фото 300МБ (http://u.zeptobars.ru/yuot/1801/KR1801VP1-120-HD.jpg), годное для реверса.

esl
24.02.2015, 17:45
Vslav, вопрос не по теме немного но среагировал на фразу " примерно час ручной линеаризации "
опыта в граф пакета почти нет :(
есть пару фот платы Корвета, но они соответсвенно кривые (бочка и прочиие радости)
причем плата на двух фото,
напрямую оно не клеется, не подскажете чем эт правильно делать ?

Ал-р
24.02.2015, 18:03
имхо - чтобы понять КАК точно работают железки на них основаные и при необходимости (а кол-во их в природе конечно) сделать аналог.
... И вот по этому (там есть pdf-реверс-схема) http://forum.pk-fpga.ru/viewtopic.php?f=43&t=5506
можно понять как ОНО работает и где там счётчики и регистры???

CodeMaster
24.02.2015, 18:43
но они соответсвенно кривые (бочка и прочиие радости)

Это и в ACDsee можно поправить.

Vslav
24.02.2015, 19:43
напрямую оно не клеется, не подскажете чем эт правильно делать ?

Растровый редактор Spotlight, смотреть тему "Калибровка растра".
В двух словах - объявляется набор из пар точек - одна фактическая точка на рисунке, а вторая в паре с первой - куда надо ее переместить (обычно в узел сетки). Основное время занимает потыцать эти точки на картинке, сама операция калибровки выполняется около минуты на полгигабайтном файле.

Titus
25.02.2015, 02:22
ВП1-120 и ВП1-95, потом еще примерно час ручной линеаризации в растровом редакторе и получилось вполне приличное фото 300МБ (http://u.zeptobars.ru/yuot/1801/KR1801VP1-120-HD.jpg), годное для реверса.

Хорошо бы как всегда еще версию medium quality, 10000 на 10000 пикселей.

MaTocoB
25.02.2015, 04:37
Хорошо бы как всегда еще версию medium quality, 10000 на 10000 пикселей.
Извините, а какой в этом смысл? По-моему, из картинки 15k x 15k всегда можно сделать 10k x 10k, разве что размер в 3 раза сдуется...

CodeMaster
25.02.2015, 08:28
Извините, а какой в этом смысл?

Не у всех есть компы которые могут это показать. Я вот только планирую проапгрейдить свой до 12 гигов памяти.

Vslav
25.02.2015, 13:39
Хорошо бы как всегда еще версию medium quality, 10000 на 10000 пикселей.
половинное разрешение (120МБ) (http://u.zeptobars.ru/yuot/1801/KR1801VP1-120-FD.jpg)

Titus
25.02.2015, 14:08
половинное разрешение (120МБ) (http://u.zeptobars.ru/yuot/1801/KR1801VP1-120-FD.jpg)

По сравнению с ХМ2 - это сущая мозайка)

MaTocoB
25.02.2015, 18:45
Не у всех есть компы которые могут это показать. Я вот только планирую проапгрейдить свой до 12 гигов памяти.
Для просмотра на моей машине 12 гигов не требуется, полагаю, выделение памяти зависит от просмотровщика или графического пакета. У меня iView забирает 700МБ памяти, а остальное кидает в своп, своп находится на SSD, что заметно ускоряет работу. При пользовании ACDSEE или фотошопом возможны коллизии. Но раз уж это такая проблема, то с разрешения автора я могу предоставить файл, ужатый до 17 МБ, правда качество его с оригиналом сравнивал очень бегло. Основную досаду вызывает грязь в нижней части картинки.
ссылка на файл 17 МБ (https://downloader-default7o.disk.yandex.ru/rdisk/0f14897a95171517ec71092de0b908954ead49ddc56ea24c42 71553172067d2a/inf/S0AFoG1sU6aGhAHDBfuiwe7kb_JzcgMD7XXdhmlNLWeNZvUS68 DBAhQ3qrcEG4e8av2R_FtIclUOaUo6xBN1xQ==?uid=0&filename=KR1801VP1-120-HD-10k-medium.jpg&disposition=inline&hash=&limit=0&content_type=image%2Fjpeg&tknv=v2&rtoken=a835077f357ee3116cdc6615b10feb9a&force_default=no)

Vslav
25.02.2015, 19:40
Но раз уж это такая проблема, то с разрешения автора

Все материалы, выложенные в моей "подшефной" папке на u.zeptobars.ru (насколько я понимаю и в других папках та же политика), предоставлены по Creative Commons Attribution 3.0 Unported (http://creativecommons.org/licenses/by/3.0/) - можно копировать, распространять, модифицировать и свободно использовать в своих проектах.

Vslav
04.03.2015, 01:17
Сделал эмуляцию прерываний от терминала и процессор успешно прошел тест прерываний и исключений 791404. Обновленная ревизия 1.0d (http://u.zeptobars.ru/yuot/1801/VM1/vm1_rev10d.rar), в архиве новосозданный исходник 404-го теста. Надо сказать что мелких ошибок в самом тесте хватает, но на успешное прохождение самого теста они не влияют (могут проявиться при каких-то отклонениях).
Довольно долго тестирует исключения по недопустимым инструкциям - перебирает диапазоны опкодов. MUL попадает в список перебора, а XOR - нет. Интересно будет прогнать это тест на ВМ1Г.
Осталось проверить захват шины внешним агентом и работу процессора в режиме ведомого шины - пообращаться снаружи к таймеру и регистрам управления.
Следующий этап - сделать модель пригодной для синтеза в FPGA, поскольку сейчас только моделирование.

Vslav
05.03.2015, 14:22
Оценил основную матрицу микрокода на скорость на реальном FPGA как один из самых медленных компонентов проекта. На самом нескоростном Cyclone III получилось примерно 120МГц, то есть, следует ориентироваться на достижение синтетическим ядром частоты от 100МГц, за это и будем бороться.

Titus
05.03.2015, 14:23
то есть, следует ориентироваться на достижение синтетическим ядром частоты от 100МГц, за это и будем бороться.

100МГц ВМ1 - это ахтунг)

Vslav
05.03.2015, 23:40
Команда RESET (опкод 000005) прикольно так выполняется на ВМ1. Используется внутренний скрытый регистр, сначала устанавливается низкий сигнал INIT, потом в регистр грузится 340 и каждые 5 тактов декрементируется на 2, при достижении 0 сигнал INIT деактивируется и цикл счета повторяется, итого фазы сигнала INIT примерно по 560 тактов, то есть при Fclk=5МГц, длительность INIT составит примерно 100мкс. Период в течение которого процессор не сможет обрабатывать прерывания - порядка 1120 тактов, то есть, командой RESET злоупотреблять не стоит.

form
06.03.2015, 05:33
командой RESET злоупотреблять не стои

Ну команда и не предназначена для злоупотребления. Более того, если ее использовать в живой системе которая это позволит (RT-11SJ/SB/FB) например, система может оказаться далее неработоспособной.

Vslav
06.03.2015, 10:53
Ну команда и не предназначена для злоупотребления. Более того, если ее использовать в живой системе которая это позволит (RT-11SJ/SB/FB) например, система может оказаться далее неработоспособной.
Это ясно - по низкому INIT сбросятся все устройства, имеющиеся в машине, драйвера запросто могут впасть в непонятку.
Еще любопытный момент - команда RESET производит аппаратный сброс процессора, если в момент генерации INIT присутствует низкий ACLO. В принципе, логично в обработчике прерывания ниспадающего ACLO выполнить RESET - процессор сбросится и будет в сбросе ожидать нарастания ACLO или уже полного пропадания питания.
И таки бит 2 регистра управления 177700 - это режим ожидания прерывания, по команде WAIT активируется, по приходу прерывания сбрасывается, в других командах его установка не замечена.
При записи в регистр старта 177702 происходит запись данных в скрытый регистр и выставляется запрос на прерывание, но от матрицы контроллера это запрос оторван и ничего не происходит, поэтому реально это регистр никак не используется, проявляется только эффект "пропадания" из адресного пространства. "Пропадание" предназначено для исключения повторной записи адреса старта пока не обработано предыдущее прерывание, а оно не происходит, т.к. оторвано. В-общем, регистр старта тоже можно смело выкинуть из схемы, оставить только блок отвечающий за "пропадание".

CodeMaster
06.03.2015, 12:25
но от матрицы контроллера это запрос оторван и ничего не происходит, поэтому реально это регистр никак не используется

Интересны сразу комментарии на тему "Почему так?"

Vslav
06.03.2015, 14:25
Интересны сразу комментарии на тему "Почему так?"
Увы, у меня на этот пункт есть только банальный комментарий - ну вот так вот свободные художники "по-быстрому" сделали переделку из 1801ВЕ1. Там много чего от контроллера прерываний оторвано - прерывание по записи регистра старта, прерывание от таймера ВЕ1, пара исключений (err2 и err3) которые никогда не возникают (то есть, их причина неизвестна), ловушка odd address trap (ну это хоть совместимостью с LSI-11 можно объяснить). Как я уже писал - примерно 3-5 процентов транзисторного бюджета ВМ1 просто занимает место и никак не используется, получается что регистр стартового адреса просто часть этого балласта.

Vslav
06.03.2015, 17:45
Прогресс перевода на синхронную модель такой:
- из примерно 500 латчей осталось 85, но самых мелких и занудных, соответственно число ошибок и предупреждений Quartus-а уменьшилось с 1200 до 350
- пока все внутренние сигналы полностью сохранили свою форму как было в асинхронной модели
- размер процессора "усох" с 2700 до 2024 ячейки
- достижимая частота пока 60 МГц (будем оптимизировать еще)
- вроде получается заменить блок регистров и генератор констант (частично) на блоки RAM и ROM, тогда проект может существенно добавить в скорости и уменьшить количество занимаемых ячеек (в процессе)
- тесты 401 и 404 неизменно проходят на текущей модели (примерно за тоже количество тактов что и асинхронная)

Update:
Асинхронная версия 1.0F (http://u.zeptobars.ru/yuot/1801/VM1/vm1_rev10f.rar)
Cинхронная версия 1.1F (http://u.zeptobars.ru/yuot/1801/VM1/vm1_rev11f.rar)

Patron
06.03.2015, 23:11
тесты 401 и 404 неизменно проходят на текущей модели (примерно за то же количество тактов, что и асинхронная)А потактовое совпадение модели с оригиналом в процессе опитимизации модели улучшается или ухудшается ?

Vslav
07.03.2015, 02:56
А потактовое совпадение модели с оригиналом в процессе опитимизации модели улучшается или ухудшается ?
Не изменяется - предполагается что совпадение изначально максимально точное и постоянно проверяется при модификации модели на синхронную. То есть, если первичная асинхронная модель исполняет тест 791404 до останова за 1.165.525 нс, то текущая рабочая синхронная тот же тест до останова исполняет за 1.165.515 нс, разница в один такт обусловлена дополнительной внутренней синхронизацией DCLO - синхронная модель немножко по другому выходит из аппаратного сброса. С учетом этого сдвига - диаграммы полностью совпадают.

Исполнение микрокода и обмен по внешней шине происходит точно как у оригинала и в тех же самых фазах. Но абсолютно точное потактовое сравнение с аппаратным оригинальным процессором на внешних пинах невозможно - в процессоре есть, например, прескайлер таймера шины Qbus который не сбрасывается по аппаратному сбросу, поэтому тайм-аут будет плавать в пределах 56-63 такта, на модели я взял усредненный таймаут 60 тактов. Точно так же есть неопределенный прескайлер таймера ВЕ1 - он тоже не сбрасывается сигналами аппаратного сброса.
Но в каких-то ограниченных пределах сравнить синтетический и аппаратный процессоры будет можно.

Правда я не уверен что буду делать в FPGA процессор с шиной Qbus - там очень много возни с переносом всех этих латчей. Cкорее всего, будет только синхронный вариант с двумя шинами Wishbone (мастер и ведомый для периферийного блока) и эмулятором точной задержки Qbus в не-турбо режиме.

Titus
07.03.2015, 03:08
Не изменяется - предполагается что совпадение изначально максимально точное и постоянно проверяется при модификации модели на синхронную. То есть, если первичная асинхронная модель исполняет тест 791404 до останова за 1.165.525 нс, то текущая рабочая синхронная тот же тест до останова исполняет за 1.165.515 нс, разница в один такт обусловлена дополнительной внутренней синхронизацией DCLO - синхронная модель немножко по другому выходит из аппаратного сброса. С учетом этого сдвига - диаграммы полностью совпадают.

Хорошо бы где-то зафиксировать самую последнюю и правильную изначальную асинхронную модель (ее схему и Verilog), для тех, кому важно повторить процессор со 100% точностью (не важно, в железе или в эмуляции).

Vslav
07.03.2015, 10:47
Хорошо бы где-то зафиксировать самую последнюю и правильную изначальную асинхронную модель (ее схему и Verilog)

Угу, оно у меня зафиксировано, но по ходу еще появляются мелкие неточности и ошибки, приходится и в нее вносить незначительные изменения. В связи с этим принята такая нумерация версий:
Асинхронная версия 1.0F (http://u.zeptobars.ru/yuot/1801/VM1/vm1_rev10f.rar) - полностью соответствует схеме процессора, за исключением совсем неиспользуемых транзисторных блоков, которые очевидно не влияют на работу процессора (регистр стартового вектора темне менее включен).
Cинхронная версия 1.1F (http://u.zeptobars.ru/yuot/1801/VM1/vm1_rev11f.rar) - текущая версия адаптируемая под современные FPGA

Patron
07.03.2015, 12:08
повторить процессор со 100% точностьюДля встраивания Verilog-моделей в C-программы есть Verilator, превращающий Verilog-модель в объект C++, но при таком подходе при каждом изменении модели надо пересобирать проект, поэтому интересно найти или сделать какой-то компилятор Verilog-модели в байтовый код, чтобы полученный файл можно было при старте эмулятора грузить в неизменный "интерпретатор байткода 1801ВМ1".

Titus
07.03.2015, 12:46
Асинхронная версия 1.0F (http://u.zeptobars.ru/yuot/1801/VM1/vm1_rev10f.rar) - полностью соответствует схеме процессора, за исключением совсем неиспользуемых транзисторных блоков, которые очевидно не влияют на работу процессора (регистр стартового вектора темне менее включен).

А схема? Где схема?

---------- Post added at 12:46 ---------- Previous post was at 12:45 ----------


Для встраивания Verilog-моделей в C-программы есть Verilator, превращающий Verilog-модель в объект C++, но при таком подходе при каждом изменении модели надо пересобирать проект, поэтому интересно найти или сделать какой-то компилятор Verilog-модели в байтовый код, чтобы полученный файл можно было при старте эмулятора грузить в неизменный "интерпретатор байткода 1801ВМ1".

При таком подходе эмулятор будет тормознее, чем черепашка. Мне такая идея однозначно не нравится.

Vslav
07.03.2015, 13:16
А схема? Где схема?
Схема давно уже по сути не менялась - пока не найдено новых ошибок. Есть мелкие изменения по незначительному переименованию цепей, но это касается только синхронной модели, которая сейчас уходит от абсолютной идентичности схеме (при сохранении фаз вырабатываемых сигналов), поэтому модифицировать саму схему смысла нет. А зафиксированная асинхронная модель ревизий 1.0* ранее выложенной схеме соответствует.

Titus
07.03.2015, 13:18
Представляю, сколько возни у вас будет с ВМ2, если возьметесь)

Patron
07.03.2015, 13:20
При таком подходе эмулятор будет тормознее, чем черепашка.Верно.

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

Получается, что для точной программной эмуляции скорости 1801ВМ1, работающего на частоте 5 МГц - нужен хост-процессор с частотой ~ 50 ГГц.

Titus
07.03.2015, 13:21
Получается, что для точной программной эмуляции скорости 1801ВМ1, работающего на частоте 5 МГц - нужен хост-процессор с частотой ~ 50 ГГц.

Точную эмуляцию в лоб (по вентилям) пусть делают извращенцы. Я не такой. Для точной эмуляции есть множество других подходов.

Patron
07.03.2015, 13:33
Точную эмуляцию в лоб (по вентилям) пусть делают извращенцы. Я не такой. Для точной эмуляции есть множество других подходов.А можно ли получить потактово-точную абстрактную модель, не путём испытания вентильной модели, а как-то иначе.. Я другого пути не вижу.

Для испытаний быстродействие роли не играет - главное, чтобы абстрактная и вентильная модели давали одинаковое потактовое соответствие сигналов на входах и выходах процессора.

hobot
07.03.2015, 13:53
Patron, я извиняюсь что встревая в высшую математику.
Мне например не совсем понятно в чём проблема и зачем её создавать,
если можно к примеру обычным способом замерить время на эмулируемой железке
и такое время в мс принудительно прописать в эмуляторе. И не привязывать эмулятор к видео-картинке жертвуя функционалом и не ограничивать проект эмуляторе сверхтребованиями к мощности процессора?

То есть - в чём проблема использовать жёстко прописанные на основании тестов
временные отрезки?

Мне бы вот такое простым языком разъяснение могло бы наверное много моментов
прояснить \ помогло бы что то там додумать доосмыслить и понять (наверное).

Patron
07.03.2015, 14:11
можно к примеру обычным способом замерить время на эмулируемой железке и такое время в мс принудительно прописать в эмулятореРеальный процессор или его вентильная модель - разницы нет. Просто, при использовании вентильной модели гораздо легче организовать тестирование и автоматически проверять потактовое соответствие абстрактной модели оригиналу.


в чём проблема использовать жёстко прописанные на основании тестов временные отрезки?Проблема в том, что при разной тактовой частоте и задержке памяти результаты отличаются очень существенно и весьма нелинейно, поэтому для тестирования обычная процессорная плата не годится - нужен испытательный стенд на базе микроконтроллера.

В такой ситуации программисту гораздо проще использовать для испытаний программную вентильную модель.

hobot
07.03.2015, 14:29
Проблема в том, что при разной тактовой частоте и задержке памяти результаты отличаются очень существенно и весьма нелинейно, поэтому для тестирования обычная процессорная плата не годится - нужен испытательный стенд на базе микроконтроллера.

А нет ли примера или способа - вычисления компенсирующего коэффициента?
вот сейчас в вашем же эмуляторе - работают два виртуальных Зеленоградских
процессора (в зависимости от конфига ВМ1 или ВМ2) - как в этом конкретном случае скорость их работы прописана?

Ведь в случае настройки true - это реально практически true ! )

---------- Post added at 14:29 ---------- Previous post was at 14:21 ----------

Просто после того как Alex_K. я и ещё товарищи прогнали кучу тестов на реальных платах с ВМ2 - я думал, что наши победили и вот он ВМ2 в эмуляторе ДВК-2 )
Но тут как программисты спорили так и продолжают о чём то "идеальном".
У меня же подход наверное слишком поверхностный к вопросу, чисто пользовательский.

Titus
07.03.2015, 14:30
А можно ли получить потактово-точную абстрактную модель, не путём испытания вентильной модели, а как-то иначе.. Я другого пути не вижу.

Для испытаний быстродействие роли не играет - главное, чтобы абстрактная и вентильная модели давали одинаковое потактовое соответствие сигналов на входах и выходах процессора.

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

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

Patron
07.03.2015, 14:47
Поэтому тесты безусловно нужны и важны, и чем их больше, и разнообразнее, тем лучше, но гарантий 100% идентичности эмулятора дать они не могут.Это так же, как с DSK-плагином - он корректно распознаёт кодировку всех имеющихся текстовых файлов во всех существующих образах, потому что ограниченное количество имеющихся файлов и образов позволяет на этапе тестирования проверить все варианты.

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

Vslav
07.03.2015, 14:50
Для справки - сейчас ModelSim симулирует 100МГц модель процессора (то есть 200 тактовых событий - фронт/срез на микросекунду) со скоростью примерно 100-150мкс модельного времени в секунду, на машине с i7-4770. ModelSim как симулятор, конечно, медленный, но и очень навороченный, времянки выполнения отдельных команд можно и на нем вполне посмотреть.
Мне кажется что было бы интересно иметь не симулятор вентильной модели, а исполнитель микрокода, возможно с какой-то отладкой, потому что пока полностью микрокод перевести в осмысленный вид (например как для LSI-11) не получается, с этим надо будет еще плотно разбираться.

Patron
07.03.2015, 14:54
Ведь в случае настройки true - это реально практически trueТолько для той тактовой частоты, на которой велось тестирование и которая используется в качестве значения по умолчанию ( 5.3 МГц для ВМ1 и 8.3 МГц для ВМ2 ).

Vslav
08.03.2015, 00:49
Полностью синхронная модель версии Rev11G (http://u.zeptobars.ru/yuot/1801/VM1/vm1_rev11g.rar)
Убрались все латчи и модель теперь полностью синхронная. В Cyclone 3C16-8 только один процессор+таймер+регистры 1777xx занимают 1930 ячеек, около 600 триггеров, используется единая тактовая частота и теоретически (пока только по отчету TimeQuest) изделие может работать на частоте 75МГц в самом медленном кристалле. Или более 100МГц в самом быстром.
Шина Qbus все еще сохранена и в тестовом проекте просто выведена на внешние выводы FPGA. Видно что на данный момент самым развестистыми являются мультиплексоры шины данных и шин АЛУ. Перевод на Wishbone немножко разгрузит мультиплексор шины данных, ну и есть идеи применить внутренние блоки ОЗУ для регистрового файла и генератора констант, то есть граничная частота должна еще подрасти.
Ну что, надо написать модуль памяти ROM/RAM для Qbus и пробовать в отладочную плату уже заливать.

MaTocoB
09.03.2015, 19:57
Полностью синхронная модель версии Rev11G
С уважением слежу за развитием проекта, но сбивает с толку наименование архива, которое до сих пор осталось 11f.

Vslav
09.03.2015, 20:01
С уважением слежу за развитием проекта, но сбивает с толку наименование архива, которое до сих пор осталось 11f.
Прошу прощения, это у меня ссылочный кретинизм :). Ссылку поправил.
Если ссылка нерабочая, то не стесняйтесь - заходите на u.zeptobars.ru (http://u.zeptobars.ru) - там все материалы доступны для скачивания.
PS. На Циклоне-3 с индексом -6 уже обещается работать на 100МГц и видны еще узкие места, будем допиливать :)

Vslav
12.03.2015, 15:11
Полностью синхронная модель версии Rev11H (http://u.zeptobars.ru/yuot/1801/VM1/vm1_rev11h.rar)
Многое пооптимизировал с полным сохранением потактовой совместимости машины исполнения микрокода. Проект усох с начальных 2700 ячеек для асинхронной модели, до текущих 1430. При этом примерно 580 ячеек занимает собственно мтарица микрокода. Регистровый файл упаковался в блок M9 (по ключику компиляции), далее в этот же блок будут закинуты константы для генератора констант и векторов - еще ячеек немножко сэкономится. Частота стабильно 80+ МГц, самым узким местом уже являются цепи сопряжения с Qbus, которые при переходе на Wishbone выкинутся.

Vslav
14.03.2015, 15:48
Синхронная модель c Qbus версии 1.2J (http://u.zeptobars.ru/yuot/1801/VM1/vm1_rev12j.rar)
Разобрался с предварительным извлечением инструкций - иногда ВМ1 запускает транзакцию чтения инструкции раньше. Также выяснилось что RTT обрабатывает начало следующей инструкции в микрокоде особым способом - извлекает код следующей инструкции в промежуточный регистр (он же и для префетча инструкций используется) и запускает ее обработку без проверки матрицы прерываний, то есть как бы подменяет первый микроцикл обработки инструкций, в котором извлечение опкода и проверка прерываний.
Еще немного пооптимизировалось по скорости и уперлось в быстродействие функции АЛУ, на самом медленном Циклоне III получилось 98МГц при 0С. Возможно еще получится что-то сделать, надо выделять отдельно сумматор чтобы заставить Quartus использовать арифметический режим работы ячеек, вдруг поможет поднять скорость еще немного.
Есть еще пара узких мест, но при их оптимизации немножко теряется фазовая совместимость с оригиналом, поэтому пока оставляю так.
Следующий этап - переход на Wishbone и тестирование в "железе".

Vslav
15.03.2015, 17:44
Может быть посоветуете как с таймером ВЕ1 поступить?
Сейчас делаю у процессора два режима - Full Speed и Slow Speed, первый это работа на полной тактовой (~100мГц), без всяких пауз, типа "турбо". Второй режим встраиваю сразу в модуль, предназначен для точной тактовой эмуляции работы на оригинальной медленной частоте (<5МГц). Вот вопрос в том, должен таймер сохранить медленное тактирование в режиме Full Speed или нет. Софт как рассчитан? Что таймер тикает с определенным периодом, или что таймер привязан к процессорной частоте ядра?

SKcorp.
15.03.2015, 19:51
Может быть посоветуете как с таймером ВЕ1 поступить?
Сейчас делаю у процессора два режима - Full Speed и Slow Speed, первый это работа на полной тактовой (~100мГц), без всяких пауз, типа "турбо". Второй режим встраиваю сразу в модуль, предназначен для точной тактовой эмуляции работы на оригинальной медленной частоте (<5МГц). Вот вопрос в том, должен таймер сохранить медленное тактирование в режиме Full Speed или нет. Софт как рассчитан? Что таймер тикает с определенным периодом, или что таймер привязан к процессорной частоте ядра?

ВЕ-таймер использовался ИМХО только в King's Valley, там и копайте.

Raydac
15.03.2015, 20:48
вспомнилось что кинг валлей начинал работать на компах с отсутствующим таймером если адрес порта таймера тупо менять перед запуском на порт 177716 в бкшке (насколько помню)

Patron
15.03.2015, 20:48
Софт как рассчитан? Что таймер тикает с определенным периодом, или что таймер привязан к процессорной частоте ядра?Программа, определяющая тактовую частоту процессора ВМ1, рассчитана на стандартное поведение VE-таймера.

Vslav
15.03.2015, 21:06
Да, видно что таймер может использоваться по-разному - или для отсчета реального времени - запускаем таймер и потом выполняем свой код и при необходимости как-то синхронизируемся с таймером, например для стабилизации скорости игрушки, в этом случае надо чтобы таймер работал с предполагаемой частотой - 3 или 4МГц, как в БК. Ну и второй очевидный способ использования таймера - измерение процессорных тактов. Тут уже таймер должен работать с фактической частотой ядра. В-общем, "нету счастья в этой жизни" (с), нельзя однозначно решить, придется делать какое-то селективное настраиваемое решение.

hobot
15.03.2015, 21:09
Vslav, обязательно нужен режим 100% совместимости с классическими программами и играми ) Как отдельная такая опция, что бы 1 в 1 )

Titus
15.03.2015, 21:16
Да, видно что таймер может использоваться по-разному - или для отсчета реального времени

Думаю, что таймер должен работать на частоте процессора всегда. Хотя скорее всего на 100МГц множество классических игр и программ работать не будут, ввиду того, что станут летать в десятки раз быстрее. Достаточно посмотреть на бешенные ксониксы с ДВК, которые на то же УКНЦ летают как угорелые.

hobot
15.03.2015, 21:24
на 100-мегагерцах "смайл" можно на максимальной сложности быстрые партии с дековскими шахматами играть ) Аркадам в духе ТАРЗАНА, Десантника конечно нужна скорость БК родная.

А вот ксониксы на УК-НЦ бешеные не из за процессора, там другая причина.
Вот тетрис из скобочек на УК-НЦ шустрее по вине процессора - это да!

Vslav
15.03.2015, 22:19
"Следующий сложный вопрос" что делать с кадровой частотой 48.5Гц на БК, на мой VGA монитор только от 56Гц подавать можно. Точно сделаю оригинальный вариант с выходом на ТВ, ну и переключение на стандартный VGA обязательно. Наверное надо посмотреть на какую-то готовую FPGA-реплику, потому что я последовательно на все грабли наступаю, а там все эти проблемы решены. Какой проект посоветуете как референсный? Speccy-2010 вероятно?

hobot
16.03.2015, 01:35
оригинальный вариант с выходом на ТВ
композит? обязательно нужен самый обычный и простейший композит. )
К нему я понимаю так можно и классический 6105 подключить? )
(просто не всем нужны цвета, некоторых и графика (кроме псевдографических символов)
не особенно интересуют, но вот стабильная картинка для ч\б игрушек в любом случае важна,
(на БК значительная часть игр двух цветная) либо отлично смотрится - играется в ч\б режиме.

TheGWBV
16.03.2015, 01:41
Vslav, а можно сделать, чтобы таймер ВЕ1 тактировался извне? (вроде так и разработчики задумывали его до переделки проца в продековский ВМ1).
Например, музыкальный сопроцессор AY в БК всё равно нужно тактировать "по старинке" + таймер ВЕ мог быть задействован для синхронного проигрывания нот, переключения палитры внутри ТВ-кадра в демках.

Vslav
16.03.2015, 01:52
композит? обязательно нужен самый обычный и простейший композит. ) К нему я понимаю так можно и классический 6105 подключить? )
Угу, и у меня даже такой "классический" мониторчик есть, у тещи в кладовке хранитцо. С подключением 6105 вопросов нет (для тех кого он есть :)). Думаю и с большинством игрушек в ч/б и на VGA с 60Hz проблем не будет никаких. Проблемы, скорее всего, будут со всякими демками с динамическим изменением палитры - они все привязаны к кадровому прерыванию IRQ2. Тема с кадровой частотой очень старая, как я понял, вон на nedopc даже список 48Hz-совместимых мониторов составляется.

TheGWBV
16.03.2015, 01:58
Вообще, в БКашке всех синхронизирует ВП-037 -- нужно с его колокольни на все смотреть... и на частоту тактирования таймера ВЕ, и прерывания по концу вывода ТВ-кадра (двух полей).

Думаю, разумно будет поднять частоту кадров до 50(100) Гц и пропорционально поднять частоту тактирования таймера ВЕ1 относительно 4МГц оригинальной БК0011М...

Vslav
16.03.2015, 01:59
Vslav, а можно сделать, чтобы таймер ВЕ1 тактировался извне? (вроде так и разработчики задумывали его до переделки проца в продековский ВМ1).
Можно даже в натуральном ВМ1, там вход таймера на недокументированную ножку SP (вывод 6) заведен.
Для FPGA, возможно, сделаю какой-нибудь конфигуратор - или перемычками, или меню типа BIOS Setup и там будут опции для таймера - 4MHz/CPU clock/100MHz.



Например, музыкальный сопроцессор AY в БК всё равно нужно тактировать "по старинке" + таймер ВЕ мог быть задействован для синхронного проигрывания нот, переключения палитры внутри ТВ-кадра в демках.

Вот для этого и придется делать один из режимов полностью совпадающим с оригинальным БК, поэтому и поднялся вопрос с 48Гц для кадровой в том числе. Кстати, Reverse-U16 один из кандидатов для переноса конфигурации на него, интересно как по HDMI/DVI 48Гц работать будет.

hobot
16.03.2015, 02:01
Вообще, в БКашке всех синхронизирует ВП-037
Я бы хотел для себя уточнить? Это справедливо для всех и любых моделей БК?
Честно, просто не знаю точно, вдруг речь идёт о мифической 11М какой-нибудь в очередной раз? )

Vslav
16.03.2015, 02:02
Вообще, в БКашке всех синхронизирует ВП-037 -- нужно с его колокольни на все смотреть... и на частоту тактирования таймера ВЕ, и прерывания по концу вывода ТВ-кадра (двух полей).
Нет, в БК-001х ВЕ-таймер тактируется исключительно частотой процессора, а ВП1-037 генерирует просто синхросмесь строчных и кадровых импульсов. Кадровые синхроимпульсы потом отдельно схемой на рассыпухе выделяются и заходят на IRQ2, то есть это банально прерывание по кадровой развертке. В БК-0010 этого нет, прерывание только в 11/11М.

hobot
16.03.2015, 02:04
Vslav, 60 герц для ВГА - на матрице наверное норм, а что будет на ЭЛТ ВГА?
Слёзы от мерцания? Мне просто опять таки хочется с пользовательской точки зрения
понимать - как это возможно будет? )

Vslav
16.03.2015, 02:08
Vslav, 60 герц для ВГА - на матрице наверное норм, а что будет на ЭЛТ ВГА?Слёзы от мерцания? Мне просто опять таки хочется с пользовательской точки зрения понимать - как это возможно будет? )
Поднять кадровую особых проблем нет, думаю и 75/85Гц запросто сделать можно.
А, да, еще IRQ2 это не просто "прерывание по кадровой", это еще называется системный таймер. Просто сделать там 48.5Гц не проблема, проблема именно в привязке к кадровой, если привязки нет - большАя часть демок может не работать. Если привязка есть и кадровая не 48.5гц - то уплывает вся синхронизация с реальным временим (для софта который считает что системный таймер ~50Гц)

TheGWBV
16.03.2015, 03:07
Нет, в БК-001х ВЕ-таймер тактируется исключительно частотой процессора, а ВП1-037 генерирует просто синхросмесь строчных и кадровых импульсов. Кадровые синхроимпульсы потом отдельно схемой на рассыпухе выделяются и заходят на IRQ2, то есть это банально прерывание по кадровой развертке. В БК-0010 этого нет, прерывание только в 11/11М.

Да, но в БК0011М частота процессора, а значит и внутреннего ВЕ-таймера задается тем же тактовым генератором, что и для ВП-037?
Все мультимедиа приложения для 11М привязаны в риалтайме к КСИ, встроенному ВЕ-таймеру, с интервалами отсчетов кратными параметрам ТВ-строки, насколько помню. Вот и получается, что нужно плясать от ВП-037, иначе получится не БК11М.

Кстати, тв-тюнер при оцифровке теста палитр намерял частоту 48,8Гц.

SKcorp.
16.03.2015, 03:21
Все мультимедиа приложения для 11М привязаны в риалтайме к КСИ, встроенному ВЕ-таймеру, с интервалами отсчетов кратными параметрам ТВ-строки, насколько помню. Вот и получается, что нужно плясать от ВП-037, иначе получится не БК11М.


К прерыванию по вектору 100. ВЕ я уже написал где использовался.
И вроде нигде больше.

TheGWBV
16.03.2015, 03:46
К прерыванию по вектору 100. ВЕ я уже написал где использовался.
И вроде нигде больше.

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

Для ковокса каким образом частота семплирования контролируется?

---------- Post added at 03:46 ---------- Previous post was at 03:33 ----------

Vslav, хотелось бы и в 100МГц-овой БК иметь прерывание именно по КСИ...

SKcorp.
16.03.2015, 03:56
В инсульте мега деме скорее всего используется ВЕ-таймер, отсчитывающий моменты переключения палитр.

Для ковокса каким образом частота семплирования контролируется?

Скорее всего нет.

Для Ковокса - никак.

Vslav
16.03.2015, 10:30
Vslav, хотелось бы и в 100МГц-овой БК иметь прерывание именно по КСИ...
Пока видится реализация конфигурации видео с такими вариантами:
- полный оригинал, кадровая 48.8Гц, все времянки видеовыхода как в настоящей БК, IRQ2 в той же фазе от кадровой как в БК. Должны пойти все демки
- стандартный VGA 640*350*70Hz, должен пойти на большинстве новых телевизоров и всех VGA-мониторах
- SVGA 1024*768*60/75Hz - для любителей ЭЛТ
- SVGA 1240*1024*60Hz с фрагментом в центре 1024*768 - это для многих панельных мониторов (у меня такой для ретро за $20 прикуплен), чтобы точки точно попали на матрицу "без мыла". Кого "мыло" устроит и хочется полный экран - возьмет предыдущий режим
Остальное:
- выбор тактовой процессора - 4/промежуточные варианты по желанию/100MГц
- выбор тактовой ВЕ-таймера 4/CPU/100MГц
- выбор тактовой прерывания IRQ2 - 48.8Гц или кадровая

PS. Как ни странно но БК-0011М на FPGA до сих пор никто не сделал, есть эксперимент БК-0010 от svofski и "долгострой" от Voland, и на этом усё. Приходится вот сейчас бегать по граблям.

CodeMaster
16.03.2015, 16:11
- полный оригинал, кадровая 48.8Гц,

А можно сделать 97,6Гц для монитора, а во внутрь 48,8Гц? Скандаблер так сказать.

Vslav
16.03.2015, 16:58
А можно сделать 97,6Гц для монитора, а во внутрь 48,8Гц? Скандаблер так сказать.
Можно, но все равно некоторым демкам нужные условия не обеспечит. И по кадровой очень многие панельные мониторы не потянут - у них 56-75Гц типично, вот мой уже 78Гц не вытягивает.

gid
16.03.2015, 17:17
Частота процессора, частота видео, и частота таймера, сидящего на векторе 100, в общем случае друг от друга никак не должны зависеть. Так как оно есть сейчас - это всего лишь частный случай, реализованный в БК.

В общем виде - ВЕ таймер он как бы вещь в себе и должен работать строго традиционно, как показал реверсинг. Он не должен использоваться (да и не используется) для синхронизации чего либо, а на БК10 используется от безысходности, потому что там просто ничего другого нет. В том виде, в каком он сделан в ВМ1, он годится для подсчёта временных интервалов в тактах процессора и проведения разных измерений в попугаях (например ТЧ процессора при константной латентности ОЗУ). Чтобы этот таймер годился на что-то большее, надо вернуть ему урезанный или вообще не получившийся у разработчиков функционал, который ими был задуман (хотя бы генерацию прерывания).

Таймер по вектору 100 - это KW11-L, по идее он должен работать с частотой строго 50Гц (с частотой электрической сети), но для упрощения конструкции БК11 использована примерно совпадающая частота видеоконтроллера ВП1-037 48.5Гц. Вот именно он и используется для синхронизации всего, чего можно. Не надо в новом изделии их привязывать друг к другу, а реализовать два разных модуля - отдельно таймер 50Гц, и отдельно видеоконтроллер, с различными режимами и частотами. Причём так же отдельно от модуля CPU.

При этом станет возможно варьировать частоты CPU и видео с максимально возможным сохранением совместимости старого софта с новым быстрым железом. По крайней мере игр с музыкой на AY - там скорость синхронизируется таймером 50Гц (хотя и в этом у меня есть сомнения, но если что - это патчится, было бы с чем засинхронизироваться).

При этом разного рода БКшные демки будут показывать свои эффекты только при точнейшем сохранении всех задержек на МПИ, которые создаёт ВП1-037.
Вся синхронизация с ходом луча и прочие спецэффекты делались методом подбора последовательностей команд типа bit (r1),(r1)
cmp @(r1)+,r1 cmp (r1),0(r1) - т.е. экспериментальным путём подбиралось количество команд и методы адресаций, которые давали подходящую задержку во времени. Если изменить латентность памяти - то все демки пойдут вразнос. Да и если частоту проца изменить или микрокод оптимизировать - тоже. Поэтому нужно либо делать реплику 1:1, либо забить на совместимость с некоторыми разновидностями программ.

TheGWBV
16.03.2015, 20:19
Таймер по вектору 100 - это KW11-L, по идее он должен работать с частотой строго 50Гц
Это имеет смысл в основном относительно промышленного применения ДЕКоподобных.
Например, в микропроцессорных системах релейной защиты ЛЭП и трансформаторов цифровой фильтр должен за полпериода частоты сети переменного тока равной в наших краях 50Гц вычислить амплитуды гармоник, чтобы затем уже логическая часть ПО приняла решение -- отключить или оставить в работе силовое оборудование.
В бытовом же компьютере, который предназначен и для видео-игр, необходимо синхронизировать логику мультимедиа задач относительно КСИ.
Например, в БК11М можно успеть примерно 1/6 часть экрана обновить в интервале между КСИ, а в интервале между КСИ и началом вывода первой тв-строки успеть вывести несколько спрайтов или переключить экранные страницы.

Думаю, что было бы правильным сделать перемычки режима прерывания:
1) Прерывание от видео-контроллера по концу тв-кадра;
2) Прерывание от источника частоты питающей сети, 50Гц;
3) Прерывание невозможно.

Кстати, пункт 2) по-хорошему требует и соответствующего БП или отдельного узла, который будет формировать это прерывание по факту перехода напряжения в сети питания из минуса в плюс... И раз уж потребовалось промышленное применение, требующее синхронизации с питающей сетью переменного тока, кнопки "принт-скрин", повешенной на порт УП, такой БК11М не видать -- придётся туда подать сигнал перехода на аварийное питание :)

В общем, имхо, в БК0011М прерывание по вектору 100 задумывалось не как сетевое, а как прерывание по окончанию вывода ТВ-кадра. То, что оно близко по частоте к 50Гц -- это случайность.

Vslav
16.03.2015, 20:55
Не переживайте, после БК будет проект ДВК с МС1201.1, там таймер отключаемый с кнопочки. А БК придется повторить максимально точно, и демки погонять на оригинале и на реплике, приложить усилия чтобы пошло максимум имеющегося софта.

TheGWBV
16.03.2015, 22:17
Vslav, вот кстати, ещё один момент... в ВП-037 залочена возможность изменения палитры внутри тв-строки. Понятно, что на 4МГц и построчное переключение палитр большая радость (которую иногда использовали в демах типа Инсульт). А на 40-100МГц уже можно и с точностью до байта/слова управлять переключением палитр? :)

hobot
16.03.2015, 22:34
сделать перемычки
только не перемычки в обычном понимании, продукт должен иметь возможность
(строго ИМХО!) регулировать любые параметры без паяльников и кусачек. Ведь
не для паяльников же, а для людей )
Vslav, главное сохраните возможность работы обычной штатной БК0010-01 ) Там игр достаточно без всяких AY и мышей и все нормально играются в ч\б, а если будет возможность к VGA ЭЛТ подрубить - так это будет просто праздник! )

Vslav
17.03.2015, 01:10
Vslav, вот кстати, ещё один момент... в ВП-037 залочена возможность изменения палитры внутри тв-строки.

А что значит "залочена"? Палитра же прописывается в отдельном регистре, в любое время меняй - не хочу. ВП1-037 полностью распилена давно, что-то я такой возможности "лочить" палитру не припомню.



Понятно, что на 4МГц и построчное переключение палитр большая радость (которую иногда использовали в демах типа Инсульт). А на 40-100МГц уже можно и с точностью до байта/слова управлять переключением палитр? :)

Не, этим займется КЦГД :). Изобрести-то свой графический контроллер можно, но потом писать софт и прочее - смысла нет



регулировать любые параметры без паяльников и кусачек

Да, будем к этому стремиться :).


возможность работы обычной штатной БК0010-01

Именно 10-ка нужна? Я думал 11М с СМК сделать и на этом закруглиться, мне ДВК/Э60/Э85 больше интересны.

TheGWBV
17.03.2015, 01:45
Именно 10-ка нужна? Я думал 11М с СМК сделать и на этом закруглиться, мне ДВК/Э60/Э85 больше интересны.

Так если в конфиге изделия частоту проца можно будет выставить 3МГц, прерывание по КСИ отключить -- вот и 10-ка получится :)

Hobot, а на 10-ке можно будет ОС БК запустить и драйвер виртуального диска под СМКашную память написать? Может лучше просто 11-ую на 3 МГц вместо 0010-01, а? :)

Vslav
17.03.2015, 02:01
Так если в конфиге изделия частоту проца можно будет выставить 3МГц, прерывание по КСИ отключить -- вот и 10-ка получится :)
Угу, пол-литру тоже отключить, страницы памяти отключить, оставить 32КБ памяти, ПЗУ-шкие другие... В-общем-то не вопрос, все делаемо, а зачем? Есть уникальный десяточный софт, не портированный/не идущий на 11М?

TheGWBV
17.03.2015, 02:16
Vslav, так и я же на это Hobot-у намекаю :) из 11М всегда можно сделать почти 10-ку -- загрузить монитор, потом игрушку. Правда, есть вопрос -- можно ли игры, использующие бейсик БК0010-01, запустить подобным образом...

hobot
17.03.2015, 02:17
Есть уникальный десяточный софт, не портированный/не идущий на 11М?

TheGWBV+ - вот что мне нужно, гарантируйте что любую игру с десятки можно
комфортно (без гем.) запустить на 11М и всё ) У Хобота не останется вопросов.
В плане ОС БК - я всё время путаюсь какую систему так пользователи БК11М называют, но знаю что RT-11 там еле еле двигается ) Почему? Мне не ведомо.
Но лучше медленно чем вообще никак. ) А всяческие АНДОСЫ и МИКРОДОСЫ -
это уже совсем совсем не DEC-философия, это микрософт какой-то ))))
(как и мышки с поллитрами и аигрэками кстати говоря).

Конечно если делать проект - то только старшей машинки -
просто я уже третий раз в этой теме пишу - гарантируйте 100% совместимость с ПО для 10-тки! )))

Vslav
17.03.2015, 02:31
Конечно если делать проект - то только старшей машинки -
просто я уже третий раз в этой теме пишу - гарантируйте 100% совместимость с ПО для 10-тки! )))
Хм, не понял? 100-процентную совместимость только 10-ка и обеспечит, ладно, все сложные модули (процессор, видео, клавиатура) все равно общие у всех БК, конфигурацию 10-ки сделать не так уж затратно.

hobot
17.03.2015, 02:37
Vslav, прошу правильно понять. 10тка это и есть БКашка ! )
У старших машинок парочка портов из ДОСа - которыми надо скорее стыдиться,
а не гордиться (парочка "унылых" квестов), но все классические игры это же
библиотека от 10-тки (http://archive.pdp-11.org.ru/gamgal.html)? разве я не прав? )

---------- Post added at 02:37 ---------- Previous post was at 02:35 ----------

Те же кто пишет и ваяет демо - давно спаяли себе уже аппараты мечт своих! )
И теперь кусачками кусают там перемычки ) А потом снова паяют )

TheGWBV
17.03.2015, 02:47
просто я уже третий раз в этой теме пишу - гарантируйте 100% совместимость с ПО для 10-тки! )))

Имхо, самое ценное, что было под 10-ку ещё в 90-е портировали под 11М.
Разве что у кого-то сохранилось своё ПО, которое нигде не публиковалось в то время.

Я пока еще не добралась до программирования СМК-64/512... вроде как с помощью него можно и решить вопрос использования в бк11м бейсика из ПЗУ 0010-01?

hobot
17.03.2015, 02:59
Конечно если делать проект - то только старшей машинки -

Да я уже сдался давно )

gid
17.03.2015, 10:01
hobot, На БК11М+СМК можно запустить любую программу для БК10.
Даже использующую ПЗУ Бейсика БК10.
Единственный минус - это делается чуточку сложнее, т.к.
прогам, использующим монитор БК10 нужно сперва загрузить в нужные страницы ОЗУ дамп ПЗУ Монитора;
прогам, использующим ПЗУ Фокала БК10 - нужно сперва загрузить в нужные страницы ОЗУ дамп ПЗУ Монитора и Фокала;
прогам, использующим ПЗУ Бейсика БК10 - нужно выставить соответствующий режим СМК и загрузить в ОЗУ СМК Бейсик;
прогам, использующим кроме фокала ещё и подпрограммы из МСТД БК10 - придётся немного подшаманить - включить в СМК режим Бейсик, но вместо бейсика залить туда фокал + МСТД. Я правда таких программ не видел, но теоретически они могут существовать.
Для работы программ, написанных Саяпиным, если не ошибаюсь, который любил очищать экран командами 1$: clr(r0)+ br 1$ до возникновения trap to 4 в СМК тоже предусмотрен соответствующий режим совместимости с БК10 на БК11М. Хотя скорее всего их уже давно пофиксили от этой напасти.
Единственное что может не работать - аномальные программы, пытающиеся вызвать trap to 4 для дальнейшей своей работы записью в 177662 и в область ПЗУ на БК10, и пишущие мусор в 177716, что может вызвать хаотическое переключение страниц, в том числе и экрана.

SKcorp.
17.03.2015, 17:31
Для работы программ, написанных Саяпиным, если не ошибаюсь, который любил очищать экран командами 1$: clr(r0)+ br 1$ до возникновения trap to 4

Савиным.

Patron
20.03.2015, 14:30
Может быть интересно уделить внимание вопросу, как чётность адреса байта влияет на тайминги работающих с памятью байтовых команд.

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

Vslav
20.03.2015, 15:39
Из-за особенностей протокола Q-Bus нечётные байты передаются по шине в старшем байте, поэтому перед использованием нечётного байта содержимое шины должно пройти через SWAB-регистр. Также и при записи байта по нечётному адресу его нельзя просто выставить на шину - надо сначала сделать SWAB.

В аппаратуре перестановка делается очень просто и транзисторный бюджет на это дело небольшой. Поэтому инструкция SWAB выполняется на своей отдельной схеме - перестановка происходит при загрузке в регистр-аргумент X АЛУ.
А с шиной Q-bus имеется специальный регистр (я условно назвал его Q), который может принимать данные с шины X (и АЛУ, которое тоже работает на шину Х) и шины Q-bus и выдавать от себя данные на шину X или Q-bus. При этом при работе с Q-bus он может переставлять байты как на входе, так и на выходе, с опциональным независимым обнулением каждого байта. Причем остальная часть процессора даже не знает по какому адресу байт, по четному или нечетному, этот регистр смотрит на защелку младшего бита адреса и сам все разруливает.

В итоге после разбора и редукции схемы, работа регистра Q описывается очень просто. Ввод данных с шины Q-bus (для упрощения я убрал запись с внутренней шины X):



always @(posedge pin_clk_n)
begin
if (au_qstbd)
qreg[7:0] <= (au_ta0 ? wb_cpu_dat_i[15:8] : wb_cpu_dat_i[7:0]);

if (au_qstbd)
qreg[15:8] <= wb_cpu_dat_i[15:8];
end
То есть - младший байт Q-регистра (в коде это переменная qreg[7:0]) может защелкивать или старший или младший байт шины данных Q-bus. А старший байт Q-регистра (переменная qreg[15:8]) всегда защелкивает старший байт. Но он дальше не всегда используется в последующих операциях - маскируется в АЛУ флагом байтовой операции.

Вывод данных на Q-bus:


assign qrd = au_ta0 ? {qreg[7:0], 'o000} : (plrt[6] ? {8'o000, qreg[7:0]} : qreg);
То есть, на шину данных Q-bus будет выводится или полные 16 бит данных, или младшие 8 бит, дополненные сверху или снизу нулями, взависимости от адреса (au_ta0 - защелка младшего бита адреса транзакции, plrt[6] - флаг байтовой операции, поступает из декодера)

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

Patron
20.03.2015, 16:41
Все эти операции происходят прозрачно и независимо от остальной аппаратуры, вроде явно не требуют дополнительных тактов.Значит, с этим мне повезло, т.к. тайминги доступа к чётным/нечётным байтам отдельно никогда не тестировались.

...

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

Но на самом деле измеренные тайминги ( при задержке RPLY в 6 тактов ) были не так однозначны:



MOV (R1), R0 30
MOV (R1)+,R0 30
MOV -(R1), R0 30

MOV (R1), (R0) 45
MOV (R1)+,(R0) 46
MOV -(R1), (R0) 47
MOV (R1), (R0)+ 49

ADD (R1), (R0) 55
ADD (R1)+,(R0) 55
ADD -(R1), (R0) 56
ADD (R1)+,(R0)+ 55
ADD -(R1), (R0)+ 56
ADD -(R1),-(R0) 56

ADD @(R1)+,@(R0)+ 82
ADD @-(R1),@(R0)+ 82
ADD @-(R1),@-(R0) 83

BIT @(R1)+,@(R0)+ 70
BIT @-(R1),@(R0)+ 71
BIT @-(R1),@-(R0) 72


Общая идея вполне понятна, но простой логической связи не просматривается - в команде MOV даже инкремент иногда добавляет такт, а декремент нет.
Выделенное синим - вообще за гранью понимания.

---------- Post added at 16:41 ---------- Previous post was at 16:36 ----------

Ещё прикол:



MOV (R1), R0 30
MOV (R1)+,R0 30
MOV -(R1), R0 30

ADD (R1), R0 30
ADD (R1)+,R0 30
ADD -(R1), R0 30

BIT (R1), R0 30
BIT (R1)+,R0 30
BIT -(R1), R0 31

Vslav
20.03.2015, 17:02
У процессора блок обмена с Qbus может работать параллельно и независимо от АЛУ, более того, есть отдельный буфер адреса и может быть запрошена новая операция немедленно после его освобождения. То есть, выдали адрес из АЛУ в буфер, выполнили захват шины, выдали адрес, ниспадающий фронт SYNC, и в этот момент внутренний буфер адреса освобождается - он больше не нужен для текущей транзакции, и микрокод может туда закинуть новую операцию по новому адресу, хотя и текущая транзакция еще не закончена.

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




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

Да, при вычислении адреса микрооперация занимает 3 такта. Адрес может быть диспетчеризован с шины X во втором или третьем такте (смотреть строб au_qstbx). Во втором такте это всегда исходный аргмент, то есть до модификации, в третьем - уже результат из АЛУ. Можно было бы и пре-декремент в одну операцию вписать, почему не сделали и как оно практически работает - тоже надо смотреть.

Vslav
22.03.2015, 00:45
Немножно потрассировал микрокод. Декремент и инкремент вычисляются практически одинаково за одну микроинстукцию, отличается только фаза выдачи адреса в регистр - всегда с шины X, до модификации как входной аргумент АЛУ, или позже, после модификации как результат АЛУ, тоже выданный на шину X.

Для инструкций типа mov (R1), R0 выполняются следующие микрооперации:
- чтение кода инструкции (иногда опережающий, еще до выполнения
предыдущей инструкции), проверка прерываний
- первичное декодирование операции
- запуск чтения данных источника (*R1)
- ожидание данных и сохранение во временном регистре R11
- опережающий запуск чтения следующей инструкции
- переписывание результата из R11 в R0

Для инструкций типа mov (R1)+,(R0) следующие микрооперации:
- чтение кода инструкции (опережающий или нет, зависит от предыдущей команды), проверка прерываний
- первичное декодирование операции
- запуск чтения данных источника (*R1), одновременный инкремент R1
- ожидание данных и сохранение во временном регистре R11
- запуск записи данных из R11 по (R0)
- ожидание завершения записи
Тут нет опережающего запуска чтения следующей команды, запись в приоритете.

Полный лог в пост не влез, поместил в приложененный файл. Легенда:
- plr() - это начало исполнения микроинструкции
- clk: - номер такта частоты CLC (ниспадающий фронт)
- В начале листинг тестового кода, первая колонка - такт начала микрооперации запуска чтения кода инструкции
- вторая колонка - такт начала микороперации сохранения результата

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

CodeMaster
22.03.2015, 08:25
в 1801ВМ1 есть зачатки параллельного конвеера

Интересно, это наследство BE1 или добавлено для совместимости с PDP-11?

Vslav
22.03.2015, 10:25
Интересно, это наследство BE1 или добавлено для совместимости с PDP-11?
Сложно сказать, кристалл ВЕ1 никто не реверсил :) Может быть, у ВЕ1 было быстрое внутреннее ПЗУ и конвеер был не особо нужен. Судя по фото кристалл ВЕ1 существенно отличается от ВМ1, могли конвеер и добавить.

Vslav
23.03.2015, 17:05
Микрокод в ВМ1 затейливый, без инструментария не разобраться досконально. Буду писать программки для анализа. Всего 128 микроадресов, для начала хотя бы табличку возможных переходов построить, и многоядерные процессоры x86 пригодятся - параллельно анализировать 2G вариантов.

Vslav
24.03.2015, 10:24
Из повседневного:
Написал Бобу Супнику, попросил схемы и фотошаблоны J11. И даже ответ получил - увы, в ходе слияний, поглощений, нескольких передач авторских прав фотошаблоны и бумажные схемы у него не выжили. Возможно что-то осталось у Ментека, надо у них просить.
Так что придется J11 ковырять "по-старинке", в дралоскопе. И где-то надо сделать (или научиться) операции сошлифовки отдельных слоев - в микросхемах J11 два слоя металла и полисиликона. И еще, советские 1831 очень редкие и дорогие, для реверса недоступны, поэтому будет (если будет) именно J11, он распространенный и цены на него относительно гуманные.

Vslav
25.03.2015, 10:19
Несколько слов как устроен микрокод в 1801ВМ1.
Имеется одна большая Программируемая Логическая Матрица - ПЛМ. В ВМ1 она условно программируемая - ее фукнции определяются жесткой схемой, заданной при изготовлении процессора. У матрицы есть всего 31 логический вход - 16 из них это код текущей инструкции, еще 7 входов это текущий адрес микрокоманды, 5 входов это специальные флаги и еще 3 входа отвечают за обработку прерываний или флагов декодирования операции - зависит от фазы. Матрица имеет 34 логических выхода, 7 из них определяют адрес следующей микрокоманды. Еще один выход принимает единичное значение если выполняется недопустимая операция. Остальные выходы управляют различными блоками процессора - АЛУ, регисты, блок обмена с шиной и тд.

Матрица содержит только комбинационную логику, то есть никаких триггеров и прочих элементов памяти внутри нет, если на вход поданы аргументы, то на выходе появляется 34 результата. При некотором упрощении матрицу можно рассматривать как небольшое ПЗУ.

Дла анализа микрокода было любопытно посмотреть как меняется адрес микрокоманды, там всего 128 адресов (7 бит входного аргумента), для этого написал программку которая перебирает все возможные комбинации на входе и смотрит на какие следующие адреса микрооперации возможен переход. Если срабатывает признак недопустимой операции, то происходит безусловный переход на микроадрес 0x7E и генерируется немаскируемое исключение. Было подсчитано количество совершающихся переходов к каждому адресу. Также были исключены адреса на которых нет перехода или все переходы сопровождались признаком недействительной операции. Получилась совершенно небольшая табличка, ведь было возможно целых 16384 комбинации, но почти все отсеялось - осталась только узкая тропинка реального execution flow.

В первой колонке исходный адрес микрооперации (откуда переходим), в следующих колонках адреса назначения (куда переходим) и количество вариантов - всего в сумме до 2^24 (осталось 31-7 - 24 разряда исходного операнда матрицы). Если все переходы в подкатегории сопровождаются признаком недействительной операции, то стоит знак звездочки '*', то есть фактический переход осуществляется на адрес 0x7E. Аппаратный сброс процессора вызывает старт микропрограммы с адреса 0x7F. Есть подозрение что адрес инвертирован - логично было бы начать с 0x00, но уже довольно трудоемко модифицировать модель и утилиты, а для анализа особой разницы инверсия не привнесет.


01 15:01000000
04 6E:01000000
05 15:00800000 57:00800000
14 50:00800000 6E:00800000
15 6E:00800000 7E:00800000
25 3A:01000000
26 28:00060000 2E:00200000 38:002A0000 6E:00160000 7E:009A0000
27 28:000B4000 2E:00200000 38:0024C000 6E:00294000 7E:0086C000
28 38:01000000*
2A 37:00C00000 38:00400000*
2E 6E:00200000 7E:00E00000
2F 2E:00400000 48:00400000 4C:00400000 4E:00400000
31 7B:01000000
32 37:01000000
33 32:00800000 37:00800000
36 28:000A6000 38:0048A000 6E:0015A000 7E:00976000
37 48:0003C000 4D:00008000 4E:00004000 66:00200000 68:0030A000 6D:00002000 6E:00A96000 6F:00016000
38 25:00200000 31:00400000 39:00400000 7B:00600000
39 31:00800000 7B:00800000
3A 2A:00400000 32:00400000 33:00400000 37:00200000 38:00200000*
3D 31:00800000 7B:00800000
3E 46:00116C00 47:00107C40 4E:00200620 66:004F8500 67:002FC400 6E:003EBFA0 6F:00000900
3F 6E:01000000
41 38:01000000*
42 60:01000000
43 42:01000000
45 3C:01000000*
46 14:01000000
47 46:01000000
48 05:00004000 15:00002000 38:00018000* 45:00018000 47:00020000 49:00420000 4E:00100000 4F:00614000 55:00002000 58:00100000 6E:002A8000 78:00018000 7E:00044000
49 15:00004000 38:00008000* 46:003D0000 47:00080000 48:00008000 49:00004000 4E:00340000 4F:0002C000 55:00008000 57:00004000 58:000F8000 6E:006A0000 78:00020000 7E:00068000
4B 38:01000000*
4C 4B:00480000 4F:00580000 6A:00180000 6E:00480000
4D 4F:00040000 6E:00FC0000
4E 36:01000000
4F 26:01000000
50 41:00400000 48:00400000 49:00400000 51:00400000
51 42:00400000 43:00400000 52:00800000
52 53:01000000
53 54:01000000
54 45:00600000 47:00800000 55:00200000
55 05:00200000 45:00200000 47:00400000 4E:00200000 4F:00200000 6E:00400000
57 38:01000000*
58 48:00800000 59:00800000
59 47:00400000 4D:002B0000 4F:00950000
5C 47:00800000 57:00800000
5D 5F:01000000
5E 5D:01000000
5F 6E:01000000
60 75:01000000
61 74:01000000
62 63:01000000
63 6C:01000000
65 3E:01000000
66 6E:01000000
67 3C:01000000*
68 61:01000000
6A 37:00C00000 3F:00400000
6B 68:01000000
6C 6B:01000000
6D 3C:01000000*
6E 7E:01000000
6F 46:00C00000 66:00400000
70 6E:01000000
74 43:01000000
75 6E:00800000 70:00800000
78 38:01000000*
7B 3A:00E00000 4F:00200000
7C 43:00DF7F00 47:00208100
7E 04:0001E000 25:00003800 27:00006800 2F:00000400 38:001BC620 3A:00010300 47:00000040 48:00000C40 4E:00001900 50:00000100 58:00004000 5E:00400000 62:00400000 6C:00400000 7E:00204960
7F 7E:01000000

Итого получился 71 осмысленный адрес (некоторую часть еще можно выкинуть), всего 154 осмысленных перехода, это уже можно как-то анализировать и нарисовать алгоритмы исполнения различных инструкций PDP-11. Анализ микрокода также понадобится для выяснения интимных подробностей о 1801ВМ1Г.

Titus
25.03.2015, 10:34
Крутень) ВМ2 в такой же коробочке с бантиком хачу)