120 likes | 335 Views
Homework #5 + solution. Question 1:. Convert to DLX assembly (Assume that variables i, k correspond to registers 19
E N D
Question 1: • Convert to DLX assembly (Assume that variables i, k correspond to registers 19 20, and that the array save starts at address Sstart) while (save[i]==save[k-i]) i = i+1;
Solution while ( save[i] == save[k-i] ) i=i+1; addi r4 r0 Sstart add r1 r4 r19 sub r2 r20 r19 add r3 r4 r2 lw r5 r1 0 lw r6 r3 0 xor r7 r5 r6 bnez r7 2 addi r19 r19 1 beqz r0 -9 Address of save[0] = Sstart
Question 2: • Consider the ALU environment in the DLX datapath. • (a) List the tasks performed by the ALU in every control state. • (b) List the control signals that are input to the ALU by the control. • (c) Bonus: Implement the ALU environment.
ALU: Control Signals • Signals that control the functionality of the ALU: • ALUF[2:0] • add (active during states: Decode, AluI, Adr.Comp., B.Taken,SavePC, JR, JALR). • test (active during states: TestI). ALUF[2:0] – arithmetic / logical ALU operations 011 add 010 sub 110 and 101 or 100 xor ALUF[2:0] – test conditions 001 gt 010 eq 011 ge 100 lt 101 ne 110 le IR[2:0] = func[2:0] IR[28:26] = opcode[2:0]
OR(32) XOR(32) OR MUX(32) AND(32) INV MUX(32) Comparator(32) MUX(32) Next slide MUX(32) ALU: Implementation MUX(32)
ZERO(32) Comparator INV AND AND AND INV AND OR ALU: Implementation (cont’) OR
Question 3: • Consider all the instructions of the DLX. Register B in the datapath is loaded during the Decode state without taking into consideration the current instruction. • (a) Specify the instructions in which register B must be loaded. • (b) Explain why the functionality is correct if register B is loaded also during instructions in which it need not be loaded. • (c) Can you explain the decision to always load register B.
“Register B” • The instructions in which register B is loaded: • add • sub • and • or • xor • store Register B is not involved in computations during instructions in which it need not be loaded. Therefore, functionality is correct. Loading register B always (during Decode state), shortens the length of the path in the Control State Machine when executing instructions that need register B loaded.
“Register B” – Setting ce=1 or Removing The functionality of the DLX is not damaged due to (1) setting always Bce=1, or (2) Removing register B. • Consider the execution of the ith instruction: • The IR register outputs the ith instruction from the beginning of the Decode state (of the ith instruction) till the end of the first clock cycle in the Fetch state (of the i+1st instruction). • Therefore, the address of the register which is loaded into register B is not changed during the execution of the ith instruction. • Register B content is relevant only for R-type instructions (and Store inst.). • Therefore, we may consider the address of the register which is loaded into register B , as <RS2>. • We refer only to R-type instructions.
We may conclude: If (1) RS2 is not changed, and (2) The GPR Env. outputs the content of RS2, Then, Register B outputs the content of RS2 (=RS2 @ beginning of the ith instruction). • Two cases may damage the functionality: • The content of RS2 is changed. • May happen only during WBR state in which the output of reg. B (the content of RS2) is irrelevant anymore. Therefore, functionality is not damaged. • 2. The GPR Env. doesn’t output the content of RS2. • May happen only during a write operation to the GPR - Only during WBR state in which the output of reg. B (the content of RS2) is irrelevant anymore. Therefore, functionality is not damaged. Register B is necessary for minimizing the clock period.