add指令的译码过程
add指令译码需要设置的三方面内容如下(addu、sub、subu指令的译码过程可以参考add指令)
(1)要读取的寄存器情况:add指令需要读取rs、rt寄存器的值,所以设置reg1_read_o、reg2_read_o为1.默认通过regfile模块读端口1读取的寄存器地址reg1_addr_o的值是指令的第21-25bit,正是add指令中的rs,默认通过regfile模块读端口2读取的寄存器地址reg2_addr_o的值是指令的第16-20bit,正是add指令中的rt所以最终译码阶段的输出reg1_o就是地址为rs的寄存器的值,reg2_o就是地址为rt的寄存器的值。
(2)要执行的运算:add指令是算数运算中的加法操作,所以此处将alusel_o赋值为EXE_RES_ARITHMETIC,aluop_o赋值给EXE_ADD_OP
(3)要写入的目的寄存器:add指令需要将结果写入目的寄存器,所以设置wreg_o为WriteEnable,设置wd_o为要写入的目的寄存器地址,默认是指令字的第11-15bit ,正是add指令中的rd。
addi指令的译码过程
addi指令译码需要设置的三方面内容如下(addiu、subi、subiu指令的译码过程可以参考addi指令)
(1)要读取的寄存器情况:addi只需要读取rs寄存器的值,所以设置reg1_read_o为1、reg2_read_o为0.默认通过regfile模块读端口1读取的寄存器地址reg1_addr_o的值是指令的第21-25bit,正是addi指令中的rs。设置reg2_read_o为0,表示使用立即数作为参与运算的第二个操作数。imm就是指令中的立即数进行符号拓展后的值。所以最终译码阶段的输出reg1_o就是地址为rs的寄存器的值,reg2_o就是imm的值。
(2)要执行的运算:addi指令是算术运算中的加法操作,所以此处将alusel_o赋值为EXE_RES_ARITHMETIC,aluop_o赋值为EXE_ADDI_OP。
(3)要写入的目的寄存器:addi指令需要将结果写入目的寄存器,所以设置wreg_o为WriteEnable,设置要写入的目的寄存器地址wd_o是指令中第16-20bit的值,正是addi指令中的rt。
slt指令的译码过程
slt指令的译码需要设置三方面内容如下(sltu指令的译码过程可以参考slt指令)
slti指令的译码过程
mult指令的译码过程
mul指令的译码过程
clo指令的译码过程
程序用R0计中断次数,并取显示码到p1口进行显示,计次到15即满,停止计数