
어떻게 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까지 적용된 그림은 아래와 같다.
