일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- DoM
- Linux
- MIPS
- DS
- function
- react
- html
- Class
- DB
- javascript
- control
- XML
- data structure
- php
- architecture
- for
- github
- CSS
- instruction
- Algorithm
- while
- mysql
- DATAPATH
- python
- web
- Pipelining
- Java
- system
- computer
- MacOS
- Today
- Total
목록DATAPATH (9)
YYYEJI

Corrected Datapath 란? Pipelining을 할 때 한 instruction이 시작하면 다음 instruction이 그대로 시작을 하게 됩니다. 여기서 5번째 clock cycle을 보면 WB 단계는 register에 값을 써야되는 상황이고, ID 단계를 register의 번호를 읽어야 되는 상황입니다. ID 단계에서 register의 번호를 읽으면 앞 전에 읽었던 register의 번호는 사라지게 됩니다. 이 문제를 해결하기 위해 corrected datapath를 두게 됩니다. Write register의 번호가 라인을 따라 넘어가면 WB에서 쓰일 register 번호도 ID에서 읽힐 register 번호도 보존되게 됩니다. ◡̈

① Instruction fetch step (IF) ② Instruction decode/register fetch step (ID) ③ Execution/effective address step (EX) ④ Memory access (MEM) XXX beq은 Memory access를 하지 않습니다. ⑤ Register write-back step (WB) XXX beq는 register에 값을 쓰지 않습니다. beq의 datapath에서 Corrected datapath를 필요로 하지 않습니다. https://yyyeji.tistory.com/283 [MIPS] Corrected Datapath란? Corrected Datapath 란? Pipelining을 할 때 한 instruction이 시작하..

① Instruction fetch step (IF) ② Instruction decode/register fetch step (ID) ③ Execution/effective address step (EX) ④ Memory access (MEM) ⑤ Register write-back step (WB) XXX sw는 register에 값을 쓰지 않습니다. sw의 datapath에서 Corrected datapath를 필요로 하지 않습니다. https://yyyeji.tistory.com/283 [MIPS] Corrected Datapath란? Corrected Datapath 란? Pipelining을 할 때 한 instruction이 시작하면 다음 instruction이 그대로 시작을 하게 됩니다. 여..

① Instruction fetch step (IF) ② Instruction decode/register fetch step (ID) ③ Execution/effective address step (EX) ④ Memory access (MEM) ⑤ Register write-back step (WB) lw의 datapath에서 Corrected datapath를 필요로 합니다. https://yyyeji.tistory.com/283 [MIPS] Corrected Datapath란? Corrected Datapath 란? Pipelining을 할 때 한 instruction이 시작하면 다음 instruction이 그대로 시작을 하게 됩니다. 여기서 5번째 clock cycle을 보면 WB 단계는 regi..

beq는 PC 값을 조정하는게 중요 포인트입니다. beq $s0, $s1 label ① Instruction을 fetch하면서 PC의 값을 증가시킵니다. ② Register($s0, $s1)의 값을 읽습니다. ③ Branch or Not Branch ALU에서 계산된 값이 Non-zero(true)일 경우에 데이터가 이렇게 움직입니다. label의 값이 SignExt, shift left 2된 값과 PC+4와 더해져서 PC의 값이 조정됩니다. ALU에서 계산된 값이 Zero(false)일 경우에 데이터가 이렇게 움직입니다. PC+4의 값이 그대로 PC에 들어갑니다. ◡̈

lw, sw는 datapath가 다릅니다. lw $t0, 32($t1) sw $t0, 32($t1) sw 를 살펴보겠습니다. sw ① Instruction을 fetch하면서 PC의 값을 증가시킵니다. ② Register($t1)의 값을 읽습니다. ③ ALU를 통해 주소 값을 계산합니다. 계산된 주소 값을 Data memory로 보냅니다. ④ Data memory에서 앞에서 계산된 주소 값에 가서 값을 저장합니다. ◡̈

lw, sw는 datapath가 다릅니다. lw $t0, 32($t1) sw $t0, 32($t1) LW ① Instruction을 fetch하면서 PC의 값을 증가시킵니다. ② Register($t1)의 값을 읽습니다. immediate 값은 SignExt한 값이 ALU로 들어갑니다. 계산된 값은 주소값 입니다. ③ ALU를 통해 주소 값을 계산합니다. 계산된 주소 값을 Data memory로 보냅니다. ④ Data memory에서 계산된 주소 값을 통해 값을 fetch 해옵니다. fetch 된 값을 write data로 보냅니다. ⑤ Clock이 1이 되면 destination($s0)에 계산된 값을 저장합니다. ◡̈

R-type의 instruction은 add, sub, and, or, slt 가 있습니다. 데이터가 어떤 경로로 이동하는지 보겠습니다. • add $s0, $t0, $t1 # $s0 = $t0 + $t1 • sub $s0, $t0, $t1 # $s0 = $t0 - $t1 • and $s0, $t0, $t1 # $s0 = $t0 & $t1 • or $s0, $t0, $t1 # $s0 = $t0 | $t1 • slt $s0, $t0, $t1 ① Instruction을 fetch하면서 PC의 값을 증가시킵니다. ② Register($t0, $t1)의 값을 읽습니다. $s0는 나중에 수행된 값이 저장될 곳으로 $s0임을 인지합니다. ③ ALU를 통해 값을 계산합니다. 두 개의 register 안에 있는 dat..