Только одна инструкция МПА - условный переход по состоянию входного сигнала(номер задается в команде), параллельно на 1 такт выставляются выходные сигналы(соответствующе поля в команде).
Назначения входных и выходных сигналов в самом МПА не предопределены - определяются логикой управляемого устройства.
Мнемоника ассемблерных команд:
метка_перехода входной_сигнал //переход, если сигнал == 1
метка_перехода ~входной_сигнал //переход, если сигнал == 0
метка_перехода* //безусловный переход
выходной_сигнал //сигнал = 1 (на 1 такт)
В одной команде можно задать один входной и/или несколько выходных сигналов:
метка_перехода [~]входной_сигнал_N; выходной_сигнал_NN; выходной_сигнал_NNN; ...
Пример ассемблерной программы инициализации PS/2 мыши(14 команд) для МПА(~25 LUT),
рабочая или нет - не помню(сеичас нормальный софт-процессор инициализирует):
Код
output //выходные сигналы - по порядку номеров
clra //сброс адреса rom-памяти кодов инициализации
clk0 clk1 //сброс/установка шины ps2_clock
clrc //сброс таймера (счетчика тактов)
ld //загрузить сдвиговый регистр
sr //сдвиг, выход на шину ps2_data
input //входные сигналы - по порядку номеров
eof //cтоп-бит
c8 c11 c17 //соотв. разряды таймера
clkin //шина ps2_clock
micro //указание на код МПА
{ // { } формируют область видимости меток
clra //addr=0
word:
clk0; clrc //ps2_clock = 0; counter = 0;
{w: w clkin} //while(ps2_clock == 1);
{w: w ~c11} //while(counter[11] == 0);
ld; clrc //shiftreg=rom[addr++]; counter = 0;
{w: w ~c11}
clk1 //ps2_clock = 1;
{w: w ~clkin}
{w: w clkin}
bit:
nextw c17
bit ~c8
bit*; sr
nextw:
word ~eof
loop: loop* //while(1); //останов
}
end