어떻게 CPU의 성능을 객관적으로 측정할 것인가?
Instruction을 수행하기 위해 operands를 꺼내오는 과정을 도식화한 그림이다.
PC
값이 가리키는 주소를 Instruction Memory
에 넣으면 다음에 수행할 instruction을 알 수 있다.rs
에 저장된 번호들을 Registers
에서 꺼내온다.Data memory
에서 register에 저장된 value를 꺼내온다.우리는 이번 시간에 위 도식화 된 그림에 대해서 배워볼 것이다.
0
, High voltage = 1
로 맵핑된다.Data가 어디서 어떤 경로로 움직이는지를 나타낸 경로를 datapath라고 한다. Fetch 및 operation execution은 input 값들과 control signal의 조합으로 이뤄진다. 7.1절의 그림을 한 부분씩 차례대로 보도록 하자.
PC
에 저장된 값이 instruction이 저장된 memory의 read
부분으로 들어가면, 해당하는 instruction이 반환된다.PC
값을 늘려주기 위해 ADD
연산기에 상수 4
를 항상 넣어놓고 PC
를 PC + 4
로 만든다. 이 결과는 다음 rising edge때 반영될 것이다.rs1
과 rs2
를 Read register 1, 2
에서 읽는다.rd
를 Write register
에서 읽는다.Write data
는 rd
에 들어있는 data를 말한다. 이 data는 Read data 1, 2
로 나간다.RegWrite
를 사용한다.High
일 때 Write register
앞에서 대기중인 register 번호가 들어간다.ALU는 Read data 1, 2
를 두 입력으로 받아 연산을 수행하고 result
를 반환한다.
연산을 결정하는 것은 4-bit 짜리 ALU Operation
코드이다.
Zero
는 beq
명령어를 위해 사용하는 signal인데, 일단 이 R-format 에서는 활용하지 않는다.
Address
로 들어온 memory의 주소 안에 들어있는 value를 register에 저장한다.Write data
로 들어온 register value를 Address
로 들어온 memory 주소 안에 저장한다.MemWrite
과 MemRead
signal이다.예를 들어 beq rs1, rs2, Label
이라는 명령을 수행한다고 가정하자.
Read register 1, 2
가 지정한 registers 안의 data를 Read data 1, 2
로 반환한다.Zero
핀으로 0
인지 아닌지 확인한다.0
이라면 branch를 빠져나와서 정상 flow로 프로그램이 실행된다.0
이 아니라면, Instruction의 하위 32-bit를 1칸 왼쪽으로 shift해서 64-bit로 만든 뒤 branch할 target 주소를 확보한다. 이 주소가 Label
의 주소다.지금까지 배운 내용을 하나로 합치면 위와 같은 그림이다.
Datapath가 겹치는 부분이 필연적으로 생기는데, 2x1 multiplexer를 넣어서 두 input 중 하나만 선택한다.
Read data 2
를 선택하거나 immediate
상수값을 선택하거나 한다.Read data 2
를 선택할 것이고 I-format일 때는 상수값을 선택할 것이다.ALUSrc
이다.우리는 이번 시간을 통해, 명령어를 수행하기 위해서는 어떤 하드웨어 모듈(logical block)이 사용되는지 배웠다. 그 과정에서 data path와 control path 그리고 control signal이 무엇 무엇이 사용되는지 이해할 수 있었다.
우리는 앞서 ALU에 control bit가 operation을 결정한다고 배웠다.
단순히 ALU 연산 뿐만 아니라, R-format, I-format, S-format 등 다양한 연산에서 ALU를 활용하게 되는 것 또한 배울 수 있었다. 이번에는 ALU의 control bit 4-bit가 어떻게 형성되는지 알아보자.
Instruction에 주어지는 opcode에서 우리는 2-bit 짜리 ALUOp
라는 정보를 얻을 수 있다.
ld
또는 sd
명령어일 때, ALUOp == 00
이며 ALU control bit는 0010
= add
연산이다.ALUOp == 1x
이며 Funct3, 7
의 값에 따라 control bit가 변한다.최종적으로 ALU control bit까지 적용된 그림은 아래와 같다.