Опубликован: 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, но с сохранением знака.