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

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

Декодирование инструкции (B-тип)

Рассмотрим декодирование инструкции B-типа на примере инструкции "bge ra, sp, 0x2B2". При этом адрес инструкции - 0x2A6.

Инструкция в формате "hex": 0x0020D663.



  • RVI инструкция (instr_rvc = 0).
  • Операндами АЛУ являются значения регистров ra и sp (ialu_op = 1).
  • Операция АЛУ - больше или равно (ialu_cmd = 0xA)
  • Операнды для вычисления адреса ветвления - значение счетчика команд и непосредственное значение (sum2_op = 0).
  • Запись в MPRF не осуществляется (rd_wb_sel = 0).
  • Поскольку инструкция выполняет ветвление branch_req = 1.
  • Первый регистр-операнд - x1 (rs1_addr = 1).
  • Второй регистр-операнд - x2 (rs1_addr = 2).
  • Непосредственное значение - 12 (imm = 0xC).

Oстальные поля не имеют значения для данной инструкций.

Декодирование инструкции (U-тип, auipc)

В стандартном наборе инструкций RV32I существует две инструкции U-типа: "lui" и "auipc".

Рассмотрим декодирование инструкции "auipc a0, 0xFFFFE". При этом адрес инструкции - 0x2C0.

Инструкция в формате "hex": 0xFFFFE517.



  • RVI инструкция (instr_rvc = 0).
  • Сложение счетчика команд и непосредственного значения происходит без использования АЛУ, по данной причине ialu_cmd = 0, а sum2_op = 0.
  • Источником данных для MPRF является выход сумматора "sum2" (rd_wb_sel = 2).
  • Регистр-назначение - x10 (rs1_addr = 0xA).
  • Непосредственное значение - 4294959104 (imm = 0xFFFFE000).

Остальные поля не имеют значения для данной инструкций.

Декодирование инструкции (U-тип, lui)

Рассмотрим декодирование инструкции "lui ra, 0x80000" Инструкция в формате "hex": 0x800000B7.



  • RVI инструкция (instr_rvc = 0).
  • Источником данных для MPRF является непосредственное значение (rd_wb_sel = 3).
  • Регистр-назначение - x1 (rs1_addr = 1).
  • Непосредственное значение - 2147483648 (imm = 0x80000000).

Остальные поля не имеют значения для данной инструкций.

Декодирование инструкции (J-тип)

Единственной инструкцией J-типа в стандартном наборе RV32I является инструкция "jal"

Рассмотрим декодирование инструкции "jal tp, 2AE". При этом адрес инструкции - 0x2A4.

Инструкция в формате "hex": 0x00A0026F.



  • RVI инструкция (instr_rvc = 0).
  • Операнды для вычисления адреса прыжка - значение счетчика инструкций и непосредственное значение (sum2_op = 0).
  • Источник данных для MPRF - инкрементированный счетчик инструкций (rd_wb_sel = 4).
  • Поскольку инструкция выполняет прыжок jump_req = 1.
  • Регистр-назначение - x4 (rs1_addr = 4).
  • Непосредственное значение - 10 (imm = 0xA).

Остальные поля не имеют значения для данной инструкций.

Выполнение инструкции

На стадии выполнения инструкции происходят следующие операции:

  • Выборка операндов из MPRF.
  • Aрифметические и логические операции.
  • Операции чтения/записи памяти данных.
  • Управление потоком инструкций (изменение счетчика инструкций).
  • Запись результатов.

Чтение данных из MPRF


Регистровый файл (MPRF) может быть реализован на основе памяти с асинхронным чтением (Dтриггеры). В данном случае декодированные адреса регистров-операндов сначала записываются в конвейерный регистр, разделяющий стадии декодирования и выполнения, а затем направляются в MPRF.


Другой вариант реализации - на основе SRAM. В таком случае адреса регистров-операндов направляются в MPRF со стадии декодирования, т.к. задержка чтения составляет 1 такт. Считанные данные отправляются напрямую на стадию выполнения.