EE 4720 Lecture Notes

Generated from file lsli05.dvi.

This page was generated using an imperfect translator. Text may be poorly positioned and mathematics will be barely readable and some characters may be omitted. Illustrations will not show at all. If possible, view the PostScript or PDF versions of these notes.


05-1                                          The DLX ISA                                          *
 *        05-1



     Coverage


        Textbook Section 2.8



     Topics


        DLX Goals


        DLX Instruction Highlights


        DLX Instruction Coding


        Synthetic Instructions (NIB)



05-1                            EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 fr*
 *om lsli05.                            05-1

05-2 DLX Design Considerations * * 05-2 DLX Goals A typical RISC processor. Incorporate features with demonstrated usefulness. Enable simple, high-speed, implementation Demonstration of Usefulness of Features Covered in Chapters 1, 2. Determined by analyzing existing ISAs. Some usefulness illustrated with graphs (e.g., immediate sizes). Less useful, "it would be nice," features omitted. 05-2 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 fr* *om lsli05. 05-2
05-3 * * 05-3 DLX's Useful Features Lots of general purpose registers. Integer and floating-point operands. Basic arithmetic and logical operations. Basic addressing modes: register, immediate, displacement. Adequate immediate and displacement sizes. Etc. Simple, High-Speed Implementation Load-Store Architecture: ALU instructions do not access memory. Simple Coding: uniform instruction sizes, few instruction types. Work Balance: Instructions do about the same amount of work. Separate integer and FP register files. 05-3 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 fr* *om lsli05. 05-3
05-4 * * 05-4 Simple Coding Advantages Simpler and faster decoding logic. Execution can start before decoding complete. Work Balance Advantages Efficient use of CPU hardware. Integer operations are balanced. Floating-point operations are not. (Division takes longer than ADD.) 05-4 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 fr* *om lsli05. 05-4
05-5 * * 05-5 Separate Register File Advantages Double the number of registers with only 1 bit per instruction (in opcode). (Otherwise, 1 extra bit per operand would be needed.) Splits register reads and writes between two register files. With one large set of registers : : : : : :if n instructions start at once, need to access 2n registers : : : : : :all stored in one file (memory device) _ expensive and slow. With separate integer and FP register files : : : : : :each file would only have to provide n registers : : : : : :(assuming equal number of integer and FP instructions). Note: Currently, n varies from 2 to 6. Details on these implementation factors covered later. 05-5 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 fr* *om lsli05. 05-5
05-6 DLX Registers and Data Types * * 05-6 Data Types Integer: 8-bit (byte), 16-bit (half words), 32-bit (words). Floating point: 32-bit single precision, 64-bit double precision. Registers 32 32-bit general-purpose registers (GPRs), r0-r31, including a zero register, r0. 32 32-bit floating-point registers (FPRs), f0,f1,f2,...,f31 : : : : : :which can be used as 16 64-bit registers, f0,f2,f4,...,f30. A floating-point status register (for outcome of comparisons, used by branches). 05-6 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 fr* *om lsli05. 05-6
05-7 DLX Instruction Highlights * * 05-7 Instruction Highlights Single, but flexible, memory addressing mode: Displacement. Special load high (LHI) instruction for (part of ) 32-bit constants. Dummy, but very handy, register r0. (Value always 0.) Displacement Addressing Flexibility Classic Displacement Addressing lw r1, 4(r2) ! r1 = MEM[ r2 + 4 ] Register Indirect (Use zero displacement.) Lw r1, 0(r2) ! r1 = MEM[ r2 ] Absolute (Use r0, limited because of immediate size.) Lw r1, 1234(r0) ! r1 = MEM[ 1234 ] 05-7 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 fr* *om lsli05. 05-7
05-8 * * 05-8 LHI Examples Used to load constants. Needed because immediate size limited to 16 bits. Example, set r1 = 0x12345678 ______________________________________________________________________________________________* *_______ lhi r1, 0x1234 ! r1 = 0x12340000 ori r1, r1, #0x5678 ! r1 = r1 0x5678 (bitwise or) ______________________________________________________________________________________________* *_______ 05-8 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 fr* *om lsli05. 05-8
05-9 * * 05-9 Fun with r0, and other tricks. Set a register to zero: ______________________________________________________________________________________________* *_______ add r1, r0, r0 ! r1 = 0 + 0 = 0. addi r1, r0, #0 ! r1 = 0 + 0 = 0. sub r1, r1, r1 ! r1 = r1 - r1 = 0. xor r1, r1, r1 ! r1 = r1 xor r1 = 0. ______________________________________________________________________________________________* *_______ Move one register to another: ______________________________________________________________________________________________* *_______ add r2, r1, r0 ! r2 = r1 + 0 = r1 and r2, r1, r1 ! r2 = r1 & r1 = r1 andi r2, r1, #0 ! r2 = r1 & 0 = r1 ______________________________________________________________________________________________* *_______ Bitwise Negation XORI r2, r1, #-1 ! r2 = r1 05-9 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 fr* *om lsli05. 05-9
05-10 * * 05-10 DLX Instruction Coding All instructions have 6-bit opcode. Three types. Type R: Three registers, plus extra opcode field. Type I: Two registers, plus 16-bit immediate field. Type J: One 26-bit immediate field. 05-10 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 * *from lsli05. 05-10
05-11 * * 05-11 Type R Opcode rs1 rs2 rd func ______________________________________________________________________________________ _ 0__ _ _ __ _ _ _ ______________________________________________________________________________________ _ 0 5 6 10 11 15 16 20 21 31 For Type R instructions opcode field zero : : : : : :operation specified using func field. Used for arithmetic, logical, and move instructions. Sometimes just two registers used, but func field needed for operation. Examples ____________________________________________________________________________________________* *_________ add r1, r2, r3 ! Add integer registers. addf f1, f2, f3 ! Add FP registers, single precision. addd f2, f4, f6 ! Add FP registers, double precision. movi2s f1, r1 ! Move r1 to f1. (rs2 operand not used.) ____________________________________________________________________________________________* *_________ 05-11 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 * *from lsli05. 05-11
05-12 * * 05-12 Type R Examples add r1, r2, r3 ! Add integer registers. Type R r2 r3 r1 add ______________________________________________________________________________________ _ 0__ 2__ 3__ _1 _ _ ______________________________________________________________________________________ _ 0 5 6 10 11 15 16 20 21 31 ____________________________________________________________________________________________* *_________ addf f1, f2, f3 ! Add FP registers, single precision. Type R f2 f3 f1 addf ______________________________________________________________________________________ _ 0__ 2__ 3__ _1 _ _ ______________________________________________________________________________________ _ 0 5 6 10 11 15 16 20 21 31 ____________________________________________________________________________________________* *_________ movi2s f1, r1 ! Move r1 to f1. (rs2 operand not used.) Type R r1 Unused f1 movi2s ______________________________________________________________________________________ _ 0__ 1__ __ _1 _ _ ______________________________________________________________________________________ _ 0 5 6 10 11 15 16 20 21 31 05-12 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 * *from lsli05. 05-12
05-13 * * 05-13 Type I: Opcode rs1 rd Immediate ___________________________________________________________________________ _ __ _ _ __ _ ___________________________________________________________________________ _ 0 5 6 10 11 15 16 31 Used for loads, stores, some CTIs, and ALU immediate instructions. Examples ____________________________________________________________________________________________* *_________ addi r1, r2, #3 ! r1 = r2 + 3 lw r2, 10(r3) ! r2 = MEM[r3+10] beqz r1, 20 ! if( r1 == 0 ) goto PC + 4 + 20 (rd unused). jr r1 ! goto r1 jalr r1 ! r31 = pc + 4; goto r1 ____________________________________________________________________________________________* *_________ 05-13 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 * *from lsli05. 05-13
05-14 * * 05-14 Type I Examples addi r1, r2, 3 ! r1 = r2 + 3 addi r2 r1 3 ___________________________________________________________________________ _ 1__ 2__ 1__ 3 _ ___________________________________________________________________________ _ 0 5 6 10 11 15 16 31 ____________________________________________________________________________________________* *_________ lw r2, 10(r3) ! r2 = MEM[r3+10] lw r3 r2 10 ___________________________________________________________________________ _ 0x28__ 3__ 2__ 0xa _ ___________________________________________________________________________ _ 0 5 6 10 11 15 16 31 ____________________________________________________________________________________________* *_________ beqz r1, 20 ! if( r1 == 0 ) goto PC + 4 + 20 (rd unused). beqz r1 Unused 20 ___________________________________________________________________________ _ 0x1e__ 1__ __ 0x14 _ ___________________________________________________________________________ _ 0 5 6 10 11 15 16 31 05-14 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 * *from lsli05. 05-14
05-15 * * 05-15 Type J: Opcode Offset ______________________________________________________________ _ __ _ ______________________________________________________________ _ 0 5 6 31 Used for jump and jump & link. Examples: ____________________________________________________________________________________________* *_________ j 0x1234 ! goto PC + 4 + 0x1234 jal 0x1234 ! r31 = PC + 4; goto PC + 4 + 0x1234 ____________________________________________________________________________________________* *_________ j 0x1234 ! goto PC + 4 + 0x1234 j 0x1234 ______________________________________________________________ _ 0x30__ 0x1234 _ ______________________________________________________________ _ 0 5 6 31 05-15 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 * *from lsli05. 05-15
05-16 * * 05-16 Synthetic Instructions and DLX (NIB) Misleading (in a nice way) assembly language mnemonics. Implies a "new" opcode, but really uses an existing one. Meant for programmer convenience. Example, set register to zero: ____________________________________________________________________________________________* *_________ clr r1 ! Synthetic instruction add r1, r0, r0 ! True instruction (DLX) ____________________________________________________________________________________________* *_________ Assembler generates a add r1, r0, r0 when it finds a clr r1 mnemonic. Assembler "sees" synthetic instruction but processor only sees true instructions. 05-16 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 * *from lsli05. 05-16
05-17 * * 05-17 Sample Synthetic Instructions (NIB) No Operation: ____________________________________________________________________________________________* *_________ nop ! Synthetic add r0, r0, r0 ! DLX bnez r0, 0 ! DLX ____________________________________________________________________________________________* *_________ Register move: ____________________________________________________________________________________________* *_________ movi2i r1, r2 ! Synthetic add r1, r2, r0 ! DLX ____________________________________________________________________________________________* *_________ Bitwise invert: ____________________________________________________________________________________________* *_________ not r1, r2 ! Synthetic xori r1, r2, #-1 ! DLX ____________________________________________________________________________________________* *_________ 05-17 EE 4720 Lecture Transparency. Formatted 10:29, 13 September 1999 * *from lsli05. 05-17

ECE Home Page 4720 Home Page Up
David M. Koppelman - koppel@ee.lsu.edu
Modified 13 Sep 1999 11:38 (16:38 UTC)