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

1. PC и TR переопределяются как регистры с DFFE.

2. определяются действия по умолчанию:

DEFAULTS
    RStack.cmd[] = GND; -- всегда nop
    DStack.cmd[] = GND; -- всегда nop
    PC[].ena = GND;  -- PC не меняется
    TR[].ena = GND;  -- TR не меняется
END DEFAULTS;


CASE CMD[3..0] IS
    WHEN 0 => -- команда 0
        RCMD[] = DI[];
        PC[] = PC[] + 1; PC[].ena = VCC;
    WHEN 1 => -- команда 1
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        PC[] = PC[];
    WHEN 2 => -- команда 2
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        PC[] = PC[];
    WHEN 3 => -- команда 3
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        PC[] = PC[];
    WHEN 4 => -- команда 4
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        PC[] = PC[];
    WHEN 5 => -- команда 5
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        PC[] = PC[];
    WHEN 6 => -- команда 6
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        PC[] = PC[];
    WHEN 7 => -- команда 7
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        PC[] = PC[];
    WHEN 8,9,10,11,12,13,14,15 => остальные команды
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        PC[] = PC[];
END CASE; 