204225 Finals
-
Upload
chawanat-nakasan -
Category
Documents
-
view
418 -
download
4
description
Transcript of 204225 Finals
Architecture!
Chapter 3: CPU Arithmetic How MUL and DIV really works!
Addition-Subtraction เราอาศย 2’s complement ในการคดบวกลบ และเราจะตองดวามน overflow ไดหรอไมดวย
x y Operation Overflow + + Addition Possible, roll to negative + - Addition Impossible - - Addition Possible, to positive + + Subtraction Impossible + - Subtraction Possible, to negative - - Subtraction Impossible
Multiplication เราคณฐานสองแบบเดกๆ เลย แบบทางขวาเนย พอเขาใจงายมย
Start
Shift 1 bit
1 0
Shift 1 bit
32 ?
No
Yes
Set product = 0
ALU (64)
Product (64) Control
Multiplier (32)
Multiplicand (64)
Shift Left
Shift Right
ALU (32)
Product (64) Control
Multiplicand (32)
Shift Right
ตวอยางการคณ แสดงดงตารางน
Iteration No.
Operation (Slow)
y x Product Operation (Fast)
x Product (z)
0 Initialize 0011 0000 0010 0000 0000 Initialize 0010 0000 0011 1 add 0011 0000 0010 0000 0010 add (high) 0010 0010 0011 x<<1 0011 0000 0100 0000 0010 z>>1 0010 0001 0001 y>>1 0001 0000 0100 0000 0010 2 add 0001 0000 0100 0000 0110 add (high) 0010 0011 0001 x<<1 0001 0000 1000 0000 0110 z>>1 0010 0001 1000 y>>1 0000 0000 1000 0000 0110 3 nop 0000 0000 1000 0000 0110 nop 0010 0001 1000 x<<1 0000 0001 0000 0000 0110 z>>1 0010 0000 1100 y>>1 0000 0001 0000 0000 0110 4 nop 0000 0001 0000 0000 0110 nop 0010 0000 1100 x<<1 0000 0010 0000 0000 0110 z>>1 0010 0000 0110 y>>1 0000 0010 0000 0000 0110
จะเหนวาแบบ Fast (แบบทเอา hardware ตวลางมา implement) เรวกวาแบบ Slow ทใช Hardware แบบบน
(สแดง: ต าแหนงทถก operate, สเขยว: การพจารณาเลอกค าสง)
Signed Multiplication
ท าไดโดยการ
จ า sign ไว
แปลงลบเปนบวกใหหมดกอน
คณปกต
แลวแปลง sign กลบ
Implementation
ใน MIPS ผลการคณจะถกเกบไวใน HI กบ LO การจะเอาคาออกมาตองใชค าสง mfhi, mflo เพอเอามาไวใน register ของเรา
Division
ลองมาท าการหารกนบางดกวา
Iteration Operation Q Divisor R/Dividend Operation R|Q D Status
0 Initialize 0000 0010 0000 0000 0111 Initialize 0 0000 0111 0010 1 Subtract 0000 0010 0000 1110 0111 Compare 0 0000 0111 0010 FAIL Fail: Undo 0000 0010 0000 0000 0111 RQ<<1 (0) 0 0000 1110 0010 Q << 1 (0) 0000 0010 0000 0000 0111 D >> 1 0000 0001 0000 0000 0111 2 Subtract 0000 0001 0000 1111 0111 Compare 0 0000 1110 0010 FAIL Fail: Undo 0000 0001 0000 0000 0111 RQ<<1 (0) 0 0001 1100 0010 Q << 1 (0) 0000 0001 0000 0000 0111 D >> 1 0000 0000 1000 0000 0111 3 Subtract 0000 0000 1000 1111 1111 Compare 0 0001 1100 0010 FAIL Fail: Undo 0000 0000 1000 0000 0111 RQ<<1 (0) 0 0011 1000 0010 Q << 1 (0) 0000 0000 1000 0000 0111 D >> 1 0000 0000 0100 0000 0111 4 Subtract 0000 0000 0100 0000 0011 Compare 0 0011 1000 0010 OK Q << 1 (1) 0001 0000 0100 0000 0011 Subtract 0 0001 1000 0010 D >> 1 0001 0000 0010 0000 0011 RQ<<1 (1) 0 0011 0001 0010 5 Subtract 0001 0000 0010 0000 0001 Compare 0 0011 0001 0010 OK Q << 1 (1) 0011 0000 0010 0000 0001 Subtract 0 0001 0001 0010 D >> 1 0011 0000 0001 0000 0001 RQ<<1 (1) 0 0010 0011 0010
Start
Shift 1
Shift 0
False True
>>1
33 ?
End
ALU (64)
Remainder (64) Control
Quotient (32)
Divisor (64)
Shift Right
0/1 LSB
64
64
+/- test
ALU (32)
R(32) | Q(32) Control
Divisor (32)
>><<
write
64
64
+/- test
เปนอนเสรจสนการหาร จะเหนวาการหารทางขวาท าไดเรวกวาทางซาย ทงน ทางขวานนใช comparator ในการตรวจสอบคา (เปน Verilog implementation ของผ เขยนเองจงยงไมไดแกไข ทจรงตองใชการลบแลวตรวจสอบ sign bit) สาระส าคญคอ การหารปกตจะท าการ shift 2 ครง ซงชากวาแบบเรวทใชการ shift เพยงครงเดยวตอรอบ โดยการหารดวยฮารดแวรใหมนไมท าใหจ านวนรอบเพมขนดวย
จรงๆ แลวตองใช R|Q = 2n+1 bits ถาเราตองการหารเลข n bits และเราตองเกบผลลพธตามทขดเสนใตไวอกดวย (ถาไมท าแบบนค าตอบอาจไมเทากน)
Signed Division
การหารคดเครองหมาย หลกการคลายการคณ คอตองแปลงเครองหมายกอน -หลงการด าเนนการ ทงน ดงทเหนในภาพ เราตองท าใหเครองหมายของเศษตรงกบเครองหมายของตวตงเสมอ
Interlude: Verilog Programming เสนอเฉพาะหลกการทวไปเทาทจ าเปน
การเขยน Verilog ท าคลายๆ C + VHDL
Modules แบงโคดของเราเปน module ขางในกท างานไปตามเรองตามราว แต modules เหลานจะท างานตลอดเวลาตามพฤตกรรม ไมมการเรยกฟงกชนเหมอนภาษาโปรแกรมมงทเรารจก ตอไปนจะเปนตวอยางการเขยนวงจร NAND และผลลพธทได
module mynand(in1,in2,out); input in1,in2; output out; assign out = ~(in1&in2)
endmodule module foo(p,q,p_b,q_b,o)
input p,q,p_b,q_b output o wire w, w_b mynand nand1(.out(w), .in1(p), .in2(q)) ; mynand nand2(.out(w_b), .in1(p_b), .in2(q_b)) ; mynand nand3(.out(o), .in1(w), .in2(w_b)) ;
endmodule
Signals in Verilog สญญาณมสรปแบบ คอ 0, 1, Z, X ซงสามารถน ามา “ผสม” กนได โดยจะมผลดงตารางตอไปน
0 1 X Z 0 0 X X 0 1 X 1 X 1 X X X X X Z 0 1 X Z
Bus บส คอการรวมสญญาณยอยๆ หลายๆ เสนเขาดวยกน การประกาศและใชงานบสนนคลายอารเรย แตมลกเลนแปลกๆ ทเราสามาถท ากบบสไดดวย เชน การตอสญญาณทางขนาน (concatenation)
Assign and Use Buses
input [5:0] a,b; //gives 6-line bus called a, and another 6-line bus called b
a[5:1] = {a[4:0],1’b0}; //equivalent to shift left
Concatenation
Concatenate “once”, for example: assign a[63:0] = {b[31:0], c[31:0]};
Concatenate “many”, for example: assign y = {3{a[3:0]},b[3:2],2'b00};
Sequential Programming (always @)
input [7:0] in1; input [7:0] in2; reg [7:0] out; input select; always @ (select) begin //ใหท างานบลอกนเมอคา select เปลยนแปลง
if (select==1'b0) out = in1; //สงเกตวา out เปน reg เพราะ always นนเปนการท างานแบบ sequential ท างานครงเดยวกผานไป ไมได
เปนสายไฟคางไวตลอดเหมอนขางนอก จงตองมเมมโมรมาจ าคา else
out = in2; end reg [7:0] counter; always @ (posedge clk) //ใหท างานบลอกนเมอคา clk เปลยนแปลงแบบขอบขาขน
counter = counter + 1; สงเกต: เราใช begin-end เมอค าสงใน block มหลายค าสงเทานน
Case
Case เปนค าสงหนงทส าคญในการเขยน behavioral modules เชน decoder ในตวอยางตอไปน
module what_is_me(a,y); input [2:0] a; output [7:0] y; reg [7:0] y; always @ (a) case(a)
3'h0 : y = 8'h01; 3'h1 : y = 8'h02; 3'h2 : y = 8'h04; 3'h3 : y = 8'h08; 3'h4 : y = 8'h10; 3'h5 : y = 8'h20; 3'h6 : y = 8'h40; 3'h7 : y = 8'h80;
endcase endmodule
Chapter 4: Data Path & Control Hard part…
Hardware Designs
Single-Cycle Design
เปนแบบทเราเคยเรยนมา คอม latch (memory element) ทเปน sequential ผสมกบ combinational logic circuit โดยการออกแบบเปน worst-case design คออะไรใชเวลามากสด (delay time มาก) กจะเปนตวก าหนด clock interval ทเลกทสดเทาทท าได เชน วงจรใชเวลาวงผานเกตรวม 100ns กหามท า clock ทเรวกวานน
Pipeline Design
ไมใชทอสงแกส! แตเปนการออกแบบโปรเซสเซอรทสงขนมา ท าใหท างานไดอยางมประสทธภาพมากขน โดยโยนงานตอเปนทอดๆ และรบงานใหมเขามาอยางรวดเรว ท าใหรบงานใหมไดโดยไมตองรองานเกาวงจนจบ (แควงไปใหพนทางกพอ)
Understanding MIPS 32 registers Instruction Format
o R-type o I-type o J-type
Instruction Types
o ALU/Logic o Load/Store o Branch/Jump
How to Design
มหลายตว แตละอนกมความเหมาะสมตางกน เชน หากเราลองออกแบบดวย Finite State Machine (FSM)
32 registers = 32 sequential elements แตละอนกวาง 32 bits order of FSM นาจะประมาณ 2^32*2 states โอว! PC กอก 32 bits
อะไรๆ กมากไปหมด จงไมเหมาะกบการท างานททวไป (general-purpose) เพราะมนตองท าทกอยาง บนทก states นอกจากน FSM มระดบการประมวลผลทต าเกนกวาจะมาออกแบบอะไรแบบนได คดดวาเชควงเลบยงท าไมไดเลย ตองไปใชพวก push-down automata + ท า stack (ยงม Turing Machine ทมความสามารถในการค านวณสงสดอก แตจะเรยนใน Theory)
โครงสรางทจะมาจ าลอง Turing Machine แบบงายๆ เกดจาก Memory ตอกบ ALU ทม select มาเลอกค าสงอกท สวนตว memory กตอกบ memory control ซงทงหมดกรบค าสงมาจาก control อกท
ขอจ ากดของ Turing Machine กมเหมอนกน เชน Halting Problem (ปญหาทถามวาโปรแกรมหนงๆ จะท างานจนจบหรอไม)
How Single-Cycle Data Path works ภาพประกอบใหดทภาคผนวก A
Single-Cycle CPU ท างานโดยเราไปดงค าสงมา ค าสงนนกจะมสามชนดคอ R, I, J โดยแตละแบบจะไปใชงาน CPU ในสวนตางๆ กนออกไป
การท างานของ Single-Cycle CPU จะตองไมใหความเรวคลอกเรวไปกวาความเรวทชาทสดของวงจร (อยาลมวาอปกรณทกชนในวงจรม propagation delay เสมอ ดงทไดเรยนไปแลวใน Digital Systems)
เราแบง CPU ออกเปนหาสวน (ตามภาคผนวก B) โดยแบงเปน
Instruction Fetch (IF) มหนาทดงค าสงออกมาจาก Instruction Memory (ทเกบค าสงของเรา) Instruction Decode (ID / REG) มหนาทแปลงค าสงและดงคาจาก Register ทตองใช Execution (EXE / ALU) มหนาทท าการค านวณลวนๆ Memory (MEM) มหนาท store / load คาจาก memory Write-Back (WB) มหนาทเขยนคาใหมลงใน Registers (เชน คาทโหลดมา หรอผลจากการค านวณ)
เราจะเหนไดอยางชดเจนวา ค าสงบางค าสงกจะใช CPU ไมครบทกสวน เชน add ไมใช MEM เลย เพราะวาไมไดเกบคาหรอดงคาใดๆ ออกจากหนวยความจ า หรอ beq ทไมมการเขยนคากลบหรอเขา memory เลย เพราะเราโยนผลการบวกออกมาเปนการแปลง program counter ทนทโดยไมมการบนทกคา เปนตน
หลกการคด clock interval ท าโดยเอาเวลาท างานทงหมดมาบวกกน คอ สมมตวา IF = 5ns, ID = 3ns, EXE = 6ns, MEM = 5ns, WB = 4ns เรากจบบวกกนได 23ns นเปนคาบเวลาเลกสดทเราจะใชกบ CPU รนนได
Pipelining ไมใชทอสงแกส แตเปนทอทจะท าใหงานของเราสะดวกรวดเรวขน
ตวอยางหนงทนาสนใจคอการซกผา สมมตเราอยหอแลวรวมผากนซก ผาตองแยกกลมกน (จะไดไมปนกน) ท าทละตะกราไป ถามวแต รอกนมนกจะชา ซงไอการรอกนทวากคอหลกของ Single Cycle ทกประการ
แบบซายคอแบบ Single-Cycle เราตองรองานจบกอน กบแบบขวาคอ Pipeline เราโยนผาใสเครองตอไปไดเลย จะเหนวาแบบซายใชเวลาตอ cycle ทงหมด 30+40+20 = 90 นาท ในขณะทแบบขวาใชเวลาตอ cycle ทงหมด max(30,40,20) = 40 นาท
แบบขวาเรวกวา แตมขอจ ากดอย
ถาค าสงทท ามไมมาก ความคมคาจะไมชดเจน ท ายาก เพราะอาจเกดปญหาวางานเกายงไมไดขอมลออกมา งานใหมตองเอาขอมลนนมาดวนทสด ฯลฯ
Clock Trigger Organization
เราตองจด clock trigger ใหเหมาะสม ระหวาง “บลอก” นนเราใหตนาฬกาท posedge ไปแลว ขางในแตละกอนกตองเปน negedge แทน สรปออกมาจะไดวา
PC, regfile: negedge (เพราะเราตองใหเวลามนในการท างานใหเสรจกอน) IF/ID, ID/EX, EX/MEM, MEM/WB: posedge (เปนปกตของมน)
Data Hazard
Data Hazard จะเกดขนเมอเราตองการขอมลทนท แตมนยงไมมให เพราะค าสงกอนหนายงท าไมเสรจ เชน
add $1,$2,$3 ori $8, $1, 0xff
สงเกตวา $1 ส าหรบ ori มนยงไมมา เพราะเมอ ori วงเขา EXE นน add ยงอยใน MEM (ยงไม WB คาใหมจะไมมา!)
วธการแก Data Hazard มดงน
Stalling คอเราหยดการท างานโปรแกรมไวกอน รอจนคามาทๆ เราตองใช แลวคอยลยตอ วธนเสยเวลาแตไมตองแกฮารดแวรเลย หากเราคดๆ ดจะไดวา
o ถาค าสงใชคาใน regfile ตอกนทนท จะเสย 2 cycles o ถามค าสงอนมาคนกลาง (ทไมไปท าใหเกด stalling เพม) จะเสย 1 cycle
Forwarding o คอการยนยอมใหสงคาบางคาไปยง pipeline stage ทตองการไดทนทโดยไมตองรอจบ cycle เราท าโดยการชอตขาแลว
เอา MUX มาดกไว แลวใช control signal ในการเลอกคา o การจะดวา Forwarding ไดหรอไมนนเราควรเขยนแผนภาพเวลาดวย โดยการ forward จะตองไมใหมการวงยอนเวลาได
Reg File
ID/EX
MU
XM
UX
MU
X
Rt
ALU
EX/MEM
Memory(data)
Rd EX/MEM.RegisterRd
Forwarding Unit
Rt
Rs
MEM/WB.RegisterRd
MU
X
ForwardB
ForwardA
MEM/WB
ตวอยางของ Forwarding
เรามาลองเปรยบเทยบกนวา forwarding แลวดขนหรอไม กบโจทยสนๆ น
lw $1, 4($3) addi $2,$1,10 sub $2,$2,$1
Without Forwarding o lw ท างาน + 2 bubble เพราะมคนรอ $1 มาตดๆ o addi ท างาน + 2 bubble เพราะมคนรอ $2 มาตดๆ o sub ท างาน o รวมเปน 7 clocks
With Forwarding o lw แลวยงไงกตอง stall 1 clock เพราะเขากรณ lw-stall o addi แลวใช forwarding o sub รบ forwarding มา o รวมเปน 4 clocks
Control Hazard
เราแกปญหาเรองขอมลเขาชาไดแลว ปญหาตอไปคอถาค าสงท n เปน branch (beq) แลวตอมาค าสงท n+1 ตองท าอะไรตอละทน? ในการท างานของ branch นนมนมทางเลอกสองทางคอ จะ fall through (ไปบรรทดตอไป) หรอจะกระโดดไปยงต าแหนงทอยในค าสงเลยด
beq $8, $9, L1 addi $2, $2, 1 <-- fall-through sub $3, $2, $4 L1: lw $3, 16($2) <-- target
กวาเราจะรวาตองท า addi หรอ lw นนกตองรอรอรอ รอจน beq มนท า EXE เสรจ (ไป MEM นนแลว) เพงจะได fetch ค าสงใหมมา (ชาโคตร) สรปวาเราเสยไป 2 clocks ฟรๆ
เราสามารถแกปญหานไดโดยใช Quick Compare ซงเปนการยงผลลพธจากการเชคคาเทาไมเทาในขน EXE กลบมาทระบบ update PC เลย แบบนกจะเรวขนไปอก เพราะค าสงใหมจะเขามาในขณะท beq อยใน EXE เทานน (เสยนอยลงเหลอ 1 clock)
อกวธหนงทนยมใชกนคอ Delayed Branching ซงอาจก าจดการเสย clock ไดทงหมด!!! นไมใชวธทางฮารดแวร แตเราอาศยความสามารถของ MIPS Compiler มาชวย เชนเรามค าสงภาษาซวา:
z=1; if (x==a) y=5; else y=6;
เราแปลงเปน Assembly ไดเปน addi $3, $0, 1 bne $1, $4, L1 addi $2, $0, 5 j L2 L1: addi $2, $0, 6 L2:
แบบนชา เพราะ bne ตองเสยเวลา 1 clock วางๆ ไป เราจะสลบบรรทด addi แรกกบ bne
bne $1, $4, L1 addi $3, $0, 1 <- delayed addi $2, $0, 5 j L2 L1: addi $2, $0, 6 L2:
มนจะเรวขน เพราะเราสามารถยด addi ไวทาย bne ไดเลย เพราะม "ความปลอดภยของคา" อย คอมนจะไมเขยนทบกนเองแนนอน คอในเมอมน branch กเสยค าสงแนๆ กลองเอามาไวทาย branch กอน โดยเอามาวางใน delayed slot เชนในกรณนเราท าค าสงสแดง (z=1) ไปพรอมๆ กบการ evaluate branching ไปเลยกได
พดสรปกนงายๆ คอ เอาค าสงกอนหนา branch ไปไวหลง branch (ในแงของล าดบการท างานของซพย) กจะไดท าไปพรอมๆ กนเลย ทงน นเปนกระบวนการของ MIPS Compiler ไมใช MIPS CPU เพราะ MIPS CPU ไมมระบบตรวจ control hazard ในตว
วาแตทเรยนมานานแลวนะ แลวท าไม jal ถงเกบ pc+8? นนกเปนเพราะใน pc+4 ม delayed slot อยแลวไง
อกวธทนาสนใจอยางยงคอ Branch Prediction ซงจะเปนการ “จ า” ไววาทผานมานนเราได take branch รเปลา เพราะการท างานค าสงบางประเภทเชน for-loop นนเรามแนวโนมทจะกลบเขาไปบอยๆ
ถาเรามคา 1 bit ไวเกบวาแตละบรรทดจะท างานซ าหรอไม เรากจะเดาไดงายขนวาจะตองท างานหรอไม โดยถา branch กใส 1 ถาไม branch กใส 0 กอนจะท าการ branch เรากโหลดค าสงทเหมาะสมมาตอรอไวเลย ถาผดก flush ค าสงทงไปจากระบบ
แตในกรณ loop สองชนนนมนใชไมได เราจะใหโอกาสแก CPU เพมขน โดยการเพมจ านวน states เปน 4 เพอทจะไดยงไมตอลเปลยนสถานะการเดาแมวาจะผดแคครงเดยว คอ เราจะใส “น าหนก” ความเชอใหมน เปน Strong Take, Weak Take, Weak Not Take และ Strong Not Take ตามล าดบ
T T
NT NT
Not Taken Taken
Taken
Not Taken
Not Taken
Taken
Not Taken
Taken
Chapter 5: Memory
Age of Memory หนวยความจ ามการพฒนามาโดยตลอดตงแตยค 50’s โดยสมยนนใช Core Memory เหนยวน าสนามแมเหลกเพอเกบคา (เกรด: เวลาเครองบมแลวมนขนวา “Core Dump” กหมายถงกระบวนการโบราณน คอมน dump ขอมลมาจาก core memory นนเอง)
ในยค 70’s ไดมการพฒนาใช semiconductor มาท าหนวยความจ า ขนาดของ memory และราคาตอหนวยกลดลงเรอยๆ
Memory is so expensive! Memory Type Access Time Cost (Baht per GB) Typical Size in Market SRAM 1ns 100000 Not for separate sale DRAM 60ns 2000 4-8GB Magnetic Disk 10ms 50 Up to 1.5TB-2TB Solid-State Drive microseconds 500-1000 Up to 512GB (very expensive here!)
แตไมวาอยางไร ของดมนกยงแพงอยวนยงค า แถมเลกอกตางหาก
แลวเราจะท าอยางไรใหไดสงททกคนตองการ?
เรว ใหญ ถก
มนเปนไปไมไดทจะท าใหไดทงสามอยาง แตเราหลอกผใชได อารมณประมาณวารถเบนซใสเครองเซยงกง
Memory Hierarchy เปนผลจากการหลอกผใช เราเอาของเรว (SRAM Cache) ไวใกล CPU มากทสด เอาของทใหญแตชาอยหางออกมาคอ DRAM และเอาของใหญมากทสดไวหางๆ คอ Hard Drive
มหลกการสองขอทตองร คอ
Temporal Locality o โปรแกรมใชขอมลกอนนแลวมแนวโนมใชอก
Spatial Locality o โปรแกรมมกใชขอมลใกลๆ กน
Caching เปรยบเสมอนการสรางหองเกบของเลกๆ เกบเครองมอทเราใชบอยทสด จะไดไมตองไปเบก-คนบอยๆ (หยบเอง = 3 นาท, เบก = 3 วน?)
Cache
Main Memory
การ map แบบนกเปนวธหนง สมมตวาเราอยากได “กลองสเขยว” เรากดใน cache กอนวาของเขยวๆ ใชกลองสเขยวทเราตองการหรอไม ถาเจอกหยบไปใช ไมเจอกไปเบกมาใส รปแบบนเปนการเกบแบบอางอง modulo ซงกเปนทใชกนทวไปอยางหนง
Direct-Mapped Cache, and related calculations
การทเราจะเรยกหาขอมลเราจะตองท าเปนกอนละ 32 bits แลวแบงบาง bits ไปใชส าหรบการหา เชน ถาเราม Cache ขนาด 4kB = 212 bytes หากเราเกบ “บรรทด” ละไบต เรากตองมครบ 212 บรรทดไปดวย เพราะฉะนน เรากตองม byte-index อย 12 bits ทเหลอ 32-12 = 20 bits กจะเปน “tag”
Index (12)Tag (20)
V Data (8)Tag (20)
V Data (8)Tag (20)
V Data (8)Tag (20)
V Data (8)Tag (20)
Index-1
Index
Index+1
Index+2
...
(1) Use Index to see which Cache Line to check
(2) Equal? Yes: HIT (get data), No: MISS (go to DRAM)
ภาพขางตนเปนภาพแสดงโครงสรางขอมล บรรทดบนทลอยออกมาคอการประมวลคาเพอเอาไปหาใน Cache สวนตารางๆ ขางลางคอตว Cache เอง สงเกตการเกบของมนวา Index นนมอยแลวโดยธรรมชาต ไมจ าเปนตองเกบ และแตละบรรทดกเกบคาไว 1 byte
แตจรงๆ แลวเราไมนยมเกบคาทละไบต เรานยมเกบกนทละ Word (4 byte) เพราะฉะนน จ านวน “บรรทด” จะลดลงเหลอ ¼ ท าใหจ านวน address bits ลดลงไป 2 bits… ไมจรง!! เพราะเรากตองเผอ address ไวเรยกต าแหนงไบตอยด
Index (10)Tag (20)
V Data (8)Tag (20)
V Data (8)Tag (20)
V Data (8)Tag (20)
V Data (8)Tag (20)
Index-1
Index
Index+1
Index+2
(1) Use Index to see which Cache Line to check
(2) Equal? Yes: HIT (get data), No: MISS (go to DRAM)
Data (8)
Data (8)
Data (8)
Data (8)
Data (8)
Data (8)
Data (8)
Data (8)
Data (8)
Data (8)
Data (8)
Data (8)
B
(3) Get by Byte Number
ในสแดงๆ นนเราเพมกอน Data ใหเปน Word (เราจะเรยกตามศพทของ Memory วา Block เพราะตอไปอาจม block ทขนาดไมใช 4 byte) และยก 2 bits จาก index มาให byte address แทน
นอกจากนเรายงเพมจ านวน blocks per tag ไดอก เราจะพดถงในตวอยางตอไป
Associative Cache
เพอลด Cache Miss เราจะเพมจ านวน Tags Per Line ขนมา ถาเราม 2 tags per line กจะเรยกวามนคอ “2-way Association” ปกตเรานยมท า 4-way มากทสดเพราะมความสมดลระหวาง ”ความเรว” กบ “ความชวร”
ทงน L1 Cache ตองการความเรวสงมาก มากขนาดวา 4-way กไมนยมใชเทาทควร เรามาดโจทยกนเลยดกวา
โจทย: ก าหนดให cache ขนาด 4kB เปนแบบ 4-way set associative และใหมจ านวน blocks ตอ 1 set เทากบ 16 จงค านวณหาจ านวน bits ของ address ขนาด 32 bit ทใชส าหรบ tag, byte offset, block offset และ index
แผนการ:
เราทราบวามขอมล 4096 = 212 bytes ขอมลทเราทราบ
o 212 bytes หมายความวาได 210 blocks ทนท แปลวาจะม index รวมกนไมเกน 10 bits o 16 blocks per set กหารไปอก 24 เหลอ 26 sets หมายความวาเราใช 6 index bits ในการเรยกหา set ทตองการ o ค าวา “4-way set associative” แปลวา 4 tags per line ไมมความหมายในตวเอง แตจะไดวา o 4 blocks per tag (เกดจากการหาร 16/4) ซงแปลวาม block offset ขนาด 2 bit o ทราบอยแลววา 4 bytes per block หมายความวาจะม byte offset ขนาด 2 bit
ตอบ o Byte offset: 2 bits o Block offset: 2 bits o Index: 10-2-2 = 6 bits o Tag: 32-10 = 22 bits
เสรจแลว! นคอโครงสรางการเกบ cache และการจด address ของเรา
Index (6)
Tag (22) Byt
e
Blo
ck
V BlockTag (22)
V Tag (22)
Index-1
Index
Index+1
...
Block Block Block BlockTag (22) Block Block Block
BlockTag (22) Block Block Block BlockTag (22) Block Block Block
Block Block Block Block Tag (22) Block Block Block Block
Tag (22) Block Block Block Block Tag (22) Block Block Block Block
V BlockTag (22) Block Block Block BlockTag (22) Block Block Block
BlockTag (22) Block Block Block BlockTag (22) Block Block Block
...
40
96
Byt
es *
1/1
6 S
ets/
Blo
ck *
1/4
Blo
ck/B
ytes
= 6
4 S
ets
Memory Trade-Off
Large Block Size
แต การโหลดคามาใสตองโหลดมาทละบลอก
Pros o เพม Spatial Locality = Less cache miss โดยเฉพาะใน array
Cons o ลดขนาดของ entries ใน cache ถาโปรแกรมไมม spatial locality จะท าให miss มากแทน o warm-up นาน ตอง optimize ... o critical-word first คอ เอาของจ าเปนทสดมากอน ทเหลอคอยๆ ตามมา o early restart
Associative vs. Direct-Mapped
Associative ลดการ miss ไดมากกวา direct-mapped
Direct-mapped = 10.3% miss 2-way = 8.6% miss 4-way = 8.3% miss มากกวานเรมไมคมแลว เพราะใชเวลาเทากบจ านวน block
When Cache Misses in MIPS Pipeline เราตอง stall เมอ cache miss ท าใหเสย clock ไปเทากบจ านวน stall cycles ซงแปรผนตาม memory access time (ชามาก ประมาณ 100x cache time)
load/store instruction Cycles
CPI for cache hit = 1 (กถกแลว) CPI for cache miss = 1+stall cycles
Example
กรณ CPU clock rate = 500MHz ถารนโปรแกรมทม ALU 50%, Branch 20%, Load-Store 30% โดยท Load-Store ม miss rate = 5%, miss stall time = 60ns (30 cycles!)
แลว CPI เฉลย = ? (จงหา!)
เรายงไมร CPI ของค าสงแตละชนดเลย เรามาก าหนดกอน
ALU CPI = 1 (เพราะท างายสด ท านายกงาย ค านวณกงาย forward ไปมาไดหมด) Branch CPI = ??? (เกด control hazard ท าใหเสย clock ได เราไมรวา Tekken Taken หรอ Not Taken)
o กรณเตม delay slot ได (เตม Delay slot ดวยค าสงทมประโยชน) -> CPI = 1 o กรณเตม delay slot ไมได (คอใส nop แทน) -> CPI = 2 (เลอกใช 2)
Load/Store CPI o Cache Hit = 1 o Cache Miss = 1 + 60ns-in-cycles = 31 cycles! (ถาไมใช cache เลยกไมได miss อะไรกจะเปน 30 cycles)
CPI ในกรณท hit หมด ! (สดยอดความเรว)
ในกรณท miss หมด (เหมอนกบวาไมม cache เลย ทกอยางตอง load/store ผาน memory หมด)
สงเกตไดวาตางกนเกอบ 10 เทา !! เมพไหมละ เมพไหมละ !!
CPI กรณทม cache เราตองแยกกรณ hit กบ miss
บรรทดสองกบบรรทดแรกจะเหมอนกน แตเราเขยนยบๆ แคนนเอง
เทยบแบบไมม cache จะได speed-up ประมาณ 6 เทา
Write Through & Write Back Cache
การสง store สงทมอยใน cache จะท าให cache กบ main memory เกบคาไมตรงกน มการแกสองวธคอ
Write Through = เมอ store ก update memory ดวย o ตรงไปตรงมา แตกน bandwidth มหาศาลมาก
Write Back = Update เฉพาะตอนจะถบ entry ออกจาก cache เทานน เชน เวลาทเราตองดง entry ใหมมาทบ (ตรวจจบโดย dirty bit)
o ใชงานไดเพราะการอาง memory ใดๆ มนกตองผาน cache อยแลว ดงนน เรากท าทกอยางใน cache นนแหละ พอจะทงคาออกจาก cache คอย copy กลบไปท main memory
Type of Misses
Cold Miss เกดจากคามนไมมอยในตอนแรก เปน miss ทเลยงไมได
Conflict Miss เกดจากปญหาเรอง indexing บงคบใหคาทบกนไปมา มเฉพาะใน cache ทไมใช fully associative cache Capacity Miss คอ miss ทไมไดเกดจากสองอนแรก เกดเฉพาะใน fully associative cache
Try a Problem!
Consider the following function:
void vec_add (int x[16], int y[16], int s[16])
{
int i;
for(i=0;i<16;i++)
s[i] = x[i]+y[i];
for(i=0;i<16;i++)
s[i] = s[i]+1;
}
Simple direct-mapped cache: 128 byte cache, 16 byte blocks. Miss rate?
แตละ block = 4 words (เพราะ MIPS จะมองคาเปน word เปนหลก)
byte offset 2 bit (4 bytes per word), block offset 2 bit (4 words per block) และเตม address อก 3 bit จะไดอางไดครบ 128 bytes
Addresses
address of x: 0xc0 (tag = 1, index = 4) 0000 0000 0000 0000 0000 0000 1 : 100 : 00 : 00
y: tag=4, index=0 0000 0000 0000 0000 0000 0010 0 : 000 : 00 : 00
s: tag=5, index=2 0000 0000 0000 0000 0000 0010 1 : 010 : 00 : 00
หลกการท างาน:
โหลด x[0~4] - cold miss (cache วางแตแรกจงเปน compulsory miss) โหลด y[0~4] - cold miss โหลด s[0~4] - cold miss ใชงานไปเรอย จะมา miss อกทตอนใช x[4], y[4], s[4] ก miss สามท แลวมาไลอพคาตอ พอจะใช x[8] กโหลดไปใสใน cache อก ปญหาเกดตอนโหลด y[8] เพราะ index = 0 ท าให y[8] ตองลงท index 2 ซงจะไปทบ s[0~4]
Multiwh… I mean Multicore มทมาจาก Dance-Hall Architecture ($ คอ cache)
p1
$
Interconnect Network
p2
$
p3
$
Mem Mem Mem
p1
$
p2
$
pn
$
Shared Mem
...
Bus
ซาย: Dance-Hall Architecture, ขวา: Bus Architecture
Issues with multicore Cache Coherence
คอปญหาทเกดจากการม shared mem แตทกคนตางโหลด cache ตวเองของใครของมน พอมการเซฟคากลบลงใน cache ท าใหคาทไดไมสมพนธกน
A: เอาเปนวา x=5 นะ B,C: ออ
2 นาทผานไป...
A: เซฟคาละนะ x=7
อกหองหนง...
B: ออ x=5 สนะ เมอกจดไว C: ตรงน x=1…
3 นาทผานไป
เจานาย: เฮย ท าไมงานพวกแกผดหมดเลยวะ! นมนอะไรกน! A: ผมบอกไอ B,C วา x=5 นะครบ แลวท าไม... B: กตอนท าถงตรงน x มนเปลยนเปน 7 แลวโวยไอฟาย C: เฮย บาแลว 1 ไมใชรไง! เจานาย: พวกแกคยงานยงไงวะ! ไปท ามาใหม!
อารมณประมาณนน ทางแกหนงทนาลองคอ write-through ใหหมดเลย แตปญหาคอไมสามารถไป update cache ของเพอนๆ ไดดวย แลวจะท ายงไงให cache มการ update ไดเหมอนกนทกคน?
Multicore Challenges
1. ใชประโยชนจากหลายๆ core
2. การบรหาร cache และ memory ใหมมมมองเดยวกน 3. Memory Consistency
Epilogue
Revision: Verilog module whatisme(clk,A,B,r)
input A; input clk, r; output B; reg B; always @ (posedge clk) //start working on positive edge of clk
if (r) B = 0;
else B = A;
endmodule; สรป หนาทของมนคอ ทกๆ clock positive edge ถา r = 0 ให B = 0, otherwise B = A ซงกคอบทบาทเดยวกบ D-Flip-Flop นนเอง เราจะท าโจทยตอไปโดยเอา DFF (ตอไปนเรยก whatisme วา DFF นะ) มาสรางตอ
Q
QSET
CLR
Dclk
D Q
module whatisme2 (out, in, clk, reset); output out; input in, clk, reset; wire q; DFF state(clk, out, q, reset); assign out = in ^ q;
endmodule; ผลทไดคอ ม DFF อนนงอยขางใน ผลลพธ D ทออกมา การท างานของมนคอมนจะเปลยนคา 1-0-1-0 ทกครงทมสญญาณ 1 ใสเขามา (เพราะมน xor กบ memory) เรยกสงนวา Parity Checker
Q
QSET
CLR
D q
in
clk
reset
out
ตอๆๆ module whatisme3 (clk, enable, reset, out) input clk, reset, enable; output out; reg out; always @ (posedge clk) if(reset) out = 0; else if (enable) out = !out; endmodule;
ถา reset แลว out = 0 ไมเชนนนถา enable ใหกลบคา out ถาสงเกตการท างาน จะพบวามนสลบคาขนลงขนลงเมอเรา enable ไว ความถ output จะลดลงเหลอครงหนง ซงคณสมบตนปรากฏใน T-Flip-Flop และ Divide-by-two counter เราจะเรยกมนวา divby2counter module divby4Counter ( clk, enable, reset, out)
divby2Counter beef (clk, enable, reset, out) //เราหมายถงไอกอนเมอก always @ (posedge out_temp)
if (reset) out = 0;
else if (enable) out = !out_temp;
endmodule;
กคอเราครอบลงไปอกชนอะ
Solutions to Homework 4: Datapath (and Data Hazard)
Problem 1
รปแบบค าสงทเขาตองการพจารณาคอ
lw $2, 4($1) sw $2, 8($1)
เราจะสราง forwarding network มาชวย (ก าจด Stall) ไดหรอไม อยางไร
ตอบ: ได โดยท า forwarding WB -> MEM
REGIF MEM WB
REGIF MEM WB
lw $2, 4($1)
sw $2, 8($1)
This forwarding is possible!
Clocks
Problem 2
การท างานของ CPU นน สญญาณแตละตวมหนาทตางกนไป
Example RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite add 1 0 0 0 10 0 0 1 lw 0 0 1 1 00 0 1 1 addi 0 0 0 0 10 0 0 1 sw 0 0 0 0 00 1 1 0 beq X 1 0 X 01 0 0 0
Problem 3
สญญาณ control จะกระจายไปตาม state ตางๆ
ถาสญญาณ 1 stuck at zero จะท าใหเขยนลง regfile ไมได มผลกบ
All ALU Instructions load
Cut 2 จะมผลกรณ data hazard ทตองใช forwarding ในการแกไข สวน Cut 3 กระทบกบค าสง branch / jump ทงหมด
ค าสงทท างานได
sw $2, 0($10) sw $3, 4($10) sw $4, 8($10)
ค าสงทมปญหากบ fault 1
lw $2, 10($1) add $3, $2, $4 sub $4, $3, $1
ค าสงทมปญหากบ fault 2
add $1, $2, $3 add $4, $1, $2 add $5, $4, $4
ค าสงทมปญหากบ fault 3 (อะไรกตามทม branch)
addi subi beq
New Problem!
พจารณาชดค าสงตอไปน
I1 = lw $1, 40($6) I2 = add $2, $3, $1 I3 = add $1, $6, $4 I4 = sw $2, 20($4) I5 = and $1, $1, $4
ถาสงค าสงชดนเขาไปใน MIPS 5-stage pipeline ทไมม hazard detection และไมม forwarding จงใส nop เพอใหชดค าสงนท างานถกตอง (ใสใหนอยทสด)
lw $1, 40($8) nop (no operation) nop add $2, $3, $1 add $1, $6, $4 nop sw $2, 20($4) and $1, $1, $4
add ตองรอให lw วงมาจน WB กอนจงจเขา EXE ได นนคอตองหางกน 2 instruction และ add กบ sw ตองรอให add วงไปถง MEM กอน SW ถงจะเรมได นนคอหางกน 1 instruction
ท าตอ ถาม hazard detection + forwarding จงเตม pipeline diagram และบอกวาจะจบในก cycle
T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11
I1 IF ID EXE MEM WB I2 IF ID STALL EXE MEM WB I3 IF STALL ID EXE MEM WB I4 IF ID EXE MEM WB I5 IF ID EXE MEM WB
แลวถาไมม hazard detection? กจะเกดปญหาตอน execute I2 ตอจาก I1 ทนท คา $1 จะ forward ไมทน (เพราะมนไมมใครมาควบคมวาตอง stall เมอไหร!)
ทงน MIPS เปน in-order processor จงม data hazard ไดแคแบบเดยวคอ read-after-write (RAW)
Control Hazard เปน Hazard ทจะท าใหประสทธภาพของ pipeline ลดลงเนองจากไมสามารถก าหนดทศทางของค าสงตอไปหลงค าสง Branch ไดแนนอน
การแกไข Control Hazard ใน MIPS มไมกวธ
Delayed Branch
เปนงานของ compiler ทจะเรยงโคดใหสงทไมเกยวกบ branch มาอยตอจาก branch Hardware จะไมท าอะไร
พจารณาชดค าสงตอไปน
L1: lw $1, 40($6) beq $2, $3, L2 ; Taken add $1, $6, $4 L2: beq $1, $2, L1 ; Not Taken sw $2, 20($4) and $1, $1, $4
Case I: add กบ sw ไมใช delayed branch ทถกตอง กตองใส nop หลง branch ทงหมดเลย T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11
I1 IF ID EXE MEM WB I2 IF ID EXE MEM WB nop IF ID EXE MEM WB I4 IF ID EXE MEM WB nop IF ID EXE MEM WB I5 IF ID EXE MEM WB I6 IF ID EXE MEM WB
ตอไปเปน Case II: add กบ sw เปน delayed branch T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11
I1 IF ID EXE MEM WB I2 IF ID EXE MEM WB I3 IF ID EXE MEM WB I4 IF ID EXE MEM WB I5 IF ID EXE MEM WB I6 IF ID EXE MEM WB
ลองมาดเคสตอไปกนดกวา!
Branch Taken!
Delayed Slot!
lw $1, 8($2) //Stall Warning! add $2, $1, $5 sub $8, $9, $10 //Stall Warning! addi $7, $8, 50 beq $9, $10, tgt lw $10, 8($1) //Stall Warning! tgt; or $12, $10, $10
นเปนโคดทมปญหาเรองการล าดบโปรแกรม เราตองสลบล าดบโปรแกรม หาวธจดการกบปญหา hazards ใหไดมากทสด
ปญหาคอ beq -> lw -> tgt เพราะมนใช $10 หมดเลย แนวคดทปลอดภยทสดคอเราเอาสงทอยกอน branch และเปนสงทยงไงกตองท ามาใช เปนการแก control hazard สวนการแก data hazard ท าไดงายมากโดยการสลบ I2 <-> I3
โปรแกรมใหมจะเปน
lw $1, 8($2) sub $8, $9, $10 add $2, $1, $5 beq $9, $10, tgt addi $7, $8, 50 lw $10, 8($1) //Stall Warning! tgt; or $12, $10, $10
แตกยงมปญหา (อยาคดวามนงาย!) เราตองแกโดยการเอา add มาไวในต าแหนงคน lw กบ or แตวาเราตองท าให add ท างานไมวาจะ taken หรอ not taken เราจงตองยายตว tgt ขนมาไมใหโดนขาม โปรแกรมทถกตองจงเปน
lw $1, 8($2) sub $8, $9, $10 beq $9, $10, tgt addi $7, $8, 50 lw $10, 8($1) tgt: add $2, $1, $5 or $12, $10, $10
ทงน ในบางกรณไมสามารถท าไดจรงๆ กม ตองยอมรบและปลอยให stall ไป
Memory & Cache
Basics of Cache
เราจะอางถง cache กนเปน block (1 block มไดหลาย byte ทอยในรปของ 2^n) ในแตละ block จะมจ านวน byte ทจะถก address ไดเปนก าลงของสอง (1,2,4,8,...)
o ปกตเราจะนยมให byte/block มากกวา 1 เพราะ spatial locality ซงชดเจนมากในระดบไบต เพราะตวแปรมกเปนตวแปรขนาด 4 byte
ส าหรบ n-way set associative cache ใน 1 set จะม n blocks
An Example
32-bit address, 128kB Direct-mapped cache. 16 bytes per block.
Offset Bits = 4 (because: 16 bytes per block) Index Bits = 17-4 = 13 bits (because 128k / 16 = 213) Tag Bits = 32-4-13 = 15 bits (it’s what remains)
Tag (15) Index (13) Offset(4)
Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte ByteBlock 0
Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte ByteBlock 1
Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte ByteBlock 2
Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte ByteBlock 213-1
...
Byte Byte Byte Byte
แตเอาเขาจรงๆ เรานยมแบงขอมลใหเปน Words มากกวา (เวลาเราท างานสวนใหญก 32-bit) ดงนน เมอเราม 4 bytes มาตดๆ กน เรากจะรวมมนเปน 1 Word ดงนน เราจะตอง ”เสยสละ” Offset ของเรามาเปน “Byte Offset” 2 bit และเรยกทเหลอวา “Word Offset” แทน
Tag (15) Index (13) BW
Block 0
Block 1
Block 213-1
...
Word Word Word Word
Word Word Word Word
Word Word Word Word
New Problem!
Address 32 bits, 8-way set associative
# blocks = 16
# bytes per block = 32
จงหา
Offset bits Index bits Tag bits Size of Cache
Size of Cache ไมยาก ก
ถามวา offset เทาไหรตอบงายมาก เพราะเราม 32 = 25 bytes per block เราจงตองใช 5 บตในการอางถงทงหมด ตอบ 5 offset bits
มนเรมยาก เพราะนเปน 8-way set associative ค าวา 8-way หมายถงเราม 8 blocks per set ดงนน
เนองจากเรามแค 2 sets เราใชบตเดยวกมากเพยงพอทจะเลอกวาจะเอา set ไหน จงตอบวา 1 bit ส าหรบ index bits และทเหลอจะกลายเปน tag โดยอตโนมต คอ 32-5-1 = 26
มาดโครงสรางทเสรจแลวกนดกวา
Tag (26) I Offset (5)
Block Block Block Block Block Block Block Block
Block Block Block Block Block Block Block Block
Set 0
Set 1
Another problem! Arrrgh!
Address ขนาด 10 บท, Cache ม 4 blocks, จ านวน bytes/block = 4 และเปน 2-way set associative และแทนท block ดวย LRU
Access 0:10001101 1:10110010 2:10111111 3:10001100 4:10011100 5:11101001 6:11111110 7:11101001
Tag 0010001 0010110 0010111 0010001 0010011 0011101 0011111 0011101 Set 1 0 1 1 1 0 1 0 Offset 01 10 11 00 00 01 10 01
Acc. 0 B0 B1 Acc. 2 B0 B1 Acc. 4 B0 B1 Acc. 6 B0 B1 Set 0 Set 0 0010110 Set 0 0010110 Set 0 0010110 0011101
Set 1 0010001 Set 1 0010001 0010111 Set 1 0010001 0010011 Set 1 0011111 0010011
Acc. 1 B0 B1 Acc. 3 B0 B1 Acc. 5 B0 B1 Acc. 7 B0 B1 Set 0 0010110 Set 0 0010110 Set 0 0010110 0011101 Set 0 0010110 0011101
Set 1 0010001 Set 1 0010001 0010111 Set 1 0010001 0010011 Set 1 0011111 0010011
ความหมายของค าทใชคอ
4 bytes per block = 2 offset bits 2-way set associative -> 2 blocks per set = ½ sets per block -> ½ sets per block * 4 blocks = 2 sets ดงนน index 1 bit
Hit Ratio เราอยท 25% เพราะ 8 access เราได hit 2 ครง
Least Recently Used!
Appendix A: Single-Cycle Datapath and Control
PC
Instr.Memory
Read Address
Registers
MUX
Instr[20:16]
Instr[25:21]
Instr[15:11]
0
Read Reg.1
Read Reg.2
Write Reg.
Write Data
Read data 1
Read data 2
Sign Extend
(16->32)
Instr[15:0]
Control
RegDst
RegWrite
Zero
Result
MUX
0
ALUSrc
ALU Control
ALUOp
Instr[5:0]
Write Data
Address
MemWrite
MUX
0
MemtoReg
Read Data
MemRead
Shift Left 2
ADDADD
4
MUX
0
Branch
Instruction Signals Instruction RegDst ALUSrc MemtoReg RegWrite MemRead MemWrite Branch ALUOp1 ALUOp2
R-Format 1 0 0 1 0 0 0 1 0 lw 0 1 1 1 1 0 0 0 0 sw X 1 X 0 0 1 0 0 0 beq X 0 X 0 0 0 1 0 1
Instruction Formats
0
35 or 43
4
rs
rs
rs
rt
rt
rt
rd
address
address
shamt funct
15 bits6 bits 5 bits 5 bits
5 bits 5 bits 5 bits
R-Type
Load/Store
Branch
Appendix B: Division of Regions in Single-Cycle and Pipelined CPU
PC
Instr.Memory
Read Address
Registers
MUX
Instr[20:16]
Instr[25:21]
Instr[15:11]
0
Read Reg.1
Read Reg.2
Write Reg.
Write Data
Read data 1
Read data 2
Sign Extend
(16->32)
Instr[15:0]
Control
RegDst
RegWrite
Zero
Result
MUX
0
ALUSrc
ALU Control
ALUOp
Instr[5:0]
Write Data
Address
MemWrite
MUX
0
MemtoReg
Read Data
MemRead
Shift Left 2
ADDADD
4
MUX
0
Branch
IF ID/REG EXE/ALUMEM WB
MUX
PCInstruction
Memory
4
HazardDetection
Registers
Signed-Extend
<<2
Control
EX
M
WBMUX
0
FLUSH
=
MUX
MUXMUX
MUX
Forwarding Unit
M
WB
Memory
WB
MUX
ค าเตอน: ไมรบประกนความถกตอง ส าหรบ Pipeline Diagram ดไดท Patterson & Hennessy p.370
Boilerplate เอกสารบนทกนบนทกจากการสอนวชา 01204225 Computer Architecture & Organization เฉพาะชวงหลงสอบกลางภาค โดย อาจารย ดร.ภารจ รตนวรพนธ ภาควชาวศวกรรมคอมพวเตอร มหาวทยาลยเกษตรศาสตร ในภาคปลาย ปการศกษา 2553
ผจดบนทกไมมสทธใดๆ ในเนอหารายวชาและ/หรอสวนประกอบอนใดทมาจากแหลงภายนอก บนทกนมวตถประสงคเพอการศกษาเทานน
แผนภาพสวนใหญวาดใหพอเพยงส าหรบการใชในหองสอบเทานน และอาจไมครบถวนตามแตกรณ
จดบนทกโดย LunaticNeko CPE23 และน าออกสสาธารณะในวนท 27 พฤษภาคม 2554 หากตองการแจงขอผดพลาดใดๆ กรณาอเมลแจงท chawanat.n [at] gmail [dot] com (กรณาอยาใชชองทางอนแมจะทราบ เนองจากไมไดดแลทกชองทาง) จกเปนพระคณยง