Computer Architecture: ECE 3055 Sample Problems and Solutions 1 Consider the execution of the following block of SPIM code. The text segment starts at 0x00400000 and that the data segment starts at 0x10010000. .data start: .word 0x32, 44, Top, 0x33 str: .asciiz “Top” .align 8 end: .space 16 .text .globl main main: Top: exit: li $t3, 4 la $t0, start la $t1, end lw $t5, 0($t0) sw $t5, 0($t1) addi $t0, $t0, 4 addi $t1, $t1, 4 addi $t3, $t3, -1 bne $t3, $zero, Top li $v0 syscall 1 (a) Show the addresses and corresponding contents of the locations in the data segment that are loaded by the above SPIM code. Clearly associate addresses and corresponding contents. Data Segment Addresses Data Segment Contents 0x10010000 0x00000032 0x10010004 0x0000002c 0x10010008 0x00400010 0x1001000c 0x00000033 0x10010010 0x00706f54 0x10010014 0x00000000 0x10010018 0x00000000 0x1001001c 0x00000000 0x10010020 0x00000000 0x10010024 0x00000000 The value in 0x10010008 depends on how the preceding instructions are emcoded. “la $t1, end” is encoded into two instructions while “la $t0, start” is encoded into one instruction. As long as your assumptions are consistent you shouldnot lose points. Everything else is 0x00000000 upto and beyond 0x10010100 (this is the point of the .align 8 directive) 1 (b) What are the values of the following. exit 0x00400028 Top 0x00400010 addi $t3, $t3, -1 (encoding) 0x216bffff 1 (c) Provide a set of data directives that will perform the memory allocation implied by the following high level language declarations. • character My_Char; integer Limit; .data .byte 0x00 .align 2 .word 0x0 • integer array[10]; .data .space 40 ** Note there are many solutions * 1 (d) Given the following sequences, what is the range of feasible addresses for the label target on the MIPS architecture? start: . . . target: beq$1, $2, target add$4, $5, $6 sub$6, $4, $8 start + 8 <= target =< start+4 +215-1 (words) 1 (e) What i s the difference between the j and jal instructions? Both instructions work identically with regard to the program control flow, i.e., which instruction is executed next and how he address fields of the instruction are endcoded. The jal instruction also causes the value of PC+4 to be stored in register $31. 2 The following is block of SPIM code to compute the sum of the elements of a diagonal in a matrix stored as shown. For the matrix shown below the sum in $t2 should end up being 1+12+23+34 = 70. Fill in any missing pieces of code to complete the program. Use any additional registers as necessary to keep track of the number of loop iterations and any other information you require. You may complete your code on the next page as necessary. If does not have to fit on the spaces shown. You cannot change the loop body. Remember there are many distinct, correct, feasible solutions! .data row1: row1: row1: row1: .word 1,2,3,4 .word 11,12,13,14 .word 21,22,23,24 .word 31,32,33,34 .text la $t0, row1 li $t6, 20 # load offset to next diagonal element (16+4) li $t7, 4 # load counter for number of elements loop: lw $t1, 0($t0) add $t2, $t2, $t1 #loop body that performs the sum add $t0, $t0, $t6 addi $t7, $t7, -1 bne $t7, $0, loop # check if all elements have been accessed li $v0, 10 # exit the program syscall 3 Consider the following MIPs code taken from some program. We wish to turn this piece of code into a procedure. Note that no procedure call conventions have been followed and the procedure must be re-written to follow the MIPs procedure call conventions. procA: lw $12, 0($8) sw $12, 0($15) addi $8, $8, 4 addi $15, $15, 4 addi $16, $16, -1 bne $16, $0, procA jr $31 3 (a) What registers will have to be saved on the stack by the procedure if the MIPS register procedure call convention is to be followed and you do not modify the code shown above? $s0, $fp (assuming we use the frame pointer). $ra does not have to saved since no other procedure/ function is called. 3 (b) Which registers are used to pass parameters to this procedure? How many registers do you think will be required for parameter passing ? The values of $8, $15, and $16 would be required in the procedure and are passed using registers $a0, $a1, and $a2. 3 (c) If the procedure is stored in memory starting at location 0x00400020, what will be the encoding of the jal procA instruction that is in the calling program? 0x0c100008 4 Consider the execution of the following block of SPIM code on a multicycle datapath. The text segment starts at 0x00400000 and that the data segment starts at 0x10010000. Assume immediate instructions take 4 cycles. start: str: main: move: end: done: .data .word 21, 22, 23,24 .asciiz “CmpE” .align 4 .word 24, 0x77 .text .globl main li $t3, 4 lui $t0, 0x1001 lui $t1, 0x1002 lw $t5, 0($t0) sw $t5, 0($t1) addiu $t0, $t0, 4 addiu $t1, $t1, 4 addi $t3, $t3, -1 bne $t3, $zero, move 4 (a) Fill in the following values at the end of the requested cycle. Assume that the first cycle of program execution is cycle number 0! Cycle ALUSrcA ALUOp RegWrite Instruction Register IorD 14 1 00 0 0x8d0d0000 X 35 1 01 0 0x1560fffb X 4 (b) Show the addresses and corresponding contents of the locations in the data segment that are loaded by the above SPIM code. Clearly associate addresses and corresponding contents. Data Segment Addresses Data Segment Contents 0x10010000 0x00000015 0x10010004 0x00000016 0x10010008 0x00000017 0x1001000c 0x00000018 0x10010010 0x45706d43 0x10010014 0x00000000 0x10010018 0x00000000 0x1001001c 0x00000000 0x10010020 0x00000018 0x10010024 0x00000077 4 (c) Show a sequence of SPIM instructions that will branch to the label loop if the contents of register $t0 is 13. addi $t1, $t0, -13 beq $t1, $zero, loop 4 (d) What are the values of end, done, start, and main? start: 0x10010000 main: 0x00400000 end: 0x00400020 done: 0x00400024 4 (e) What does the following bit pattern represent assuming that it is one of the following. 10101101 00101101 00000000 00000000. Provide your answer in the form indicated. A single precision IEEE 754 floating point number (show actual value in scientific notation) ____-1.0101101 x 2-37_________ A MIPS instruction (show in symbolic code) _sw $t5, 0($t1)__________ 5 Consider the execution of the following block of SPIM code on a multicycle datapath. The text segment starts at 0x00400000 and that the data segment starts at 0x10010000. Assume immediate instructions take 4 cycles. start: str: main: move: end: done: .data .word 21, 22, 23,24 .asciiz “CmpE” .align 4 .word 24, 0x77 .text .globl main li $t3, 4 lui $t0, 0x1001 lui $t1, 0x1002 lw $t5, 0($t0) sw $t5, 0($t1) addiu $t0, $t0, 4 addiu $t1, $t1, 4 addi $t3, $t3, -1 bne $t3, $zero, move 5 (a) Fill in the following values at the end of the requested cycle. Assume that the first cycle of program execution is cycle number 0! Cycle ALUSrcB ALUOp RegDst Instruction Register PCWriteCond 9 11 00 X 0x3c091002 0 20 00 00 0 0xad2d0000 0 5 (b) Show a sequence of SPIM instructions to implement the following: x = a[i*4], where a[i] is the access of element i from array a[]. Use whatever register allocation you need. .text add $t5, $t0, $t0 # $t0 contains the value of i add $t5, $t5, $t5 # two additions to compute i*4 add $t5, $t5, $t5 # two additions to compute i*8 add $t5, $t5, $t5 # two additions to compute i*16 add $t1, $t5, $t3 # base address contained in $t3 lw $t2, 0($t1) # value of x stored in $t2 5 (c) What does the following bit pattern represent assuming that it is one of the following. 00111100 00001101 00010000 00000000. Provide your answer in the form indicated. A single precision IEEE 754 floating point number (show actual value in scientific notation) ____1.00011010001 x 2-7_________ A MIPS instruction (show in symbolic code) _lui $t5, 0x1000__________ 6 Answer the following questions with respect to the MIPS program shown below. Assume that the data segment starts at 0x10010000 and the text segment starts at 0x00400000. .data L1: .word 0x32, 104 .asciiz “Test 1” .align 2 Blank: .word L2: .space 64 main: loop: .text li $t0, 4 move $t2, $zero li $a0, 1 jal solo addi $t0, $t0, -1 addi $a0, $a0, 1 add $t2, $t2, $v0 slt $t1, $t0, $zero bne $t1, $zero, loop li $v0, 10 syscall 6 (a) How much space in bytes does the program occupy in the data segment and text segment? Data segment (21 words, 84 bytes) - remember must also count reserved space Text segment (11 words, 44 bytes) 6 (b) With respect to the above program, • what are the values of the following? L2 _____0x10010014____________ loop ______0x0040000c___________ memory location 0x1001000c ______0x00003120__________ • What information would be stored in the symbol table for the above program? Be specific about the above program. Do not provide a generic answer. Upon completion of compilation, the label solo and its address (relative to the start of this module). This is information to be used by the linker to find and link the module corresponding to solo. 6 (c) What is the encoding of the following instructions? bne $t1, $zero, loop ____0x1520fffa____________ add $t0, $t0, $v0 _____0x01024020__________ 6 (d) Which of the instructions in the above program, if any, must be identified as requiring relocation information ? The jal instruction since this is the only instruction that relies on absolute addresses. 6 (e) Suppose the procedure solo is independently compiled as a separate module. When it is linked with the main program the first instruction in solo is placed in memory at address 0x0040100c. Provide the hexadecimal encoding of the jal solo instruction. 0x0c100403 7 Consider the program shown on the previous question. You have probably noticed that it does not follow the MIPS register saving convention. Rewrite the code showing any changes that would be required by the MIPS register saving conventions. .data L1: .word 0x32, 104 .asciiz “Test 1” .align 2 Blank: .word L2: .space 64 main: loop: .text li $t0, 4 move $t2, $zero li $a0, 1 subu $sp, $sp, 32 sw $t0, 0($sp) sw $t2, 8($sp) sw $a0, 12($sp) sw $t1, 16($sp) jal solo lw $t0, 0($sp) lw $t2, 8($sp) lw $t1, 16($sp) lw $a0, 12($sp) addu $sp, $sp, 32 addi $t0, $t0, -1 addi $a0, $a0, 1 add $t2, $t2, $v0 slt $t1, $t0, $zero bne $t1, $zero, loop li $v0, 10 syscall 7 (a) What is the difference between the jal and j instructions? The execution of the jal instruction also causes the return address to be saved in $ra. The target address is computed in the same manner for both instructions. 8 Answer the following questions with respect to the MIPS program shown below. For the purpose of this test, assume that each instruction can be stored in one word, i.e., do not worry about pseudo instructions! Further, assume the data segment starts at 0x1001000 and that the text segment starts are 0x04000000. L2: .data .word 24, 0x16 .byte, 77,66,55,44 .text move $t0,$0 loop: mul $t8, $t0, 4 add $t1, $a0, $t8 sw $0, 0($t1) addi $t0, $t0, 1 slt $t7, $t0, $a1 bne $t7, $0, loop 8 (a) What are the values of the labels L2 and Loop? L2 __0x10010008__________ loop ___0x04000004___________ 8 (b) Provide the hexadecimal encodings of the following instructions? bne $t7, $0, loop 0x15e0fffa add $t1, $a0, $t8 0x00984820 8 (c) Show the contents of the data segment. Show both addresses and values at those addresses. 0x10010000 0x18 0x10010004 0x16 0x10010008 0x2c37424d 8 (d) The instruction BLT (Branch on less than or equal too) is not a native instruction. Show the SPIM code that could be used to implement this test. ble $t2, $t3, loop slt $t1, $t3, $t2 beq $t1, $0 loop 9 (20 pts) This question deals with procedure calls. Consider the following SPIM program segment. For the purpose of this test, assume that each instruction can be stored in one word, i.e., do not worry about pseudo instructions! Further, assume the data segment starts at 0x1001000 and that the text segment starts are 0x04000000. .data first: .word 0x33, 0x2 .byte 4, 3, 0, 0 str: .ascii”Final” .text main: li $t0, 4 move $a0, $t0 loop jal func move $a0, $v0 slt $a0, $0, $t9 bne $t0, $0,loop li $v0, 10 syscall func: addi $a0, $a0, -1 move $v0, $a0 jr $ra 9 (a) Consider the first time the procedure func is called. What is the contents of $ra when the program is executing func. 0x0400000c 9 (b) Based on the MIPS register saving conventions which registers should be stored on the stack in the calling stack frame when func is called. $t0, $t9, $a0 Note in this case $a0 is stored as a matter of convention since the calling procedure is not relying on the availavbility of the value that $a0 contained before the call. 10 Answer the following questions with respect to the MIPS program shown below. Assume that the data segment starts at 0x10010000 and that the text segment starts at 0x00400000. Assume that the instruction done is encoded in one word. .data label: .word 24, 28 .byte 64, 32 .asciiz “Example Program” .text main: jal push jal pop done pop: ret1: lw $fp, 0($sp) lw $ra, 4($sp) addiu $sp, $sp, 32 jr $ra push: subiu $sp, $sp, 32 sw $fp, 0($sp) sw $ra, 4($sp) ret2: jr $ra 10 (a) Write the values of the words stored at the following memory locations. Provide your answer in hexadecimal notation. Word Address Value _0x10010008________ ___78452040____ _0x0040000c________ ___8fbe0000____ _0x00400000________ ___0c100007_________ 10 (b) Consider the process of assembly of the above program. • What would the symbol table contain? All of the labels that the linker needs to know about: push and pop and main (for programs where the loader creates code that jumps to main). We do not need to store labels from the data segment. • Assuming that the memory map is fixed, what relocation information would be recorded if any? The jal instructions generate absolute addresses and must have relocation information stored to permit placement of the program starting elsewhere in memory. 10 (c) What are the values of the following labels? ret1 ____0x00400018___________ push ____0x0040001c___________ 10 (d) Assume that the procedures push and pop were assembled in a distinct file and linked with the main program. Further assume that the procedures were placed in memory starting at location 0x00400040. Provide the encoding of the ‘jal pop’ instruction. 0x0c100010 11 (a) Provide the MIPS code to do the following. • implement the greater-than-or-equal-to-zero test using only native instructions. Example for a general test of $t0 greater-than-or-equal-to $t1 slt $t2, $t0, $t1 bne $t2, $0, False j True Where True and False are the labels of the instructions that correspond to the blocks of code to be executed depending on the outcome of the test. • initialize a register to the value 0x33334444. move $t0, $zero lui $t0 0x3333 ori $t0, $t0, 0x4444 11 (b) Provide two advantages and two disadvantages of RISC vs. CISC machines. From text 12 Answer the following questions with respect to the MIPS program shown below. Assume that the data segment starts at 0x10010000 and the text segment starts at 0x00400000. .data first: .word 0x21, 32 .byte 4, 3 .align 2 str: .ascii”Test” .text main: li $4, 4 loop: jal func slt $7, $0, $4 bne $7, $0,loop end: li $v0, 10 syscall func: addi $4, $4, -1 jr $31 12 (a) What function does the last two instructions in the main program realize? Program Exit. Ref SPIM documentation 12 (b) With respect to the above program, • what are the values of the following symbols? end __0x00400014_____________ loop __0x04000004_____________ func __0x04000018_____________ str __0x1001000c_____________ • What is the total number of bytes required for this program, both data segment and text segment storage? data segment - 16 text segment - 32 12 (c) What is the encoding of the following instructions? bne $7, $0, loop __0x14e0fffd__________ jal func ___0x0c100006________ addi $4, $4, -1 ___0x2084ffff_________ 12 (d) Using only native instructions, how can you implement the following test: branch-ongreater-than-or-equal-to-5? Example: slt $t2, $t0, $t1 bne $t2, $0, False j True Where True and False are the labels of the instructions that correspond to the blocks of code to be executed depending on the outcome of the test. 13 Consider the case where Procedure A calls procedure B, and procedure B calls procedure C. Procedures A and B both use registers $15, $16, $17 and $24, and procedure C uses registers $9, $10, and $11. The top of the stack initially points to the top of an active frame. 13 (a) Show the contents of the stack when Procedure C is executing. Assume the MIPS register saving conventions as defined in the text. State, or clearly indicate the number of stack frames and which registers are saved by each procedure. 7FFFFFFC $sp $15 $24 saved by A $16 $17 stack grows down saved by B $15 $24 C’s stack frame Note: I have not shown the procedures saving $ra and $fp which should be illustrated. Procedure C does not use any of the $sx registers and does not call other procedures. Therefore C does not need to save any of the registers. 13 (b) Would callee save have been more efficient? Justify your answer. No. Each procedure would have to save all the registers used in the procedure. This is clearly less efficient, e.g., look at procedure C. 14 Consider the execution of the following block of SPIM code on a multicycle datapath. Assume that the text segment starts at 0x00400000 and that the data segment starts at 0x10010000. Assume that registers $7, $8 and $9 have initial values 16, 0x10010020, and 0x10020020 respectively. str: move: end: .data .asciiz “Start” .align 2 .word 24, 0x6666 .text lw $12, 0($8) sw $12, 0($9) addiu $8, $8, 4 addiu $9, $9, 4 addi $7, $7, -1 bne $7, $0, move 14 (a) Fill in the following values at the end of the requested cycle. Assume that the first cycle of program execution is cycle number 1 Cycle ALUSelA ALUOp PCWrite IR (in HEX!) ALUOutput 8 1 00 0 0xad2c0000 0x10020020 20 1 00 0 0x20e7ffff 0xf 14 (b) Show the addresses and corresponding contents of the locations in the data segment that are loaded by the above SPIM code. Clearly associate addresses and corresponding contents. Data Segment Addresses Data Segment Contents 0x10010000 0x72617453 0x10010004 0x00000074 0x10010008 0x00000018 0x1001000c 0x00006666 14 (c) Assume the exception/interrupt handler is stored at location 0x80000020. Provide the SPIM instruction(s) for transferring program control to begin executing instructions at this address. Do not worry about setting the return address. lui $1, 0x8000 addi $1, $1, 0x0020 jr $1 14 (d) If the above code was implemented as a procedure, following the MIPS register saving conventions, which registers, if any, would be saved by the procedure? All of the registers which are used are temp registers and therefore are not saved by the procedure. Since no other procedure is called, there is no need to save the return address regaietrs, $ra. Using the MIPS convention only the frame pointer would be saved in this example. There are sufficient argument registers 14 (e) What does the following bit pattern represent assuming that it is one of the following. 10101101 11110010 00000000 00000000. Provide your answer in the form indicated. A single precision IEEE 754 floating point number (show in scientific notation) ___-1.111001 x 2-36___________ A MIPS instruction (show in symbolic code) __sw $18, 0($15)___________ 15 Consider the execution of the following block of SPIM code on a multicycle datapath. Assume that the text segment starts at 0x00400000 and that the data segment starts at 0x10010000. Assume that registers $7, $8 and $9 have initial values 16, 0x10010020, and 0x10020020 respectively. str: move: end: .data .asciiz “Exams” .align 4 .word 24, 0x6666 .text lw $12, 0($8) sw $12, 0($9) addiu $8, $8, 4 addiu $9, $9, 4 addi $7, $7, -1 bne $7, $0, move 15 (a) Fill in the following values at the end of the requested cycle. Assume that the first cycle of program execution is cycle number 1 Cycle ALUSelB ALUOp RegDst IR (in HEX!) MemToReg 7 11 00 X 0xad2c0000 X 17 10 00 0 0x25290004 0 15 (b) Show the addresses and corresponding contents of the locations in the data segment that are loaded by the above SPIM code. Clearly associate addresses and corresponding contents. Data Segment Addresses Data Segment Contents 0x10010000 0x6d617845 0x10010004 0x00000073 0x10010008 0x00000000 0x1001000c 0x00000000 0x10010010 0x00000018 0x10010014 0x00006666 15 (c) What is the difference between signed and unsigned instructions and what is the moti- vation for making this distinction? Signed instructions interpret operands as 2’s complement numbers They also will set conditions such as overflow, negative, etc. Unsigned numbers will be treated as n bit binary numbers. They will typically not set conditions such as overflow. Certain classes of numbers natually involve unsigned arithmetic, e.g., memory address computations. In order to detect these conditions in some instances and ignore them in others, MIPS uses two different types of instructions. 15 (d) What are the values of end and str? str: 0x10010000 end: 0x00400014 15 (e) What does the following bit pattern represent assuming that it is one of the following. 00101001 10111010 00000000 00000000. Provide your answer in the form indicated. A single precision IEEE 754 floating point number (show in scientific notation) ____1.011101 x 2-44_________ A MIPS instruction (show in symbolic code) _slti $26, $13, 0__________ 16 Answer the following questions with respect to the MIPS program shown below. Note that this simple program does not use the register saving conventions followed in class. Assume that each instruction is a native instruction and can be stored in one word! Further, assume the data segment starts at 0x10001000 and that the text segment starts are 0x00400000. .data label: .word 8,16,32,64 .byte 64, 32 .text .globl main main: la $4, label li $5, 16 jal func done func: loop: move $2, $4 move $3, $5 add $3, $3, $2 move $9, $0 lw $22, 0($2) add $9, $9, $22 addi $2, $2, 4 slt $8, $2, $3 bne $8, $0, loop move $2, $9 jr $31 16 (a) What does the above program do? Sum the elements stored starting at address label 16 (b) State the values of the labels loop and main? 0x00400020 loop __________________________ 0x00400000 main ___________________________ 16 (c) what are the hexadecimal encodings of the following instructions? bne $8, $0, loop 0x1500fffb add $9, $9, $22 0x01364820 16 (d) The above program does not implement any register saving conventions on a procedure call. Assume we will use the MIPS register saving convention i.e., Caller/Callee Save. Ignore the storage of local variables on the stack. What will be the contents of the top frame on the stack when the procedure func is executing? $fp, $22, since no other procedure is called $ra is not stored 16 (e) Identify the local and global labels in the program? main is a global label all other labels are local labels 17 (a) What is an unresolved reference? How and when does it become resolved? A reference to a label that is undefined It is resolved by the linker which has access to all of the labels accessed by the programs being linked 17 (b) Write the SPIM instruction sequence that you could use to implement the branch-ongreater-than-or-equal-to-test. For example, how would implement “bge $7, $6, loop”. slt $1, $7, $6 beq $1, $0, loop 18 Consider the following isolated block of code. Note that some initialization code is missing. .text move: lw $12, 0($8) sw $12, 0($9) addiu $8, $8, 4 addiu $9, $9, 4 addi $7, $7, -1 end: bne $7, $0, move 18 (a) If the text segment starts at 0x04000000, what is the value of the label end?. 0x04000014 18 (b) Let is assume we wish to implement the above function as a procedure. • How many arguments would the procedure have and how would they be passed to this procedure from a calling program? Three passed in argument registers $a0-$a2 • name the registers that would be stored on the stack after this procedure is invoked $7, $8, $9, $12 would have to be stored by the caller, if at all. $fp is the only register that is stored following the steps in the text. 18 (c) Show the hexadecimal encoding of the last instruction. 0x14e0ffffa 18 (d) What does the following bit pattern represent assuming that it is one of the following. 00101100 01110000 11000000 00000000 A single precision IEEE 754 floating point number (in scientific notation)) _1.111000011 x 2-39_________ A MIPS instruction (symbolic code!) _sltiu $16, $3, 0xc000________ 19 Consider the following isolated block of SPIM code. Ignore initialization code. The data segment starts at 0x1001000 and the text segment starts at 0x00400000. Note that this block of code does not use registers saving conventions on a procedure call. start: end: mystery: loop: skip: exit: addi $2, $0, 85 addi $3, $0, 1 jal mystery j exit add $4, $0, andi $5, $2, beq $5, $0, add $4, $4, srl $2, $2, bne $2, $0, jr $31 li $v0, 10 syscall $0 1 skip $3 1 loop 19 (a) What are the values of the following labels?. loop ________0x00400014________ skip _________0x00400020________ 19 (b) What are the encodings of the following instructions? addi $3, $0, 1 __0x20030001______________ beq $5, $2, skip __0x10a00001______________ 19 (c) (6 pts) Let us suppose the procedure mystery is independently compiled and linked when the program is run. After linking the program is stored in memory and mystery has a value of 0x00400010. What is the encoding of the jal mystery instruction. 0x0c100004 19 (d) Which of the following are valid MIPS instructions? If they are invalid you must state the correct form or clearly state why it is incorrect. • lw $t0, $t1($t3) The offset must be a label or numeric constant. Examples of the correct form are: lw $t0, 4($t3) or lw $t0, label2($t3) • sltiu $t1, $t2, 0x44 This is correct. Immediates can be specified in hexadecimal notation or base 10 notations. • bne $t1, label, loop The arguments to the instruction must be registers, or one of the arguments can actually be an immediate. A correct form would be bne $t1, $s3, loop 19 (e) Suppose I want to store the following information in the data segment in the order shown. Show a sequence of SPIM data directives that will correctly do so. The text string, each reserved word and the byte array should be labeled so that programs may reference them easily. • the text string “Enter a SPIM instruction” • reserve space for 4 words • store an array of 16 bytes (pick your own values) str: L1: L2: L3: L4: array: .data .asciiz “Enter a SPIM instruction” .align 2 .space 4 .space 4 .space 4 .space 4 .byte 1,2,3,4,5,6,7,8,9,11,22,33,44,55,66,77 19 (f) (2 pts). In the preceding question (1(f)) what assembler directive would cause the byte array to start on a 64 byte boundary? .align 6 6 this moves allocation to the next 2 byte boundary 19 (g) What does the program in question 1 do? You have to specific and state the function or operation performed. No partial credit. Counts the number of bit set to 1 in $2. 20 (a) What is the difference between native instructions and pseudoinstructions? Native instructions are implemented by the underlying hardware. pseudoinstructions are translated into native instructions by the assembler. pseudoinstructions provide more powerful instructions to the programmer without affecting the complexity of the hardware since they are not interpreted by the hardware. 20 (b) Let us consider the program shown in the previous question. The procedure mystery does not appear to follow any of the SPIM procedure call conventions. If you were to rewrite mystery to follow the MIPS caller/callee saving convention, what registers would you expect to find in the stack frame for mystery while it is executing? Based on our class discussions only $fp. 20 (c) Suppose that a 32-bit integer A is stored in memory, starting at the address given in register $t1, and that another 32-bit integer B is stored in the next sequential word after A. Write a MIPS procedure Swap that exchanges the values A and B in memory if A > B. The procedure should return to its caller when it is finished. Assume a purely caller-save convention for preserving registers is being used. Full credit is the program fits in the table below. Provide comments. label instruction Swap: lw $t0, 0($t1) lw $t2, 4($t1) slt $t3, $t2, $t0 beq $t3, $0, exit sw $t0, 4($t1) sw $t2, 0($t1) exit: jr $31 comment Load A Load B Check if B<A If not true (result=0)exit Swap A and B Return Another solutiojn would expect to find the address of A in $a0 and use this register instead of $t1. Since we are using caller-save and this procedure does not call anyone else, the return address does not need to be saved. With no saving requirements there is no stack frame that needs to be allocated/deallocated. 21 (a) Show the single precision normalized floating point representations of the following numbers. Use the 754 standard and present your solution in hexadecimal notation. -0.875 0.0 0xbf600000__________________________________________________ ____ ___________________________________________________________ -1.03125 ___0xbf840000____________________________________________ 21 (b) Provide the hexadecimal representation of a denormalized number in double precision IEEE 754 notation. What is the purpose of denormalized numbers? 0x00001000 Denormalized numbers are numbers with a value betwee 0 and the smallest number that can be represented. The IEEE 754 convention identifies denormalized numbers with an exponent value of 0 and a non-zero significand. 21 (c) Assuming IEEE 754 rules and conventions, what is the result of the following operation in hexadecimal notation. • 1.101 x 2112 X 1.01 x 212 (note that the exponent values are represented in base 10). Note that the exponents are biased. Thus when we add the exponents we must substract 127 to obtain the correct value of the biased exponent of the product. However when we do this we find that we have 112+12-127 = -3. Since the value of the biased exponent is less that 0, we have underflow. 21 (d) Assuming that we have 6 significant digits (including the implicit bit), does the following calculation produce any error? If so what is the magnitude of the error? 1.001 x 2121 + 1.1 x 2128 After adjusting the expoent value of the smaller number have 1.1000000000 x 2128 + 0.0000001001 x 2128 ------------------1.1000001001 x 2128 With 6 significant digits the answer is 1.1 x 2128 The magnitude of the error is 1.001 x 2121 22 For the following questions, consider the single cycle datapath shown in Figure 5.24 on page 314. The value of loop is 0x00400004, the contents of register $t0, $t1, and $t2 are 0x01000033, 0x00004008, and 0x000000c0, respectively, and the contents of register $1 is 0x10010008 22 (a) Fill in the values of control signals in the following table for each instruction. Instruction j loop sw $t2, 8($at) ALUSrc X 1 ALUOp XX 00 RegDst X X MemToReg X X Write Data Input to Data Memory contents of $16 0x000000c0 The jump instruction does not utilize any portion of the datapath other than the portion that updates the PC with the jump address. However, the register file does utilize bits of the encoded address as register addresses for rs and rt. The input to the write data port of memory is the contents of register rt. Therefore first encode the j instruction to find the value of rt. It will be 16. 22 (b) Errors in fabrication are a major concern in the design of a datapath. Suppose that MemToReg and RegDst multiplexor control signals were stuck at 0, i.e., you cannot assert these signals due to a fabrication defect. Which of the instructions supported by the datapath will still work? sw, beq, and j. This follows from the truth table for the controller. Which rows can still produce valid control signal values? 22 (c) This question deals with the changes to the datapath required to implement the addition of the jal instruction. Full credit requires you to be specific. • what are the structural changes, if any, that must be made to the datapath - We need $31 as a hardwired input address to the RegDst Mux. RegDst is now a 2 bit control signal - We need PC+4 as an input to the MemToReg Mux since it is now a candidate for writing into the register file (into $31). The MemToReg signal is now a 2 bit control signal - The jal control signal is used to select the jump address from the PC source mux. This mux is is expanded to a 2 bit signal. • Show the changes required to the main controller truth table and the PLA implementation of this controller. RegDst AluSrc MemToReg RegWrite MemRead MemWrite Br AluOp Jal 10 X 10 1 0 0 0 XX 1 The PLA implementation illustarted in Figure C.2.5 will be changed to add another gate to recognize the jal instruction. The RegDst and MemToReg outputs must be modified to produce two output signals. The most significant bit is simply the jal while the least significant remains as before. We also introduce a jal output. 23 Consider the state of following procedure executing within the single cycle SPIM data path shown in Figure 5.24 on pg. 314. The first instruction is at address 0x00400440 and registers $4 and $5 contain the values 0x10010440 and 0x00000040 respectively. Assume that all instructions are native instructions. func: loop: end: add $2, $4, $0 add $3, $5, $0 add $3, $3, $2 add $9, $0, $0 add $22, $0, $0 lw $22, 0($2) add $9, $9, $22 addi $2, $2, 4 beq $3, $2, end j loop move $2, $9 jr $31 23 (a) Fill in the values of the signals shown for the following instructions (first time through the loop). Instruction ALUOutput Value at the Write Data Input of Data Memory beq $3, $2, end 0x0000003c 0x100100444 X 01 0 X lw $22, 0($2) 0x10010440 0x00000000 0 00 1 1 RegDst ALUOp ALUSrc MemTo Reg 23 (b) Suppose in our design the controller was implemented in a separate chip. Due to a fabrication defect the MemToReg control signal has been found to be defective. What modifications can we make to any part of the datapath (excluding the controller) such that the datapath still functions correctly. (Hint: This is equivalent to asking how can I get rid of the MemToReg control signal). Invert the RegDst signal and use it as MemToReg 23 (c) Now suppose the above program was executed on a multicycle datapath. Assume that the first cycle for fetching the first instruction is numbered cycle 0. Assume immediate instructions take the same number of cycles as the R-format instructions. On which cycle do the following events take place. • add $9, $0, $0 completes execution ____15_______(the end of the instuction execution not the EX cycle) • the branch address for beq $2, $3, end is computed (for the first time through the loop) _____34____ 23 (d) What the principal advantage of the multicycle datapath over the single cycle datapath. Be specific and provide an example to illustrate your point. Each instruction only takes as long as it needs to. For example, if the clock cycle was 10 ns and the load takes 5 cycles (50 ns) branches now only take 30 ns (3 cycles and R-format instuctionsonly take 40 ns (4 cycles). The net time savings over the execution fo a program can be substantial. 24 Show the hexadecimal value of the single precision normalized floating point representations of the following numbers. Use the IEEE 754 standard.Your representation should be fully compliant with the definition. 0x7f800000 Infinity 0xc0900000 ______________________ -4.5 24 (a) Perform the following floating point operations assuming that the number representations are IEEE 754 compliant. Your answers can be represented in scientific notation. • multiplication: 0xbe000000 x 0xbf800000 ( -0.125 x -1.0 = 0.125 • 1.001 x 2131 + 1.11001 x 2126 1.001 x 2131 + 0.0000111001 x 2131 = 1.0010111001 x 2131 24 (b) Provide an example of a number that is too large to be represented in single precision notation but can be represented in double precision. 1.0 x 2277 25 Consider the execution of the following block of SPIM code on a multicycle datapath. Assume that the fetch cycle for the first instruction is cycle number 0. Assume that addiu and addi require the same number of states as an add instruction. add $t4, $0, $0 addi $t3, $0, 4 lw $t0, 0($t1) add $t4, $t4, $t0 addiu $t1, $t1, 4 addi $t3, $t3, -1 bne $t3, $0, loop loop: 25 (a) How many cycles does this code sequence take to execute to completion? 88 (the loop takes 20 cycles and executes 4 times). 25 (b) On what cycle is the add instruction in the body of the loop executed for the second time (remember the first cycle is cycle number 0!)? Cycle no. 35 for the EX cycle of the add instruction. 25 (c) Fill in the following values during the requested cycle (remember the first cycle is cycle number 0!). Cycle 13 27 ALUSrcB ALUOp RegDst PCWrite MemToReg PCSource 01 00 00 01 0 0 1 0 0 0 00 01 The first row corresponds to the fetch cycle of the add instruction. The second row corresponds to third cycle of the branch instruction. 26 (a) Show the single precision normalized floating point representations of the following numbers. Use the 754 standard and present your solution in hexadecimal notation. -0.125 0xbe000000 ___________________________________________________________ 0x41208000 ___________________________________________________________ 10.03125 ___________________________________________________________ 0.0 26 (b) How would you interpret the following hexadecimal number assuming that it is a single precision IEEE 754 floating point number: 0x00140000? It is a denormalized number since the exponent is 0, but the significand is non-zero. 26 (c) Assuming IEEE 754 rules and conventions, what is the result of the following operation in hexadecimal notation. • 1.101 x 2142 X 1.01 x 2122 (note that the exponent values are represented in base 10). 1.000001 x 2138 26 (d) Assuming that we have 6 significant digits (including the implicit bit). What is the value of the guard, round and sticky bits in the course of the following computation? Repeat for 4 significant digits. 1.001 x 2121 + 1.1 x 2128 After adjusting the expoent value of the smaller number have 1.1000000000 x 2128 + 0.0000001001 x 2128 ------------------1.1000001001 x 2128 With 6 significant digits we have the guard, round and sticky bits as 011 With 4 significant digits we have 001. Note the sticky bit is set if here are non-zero bits to the right of the guard and round bits. 27 For the following questions, consider the single cycle datapath shown in Figure 5.24 on page 314. The value of loop is 0x00400004, the contents of register $t0, $t1, and $t2 are 0x01000033, 0x00004008, and 0x000000c0, respectively, and the contents of register $1 is 0x10010008 27 (a) Fill in the values of control signals in the following table for each instruction. Instruction jal loop bne $t1, $t2, loop ALUSrc ALUOp RegDst MemToReg x 0 x 01 10 X 10 X Write Data Input to Data Memory contents of $16 0x000000c0 The jal instruction requires some additions to the datapath. - We need $31 as a hardwired input address to the RegDst Mux. RegDst is now a 2 bit control signal - We need PC+4 as an input to the MemToReg Mux since it is now a candidate for writing into the register file (into $31). The MemToReg signal is now a 2 bit control signal However, the register file does utilize bits of the encoded instruction as register addresses for rs and rt. The input to the write data port of memory is the contents of register rt. Therefore encode the jal instuction to find the value of rt. It will be 16. 27 (b) Your are designer and wish to reduce the number of control signals in this datapath. Provide one hardware modification that will eliminate the MemToReg control signal. Use the complement of RegDst as the value of this signal. This is not the only solution but one which is readily apparent from the truth table. 27 (c) This question deals with the changes to the datapath required to implement the addition of the addi instruction. Full credit requires you to be specific. • what are the structural changes, if any, that must be made to the datapath none are required. We have the connections necessary to add an immediate operand to the contents of a register. The issue is simply one of control. • Show the changes required to the main controller truth table and the PLA implementation of this controller. RegDst AluSrc MemToReg RegWrite MemRead MemWrite Br AluOp 0 1 0 1 0 0 0 00 The values of AluSrc and RegWrite become modified to include another OR term. Note the change in these two columns on the truth table. Also we have an additional gate on the input to recognize the addi instruction. 28 Consider the execution of the following block of SPIM code on a multicycle datapath. Assume that the fetch cycle for the first instruction is cycle number 0. Assume that li and addi require the same number of states as an add instruction, that jal and slt require the same number of states as a bne instruction. main: loop: .text li $t0, 2 add $t2, $zero, $zero li $a0, 1 jal solo addi $t0, $t0, -1 addi $a0, $a0, 1 add $t2, $t2, $v0 slt $t1, $t0, $zero bne $t1, $zero, loop 28 (a) How many cycles does this code sequence take to execute to completion? 33 28 (b) On what cycle is the slt instruction in the body of the loop fetched for the first time (remember the first cycle is cycle number 0!)? 27 28 (c) Fill in the following values during the requested cycle (remember the first cycle is cycle number 0!). Cycle 13 26 ALUSrcB 11 00 IorD 0 0 PCWrite 0 0 RegDst 0 1 MemToReg 0 0 PCSource 00 00 The first row corresponds to a decode cycle. The second row corresponds to a write back cycle. 29 (a) Show the hexadecimal value of the double precision normalized floating point representations of the following numbers. Use the IEEE 754 standard. Infinity 0x7ff0000000000000________ -1.0 _0xbff0000000000000_______ 29 (b) Assuming a total of 4 significant digits including in the implicit bit, is there any inaccuracy in the following IEEE 754 computation assuming the use of the guard and round bit? Justify your answer by showing how this value is calculated, and identifying the magnitude of the error if any. (1.01 x 2125) X (1.001 x 2129) 1.001000 x 1.01 --------------1.01101 x 2125+129-127=127 Rounding down gives us 1.011 x 2127 There is an error and the magnitude of the error is 0.00001 x 2127 29 (c) When using Booth’s algorithm, does it matter which of the operands are the mutliplier? Justify your answer. The number of addition operations depends on the distribution of 1’s in the multiplier. We can pick the operand that will produce the minimum number of addition operations. If shifts are faster than additions, we can speed up the operaton with this optimization. 29 (d) Consider the operation 58 * 4 using version 3 of the multiplication algorithm in chapter 4 (not Booth’s algorithm). Recall that this is the most efficient version of this algorithm. What are the initial and final contents of the multiplicand and product registers? Assume that the multiplier and multiplicand have the same number of bits. Initial Final multiplicand 000100 000100 Product 000000111010 000011101000 30 Consider a base, multi-cycle SPIM machine operating at 200 Mhz, with the following program execution characteristics. Instruction class CPI Frequency R-Type + Immediate 4 45% lw 5 25% sw 4 20% beq 3 7% j 3 3% Each of the following parts are independent of each other. 30 (a) The designers decided to add a new addressing mode to help with array addressing where we often add a byte offset to a base address stored in a register. Therefore a sequence of instructions such as code block 1 below can be replaced by the instruction shown in code block 2. We have 40% of the lw instructions affected in this manner. Assuming that the cycle time does not change and the new instruction also takes 5 cycles, what is the speedup produced by the use of this new addressing mode? add $t2, $t1, $t0 lw $t3, 0($t2) becomes lwx $t2, $t1+$t0 code block 1 code block 2 CPI_old = 0.45*4 + 0.25*5 + 0.20*4 + 0.07*3 + 0.03*3 = 4.15 Ex_old = #Instr * 4.15 * clock_cycle_time With the optimization the number of instructions has been changed. If 40% of the lw instructions have been affected that means 0.4 * 0.25 = 0.1 or 10% of the total number of instructions have been affected. For each of these instructions we can eliminate one instruction by combining two instructions. The new total number of instructions is therefore (0.9 * #Instr). The eliminated instructions are all R-format instructions. Therefore the percentage of such instructions are reduced by 10%. CPI_new = 0.35*4 + 0.25*5 + 0.2*4 + 0.07*3 + 0.03*3)/0.9 = 4.17 Ex_new = (0.9 * #Instr) * 4.17 * clock_cycle_time Comparing the execution times we can see that this is a good trade-off. 30 (b) Is it possible to halve the execution time of programs by simply speeding up R-format and immediate instructions, i.e., realize a speedup of 2? Justify your answer. From Amdahl’s Law we have Speedup = 1/(s + ((1-s)/n)) where s is the fraction that is unaffected, and n is the factor by which this component can be sped up. Let us assume that R-format and immediate instructions are infinitely sped up, i.e., n = infinity. In this case we have Speedup = 1/(0.55) < 2. Therefore the answer is no. 30 (c) What is the maximum MIPS rating of the multicycle datapath? The fastest instruction takes 3 cycles, i.e., has a CPI of 3. This is the theoretically lowest CPI possible for any program (although it is unrealistic to have a program that only branches opr jumps!) MIPS Rating = (Clock Rate in MHZ)/CPI = 200/3 = 66.7 MIPS 31 We wish to make our datapath implement instructions such as those that are found in the Power PC. Specifically we are interested in adding an instruction that will increment a counter, and branch to a label if the counter value is 0: icb $t0, loop.This instructon operates just as a branch instruction would if the branch is taken. Asume that this instruction uses the sameformat as a branch instuction (with the rt field set to 0). Assume that the opcode for this new instruction is 101000. Explicitly state any assumptions you need to answer the following questions. 31 (a) State any additions/modifications required to the hardware data path of Figure 5.28 or describe how the instruction can be implemented with no physical modifications. The execution of icb requires the contents of the register to be decremented. We can provide this value of 1 as an input to the AluSrcB mux which makes the number of inputs 5, and therefore the AluSrcB mux requires a three bit control signal. The RegDst field must be exapanded to a 2 bit field since the rs register must now be written using rs as a destination address. Thus this instruction has a WB state. 31 (b) Show the modified state machine that will handle this instruction. Provide the values of relevant control signals in each additional state. Any control signals not specified will assumed to be X. from decode AluSrcA = 1 AluSrcB = 100 AluOp = 00 PCWriteCond PCSource = 10 to fetch RegWrite RegDst = 10 MemToReg = 0 31 (c) Show the additions to the microcode to implement this instruction. The existing microcoded implementation of the state machine before addition of this instruction is shown below. You need only show additions/modifications. Note that there is more than one approach to solving this problem. Soem solutions may require additions to the microinstruction format in your text. If so state them explicitly. Dispatch ROM 1 Dispatch ROM 2 Op Name Value Op Name Value 000000 R-format 0110 100011 lw 0011 000010 jmp 1001 101011 sw 0101 000100 beq 1000 100011 lw 0010 101011 sw 0010 101000 icb 1010 label ALU control src1 src2 fetch add PC 4 add PC extshft dispatch-1 add A extend dispatch-2 Mem1 Register Control LW2 Memory PCwrite Control Sequencing read PC ALU seq read ALU seq write MDR SW2 fetch write ALU Rformat1 Func A fetch B seq write ALU BEQ1 Subt A B JUMP1 ICB add A +1 write ALU fetch ALUOut-Cond fetch jmp addr fetch ALUOut-cond seq fetch 32 Consider the manner in which exceptions are accommodated in the SPIM datapath, and the manner in which the data path controller is modified to support exceptions. 32 (a) In order to support n exceptions, how many additional states should be added to the state machine? How many additional microinstructions should added? n 32 (b) Consider an illegal memory address exception. Show the changes to the state machine for this exception. Make any assumptions that you feel may be necessary. For each additional state clearly show the values of relevant control signals. Any signals left unspecified will be assumed to be X (don’t care). from - State 0 - State 3 - State 5 code for illegal memory address is 10 to fetch IntCause = 10 CauseWrite AluSrcA = 0 AluSrcB = 01 AluOp = 01 EPCWrite PCwrite PCSource = 11 The illegal memory address exception is detected in any state that performs a memory access. 32 (c) What is the minimum number of cycles from the occurrence of an exception to the time the first instruction of the exception handler is fetched? One. Exceptions are handled in one state in this datapath (ref. Figure 5.39 and Figure 5.40). The next state is the fetch state. 33 (a) Show the hexadecimal value of the double precision normalized floating point representations of the following numbers. Use the IEEE 754 standard. 0x7ff0000000000000 (more than one answer:significand must be nonzero) NaN _________________________________ -0.125 _0xbfc0000000000000______________ 33 (b) Assuming a total of 4 significant digits including in the implicit bit, is there any inaccuracy in the following IEEE 754 computation assuming the use of the guard and round bit? Justify your answer by showing how this value is calculated, and identifying the magnitude of the error if any. (1.01 x 2125) + (1.001 x 2129) 0.000101 x 2129 1.001000 x 2129 --------------1.001101 x 2129 Rounding up gives us 1.01 x 2129 There is an error and the magnitude of the error is 0.000011 x 2129 33 (c) Using Booths algorithm and n bit multipliers and multiplicands, how many steps are required? n steps 33 (d) Consider the operation 18 * 8 using version 3 of the multiplication algorithm in chapter 4 (not Booth’s algorithm). Recall that this is the most efficient version of this algorithm. What are the initial and final contents of the multiplicand and product registers? Assume that the multiplier and multiplicand have the same number of bits. Initial Final Multiplicand 10010 10010 Product 0000001000 0010010000 Note that I have left out the sign bits for these numbers. The solution could also have been presented using 6 bits for the multiplicand and 11 bits for the product (10 bit result and the sign bit). 34 Consider a base, multi-cycle SPIM machine operating at 200 Mhz, with the following program execution characteristics. Instruction class CPI Frequency R-Type + Immediate 4 45% lw 5 25% sw 4 20% beq 3 7% j 3 3% The following parts are independent of each other. 34 (a) The designers decided to add a new addressing mode wherein registers can be automatically incremented by 4. Therefore a sequence such as code block 1 below can be replaced by the instruction shown in code block 2. We have 30% of the lw instructions affected in this manner. Assuming that the cycle time does not change and the new instruction also takes 5 cycles, what is the speedup produced by the use of this new addressing mode? lw $t0, 0($t1) addi $t1, $t1, 4 becomes lw $t0, ($t1)+ code block 1 code block 2 CPI_old = 0.45*4 + 0.25*5 + 0.20*4 + 0.07*3 + 0.03*3 = 4.15 Ex_old = #Instr * 4.15 * clock_cycle_time With the optimization the number of instructions has been changed. If 30% of the lw instructions have been affected that means 0.3 * 0.25 = 0.075 or 7.5% of the total number of instructions have been affected. For each of these instructions we can eliminate one instruction by combining two instructions. The new total number of instructions is therefore (0.925 * #Instr). The eliminated instructions are all immediate instructions. Therefore the percentage of such instructions are reduced by 7.5%. CPI_new = 0.375*4 + 0.25*5 + 0.2*4 + 0.07*3 + 0.03*3)/0.925 = 4.17 Ex_new = (0.925 * #Instr) * 4.17 * clock_cycle_time Comparing the execution times we can see that this is a good trade-off. 34 (b) New ALU implementation technology has made it possible to double the speed of the R-format and immediate instructions. What is overall the speedup that can be realized for programs with the instructions statistics shown in the table? From Amdahl’s Law we have Speedup = 1/(s + ((1-s)/n)) where s is the fraction that is unaffected, and n is the factor by which this component can be sped up. Plugging in the values from the table we have Speedup = 1/(0.55 + (0.45/2)) = 1.29 or 29% speedup. 34 (c) What is the maximum MIPS rating of the multicycle datapath? The fastest instruction takes 3 cycles, i.e., has a CPI of 3. This is the theoretically lowest CPI possible for any program (although it is unrealistic to have a program that only branches opr jumps!) MIPS Rating = (Clock Rate in MHZ)/CPI = 200/3 = 66.7 MIPS 35 We wish to make our datapath implement instructions such as those that are found in the Power PC. Specifically we are interested in adding the following instruction: lwrf $t0, $t1+$t2. As you may recall, this instruction uses the sum of the contents of registers $t1 and $t2 as addresses. Assume that this instruction uses R-format encodings where the shamt and func fields are ignored and an opcode 101000. Explicitly state any assumptions you need to answer the following questions. 35 (a) State any additions/modifications required to the hardware data path of Figure 5.39 or describe how the instruction can be implemented with no physical modifications. No changes are required. Simply add rs and rt to obtain the memory address. 35 (b) Show the modified state machine that will handle this instruction. Provide the values of relevant control signals in each additional state. Any control signals not specified will assumed to be X. from decode ALUSrcA = 1 ALUSrcB = 00 ALUOp = 00 to fetch MemRead IorD = 1 RegDst = 1 RegWrite MemToReg = 1 35 (c) Show the additions to the microcode to implement this instruction. The existing microcoded implementation of the state machine before addition of this instruction is shown below. You need only show additions/modifications. Note that there is more than one approach to solving this problem. If any changes are necessary to the microinstruction format, state them explicitly. Dispatch ROM 1 Dispatch ROM 2 Op Name Value Op Name Value 000000 R-format 0110 100011 lw 0011 000010 jmp 1001 101011 sw 0101 000100 beq 1000 100011 lw 0010 101011 sw 0010 101000 lw+ 1010 label ALU control src1 src2 fetch add PC 4 add PC extshft dispatch-1 add A extend dispatch-2 Mem1 Register Control LW2 Memory PCwrite Control Sequencing read PC ALU seq read ALU seq write MDR SW2 fetch write ALU Rformat1 Func A fetch B seq write ALU BEQ1 Subt A fetch B JUMP1 LWRF add A B ALUOut-Cond fetch jmp addr fetch seq read ALU write MDR-rd seq fetch 36 Consider the manner in which exceptions are accommodated in the SPIM datapath, and the manner in which the data path controller is modified to support exceptions. 36 (a) How are exceptions different from procedure calls? • Procedure calls perform state saving operations and make use of the stack Exceptions need not be concerned with state saving operations • Exceptions must encode the cause of the exception or use a vectored implementation to decode the exception • Exception logic stores the address of the offending instruction rather than the next instruction. • Procedure calls are normal changes in the flow of control rather than unexpected changes. • Exceptions can lead to unexpected program termination. 36 (b) Consider an illegal instruction exception. Show the changes to the state machine for this exception. Make any assumptions that you feel may be necessary. For each additional state clearly show the values of relevant control signals. Any signals left unspecified will be assumed to be X (don’t care). from decode code for illegal instruction is 10 to fetch IntCause = 0 CauseWrite AluSrcA = 0 AluSrcB = 01 AluOp = 01 EPCWrite PCwrite PCSource = 11 The illegal instruction exception can be detected in the decode state. A transition is made to the exception state where the code is recorded and the state machine moves to the fetch state to start fetching the first instruction of the exception handler. 36 (c) What is the minimum number of cycles from the occurrence of an exception to the time the first instruction of the exception handler is fetched? One. Exceptions are handled in one state in this datapath (ref. Figure 5.39 and Figure 5.40). The next state is the fetch state. 37 (a) Show the single precision normalized floating point representations of the following numbers. Use the 754 standard and present your solution in hexadecimal notation. -0.0625 0.0 ___________0xbd800000______________________ _________________0x00000000___________________ 37 (b) Assuming IEEE 754, what is the result of the following operations • 1.1101 x 2102 X 1.01 x 2172 (note that the exponent values are represented in base 10). 1.0010001 x 2148 37 (c) Consider a double precision floating point number (IEEE 754). As it turns out, the range of numbers that it can represent is not sufficient for your application. Keeping the total number of bits constant, how would you change the format of the number? The number of bits in the exponent determines the range. This number should be increased at the expense of the number of bits in the significand. 37 (d) What is the smallest positive number you can represent in IEEE 754 double precision format. Represent this number in scientific notation. 1.0 x 2-1022 38 How would you modify the single bit ALU to produce an overflow bit. Clearly state which of the 32 single bit ALUs you would modify and modify the circuit below to show how you would compute the overflow bit. op c_in a 0 binvert 1 b + 2 3 less result set c_out overflow Compute the EX-OR of the carry in to the ALU31 and the carry out from ALU 31. Use a single EX-OR gate. 39 Consider the execution of the following block of SPIM code on a multicycle datapath. Assume that the fetch cycle for the first instruction is cycle 0. loop: add $t4, $0, $0 addi $t3, $0, 8 lw $t0, 0($t1) add $t4, $t4, $t0 addiu $t1, $t1, 4 addi $t3, $t3, -1 bne $t3, $0, loop 39 (a) Fill in the following values at the end of the requested cycle. The first row corresponds to the WB cycle for the load instruction. The second row corresponds to the decode cycle. Cycle ALUSrcB ALUOp RegDst PCWrite MemToReg PCSource 12 00 00 0 0 1 00 18 11 00 0 0 0 00 39 (b) On what cycle is the branch instruction fetched for the last time? 165. The loop executes 8 times. Each immediate instuctions takes 4 cycles. 40 (a) Show the hexadecimal value of the double precision normalized floating point representations of the following numbers. Use the IEEE 754 standard. ___0xbff0000000000000_______________________________________ -1.0 0.0625 ___0x3fb0000000000000_____________________________ 40 (b) Clearly state two advantages of using Booth’s algorithm for multiplication over the standard multiplication algorithm provided in the book. 1. Potentially reduces the number of addition operations performed depending on the value of the multiplier 2. Naturally handles two’s complement representations performing signed multiplication 40 (c) Assuming a total of 6 significant digits including the implicit bit, is there any inaccuracy in the following computation assuming the use of the guard and round bit? Justify your answer by showing how this value is calculated, and identifying the magnitude of the error if any. (-1.11 x 2-2) + (1.01 x 23) The rounded value that is obtained in 1.0011 x 23. The difference between this value and the actual value (assuming a sufficient number of bits) is given by 0.0000001. The correct value is 1.0011001 x 23. 41 Consider a base, multi-cycle SPIM machine operating at 50 Mhz, with the following program execution characteristics. Instruction class CPI Frequency R-Type 4 40% lw 5 25% sw 4 25% beq 3 7% j 3 3% We can increase reduce the clock cycle time by 15% at the expense adding an additional cycle for data memory accesses. 41 (a) Is this a good tradeoff. Provide a clear and quantitative justification for your answer. CPIold = 0.4*4 + 0.25*5 + 0.25*4 + 0.07*3 + 0.03*3 = 4.15 Execution Timeold = I * 4.15 * clock_cycle CPInew = 0.4*4 + 0.25*6 + 0.25 * 5 + 0.07*3 + 0.03*3 = 4.65 Execution Timenew = I * 4.65 * 0.85* clock_cycle time Execution Timenew < Execution Timeold 41 (b) What is the minimum improvement in clock cycle time that is necessary for this approach to be profitable? x* 4.65 < 4.15 x < 4.15/4.65 = 0.892. 42 Consider the multicycle datapath. 42 (a) What is the minimum number of cycles for the execution of any instruction? 3 42 (b) For a datapath with a N state controller, what is the size of the microcode store (in number of microinstructions)? 2 log N 42 (c) What is it that determines the duration of the clock cycle time? The state (or cycle) in the datapath that has the longest execution path or delay. 43 (a) Show the hexadecimal value of the double precision normalized floating point representations of the following numbers. Use the IEEE 754 standard. -1.5 0xbff800000000000 0.03125 0x3fa0000000000000 43 (b) Using Booths algorithm and n bit multipliers and multiplicands, what is the range of numbers that can be accurately multiplied? -2n-1 to 2n-1-1 43 (c) Assuming a total of 6 significant digits including the implicit bit, is there any inaccuracy in the following computation assuming the use of the guard and round bit? Justify your answer by showing how this value is calculated, and identifying the magnitude of the error if any. (-1.1 x 2-1) + (1.001 x 24) Correct answer: 1.000101 x 24 Rounded answer: 1.00011 x 24 Error: 0.000001 44 (20 pts) Consider a base, multi-cycle SPIM machine operating at 50 Mhz, with the following program execution characteristics. Instruction class CPI Frequency R-Type 4 45% lw 5 25% sw 4 20% beq 3 7% j 3 3% 44 (a) With clever algorithms for register allocation we can reduce the number of lw and sw instructions by 10%. What is the improvement in execution time? CPIold = 4*0.45 + 5*0.25 + 4*0.2 + 3*0.07 + 3*0.03 = 4.15 CPInew = (0.45*4 + 5*0.25*0.9 + 4*0.2*0.9 + 3*0.07 + 3*0.03)/I” = 3.945/I” I” = 0.45 + 0.25*0.9 + 0.2*0.9 + 0.07 + 0.03 = 0.955 CPInew = 3.945/0.955 = 4.13 Execution Time Old = I * 4.15 * clock_cycle_time Execution Time New = 0.955* I * 4.13 * clock_cycle_time Compare! 44 (b) Would a 10% reduction in clock cycle time justify a single cycle increase in the number of cycles for memory accesses? CPInew = (0.45*4 + 6*0.25 + 5*0.2 + 3*0.07 + 3*0.03) = 4.6 Execution Time New = I * 4.6 * 0.9 * clock_cycle_time = I * 4.14 * clock_cycle_time Barely better 45 (a) Show the single precision normalized floating point representations of the following numbers. Use the 754 standard and present your solution in hexadecimal notation. 0.375 -1.5 ___0x3ec00000______________________________________________ ___0xbfc00000_____________________________________________ 45 (b) Assuming IEEE 754, what is the result of the following operations • 1.1101 x 282 X 1.01 x 2122 (note that the exponent values are represented in base 10). 1.0010001 x 278 (do not forget to substract the extra 127 bias!) • 1.001 x 294 + 1.1 x 297 (note that the exponent values are represented in base 10). 1.101001 x 297 46 Consider a base, multi-cycle SPIM machine operating at 100 Mhz, with the following program execution characteristics. Compiler optimizations reduce the number of instructions in each class to the amount shown. Instruction class CPI Frequency Compiler Opt R-Type 4 45% 95% lw 5 30% 90% sw 4 20% 95% beq 3 5% 75% 46 (a) What is the base CPI with and without compiler optimizations? Without Opt = 0.45*4 + 0.3*5 + 0.2*4 + 0.05*3 = 4.25 With Optimization = Cycles/#instr =(0.45*4*0.95+0.3*5*0.9+0.2*4*0.95+0.05*3*0.75)/(0.45*0.95+0.3*0.9+0.2*0.95+0.05*0.75) = CPInew 46 (b) What is the speedup due to compiler optimizations? Speedup = Told/Tnew = (I * 4.25 * cycle_time)/(I” * CPInew* cycle_time) where I” = (0.45*0.95+0.3*0.9+0.2*0.95+0.05*0.75) ( from above: this is the new number of instructions) 47 Consider the annotated multicycle datapath shown in your text. Fill in the fill in the following table for the sequence of instructions shown below. Each entry should contain the value of the requested signal at the end of the requested cycle. The initial contents of registers $1, $2 and $3 are 0x0000088, 0x0000022 and 0x00000033 respectively. The address of Loop is 0x00400004. PC Instruction Cycle ALUOutput Value at the Output of the ALU 0x0040000c beq $1, $2, Loop 3 0x00400004 0x00000066 0x00000022 01 0x00400010 sw $1, 4($2) 4 0x00000026 0x00000026 0x00000088 00 Rt ALUOp 48 (a) Show the double precision normalized floating point representations of the following numbers. Use the 754 standard and present your solution in hexadecimal notation. -0.1875 0.0 _____oxbfc0000000000000___________________________ ___________________________________________________________ 48 (b) Assuming IEEE 754 rules and conventions, what is the result of the following operations. Assume 5 significant digits including the implicit bit. • 1.11 x 212 x 1.001 x 239. 212 x 239. = 251-127 = 2-76 Remember that the exponent is biased and therefore we have to substract 127 from the sum of the exponents. The fact that the result is negative indicates that the result is underflow. • 1.0001 x 2133 + 1.0101 x 2139 1.0001 x 2133 + 1.0101 x 2139 = 0.0000010001 x 2139 + 1.0101 x 2139 = 1.0101 x 2139 (the result is rounded down according to the rules for 754). 48 (c) Provide an example of a number that is too small to be represented with single precision notation but can be represented with double precision. 1.0 x 2-130 This number is just smaller than the smallest number that can be represented in single preceision numbers. 49 For the following questions, consider the single cycle datapath shown in the text. The value of loop is 0x00400004, the contents of register $t1, $t2, and $t3 are 0x01000033, 0x00004008, and 0x000000c0, respectively, and the contents of register $1 is 0x10010008 49 (a) Fill in the values of control signals in the following table for each instruction. Instruction lw $t3, 4($t2) ALUSrc 1 ALUOp 00 RegDst 0 MemToReg 1 Write Data Input to Data Memory 0x000000c0 49 (b) You are designer and wish to reduce the number of control signals that the controller has to generate. Provide one hardware modification that will eliminate the RegDst control signal (but not the mux). Note that the RegsDst signal is the complement of the MemToReg signal. This the RegDst mux can be controlled by the MemToReg signal passed through an inverter. 50 Consider the execution of the following block of SPIM code on a multicycle datapath. Assume that the fetch cycle for the first instruction is cycle number 0. Assume that la, li and addi require the same number of states as an add instruction. .data .word 2,3,4,5 .space 16 .text L1: L2: la $t8, L1 la $t9, L2 li $t7, 4 lw $t2, 0($t8) sw $t2, 0($t9) addi $t8, $t8, 4 addi $t9, $t9, 4 addi $t7, $t7, -1 bne $t7, $0, move move: end: 50 (a) What would be the CPI and MIPS rating for a 266 MHz machine for the program shown above? The loop executes four times. Each time through the loop the instructions take a total of 24 cycles. The first three instructions take 12 cycles. The total number of cycles is 108. The number of instructions in the loop are 6. Therefore the total number of instructions executed is 6*4+3 = 27. The CPI = 108/27 = 4.0. MIPS rating = 266/CPI 50 (b) Fill in the following values during the requested cycle (remember the first cycle is cycle number 0!). Cycle # 17 40 ALUSrcB 01 XX IorD 0 X PCWrite 1 0 RegDst X 0 MemToReg X 1 PCSource 00 XX The first row corresponds to the fetch cycle for the sw instruction. The second row corresponds to the write back cycle for the lw instuction executed for the second time through the loop. 50 (c) On the figure of the multicycle datapath attached overleaf, show any modifications that would be required to add the jr instruction. Below show the modifications to the state machine how any additional states would fit in the state machine. For each additional state that you have added, show the values of the relevant control signals. Any signals that you omit from the description of a state are assumed to be deasserted. According to the format definition for the jr instruction, the rs field identifies the register. This value will be available in the A register at the end of the decode cycle. Add another signal from the A register to the PCSource mux. The value of PCSource of 11 will now select the contents of the A register to be written to the PC. This writeback can be handled in one extra state after decode with PCWrite = 1 and PCSource = 11. IF ID jr PCWrite = 1 PCSource = 11 51 Consider the execution of the following block of SPIM code on a multicycle datapath. The text segment starts at 0x00400000 and that the data segment starts at 0x10010000. Assume immediate instructions take 4 cycles. start: str: main: move: end: done: .data .word 21, 22, 0x44, 0x12 .asciiz “Done ” .align 4 .byte 0x88, 0x32 .text .globl main li $t3, 2 lui $t0, 0x1001 lui $t1, 0x1001 addi $t1, $t1, 8 lw $t5, 0($t0) lw $t6, 0($t1) add $t7, $t5, $t6 addi $t0, $t0, 4 addi $t1, $t1, 4 addi $t3, $t3, -1 bne $t3, $zero, move 51 (a) Fill in the following values at the end of the requested cycle. Assume that the first cycle of program execution is cycle number 0! Cycle ALUSrcB MemToReg RegWrite Branch Address RegDst 12 01 X 0 0x00400030 X 28 00 X 0 0x0041e05c X 51 (b) Show the addresses and corresponding contents of the locations in the data segment that are loaded by the above SPIM code. Clearly associate addresses and corresponding contents. Data Segment Addresses Data Segment Contents 0x10010000 0x00000015 0x10010004 0x00000016 0x10010008 0x00000044 0x1001000c 0x00000012 0x10010010 0x656e6f44 0x10010014 0x00000020 0x10010018 0x00000000 0x1001001c 0x00000000 0x10010020 0x00003288 0x10010024 51 (c) Show the SPIM program to implement a for-loop that executes 12 times. . loop: li $t1, 12 # loop body # loop body .. .. addi $t1, $t1, -1 bne $t1, $zero, loop 51 (d) What are the values of move, str and end? move end str 0x00400010 0x00400028 0x10010010 51 (e) What does the following bit pattern represent assuming that it is one of the following. 00111100 00001001 01000000 00000000. Provide your answer in the form indicated. A single precision IEEE 754 floating point number (show actual value in scientific notation) ____1.000100101 x 2-7_______________ A MIPS instruction (show in symbolic code) __lui $t1, 0x4000________ 52 (a) Show the hexadecimal value of the single precision normalized floating point representations of the following numbers. Use the IEEE 754 standard. 0x7f800000 Infinity a denormalized number __0x00011000_________ 52 (b) Assuming a total of 4 significant digits including in the implicit bit, is there any inaccuracy in the following IEEE 754 computation assuming the use of the guard and round bit? Justify your answer by showing how this value is calculated, and identifying the magnitude of the error if any. (1.11 x 2114) X (1.01 x 2119) The product is 1.00011 x 2107 With only 4 significant digits and the guard and round bit being 11, we round up to give 1.001 x 2107 The maginitude of the error is 0.00001 x 2107 52 (c) Consider the operation 17 * 4 using version 3 of the multiplication algorithm in chapter 4 (not Booth’s algorithm). Recall that this is the most efficient version of this algorithm. What are the initial and final contents of the multiplicand and product registers? Assume that the multiplier and multiplicand have the same number of bits. Use the minimum number of bits as determined by the above operands. Initial Final Multiplicand 010001 010001 Product 000000000100 000001000100 52 (d) Compare the critical path delays for carry lookahead logic and ripple carry logic for a 32 bit ALU. Ripple carry delay through single bit ALU is 2 gate delays. Delay through a single node in the carry lookahead tree is also 2 gate delays. Ripple carry = 32 * 2 = 64 gate delays. Carry lookahead = 1 (for generate and propagate signal generation) + 5 *2 (up the tree) + 4 * 2 (down the tree) + 2 (through the last ALU) = 21 gate delays 53 Consider a base, multi-cycle SPIM machine operating at 300 Mhz, with the following program execution characteristics. Instruction class CPI Frequency R-Type or Immediate 4 40% lw 5 25% sw 4 20% bne 3 10% j 3 5% Questions 48(a), 48(b), and 48(c) are independent of each other. 53 (a) The designers propose adding a new branch instruction, decrement-and-branch-if-zero: dcb $t0, loop. This instructions decrements the register $t0. If the resulting value is equal to 0 then the program branches to the instruction at label loop. Therefore a sequence of instructions such as code block 1 below can be replaced by the instruction shown in code block 2. We have 35% of the branch instructions affected in this manner. Assuming that the cycle time does not change and the new instruction takes 4 cycles, is this a good idea? addi $t2, $t1, -1 bne $t2, $0, loop code block 1 becomes dcb $t2, loop code block 2 CPI_old = 0.4*4 + 0.25*5 + 0.20*4 + 0.10*3 + 0.05*3 = 4.10 Ex_old = #Instr * 4.1 * clock_cycle_time With the optimization the number of instructions has been changed. If 35% of the branch instructions have been affected that means 0.35 * 0.1 = 0.035 or 3.5% of the total number of instructions have been affected. For each of these instructions we can eliminate one instruction by combining two instructions. The new total number of instructions is therefore (0.965 * #Instr). The eliminated instructions are all immediate instructions. Therefore the percentage of such instructions are reduced by 3.5%. However they are replaced by instructions taking 4 cycles. Therefore the net effect is the reduction of the number of branch instructions by 35% (or to 65% of the original). CPI_new = 0.365*4 + 0.25*5 + 0.2*4 + 0.1*3*0.65 + 0.05*3 + 4*0.035)/0.965 = 4.1 Ex_new = (0.965 * #Instr) * 4.1* clock_cycle_time Comparing the execution times we can see that this is a good trade-off. 53 (b) If improved register allocation techniques in the compiler can reduce the number of lw and sw instructions by 10% what is the improvement in the MIPS rating? Current MIPS rating is 300/4.1 = 73.17 MIPS With the reduced number of instructions the new CPI is given by (0.4*4 + 0.225*5 + 0.18*4 + 0.1*3 + 0.05*3)/I’ where I’ is given by (0.4+ 0.9*0.25 + 0.9*0.2 + 0.1 + 0.05) The new MIPS rating is 300/CPInew The improvement is given by their differences. 53 (c) Suppose in a typical program executable, 20% of the instructions is from system libraries and implementing operating system related functionality.What is the maximum speedup that can be obtained by speeding up the application code sequences? This goverened by Amdahl’s Law. We the maximum speedup as 1/0.2 = 5. 54 We wish to have our multicycle datapath implement the slti $t0, $t1, 0x4000 instruction. Explicitly state any assumptions you need to answer the following questions. 54 (a) Either state any additions/modifications required to the hardware data path of Figure 5.33, or describe how the instruction can be implemented with no physical modifications. We can simply have the ALU perform a slt than operation on the inputs and select the ALU inputs accordingly. The key problem is getting the ALU controller to issue a slt opcode to the ALU (111). This is the main hardware modification that is required. Suppose we use the unused ALUOp value of 11 to signifiy this. Note that the truth table for the ALU controller must be reimplemented since we do not have don’t cares in one of the ALUOp bit fields any more. 54 (b) Show the modified state machine that will handle this instruction. Provide the values of relevant control signals in each additional state. Any control signals not specified will assumed to be X. from decode to fetch ALUSrcA = 1 ALUSrcB = 10 ALUOp = 11 RegDst = 0 RegWrite MemToReg = 0 54 (c) Show the additions to the microcode to implement this instruction. The existing microcoded implementation of the state machine before addition of this instruction is shown below. You need only show additions/modifications. Note that there is more than one approach to solving this problem. Some solutions may require additions to the microinstruction format in the text. If so state them explicitly. Dispatch ROM 1 Dispatch ROM 2 Op Name Value Op Name Value 000000 R-format 0110 100011 lw 0011 000010 jmp 1001 101011 sw 0101 000100 beq 1000 100011 lw 0010 101011 sw 0010 001010 slti 1010 label ALU control src1 src2 fetch add PC 4 add PC extshft dispatch-1 add A extend dispatch-2 Mem1 Register Control LW2 Memory PCwrite Control Sequencing read PC ALU seq read ALU seq write MDR SW2 fetch write ALU Rformat1 Func A fetch B seq write ALU BEQ1 Subt A B JUMP1 SLTI SLTOP A Extend fetch ALUOut-Cond fetch jmp addr fetch seq Write ALU-rt fetch 55 Consider the manner in which exceptions are accommodated in the SPIM datapath, and the manner in which the data path controller is modified to support exceptions. You certainly do not want your programs to jump to addresses in the data segment, or for that matter let us say to any address greater than 0x10010000. If j instructions generate such an illegal address you want to generate an exception.This questions addresses the implementation of such an exception in the SPIM datapath. 55 (a) How can you test for the occurrence of this exception? The occurrence of the exception is detected by using an ALU to compare the jump address with 0x10010000 and generating a single bit execption single to denote the result of this comparison. 55 (b) Describe the hardware modifications required to control to support such an exception. From state 1001 we now make a transition to the exception state. To make this transition we must modify the next state logic of the state machine implementation. Currentlky the next state after state 1001 is state 0000. This must now be modified to move to either state 0000 (if no exception) or state 1010 (exception state) of an exception occured. You can use a table with these two alternatives just as we did for the next state logic out of state 0010. The input to the table is a single bit signal denoting whether the exception occured or not (from 5(a)). 55 (c) Show the required modifications to the state machine to support such an exception.All control signals left unspecified are assumed to be X. \ from jump code for illegal address is 10 IntCause = 10 CauseWrite AluSrcA = 0 AluSrcB = 01 AluOp = 01 EPCWrite PCwrite PCSource = 11 to fetch
© Copyright 2024