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

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

Выполнение инструкции (S-тип)


Рассмотрим выполнение инструкции Sтипа "sb ra, 5(sp)" (0x001102A3).

  • Декодированная инструкция (управляющие сигналы, адреса операндов и т.д.) направляется на стадию выполнения.
  • Из регистрового файла считывается два операнда: "rs1" = 0x600, "rs2" = 0xFFFFFFAB.

  • Операнды i_alu_addr_op1 и i_alu_addr_op2 направляются в сумматор для вычисления адреса записи (i_alu_addr_res = 0x605). Операнды для вычисления адреса - непосредственное значение и регистроперанд rs1.
  • В модуль чтения/записи (LSU) направляется запрос (lsu_req = 1) на запись одного байта (lsu_cmd = 6) по ранее вычисленному адресу. Данные для записи - данные из регистра-операнда rs2.
  • LSU формирует запрос к памяти данных (exu2dmem_req_o = 1) на запись (exu2dmem_cmd_o = 1) одного байта (exu2dmem_width_o = 0) по адресу exu2dmem_addr_o = 0x605. Память данных подтверждает запрос (exu2dmem_req_ack_i = 1).

  • На следующем такте (задержка может быть произвольной) память данных сообщает об успешности записи (dmem2exu_resp_i = 1).
  • LSU выставляет флаг готовности (lsu_rdy = 1).
  • Инструкция считается выполненной (exu2pipe_instret_o = 1).
  • Блок выполнения готов принять новую инструкцию (exu2idu_rdy_o = 1).
  • Счетчик инструкций будет инкрементирован с приходом фронта тактового сигнала.

Упрощенная схема выполнения инструкции:


Выполнение инструкции (B-тип)


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

  • Декодированная инструкция (управляющие сигналы, адреса операндов и т.д.) направляется на стадию выполнения.
  • Из регистрового файла считывается два операнда: "rs1" = 0, "rs2" = 0.

  • Считанные операнды i_alu_main_op1 и i_alu_main_op2 направляются в АЛУ для их сравнения. Результат сравнения содержит сигнал ialu_cmd = 1
  • Адрес ветвления вычисляется в отдельном сумматоре. Операнды - текущее значение счётчика команд и непосредственное значение. Результат: ialu_addr_res = 0x2B2.
  • Так как условие ветвления выполнено (ialu_cmd = 1), блок выполнения передает блоку выборки запрос на новый адрес инструкции (exu2ifu_pc_new_req_o = 1) и сам адрес (exu2ifu_pc_new_o = 0x2B2).
  • Данное значение с приходом фронта тактового сигнала также примет счётчик инструкций. 80 Выполнение инструкции (B-тип)

  • Аналогично инструкции "jalr" необходимо очистить очередь инструкций и передать памяти инструкций запрос по новому адресу.

Упрощенная схема выполнения инструкции:


Выполнение инструкции (U-тип, auipc)


Рассмотрим выполнение инструкции Uтипа "auipc a0, 0xFFFFE" (0xFFFFE517). При этом адрес инструкции - 0x2C0.

  • Декодированная инструкция (управляющие сигналы, адреса операндов и т.д.) направляется на стадию выполнения.
  • Выборка операндов из MPRF не требуется.

  • Операндами в данном случае являются счетчик инструкций и непосредственное значение.
  • Операнды "i_alu_addr_op1" и "i_alu_addr_op2" направляются в сумматор для вычисления результата (i_alu_addr_res = 0xFFFFE2C0).
  • С приходом фронта тактового сигнала вычисленный результат запишется в регистр-назначение в MPRF, а счетчик инструкций инкрементируется.

Упрощенная схема выполнения инструкции:


Выполнение инструкции (U-тип, lui)


Рассмотрим выполнение инструкции Uтипа "lui ra, 0x80000" (0x800000B7).

  • Декодированная инструкция (управляющие сигналы, адреса операндов и т.д.) направляется на стадию выполнения.
  • Выборка операндов из MPRF не требуется.

  • С приходом фронта тактового сигнала в MPRF записывается непосредственное значение, а программный счетчик инкрементируется.

Упрощенная схема выполнения инструкции: