Computer Architecture ECE 361 Lecture 5 The Design

  • Slides: 51
Download presentation
Computer Architecture ECE 361 Lecture 5: The Design Process & ALU Design 361 design.

Computer Architecture ECE 361 Lecture 5: The Design Process & ALU Design 361 design. 1

Quick Review of Last Lecture 361 design. 2

Quick Review of Last Lecture 361 design. 2

MIPS ISA Design Objectives and Implications °Support general OS and Cstyle language needs °Support

MIPS ISA Design Objectives and Implications °Support general OS and Cstyle language needs °Support general and embedded applications °Use dynamic workload characteristics from general purpose program traces and SPECint to guide design decisions °Implement processsor core with a relatively small number of gates °Emphasize performance via fast clock 361 design. 3 Traditional data types, common operations, typical addressing modes RISC-style: Register / Load. Store

MIPS jump, branch, compare instructions ° Instruction ° branch on equal beq $1, $2,

MIPS jump, branch, compare instructions ° Instruction ° branch on equal beq $1, $2, 100 if ($1 == $2) go to PC+4+100 Equal test; PC relative branch ° branch on not eq. bne $1, $2, 100 Not equal test; PC relative ° set on less than slt $1, $2, $3 if ($2 < $3) $1=1; else $1=0 Compare less than; 2’s comp. ° set less than imm. slti $1, $2, 100 Compare < constant; 2’s comp. if ($2 < 100) $1=1; else $1=0 ° set less than uns. sltu $1, $2, $3 Compare less than; natural numbers if ($2 < $3) $1=1; else $1=0 ° set l. t. imm. uns. sltiu $1, $2, 100 Compare < constant; natural numbers if ($2 < 100) $1=1; else $1=0 ° jump j 10000 go to 10000 Jump to target address ° jump register jr $31 go to $31 For switch, procedure return ° jump and link jal 10000 $31 = PC + 4; go to 10000 For procedure call 361 design. 4 Example Meaning if ($1!= $2) go to PC+4+100

Example: MIPS Instruction Formats and Addressing Modes • All instructions 32 bits wide Register

Example: MIPS Instruction Formats and Addressing Modes • All instructions 32 bits wide Register (direct) 6 op 5 5 5 rs rt rd 11 register Immediate Base+index op rs rt immed register PC-relative op rs PC 361 design. 5 rt Memory + immed Memory +

MIPS Instruction Formats 361 design. 6

MIPS Instruction Formats 361 design. 6

MIPS Operation Overview ° Arithmetic logical ° Add, Add. U, Add. I, ADDIU, Sub.

MIPS Operation Overview ° Arithmetic logical ° Add, Add. U, Add. I, ADDIU, Sub. U ° And, And. I, Or. I ° SLT, SLTI, SLTU, SLTIU ° SLL, SRL ° Memory Access ° LW, LBU ° SW, SB 361 design. 7

Branch & Pipelines Time li r 3, #7 execute sub r 4, 1 ifetch

Branch & Pipelines Time li r 3, #7 execute sub r 4, 1 ifetch bz r 4, LL execute ifetch addi r 5, r 3, 1 LL: slt r 1, r 3, r 5 execute Branch Target Branch execute ifetch Delay Slot execute By the end of Branch instruction, the CPU knows whether or not the branch will take place. However, it will have fetched the next instruction by then, regardless of whether or not a branch will be taken. Why not execute it? 361 design. 8

Arithmetic 1000 “Moore’s Law” Performance The next Destination 100 µProc CPU 60%/yr. (2 X/1.

Arithmetic 1000 “Moore’s Law” Performance The next Destination 100 µProc CPU 60%/yr. (2 X/1. 5 yr) Processor-Memory Performance Gap: (grows 50% / year) 10 DRAM 9%/yr. DRAM(2 X/10 yrs) 1 1 9 8 0 1 9 8 1 1 9 8 2 1 9 8 3 1 9 8 4 1 9 8 5 1 9 8 6 1 9 8 7 1 9 8 1 9 9 1 9 0 1 9 9 1 1 9 9 2 1 9 3 1 9 9 4 1 9 9 5 1 9 9 6 2 9 7 0 9 8 0 9 0 1 Single/multicycle Datapaths Time Begin ALU design using MIPS ISA. IFetch. Dcd Exec Mem IFetch. Dcd WB Exec Mem WB Pipelining I/O 361 design. 9 Memory Systems

Outline of Today’s Lecture ° An Overview of the Design Process ° Illustration using

Outline of Today’s Lecture ° An Overview of the Design Process ° Illustration using ALU design ° Refinements 361 design. 10

Design Process Design Finishes As Assembly -- Design understood in terms of components and

Design Process Design Finishes As Assembly -- Design understood in terms of components and how they have been assembled -- Top Down decomposition of complex functions (behaviors) into more primitive functions CPU Datapath ALU Regs Nand Gate -- bottom-up composition of primitive building blocks into more complex assemblies Design is a "creative process, " not a simple method 361 design. 12 Control Shifter

Design as Search Problem A Strategy 1 Sub. Prob 1 Strategy 2 BB 1

Design as Search Problem A Strategy 1 Sub. Prob 1 Strategy 2 BB 1 BB 2 Sub. Prob 3 BBn Design involves educated guesses and verification -- Given the goals, how should these be prioritized? -- Given alternative design pieces, which should be selected? -- Given design space of components & assemblies, which part will yield the best solution? Feasible (good) choices vs. Optimal choices 361 design. 14

Problem: Design a “fast” ALU for the MIPS ISA ° Requirements? ° Must support

Problem: Design a “fast” ALU for the MIPS ISA ° Requirements? ° Must support the Arithmetic / Logic operations ° Tradeoffs of cost and speed based on frequency of occurrence, hardware budget 361 design. 15

MIPS ALU requirements ° Add, Add. U, Sub. U, Add. IU • => 2’s

MIPS ALU requirements ° Add, Add. U, Sub. U, Add. IU • => 2’s complement adder/sub with overflow detection ° And, Or, And. I, Or. I, Xori, Nor • => Logical AND, logical OR, XOR, nor ° SLTI, SLTIU (set less than) • => 2’s complement adder with inverter, check sign bit of result 361 design. 16

MIPS arithmetic instruction format 31 R-type: I-Type: 25 20 op Rs Rt 15 5

MIPS arithmetic instruction format 31 R-type: I-Type: 25 20 op Rs Rt 15 5 Rd 0 funct Immed 16 Type op funct ADDI 10 xx ADD 00 ADDIU 11 xx SLTI 12 SLTIU op funct 40 00 50 ADDU 00 41 00 51 xx SUB 00 42 SLT 00 52 13 xx SUBU 00 43 SLTU 00 53 ANDI 14 xx AND 00 44 ORI 15 xx OR 00 45 XORI 16 xx XOR 00 46 LUI 17 xx NOR 00 47 ° Signed arith generate overflow, no carry 361 design. 17 Type

Design Trick: divide & conquer ° Break the problem into simpler problems, solve them

Design Trick: divide & conquer ° Break the problem into simpler problems, solve them and glue together the solution ° Example: assume the immediates have been taken care of before the ALU 00 add • 10 operations (4 bits) 361 design. 18 01 add. U 02 sub 03 sub. U 04 and 05 or 06 xor 07 nor 12 slt 13 slt. U

Refined Requirements (1) Functional Specification inputs: 2 x 32 -bit operands A, B, 4

Refined Requirements (1) Functional Specification inputs: 2 x 32 -bit operands A, B, 4 -bit mode (sort of control) outputs: 32 -bit result S, 1 -bit carry, 1 bit overflow operations: add, addu, subu, and, or, xor, nor, slt. U (2) Block Diagram (CAD-TOOL symbol, VHDL entity) 32 A c ovf 32 ALU S 32 361 design. 19 B m 4

Behavioral Representation: VHDL Entity ALU is generic (c_delay: integer : = 20 ns; S_delay:

Behavioral Representation: VHDL Entity ALU is generic (c_delay: integer : = 20 ns; S_delay: integer : = 20 ns); port ( signal A, B: in signal m: in signal S: out signal c: out signal ovf: out end ALU; . . . S <= A + B; 361 design. 20 vlbit_vector (0 to 31); vlbit)

Design Decisions ALU bit slice 7 -to-2 C/L PLD Gates ° Simple bit-slice •

Design Decisions ALU bit slice 7 -to-2 C/L PLD Gates ° Simple bit-slice • big combinational problem • many little combinational problems • partition into 2 -step problem ° Bit slice with carry look-ahead °. . . 361 design. 21 7 3 -to-2 C/L CL 0 CL 6 mux

Refined Diagram: bit-slice ALU A 32 B a 0 b 0 ALU 0 m

Refined Diagram: bit-slice ALU A 32 B a 0 b 0 ALU 0 m co cin s 0 a 31 b 31 ALU 0 m co s 31 cin Ovflw S 361 design. 22 32 32 4 M

7 -to-2 Combinational Logic ° start turning the crank. . . Function 0 add

7 -to-2 Combinational Logic ° start turning the crank. . . Function 0 add 127 361 design. 23 Inputs Outputs M 0 M 1 M 2 M 3 A B Cin S Cout 0 0 0 0 0 K-Map

A One Bit ALU ° This 1 -bit ALU will perform AND, OR, and

A One Bit ALU ° This 1 -bit ALU will perform AND, OR, and ADD Carry. In A Mux B 1 -bit Full Adder Carry. Out 361 design. 24 Result

A One-bit Full Adder Carry. In A ° This is also called a (3,

A One-bit Full Adder Carry. In A ° This is also called a (3, 2) adder B ° Half Adder: No Carry. In nor Carry. Out ° Truth Table: Inputs 361 design. 25 1 -bit Full Adder Outputs A B Carry. In Carry. Out Sum Comments 0 0 0 + 0 = 00 0 0 1 0 + 1 = 01 0 0 1 0 + 1 + 0 = 01 0 1 1 1 0 0 + 1 = 10 1 0 0 0 1 1 + 0 = 01 1 0 1 + 0 + 1 = 10 1 1 0 1 + 0 = 10 1 1 1 + 1 = 11 C

Logic Equation for Carry. Out Inputs Outputs A B Carry. In Carry. Out Sum

Logic Equation for Carry. Out Inputs Outputs A B Carry. In Carry. Out Sum Comments 0 0 0 + 0 = 00 0 0 1 0 + 1 = 01 0 0 1 0 + 1 + 0 = 01 0 1 1 1 0 0 + 1 = 10 1 0 0 0 1 1 + 0 = 01 1 0 1 + 0 + 1 = 10 1 1 0 1 + 0 = 10 1 1 1 + 1 = 11 ° Carry. Out = (!A & B & Carry. In) | (A & !B & Carry. In) | (A & B & !Carry. In) | (A & B & Carry. In) ° Carry. Out = B & Carry. In | A & B 361 design. 26

Logic Equation for Sum Inputs Outputs A B Carry. In Carry. Out Sum Comments

Logic Equation for Sum Inputs Outputs A B Carry. In Carry. Out Sum Comments 0 0 0 + 0 = 00 0 0 1 0 + 1 = 01 0 0 1 0 + 1 + 0 = 01 0 1 1 1 0 0 + 1 = 10 1 0 0 0 1 1 + 0 = 01 1 0 1 + 0 + 1 = 10 1 1 0 1 + 0 = 10 1 1 1 + 1 = 11 ° Sum = (!A & !B & Carry. In) | (!A & B & !Carry. In) | (A & !B & !Carry. In) | (A & B & Carry. In) 361 design. 27

Logic Equation for Sum (continue) ° Sum = (!A & !B & Carry. In)

Logic Equation for Sum (continue) ° Sum = (!A & !B & Carry. In) | (!A & B & !Carry. In) | (A & !B & !Carry. In) | (A & B & Carry. In) ° Sum = A XOR B XOR Carry. In ° Truth Table for XOR: 361 design. 28 X Y X XOR Y 0 0 1 1 0 1 0 1 1 0

Logic Diagrams for Carry. Out and Sum ° Carry. Out = B & Carry.

Logic Diagrams for Carry. Out and Sum ° Carry. Out = B & Carry. In | A & B Carry. In A B Carry. Out ° Sum = A XOR B XOR Carry. In A B 361 design. 29 Sum

Seven plus a MUX ? ° Design trick 2: take pieces you know (or

Seven plus a MUX ? ° Design trick 2: take pieces you know (or can imagine) and try to put them together ° Design trick 3: solve part of the problem and extend S-select Carry. In and A B 1 -bit Full Adder add Carry. Out 361 design. 30 Mux or Result

A 4 -bit ALU ° 1 -bit ALU 4 -bit ALU Carry. In 0

A 4 -bit ALU ° 1 -bit ALU 4 -bit ALU Carry. In 0 Carry. In A 0 A B 0 A 1 Mux Result B 1 A 2 B 1 -bit Full Adder Carry. Out 361 design. 31 A 3 B 3 1 -bit Result 0 ALU Carry. In 1 Carry. Out 0 1 -bit Result 1 ALU Carry. In 2 Carry. Out 1 1 -bit Result 2 ALU Carry. In 3 Carry. Out 2 1 -bit ALU Carry. Out 3 Result 3

How About Subtraction? ° Keep in mind the followings: • (A - B) is

How About Subtraction? ° Keep in mind the followings: • (A - B) is the that as: A + (-B) • 2’s Complement: Take the inverse of every bit and add 1 ° Bit-wise inverse of B is !B: • A + !B + 1 = A + (!B + 1) = A + (-B) = A - B Subtract Carry. In A 4 1 4 !B 361 design. 32 “ALU” 4 2 x 1 Mux B Sel 0 Zero 4 4 Carry. Out Result

Additional operations ° A - B = A + (– B) • form two

Additional operations ° A - B = A + (– B) • form two complement by invert and add one invert S-select Carry. In and A B 1 -bit Full Adder add Carry. Out Set-less-than? – left as an exercise 361 design. 33 Mux or Result

Revised Diagram ° LSB and MSB need to do a little extra A 32

Revised Diagram ° LSB and MSB need to do a little extra A 32 B a 0 a 31 b 31 ? 361 design. 34 b 0 ALU 0 co cin s 31 Ovflw 32 S 32 4 M C/L to produce select, comp, c-in

Overflow Decimal 0 1 2 3 4 5 6 7 Binary 0000 0001 0010

Overflow Decimal 0 1 2 3 4 5 6 7 Binary 0000 0001 0010 0011 0100 0101 0110 0111 Decimal 0 -1 -2 -3 -4 -5 -6 -7 -8 ° Examples: 7 + 3 = 10 but. . . ° -4 - 5 = -9 0 + 361 design. 35 2’s Complement 0000 1111 1110 1101 1100 1011 1010 1001 1000 but. . . 1 1 0 1 1 1 0 0 1 1 7 3 1 0 – 6 + 1 1 0 0 1 1 – 4 – 5 0 1 1 1 7

Overflow Detection ° Overflow: the result is too large (or too small) to represent

Overflow Detection ° Overflow: the result is too large (or too small) to represent properly • Example: - 8 < = 4 -bit binary number <= 7 ° When adding operands with different signs, overflow cannot occur! ° Overflow occurs when adding: • 2 positive numbers and the sum is negative • 2 negative numbers and the sum is positive ° On your own: Prove you can detect overflow by: • Carry into MSB ° Carry out of MSB 0 + 361 design. 36 1 1 0 1 1 1 0 0 1 1 7 3 1 0 – 6 + 0 1 1 0 0 1 1 – 4 – 5 0 1 1 1 7

Overflow Detection Logic ° Carry into MSB ° Carry out of MSB • For

Overflow Detection Logic ° Carry into MSB ° Carry out of MSB • For a N-bit ALU: Overflow = Carry. In[N - 1] XOR Carry. Out[N - 1] Carry. In 0 A 0 B 0 A 1 B 1 A 2 B 2 A 3 B 3 1 -bit Result 0 ALU Carry. In 1 Carry. Out 0 1 -bit Result 1 ALU Carry. In 2 Carry. Out 1 1 -bit ALU Carry. In 3 1 -bit ALU Carry. Out 3 361 design. 37 X Y X XOR Y 0 0 1 1 0 1 0 1 1 0 Result 2 Overflow Result 3

Zero Detection Logic ° Zero Detection Logic is just a one BIG NOR gate

Zero Detection Logic ° Zero Detection Logic is just a one BIG NOR gate • Any non-zero input to the NOR gate will cause its output to be zero Carry. In 0 A 0 B 0 A 1 B 1 A 2 B 2 A 3 B 3 Result 0 1 -bit ALU Carry. In 1 Carry. Out 0 Result 1 1 -bit ALU Carry. In 2 Carry. Out 1 Result 2 1 -bit ALU Carry. In 3 Carry. Out 2 Result 3 1 -bit ALU Carry. Out 3 361 design. 38 Zero

More Revised Diagram ° LSB and MSB need to do a little extra A

More Revised Diagram ° LSB and MSB need to do a little extra A 32 B 32 signed-arith and cin xor co a 0 a 31 b 31 ALU 0 co cin s 0 ALU 0 co cin s 31 Ovflw 361 design. 39 b 0 S 32 4 M C/L to produce select, comp, c-in

But What about Performance? ° Critical Path of n-bit Rippled-carry adder is n*CP Carry.

But What about Performance? ° Critical Path of n-bit Rippled-carry adder is n*CP Carry. In 0 A 0 B 0 A 1 B 1 A 2 B 2 A 3 B 3 1 -bit Result 0 ALU Carry. In 1 Carry. Out 0 1 -bit Result 1 ALU Carry. In 2 Carry. Out 1 1 -bit Result 2 ALU Carry. In 3 Carry. Out 2 1 -bit ALU Carry. Out 3 Design Trick: throw hardware at it 361 design. 40 Result 3

The Disadvantage of Ripple Carry ° The adder we just built is called a

The Disadvantage of Ripple Carry ° The adder we just built is called a “Ripple Carry Adder” • The carry bit may have to propagate from LSB to MSB • Worst case delay for a N-bit adder: 2 N-gate delay Carry. In 0 A 0 B 0 A 1 B 1 A 2 B 2 A 3 B 3 1 -bit Result 0 ALU Carry. In 1 Carry. Out 0 1 -bit Result 1 ALU Carry. In 2 Carry. Out 1 1 -bit Result 2 ALU Carry. In 3 Carry. Out 2 1 -bit ALU Carry. Out 3 361 design. 41 Result 3 Carry. In A B Carry. Out

Carry Look Ahead (Design trick: peek) Cin A 0 B 1 A 0 0

Carry Look Ahead (Design trick: peek) Cin A 0 B 1 A 0 0 1 1 S G P C 1 =G 0 + C 0 P 0 A B S G P A B B 0 1 C-out 0 C-in 1 “kill” “propagate” “generate” P = A xor B G = A and B C 2 = G 1 + G 0 P 1 + C 0 P 1 S G P C 3 = G 2 + G 1 P 2 + G 0 P 1 P 2 + C 0 P 1 P 2 A B S G P C 4 =. . . 361 design. 42

Plumbing as Carry Lookahead Analogy 361 design. 43

Plumbing as Carry Lookahead Analogy 361 design. 43

The Idea Behind Carry Lookahead (Continue) ° Using the two new terms we just

The Idea Behind Carry Lookahead (Continue) ° Using the two new terms we just defined: • Generate Carry at Bit i gi = Ai & Bi • Propagate Carry via Bit i pi = Ai xor Bi ° We can rewrite: • Cin 1 = g 0 | (p 0 & Cin 0) • Cin 2 = g 1 | (p 1 & g 0) | (p 1 & p 0 & Cin 0) • Cin 3 = g 2 | (p 2 & g 1) | (p 2 & p 1 & g 0) | (p 2 & p 1 & p 0 & Cin 0) ° Carry going into bit 3 is 1 if • We generate a carry at bit 2 (g 2) • Or we generate a carry at bit 1 (g 1) and bit 2 allows it to propagate (p 2 & g 1) • Or we generate a carry at bit 0 (g 0) and bit 1 as well as bit 2 allows it to propagate (p 2 & p 1 & g 0) • Or we have a carry input at bit 0 (Cin 0) and bit 0, 1, and 2 allow it to propagate (p 2 & p 1 & p 0 & Cin 0) 361 design. 44

The Idea Behind Carry Lookahead B 1 A 1 Cout 0 Cout 1 1

The Idea Behind Carry Lookahead B 1 A 1 Cout 0 Cout 1 1 -bit ALU Cin 1 Cin 2 B 0 A 0 1 -bit ALU Cin 0 ° Recall: Carry. Out = (B & Carry. In) | (A & B) • Cin 2 = Cout 1 = (B 1 & Cin 1) | (A 1 & B 1) • Cin 1 = Cout 0 = (B 0 & Cin 0) | (A 0 & B 0) ° Substituting Cin 1 into Cin 2: • Cin 2 = (A 1 & A 0 & B 0) | (A 1 & A 0 & Cin 0) | (A 1 & B 0 & Cin 0) | (B 1 & A 0 & B 0) | (B 1 & A 0 & Cin 0) | (A 1 & B 1) ° Now define two new terms: • Generate Carry at Bit i gi = Ai & Bi • Propagate Carry via Bit i pi = Ai xor Bi • READ and LEARN Details 361 design. 45

Cascaded Carry Look-ahead (16 -bit): Abstraction C L A C 0 G 0 P

Cascaded Carry Look-ahead (16 -bit): Abstraction C L A C 0 G 0 P 0 C 1 =G 0 + C 0 P 0 4 -bit Adder C 2 = G 1 + G 0 P 1 + C 0 P 1 4 -bit Adder C 3 = G 2 + G 1 P 2 + G 0 P 1 P 2 + C 0 P 1 P 2 G P 4 -bit Adder 361 design. 46 C 4 =. . .

2 nd level Carry, Propagate as Plumbing 361 design. 47

2 nd level Carry, Propagate as Plumbing 361 design. 47

A Partial Carry Lookahead Adder ° It is very expensive to build a “full”

A Partial Carry Lookahead Adder ° It is very expensive to build a “full” carry lookahead adder • Just imagine the length of the equation for Cin 31 ° Common practices: • Connects several N-bit Lookahead Adders to form a big adder • Example: connects four 8 -bit carry lookahead adders to form a 32 -bit partial carry lookahead adder A[31: 24] B[31: 24] A[23: 16] B[23: 16] A[15: 8] B[15: 8] 8 8 8 -bit Carry Lookahead Adder 361 design. 48 8 8 C 24 8 -bit Carry Lookahead Adder 8 8 Result[31: 24] Result[23: 16] 8 8 C 16 8 -bit Carry Lookahead Adder 8 Result[15: 8] A[7: 0] B[7: 0] 8 C 8 8 8 -bit Carry Lookahead Adder 8 Result[7: 0] C 0

Design Trick: Guess CP(2 n) = 2*CP(n) n-bit adder CP(2 n) = CP(n) +

Design Trick: Guess CP(2 n) = 2*CP(n) n-bit adder CP(2 n) = CP(n) + CP(mux) n-bit adder Cout 361 design. 49 1 n-bit adder 0 n-bit adder Carry-select adder

Carry Select ° Consider building a 8 -bit ALU • Simple: connects two 4

Carry Select ° Consider building a 8 -bit ALU • Simple: connects two 4 -bit ALUs in series A[3: 0] Carry. In 4 ALU Result[3: 0] 4 B[3: 0] 4 A[7: 4] 4 ALU Result[7: 4] 4 B[7: 4] 4 Carry. Out 361 design. 50

Carry Select (Continue) ° Consider building a 8 -bit ALU • Expensive but faster:

Carry Select (Continue) ° Consider building a 8 -bit ALU • Expensive but faster: uses three 4 -bit ALUs A[3: 0] Carry. In 4 ALU 0 4 4 X[7: 4] 4 A[7: 4] C 0 0 1 4 ALU Y[7: 4] 4 1 B[7: 4] 4 0 2 to 1 MUX Carry. Out C 1 1 Sel C 4 Sel 2 to 1 MUX ALU B[7: 4] 361 design. 51 4 B[3: 0] A[7: 4] 4 Result[3: 0] Result[7: 4] 4

Additional MIPS ALU requirements ° Mult, Mult. U, Div. U (next lecture) => Need

Additional MIPS ALU requirements ° Mult, Mult. U, Div. U (next lecture) => Need 32 -bit multiply and divide, signed and unsigned ° Sll, Sra (next lecture) => Need left shift, right shift arithmetic by 0 to 31 bits ° Nor (leave as exercise to reader) => logical NOR or use 2 steps: (A OR B) XOR 1111. . 1111 361 design. 53

Elements of the Design Process ° Divide and Conquer (e. g. , ALU) •

Elements of the Design Process ° Divide and Conquer (e. g. , ALU) • Formulate a solution in terms of simpler components. • Design each of the components (subproblems) ° Generate and Test (e. g. , ALU) • Given a collection of building blocks, look for ways of putting them together that meets requirement ° Successive Refinement (e. g. , carry lookahead) • Solve "most" of the problem (i. e. , ignore some constraints or special cases), examine and correct shortcomings. ° Formulate High-Level Alternatives (e. g. , carry select) • Articulate many strategies to "keep in mind" while pursuing any one approach. ° Work on the Things you Know How to Do • The unknown will become “obvious” as you make progress. 361 design. 54