vak: (Default)
[personal profile] vak
МЭСМ-6 уже проходит несколько тестов: работают команды uj, vtm, utm, mtj, vzm, v1m, j+m, vjm, vlm, utc, wtc.

Я добавил в фазу decode автоматическое приращение счётчика команд (PC), теперь некоторые команды выполняются за один такт (vtm, utm, mtj. j+m).

Описание микроархитектуры по мере разработки постепенно образуется на странице: https://github.com/besm6/mesm6/wiki/Microarchitecture

Date: 2019-03-18 16:15 (UTC)
x86128: (Default)
From: [personal profile] x86128
Наваял альфа-версию компилятора микрокода для logisim версии МЭСМ-6. На языке Crystal (можно довольно легко переделать на python). В logisim есть ограничение на максимальную ширину регистра, памяти и т.д. в 32-бита (поэтому придется немного мудрить и отходить от исходного варианта на SystemVerilog). Падает от любого синтаксического чиха, поэтому пока причесываю.
Идея немного похожа на микрокод микро-бэсм:
На входе файл

; uop field definitions
field imm 9
; src selector for write input of M registers
field sel_md 3 pc acc reg reg_plus1 reg_minus1 va ua
; write M flag
field w_m 1

; microcode word layout
uword imm sel_md w_m

vector reset
op w_m

opcode xta 0
op sel_md acc imm 10
op imm 511
op w_m
op imm 5

opcode uj 67
op imm 123 w_m


Получается такой выхлоп

Lines processed: 21
Fields:
{"imm", Field(@name="imm", @sz=9, @selectors={})}
{"sel_md", Field(@name="sel_md", @sz=3, @selectors={"pc" => 0, "acc" => 1, "reg" => 2, "reg_plus1" => 3, "reg_minus1" => 4, "va" => 5, "ua" => 6})}
{"w_m", Field(@name="w_m", @sz=1, @selectors={})}
UWord layout: {"imm" => 0, "sel_md" => 9, "w_m" => 12}
UWord size: 13 bits
Vectors:
{"reset", 0}
{"xta", 1}
{"uj", 5}
Jump table 16:
0: 0
1: 0
2: 0
3: 5
4: 0
5: 0
...
Jump table 64:
0: 1
1: 0
2: 0
3: 0
4: 0
5: 0
6: 0
...
ROM:
1000000000000
0001000001010
0000111111111
1000000000000
0000000000101
1000001111011
0000000000000
0000000000000
0000000000000
0000000000000
0000000000000


Далее хочу начать рисовать провода :) в logisim вокруг секвенсера микрокода.

Date: 2019-03-19 02:31 (UTC)
x86128: (Default)
From: [personal profile] x86128
В 32-бита это скорее всего какое-то историческое наследие logisim и изначальной версии java. Причем там совсем недавно исправили баг сложения двух 32-х битных чисел. Оригинальным разработчиком проект заброшен, но выложен в открытый доступ. На основе открытого проекта развивается logisim-evolution группой энтузиастов. Именно в этой версии я пробую делать МЭСМ.

По поводу переписывания генератора. Если коротко, хочу сделать интерактивный эмулятор (всмысле возможности подключения к нему через WebSocket из браузера, например, к эмулируему UART порту). Задача генератора в данном случае использована как разминка.

Date: 2019-03-19 03:08 (UTC)
x86128: (Default)
From: [personal profile] x86128
VHDL мне тоже не нравится.

Согласен, что для разработки железа лучше использовать соотв. инструменты, особенно когда задача получить именно железку на выходе.
С другой стороны если можно будет пощупать через веб, то почему бы не разработать эмулятор с возможностью работы через веб. И набор тулов для "удаленной" разработки и отладки. Своего рода МЭСМ-6 as a Service :)

Crystal собирается LLVM поэтому работает очень быстро (на всех платформах, кроме windows), несмотря на то, что там есть GC с алгоритмом Mark@Sweep. Можно будет эмулятор крутить на очень слабой VPS с коллективным доступом через виртeальные UART :)