Информация об изменениях

Сообщение Re[2]: Свой процессор на ПЛИС от 10.02.2016 7:48

Изменено 10.02.2016 8:03 0x7be

Здравствуйте, qwertyuiop, Вы писали:


Q>А какая в нем система команд?

RISC-подобная система команд, в общей сложности 60 команд.

Юзеру доступно восемь регистров общего назначения (R0-R7), плюс несколько специальных: SP (stack pointer), OP (object pointer), BP (base pointer).
Вся арифметика/логика только над регистрами. Загрузка/выгрузка регистров осуществляется в следующих режимах:
0. Инициализация регистра константой.
1. По константному адресу.
2. Косвенная адресация через регистр (любой из доступных).
4. Косвенная адресация со смещением от указателя OP или BP (смещение — либо константа, либо из регистра).

(Без)условные переходы либо константному адресу, либо через регистр.

Поддерживается работа со стеком: CALL/RET, PUSH/POP. В стек кладётся не только адрес возврата, но и адрес указателя на начало стекового фрейма. Благодаря этому можно не заботиться о выталкивании из стека лишнего при вызове RET — стек автоматически восстановится в нужное состояние.
Прерывания, обработка ошибок и т.п. пока не реализованы, работа на будущее.
Как-то так, вроде основные моменты осветил.


Q>Команды и данные в одной памяти или в разных?

В одной.

0>>
  • Ширина адреса: 16 бит, максимально адресуемая память — 128К (65536 двухбайтовых слов). Отдельные байты не адресуются.
    Q>Смелое решение. Я тоже как-то думал, что сейчас байты не нужны, в USB используется UTF-16 поэтому работать нужно в ней. А во многих сигнальных процессорах байтов нет уже давно.
    Это решение исключительно для упрощения схемы процессора. Поскольку я ориентируюсь на систему уровня Intel 80080/Zilog Z80, в ней байтовая адресация всё ещё актуальна.
    У меня в планах стоит разработать третью версию процессора, в которой я реализую ещё ряд фич, в т.ч. и байтовую адресацию.
  • Re[2]: Свой процессор на ПЛИС
    Здравствуйте, qwertyuiop, Вы писали:


    Q>А какая в нем система команд?

    RISC-подобная система команд, в общей сложности 60 команд.

    Юзеру доступно восемь регистров общего назначения (R0-R7), плюс несколько специальных: SP (stack pointer), OP (object pointer), BP (base pointer).
    Вся арифметика/логика только над регистрами. Загрузка/выгрузка регистров осуществляется в следующих режимах:
    UPDATE: Арифметика/логика так же есть в режме "регистр и константа".

    0. Инициализация регистра константой.
    1. По константному адресу.
    2. Косвенная адресация через регистр (любой из доступных).
    4. Косвенная адресация со смещением от указателя OP или BP (смещение — либо константа, либо из регистра).

    (Без)условные переходы либо константному адресу, либо через регистр.

    Поддерживается работа со стеком: CALL/RET, PUSH/POP. В стек кладётся не только адрес возврата, но и адрес указателя на начало стекового фрейма. Благодаря этому можно не заботиться о выталкивании из стека лишнего при вызове RET — стек автоматически восстановится в нужное состояние.
    Прерывания, обработка ошибок и т.п. пока не реализованы, работа на будущее.
    Как-то так, вроде основные моменты осветил.

    UPDATE: Код "Hello world":
    Label    Command    Arg1    Arg2    
    TTY      const      0FC00h
             nop            
             init       R0      msg    
    loop     ldi        R1      R0    
             cmpc       R1      0    
             je         exit        
                    
             str        R1      TTY    
             inc        R0        
             jmp        loop        
                    
    exit     jmp        exit   
                    
    msg      string     Hello, World!        
             dw         10        
             stringz    Have a nice day.        
             END PROGRAM






    Q>Команды и данные в одной памяти или в разных?

    В одной.

    0>>
  • Ширина адреса: 16 бит, максимально адресуемая память — 128К (65536 двухбайтовых слов). Отдельные байты не адресуются.
    Q>Смелое решение. Я тоже как-то думал, что сейчас байты не нужны, в USB используется UTF-16 поэтому работать нужно в ней. А во многих сигнальных процессорах байтов нет уже давно.
    Это решение исключительно для упрощения схемы процессора. Поскольку я ориентируюсь на систему уровня Intel 80080/Zilog Z80, в ней байтовая адресация всё ещё актуальна.
    У меня в планах стоит разработать третью версию процессора, в которой я реализую ещё ряд фич, в т.ч. и байтовую адресацию.