Skip to content

Latest commit

 

History

History
40 lines (30 loc) · 5.43 KB

mdu.md

File metadata and controls

40 lines (30 loc) · 5.43 KB

Документация на блок miriscv_mdu

Общее описание модуля

Модуль miriscv_mdu (multiplication division unit) предназначен для выполнения операций деления и умножения. Параметры модуля описаны в таблице 1, порты в таблице 2.

Таблица 1. Параметры модуля miriscv_mdu

Название параметра Значение по умолчанию Назначение
XLEN 32 Разрядность шины данных
MDU_OP_W 3 Разрядность кода инструкции для MDU
MDU_MUL 0 Код операции умножения со знаком с сохранением битов  [XLEN-1:0]  от результата
MDU_MULH 1 Код операции умножения со знаком с сохранением битов  [2*XLEN-1:XLEN]  от результата
MDU_MULHSU 2 Код операции умножения знакового операнда на беззнаковый с сохранением битов  [2*XLEN-1:XLEN]  от результата
MDU_MULHU 3 Код операции беззнакового умножения с сохранением битов  [2*XLEN-1:XLEN]  от результата
MDU_DIV 4 Код операции деления на знаковое число с округлением в меньшую сторону
MDU_DIVU 5 Код операции деления на беззнаковое число с округлением в меньшую сторону
MDU_REM 6 Код операции вычисления остатка от деления на знаковое число
MDU_REMU 7 Код операции вычисления остатка от деления на беззнаковое число

Далее в тексте под делением будут подразумеваться все разновидности этой операции ( DIV, DIVU, REM, REMU ).

Таблица 2. Порты модуля miriscv_mdu

Название сигнала Разрядность Назначение
mdu_req_i 1 Запрос на выполнение операции в mdu
mdu_port_a_i XLEN Первый операнд для выполнение инструкции в mdu
mdu_port_b_i XLEN Второй операнд для выполнение инструкции в mdu
mdu_op_i MDU_OP_W Идентификатор операции для mdu (opcode)
mdu_kill_i 1 Сигнал сброса операции деления при конфликте по управлению
mdu_keep_i 1 Сигнал для сохранения результатов деления и предотвращения повтора вычислений
mdu_result_o XLEN Вывод результата вычислений
mdu_stall_req_o 1 Сигнал приостановки конвейера для решения структурного конфликта при выполнении операции деления

Функциональное описание модуля

Умножение в данном модуле выполняется комбинационно. Деление происходит оптимально и выполняется итерационно за 32 такта. Из за итерационного выполнения деления ( результат не готов после одного такта ) возникает структурный конфликт, который решается приостановкой конвейера сигналом mdu_stall_req_o (таблица 2 )