Опубликован: 04.08.2025 | Доступ: свободный | Студентов: 7 / 0 | Длительность: 02:58:00
Лекция 5:

Разработка цифровых ИС на примере микроконтроллерного ядра SCR1 - прgграммное обеспечение

Уровни абстракции программного кода


Язык ассемблера RISC-V

  • Для взаимодействия с процессорным ядром на самом близком к машинным инструкциям уровне используется язык ассемблера.
  • Ассемблер представляет собой набор инструкций, которые могут оперировать с регистрами, непосредственными значениями, а также с памятью устройства.
  • Регистры можно разделить на: целочисленные (x0-x31) и CSR- регистры контроля и статуса.

Наименование регистров

Регистр Псевдоним Назначение
x0 zero Фиксированный ноль
x1 ra Адрес возврата
x2 sp Указатель стека
x3 gp Глобальный указатель
x4 tp Указатель потока
x5-x7 t0-t2 Временные регистры
x8-x9 s0-s1 Сохраняемые регистры
x10-x11 a0-a1 Аргументы функций/возвращаемые значения
x12-x17 a2-a7 Аргументы функций
x18-x27 s2-s11 Сохраняемые регистры
x28-x31 t3-t6 Временные регистры

Язык ассемблера RISC-V

Oсновные инструкции RV32I

Формат кодирования основных инструкций выглядит следующим образом:


Поля rs1 и rs2 - операнды, rd - регистр, в который будет записан результат операции.

Целочисленные инструкции

Большинство целочисленных инструкций работают с данными длиной XLEN (32 или 64) бит, которые хранятся в целочисленных регистрах.


Примеры

addi t0, t1, 0x100 -> t1 + 0x100
addi s0, s1, 0 <=> mv s0, s1
andi s1, s2, 0xf -> s2 & 0xf
ori a0, s1, 1 -> s1 | 1
xori s5, a0, 5 -> a0 ^ 5
  • Инструкция addi rd, rs1, imm - складывает значение в регистре rs1 с числом imm (12 бит) и помещает в rd. Существует псевдоинструкция mv rd, rs1, которая интерпретируется компилятором как addi rd, rs1, 0;
  • Инструкции andi rd, rs1, imm, ori rd, rs1, imm и xori rd, rs1, imm выполняют побитовые логические операции И, ИЛИ и Исключающее ИЛИ соответственно.

Примеры

slli s0, s5, 4 -> сдвиг влево на 4 бита
srli a0, t0, 2 -> сдвиг вправо на 2 бита
srai s1, s1, 2 -> арифметический сдвиг вправо на 2 бита
  • Операции логических сдвигов: slli rd, rs1, imm выполняет побитовый сдвиг числа в rs1 на imm бит и помещает результат в rd. srli rd, rs1, imm действует аналогично, но выполняется сдвиг вправо.
  • Операция арифметического сдвига вправо: srai rd, rs1, imm действует аналогично srli, но с сохранением знака.