170 likes | 200 Views
CS 61C: Great Ideas in Computer Architecture (Machine Structures) Control Implementation. Instructors: Randy H. Katz David A. Patterson http://inst.eecs.Berkeley.edu/~cs61c/fa10. Agenda. Datapath Control Administrivia Technology Break Controller Implementation. Agenda. Datapath Control
E N D
CS 61C: Great Ideas in Computer Architecture (Machine Structures)Control Implementation Instructors:Randy H. KatzDavid A. Patterson http://inst.eecs.Berkeley.edu/~cs61c/fa10 Fall 2010 -- Lecture #27
Agenda • Datapath Control • Administrivia • Technology Break • Controller Implementation Fall 2010 -- Lecture #27
Agenda • Datapath Control • Administrivia • Technology Break • Controller Implementation Fall 2010 -- Lecture #27
31 26 21 16 0 op rs rt immediate 1 0 = ALU 0 0 WrEn Adr 1 1 Data Memory Extender Single Cycle Datapath during Store • Data Memory {R[rs] + SignExt[imm16]} = R[rt] Instruction<31:0> instr fetch unit nPC_sel= RegDst= <0:15> <21:25> <16:20> <11:15> clk Rd Rt Rs Rt Rd Imm16 ALUctr= zero RegWr= Rs Rt MemtoReg= 5 5 5 MemWr= busA 32 Rw Ra Rb busW 32 RegFile busB 32 32 clk 32 imm16 Data In 16 32 clk ALUSrc= ExtOp= Fall 2010 -- Lecture #26
31 26 21 16 0 op rs rt immediate 1 0 = ALU 0 0 WrEn Adr 1 1 Extender Data Memory Single Cycle Datapath during Branch • if (R[rs] - R[rt] == 0) then Zero = 1 ; else Zero = 0 Instruction<31:0> instr fetch unit nPC_sel= RegDst= <0:15> <21:25> <16:20> <11:15> clk Rd Rt Rs Rt Rd Imm16 ALUctr= zero RegWr= Rs Rt MemtoReg= 5 5 5 MemWr= busA 32 Rw Ra Rb busW 32 RegFile busB 32 32 clk 32 imm16 Data In 16 32 clk ALUSrc= ExtOp= Fall 2010 -- Lecture #27
31 26 21 16 0 op rs rt immediate Inst Memory Adr MUX ctrl 00 PC Q: What logic gate? Instruction Fetch Unit at the End of Branch • if (Zero == 1) then PC = PC + 4 + SignExt[imm16]*4 ; else PC = PC + 4 Instruction<31:0> nPC_sel Zero • What is encoding of nPC_sel? • Direct MUX select? • Branch inst. / not branch • Let’s pick 2nd option nPC_sel 4 Adder 0 Mux 1 Adder imm16 clk PC Ext Fall 2010 -- Lecture #27
31 26 25 0 J-type jump op target address Single Cycle Datapath during Jump • New PC = { PC[31..28], target address, 00 } Instruction<31:0> Jump= Instruction Fetch Unit nPC_sel= Rd Rt <0:15> <0:25> <21:25> <16:20> <11:15> Clk RegDst = 1 0 Mux Rt Rs Rd Imm16 TA26 ALUctr = Rs Rt RegWr = MemtoReg = 5 5 5 busA Zero MemWr = Rw Ra Rb busW 32 32 32-bit Registers 0 ALU 32 busB 32 0 Clk Mux 32 Mux 32 1 WrEn Adr 1 Data In 32 Data Memory Extender imm16 32 16 Clk ALUSrc = ExtOp = Fall 2010 -- Lecture #27
31 26 25 0 J-type jump Inst Memory Adr Adder Mux Adder op target address Instruction Fetch Unit at the End of Jump • New PC = { PC[31..28], target address, 00 } Jump Instruction<31:0> nPC_sel Zero nPC_MUX_sel How do we modify thisto account for jumps? 4 00 0 PC 1 Clk imm16 Fall 2010 -- Lecture #27
Agenda • Datapath Control • Administrivia • Technology Break • Controller Implementation Fall 2010 -- Lecture #27
Agenda • Datapath Control • Administrivia • Technology Break • Controller Implementation Fall 2010 -- Lecture #27
Agenda • Datapath Control • Administrivia • Technology Break • Controller Implementation Fall 2010 -- Lecture #27
Given Datapath: RTL Control Instruction<31:0> Inst Memory <0:5> <21:25> <16:20> <11:15> <0:15> <26:31> Adr Op Fun Rt Rs Rd Imm16 Control ALUctr MemWr MemtoReg ALUSrc RegWr RegDst ExtOp nPC_sel DATA PATH Fall 2010 -- Lecture #27
Summary of the Control Signals (1/2) instRegister Transfer add R[rd] R[rs] + R[rt]; PC PC + 4 ALUsrc=RegB, ALUctr=“ADD”, RegDst=rd, RegWr, nPC_sel=“+4” sub R[rd] R[rs] – R[rt]; PC PC + 4 ALUsrc=RegB, ALUctr=“SUB”, RegDst=rd, RegWr, nPC_sel=“+4” ori R[rt] R[rs] + zero_ext(Imm16); PC PC + 4 ALUsrc=Im, Extop=“Z”, ALUctr=“OR”, RegDst=rt,RegWr, nPC_sel=“+4” lw R[rt] MEM[ R[rs] + sign_ext(Imm16)]; PC PC + 4 ALUsrc=Im, Extop=“sn”, ALUctr=“ADD”, MemtoReg, RegDst=rt, RegWr, nPC_sel = “+4” sw MEM[ R[rs] + sign_ext(Imm16)] R[rs]; PC PC + 4 ALUsrc=Im, Extop=“sn”, ALUctr = “ADD”, MemWr, nPC_sel = “+4” Beq if (R[rs] == R[rt]) then PC PC + sign_ext(Imm16)] || 00 else PC PC + 4 nPC_sel = “br”, ALUctr = “SUB” Fall 2010 -- Lecture #27
add sub ori lw sw beq jump RegDst 1 1 0 0 x x x ALUSrc 0 0 1 1 1 0 x MemtoReg 0 0 0 1 x x x RegWrite 1 1 1 1 0 0 0 MemWrite 0 0 0 0 1 0 0 nPCsel 0 0 0 0 0 1 ? Jump 0 0 0 0 0 0 1 ExtOp x x 0 1 1 x x Subtract ALUctr<2:0> Add Subtract Or Add Add x 31 26 21 16 11 6 0 R-type op rs rt rd shamt funct add, sub immediate I-type op rs rt ori, lw, sw, beq J-type op target address jump Summary of the Control Signals (2/2) See func 10 0000 10 0010 We Don’t Care :-) Appendix A op 00 0000 00 0000 00 1101 10 0011 10 1011 00 0100 00 0010 Fall 2010 -- Lecture #27
Boolean Expressions for Controller RegDst = add + subALUSrc = ori + lw + swMemtoReg = lwRegWrite = add + sub + ori + lw MemWrite = swnPCsel = beqJump = jump ExtOp = lw + swALUctr[0] = sub + beq (assume ALUctr is 00 ADD, 01: SUB, 10: OR)ALUctr[1] = or Where: rtype = ~op5 ~op4 ~op3 ~op2 ~op1 ~op0, ori = ~op5 ~op4 op3 op2 ~op1 op0lw = op5 ~op4 ~op3 ~op2 op1 op0sw = op5 ~op4 op3 ~op2 op1 op0beq = ~op5 ~op4 ~op3 op2 ~op1 ~op0jump = ~op5 ~op4 ~op3 ~op2 op1 ~op0 add = rtype func5 ~func4 ~func3 ~func2 ~func1 ~func0sub = rtype func5 ~func4 ~func3 ~func2 func1 ~func0 How do we implement this in gates? Fall 2010 -- Lecture #27
Controller Implementation opcode func RegDst add ALUSrc sub MemtoReg ori RegWrite “OR” logic “AND” logic MemWrite lw nPCsel sw Jump beq ExtOp jump ALUctr[0] ALUctr[1] Fall 2010 -- Lecture #27
Summary: Single-cycle Processor • Five steps to design a processor: 1. Analyze instruction set datapath requirements 2. Select set of datapath components & establish clock methodology 3. Assemble datapath meeting the requirements 4. Analyze implementation of each instruction to determine setting of control points that effects the register transfer. 5. Assemble the control logic • Formulate Logic Equations • Design Circuits Processor Input Control Memory Datapath Output Fall 2010 -- Lecture #27