1、R-类型、I-类型和J-类型R-类型格式:* 所有指令操作吗OP都是0;特定操作由funct决定。* 机器语言指令中,字段分配格式如上图;前两个寄存器rs、 rt 是源寄存器,rd是目的寄存器。而在汇编语言格式中,第一个 寄存器是目的寄存器。 如:add $t0,$s4,$s5 #rd=rs+rt,t0=s4+s5; I-类型格式:* 指令含4个字段;op, rs, rt 和 imm* 有两个寄存器操作数和一个16位立即数操作数,一些指令中,rt也可作为源寄存器。J-类型格式:* 有一个26位立即数操作数,扩展后形成目的地址。 4.算逻单元ALU的设计ALU工作原理图* 两级控制:通过系统控制
2、器(Control) 和运算器控制器(ALU Control)产生 ALU的控制信号:ALUoper* ALU控制信号对照表:ALUopFunc(来自R型指令的func字段)操作ALUop1ALUop2F5F4F3F2F1F0010:ADD1110:SUB000:AND001: OR111:SLT5.单周期数据通路的构建 1)构件:PC、指令存储器、寄存器文件RF和数据存储器; 2)取指令的过程:PCIM: A/RD 3)取源操作数的过程: IM:RDRF:A1/RD1。4)立即数的符号扩展的过程: IM:RD(Instr:15:0)Sign Extend(15:0Signimm31:0);
3、其中Signimm15:0=Instr15:0, Signimm31:16=Instr155)存储器地址计算: 6)向寄存器文件写入数据 RegWrite信号被置成1,写入过程在时钟周期最后的时钟上升沿完成。 7)形成PC的下地址 指令占4个字节,字编址。6.单周期控制器的构建 控制单元基于指令中的opcode字段(31:26)、funct字段(5:0)产生控制信号;主译码的真值表。见下图: 7.完整的单周期MIPS处理器三.设计过程1.指令集设计R型指令指令序号指令译码结果(B)存储指令(H)add $s0,$s1,$s2000000 10001 10010 10000 00000 1000
4、00023280201sub $t0,$t1,$t2000000 01001 01010 01000 00000 100010012a40222and $s3,$s4,$s5000000 10100 10101 10011 00000 100100029598243or $s0,$s6,$s7000000 10110 10111 10000 00000 10010102d780254xor $t3,$t4,$t5000000 01100 01101 01011 00000 100110018d58265slt $t7,$t5,$t6000000 01101 01110 01111 00000
5、10101001ae782a6nor $t7,$t5,$t6000000 01101 01110 01111 00000 10011101ae782713srl $t0,$s1,$t5000000 10001 01101 01000 00000 000010022d400214sll $t0,$s1,$t2000000 10001 01010 01000 00000 000000022a400017inc $t0,$t6000000 01110 00000 01000 00000 00001101c0400318dec $t0,$t5000000 01101 00000 01000 00000
6、 00010001a04004I型指令7lw $s0,1($t1)100011 01001 10000 00000000 000000018d3000018sw $t1,1($t1)101011 01001 01001 00000000 00000001ad29000110addi $t0,$t1,1001000 01001 01000 00000000 000000012128000111beq $t1,$t1,1000100 01001 01001 00000000 0000000111290001J型指令15J 17000010 0000000000000000000 001000108
7、0000112.MIPS 32位单周期处理器结构设计CPU设计结构图如下:信号说明:a1:pc中的指令的地址送往IM去寻找指令a2:pc产生的下一条指令的地址a3:pc中指令的地址加4a4:取pc中指令的地址加4后的高六位b1:取J型指令的低26位b2:操作码字段高六位b3:第一个源操作数的寄存器地址,R型的21-25位,I型的21-25位b4:第二个源操作数的寄存器地址,R型的16-20位,I型指令的目的寄存器地址,16-20位b5:R型指令的目的寄存器地址,11-15位b6:I型指令的立即数,0-15位b7:R型指令的低六位,0-5位b8:b4和b5经二路选择器二选一b20:从IM中取出来
8、的指令内容c1:I型指令将16位立即数扩展成32位c2:存入目的寄存器的内容c3:从源寄存器1中取出的内容c4:从源寄存器2中取出的内容c5:c1和c4二选一c6:ALU计算出的结果,也是读DM的地址c7:从DM中取出的内容c8、c9:针对不同类型的指令对进行pc值的修正的选择d1:功能选择信号e类信号:主操作控制信号,主要是各部件的读写控制信号核心模块说明:IM:按序号存放指令(共17条,其中lw指令执行了两次),在CPU启动时从12765432161920212223152425262728293031DM:数据存储器,存储情况见下表(十进制表示,单数行是地址序号,双数行是对应的存储值):
9、tRf:测试模块,用于输出指令执行结果以检验是否正确;IRf:测试模块,用于输出当前执行的指令,与tRf搭配使用。四.代码分析1. Add /完成分支指令的目标地址计算/library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity add is Port ( a: in STD_LOGIC_VECTOR (31 downto 0); b : y : out STD_LOGIC_VECTOR (31 downto 0);end add;architecture Behavioral of add isbeginy=a + b;-将a和b相加赋给yend Behavioral;2. Add4 /完成PC+1(采用字寻址)的计算/entity Add4 isport(pcin:in std_logic_vector(31 downto 0); pcout:out std_logic_vector(31 downto 0);end Add4;architecture behave of Add4 isprocess(pcin)beginpcout = pcin + 1;-pc值的修改end proces
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1