일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Class
- for
- javascript
- DB
- mysql
- architecture
- MIPS
- while
- html
- control
- react
- data structure
- XML
- instruction
- github
- Java
- CSS
- Algorithm
- Pipelining
- MacOS
- function
- python
- DoM
- DS
- php
- system
- computer
- DATAPATH
- Linux
- web
- Today
- Total
목록system (66)
YYYEJI

↓↓↓ LW Control unit ↓↓↓ • RegDst(Register Destination) - 0 lw instruction format은 destination이 [20:16] bit에 존재합니다. 그렇기 때문에 MUX의 값을 0로 발생시켜야 됩니다. • RegWrtie(Register Write) - 1 Data memory에서 fetch한 값을 Register에 저장해야 되기 때문에 MUX의 값을 1로 발생시켜야 됩니다. • ALUSrc(ALU Source) - 1 ALU에서 필요한 두 번째 source가 SignExt을 지나와야 되기 때문에 MUX의 값을 1로 발생시켜야 됩니다. • ALUop(ALU operation) - add 두 번째 source와 immediate 값을 더해야되기 때문..

↓↓↓ R-type Control unit ↓↓↓ • RegDst(Register Destination) - 1 R-type instruction format은 destination이 [15:11] bit에 존재합니다. 그렇기 때문에 MUX의 값을 1로 발생시켜야 됩니다. • RegWrtie(Register Write) - 1 ALU에서 계산된 값을 Register에 저장해야 되기 때문에 MUX의 값을 1로 발생시켜야 됩니다. • ALUSrc(ALU Source) - 0 ALU에서 필요한 두 번째 값이 register에서 읽어진 값이기 때문에 MUX의 값을0으로 발생시켜야 됩니다. • ALUop(ALU operation) - Dependent on operation • add - OP(and) • sub..

각각의 unit이 어떤 일을 수행할지 결정하는 MUX(Multiplexer)가 존재합니다. Multiplexer(MUX)는 여러 아날로그 또는 디지털 입력 신호 중 하나를 선택하여 선택된 입력을 하나의 라인에 전달하는 장치입니다. 아래 사진에 4개의 MUX가 있습니다. 하나하나 살펴보겠습니다. ① RegDes - Register Destination Instruction 어느 register에 값이 쓰일지 결정합니다. RegDes는 instruction foramt이해가 필요합니다. R-type instruction format Op code rs rt rd shamt Function code 31 26 21 16 11 6 0 • R-type의 destination은 rd이고, 15~11 bit에 존재합..

MIPS에는 여러 Instruction이 존재하는데, ALU control가 어떤 값이냐에 따라 실행되는 operation이 달라집니다. ✓ ALUcontrol에 4bits가 들어가는데 ① 2bits는 ALUop에서 발생시키고, ALUop는 어떤 instruction인지에 따라 결정됩니다. (즉, instruction의 op code를 보게 됩니다.) lw, sw - 00 beq - 01 R type - 10 ② 나머지 2bits는 instruction format에 따라서 2bits가 결정됩니다. R type의 경우 op code만 보고 instruction을 파악하기 힘들기 때문에, function code까지 확인해야 됩니다. ↓↓↓ 아래 결과에 따라 실행되는 instructio이 달라집니다 ↓↓↓..

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..