У меня есть схема пути данных MIPS с одним циклом, которая была разработана таким образом, чтобы она могла легко обрабатывать такие инструкции, как lw, sw
и add
, среди других.
Например, когда мы хотим определить контрольные значения, мы видим, что lw
- это инструкция I-Type
.
- Это означает, что у нас есть команда, идущая из «Памяти инструкций» в блок управления (с кодом OP), другая команда входит в «Чтение регистра 1», другая - в «Чтение». Зарегистрируйте 2 'и последний в' Расширение знака '.
lw
записывает из памяти в регистр, таким образом, «RegWrite» = 1 и, следовательно, «RegDst» также равен 1. - MemtoReg также равен единице, так как мы идем из памяти для регистрации и ALUOp для
lw
равно 00
. - Наше значение ALUSr c также равно 1, потому что мы берем строку из 'Sign Extend' (из-за непосредственных инструкций
I Type
). - Нет
branch
или jump
, поэтому Branch = Jump = 0. Это завершает контрольные значения для lw
.
Однако lw
не является сложной инструкцией и может быть легко реализована, а значения управления могут быть легко определены. Однако как это работает для более сложных инструкций, таких как bgtz
? Из того, что я понимаю, bgtz
- это инструкция I-типа, потому что она имеет регистр источника и регистр назначения, а также непосредственное значение (метка, где мы должны go, если утверждение истинно). Путь показан красным, но я не уверен, что он правильный. Я также уверен, что мне не хватает другого аппаратного обеспечения, которое сделает возможным bgtz. Однако для контрольных значений я уверен, что:
- ALUOp =
- RegWrite = 0
- MemtoReg = x
- MemWrite = x
- RegDst = x
- ALUSr c = 1
- Ветвь = 1
- Прыжок = 0
Мои данные Диаграмма пути выглядит следующим образом:
Мне нужно понять, как мы можем реализовать bgtz здесь и каковы будут контрольные значения. В более общем смысле, как мы можем реализовать различные инструкции в этой диаграмме пути данных, такие как lui, xor, et c ...