1、Project3 Logisim完成单周期处理器开发实验报告一总体设计二模块定义(1)IFU(2)GPR(3)ALU(4)EXT(5)DM(6)Controller四控制器设计单周期真值表Func 1 0 0 0 0 0 1 0 0 0 1 0 N/AOp 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 1 1 0 0 0 1 0 0 0 0 1 1 1 1add sub ori lw sw beq luiRegDst 1 1 0 0 X X 0ALUSrc 0 0 1 1 1 0 1MemtoReg 0 0 0 1 X X XRegWrite 1 1
2、1 1 0 0 2MemWrite 0 0 0 0 1 0 0nPC_sel 0 0 0 0 0 1 0ExtOp X X 0 0 0 X 1ALUctr Add Subtract Or Add Add Subtract X五测试要求1 6 .测试程序lui $ t0 ,0 x0 0 0 4 #lui测试程序要实现:立即数0 x0 0 0 4加载至t0寄存器的高位lui $ t1 ,0 x0 0 0 8 #lui测试程序要实现:立即数0 x0 0 0 8加载至t1寄存器的高位ori $ t3 ,$ zero,0 x0 0 0 0 2 0 0 0 #ori测试程序要实现:zero寄存器中的内容与
3、立即数0 x0 0 0 0 2 0 0 0进行或运算,储存在t3寄存器中sw $ t0 ,4 ($ t3 ) #sw测试程序要实现:把t0寄存器中值(1 Word),存储到t3的值再加上偏移量4 ,所指向的RAM中sw $ t0 ,8 ($ t3 ) #sw测试程序要实现:把t0寄存器中值(1 Word),存储到t3的值再加上偏移量8 ,所指向的RAM中loop:add $ t2 ,$ t2 ,$ t1 #add测试程序要实现:t1寄存器中的值加上t2寄存器中的值后存到t2寄存器中lw $ t4 ,4 ($ t3 ) #lw测试程序要实现:把t3寄存器的值+4当作地址读取存储器中的值存入t4l
4、ui $ t5 ,0 x0 0 0 4 #lui测试程序要实现:立即数0 x0 0 0 4加载至t5寄存器的高位sub $ t7 ,$ t6 ,$ t5 #sub测试程序要实现:t6寄存器中的值减去t5寄存器中的值后存到t7寄存器中add $ t0 ,$ t0 ,$ t5 #sub测试程序要实现:t0寄存器中的值减去t5寄存器中的值后存到t0寄存器中add $ t6 ,$ t6 ,$ t0 #add测试程序要实现:t6寄存器中的值加上t0后存到t6寄存器中beq $ t0 ,$ t1 ,loop #beq测试程序要实现:判断t0的值和t1的值是否相等,相等转loopadd $ t0 ,$ t0
5、 ,$ t5 #add测试程序要实现:t0寄存器中的值加上t5后存到t0寄存器中lui $ v0 ,0 x0 0 0 1 #lui测试程序要实现:立即数0 x0 0 0 1加载至v0寄存器的高位lui $ v1 ,0 x0 0 0 2 #lui测试程序要实现:立即数0 x0 0 0 2加载至v1寄存器的高位add $ v0 ,$ v0 ,$ v1 #add测试程序要实现:v0寄存器中的值加上v1后存到v0寄存器中add $ v1 ,$ v0 ,$ v1 #add测试程序要实现:v0寄存器中的值加上v1后存到v1寄存器中ori $ a0 ,$ v0 ,0 xffff #ori测试程序要实现:v0
6、寄存器中的内容与立即数0 xffff进行或运算,储存在a0寄存器中sub $ a1 ,$ a0 ,0 x0 0 0 0 ffff #sub测试程序要实现:a0寄存器中的值减去立即数0 x0 0 0 0 ffff后存到a1寄存器中loop2 :sub $ a2 ,$ v1 ,$ v0 #sub测试程序要实现:v1寄存器中的值减去v0中的值后存到a2寄存器中add $ a1 ,$ a2 ,$ a1 #add测试程序要实现:a2寄存器中的值加上a1后存到a1寄存器中beq $ a1 ,$ v1 ,loop2 #beq测试程序要实现:判断a1的值和v1的值是否相等,相等转loop2机器码:3 c0 8
7、 0 0 0 4 3 c0 9 0 0 0 8 3 4 0 b2 0 0 0 ad6 8 0 0 0 4 0 1 4 9 5 0 2 0 8 d6 c0 0 0 4 3 c0 d0 0 0 4 0 1 cd7 8 2 2 0 1 0 d4 0 2 0 0 1 c8 7 0 2 0 1 1 0 9 fff90 1 0 d4 0 2 0 3 c0 2 0 0 0 1 3 c0 3 0 0 0 2 0 0 4 3 1 0 2 0 0 0 4 3 1 8 2 0 3 4 4 4 ffff 3 c0 1 0 0 0 0 3 4 2 1 ffff 0 0 8 1 2 8 2 2 0 0 6 2 3 0 2
8、 2 0 0 c5 2 8 2 01 0 a3 fffdMARS模拟结果:Logism:GPR: DM:六、问答1 8 .对于Figure5、Figure6中的与或阵列来说,1个3输入与门最终转化为2个2输入与门,1个4输入与门最终转化为3个2输入与门,依次类推。或阵列也类似计算。那么a)请给出采用Figure5、Figure6中的方法设计的每个控制信号所对应的2输入与门、2输入或门、非门的数量。1 9 . 2输入与门2输入或门非门RegDst 1 7 1 1 0RegWrite 3 2 4 1 0ALUsrc 2 0 3 5PCsrc 5 0 5MemWrite 5 0 2MemRead 5 0 3MemtoReg 5 0 3ExtOp 1 5 2 4ALUctr1 1 0 1 3ALUctr0 2 1 2 9a)请与第1 7项对比,你更喜欢哪种设计方法。为什么第一种的每个控制信号都需要对其分配单独的与门、或门,因为它是直接对op、func的1 2位或6位信号的逻辑表达式,所以没有针对性并且浪费元件。而第二种是先把op、func变成相应的指令信号,再由指令信号生成控制信号。当一种指令对应多种控制信号为1时,不必再对每个信号再单独为这个指令分配与门,而可以共用这个指令的信号,再添加或门就可以了。