본문 바로가기
Computer Science/Computer Architecture

4. Single Cycle Datapath and Control Design

by Gofo 2021. 5. 16.

Instruction Implementation

Instruction의 일반적인 implementation 아래 과정을 거쳐서 이루어진다.

  • Instruction fetch
    • PC → instruction memory
      • PC의 값을 이용해서 실행할 instruction을 읽어온다.
    • PC + 4 → PC
      • fetch가 끝나면 PC의 값은 증가한다.
  • Instruction decode
    • fetch한 instruction이 무엇인지 본다. 즉, opcode를 본다.
    • Register number → Register file
    • read register
      • decode를 하면서 reigster access를 수행한다.
  • Instruction execute
    • ALU을 이용한 계산 결과를 이용한다.
      • arithmetic result → ALU instruction
      • memory address → load/store instruction
      • branch target address → branch instruction
    • load/store : data memory에 access한다.
    • branch : target address → PC OR PC + 4 → PC

 

Instruction fetch와 decode 과정 중에는 수행할 instruction이 어떤 것인지 아직 모른다.

Decode 과정이 끝나면 수행할 instruction이 무엇인지 알 수 있다.

 

따라서 instruction fetch와 decode는 모든 instruction들이 공통적으로 같은 과정을 가진다.

반면에 instruction execute는 instruction마다 수행되는 과정이 다르다.

 

Instruction을 구현하는 상황에서는 추상화 레벨이 instruction set보다 낮다.

Instruction set을 하나로 보지 않고, 각각이 fetch-decode-execute되는 것을 보기 때문이다.

 


Datapath

Datapath

Datapath에는 CPU가 어떤 function unit들로 구성되어있는지, 그 FU들 사이에는 data가 어떻게 흘러가는가는지 나타난다.

Datapath를 통해서 모든 MIPS instruction들을 실행할 수 있어야 한다.

 

즉, ISA를 구현한 것으로, high-level implementation 이다.

CPI를 결정하고, cct에 영향을 준다.

Single-cycle implementation은 하나의 cycle에 instruction이 수행되므로 CPU는 1이다.

 

MIPS의 datapath는 다음과 같다.

아래 과정에는 decode의 과정이 생략되어 있다.

  1. PC
    • 다음에 실행할 instruction의 주소가 들어있다.
  2. Add (1)
    • PC를 증가시킨다.
    • PC ← PC + 4을 하기 위해서는 PC 다음에 수행되어야 한다.
  3. Add (2)
    • Branch instruction(beq, bne) 일 때 PC ← PC + offset 혹은 PC ← PC + 4을 넣어준다.
  4. Instruction memory
    • executable file을 넣을 수 있는 memoroy이다.
    • 실행할 program들의 compile한 machine instruction들이 들어있다.
    • input으로 받은 PC(증가시키기 전) 값을 이용하여 instruction을 내보낸다.
  5. Register
    • decode가 끝나면 읽을 register를 알 수 있다.
    • 이 때 얻은 읽을 register을 얻어서 내보낸다.
    • 만약 쓸 register가 있다면 쓸 내용(data)와 쓸 register의 번호를 얻어서 write한다.
  6. ALU
    • registers로부터 받은 data나 instruction에서 얻은 immediate를 이용하여 연산을 수행한다.
    • ALU operation인 경우 결과를 register에 저장해야 하므로 register에 결과값을 전달한다.
    • Memory access operation인 경우 연산된 주소값을 data memory에 address로 전달한다.
    • Branch operation인 경우 받은 두 개의 register 값을 빼서 zero인지 여부를 add(2)에 전달한다.

 

 

 

결국 이 개념도는 MIPS instruction의 정보(ISA)와 동일하다.

ISA가 functional unit과 그 배치 순서를 결정한다.

 

Multiplexer

아래 빨간 부분에서 서로 다른 것을 붙이면 합선이 발생한다.

원래는 multiplexer을 사용하지만 단순화를 위해 생략해서 나타낸 것이다.

 

Multiplexer는 selector로, 들어온 데이터 중 하나를 선택해서 내보낸다.

 

자세하게 나타낸 그림은 아래와 같다.

 


Control Design

Datapath desing의 결과, 어떤 control signal들이 필요한지가 결정이 된다.

이는 instruction decode의 과정과 같다.

 

Control design은 아래의 기능을 한다.

  • Select signals
    • MUX input signal
    • instruction에 따라서 다른 data source가 필요로 되는 것을 결정한다.
  • Enable/disable signals
    • enable/disable functional unit
  • Select ALU operation

 

지금 수행하는 instruction이 무엇이냐에 따라서 control signal들이 결정된다.

opcode와 function code(R-type의 경우)에 따라 control signal의 값이 결정된다.

 

이는 low-level implementation으로, cct를 결정한다.

IC와 CPI에는 영향을 주지 않는다.

 

MIPS Control Signal

MIPS에서의 control signal은 다음과 같다.

  • RegDst
    • write할 register의 번호를 결정한다.
    • 0 : I-type은 instruction[20-16](rt)가 된다.
    • 1 : R-type은 instruction[15-11](rd)가 된다.
  • RegWrite
    • register에 값을 write 할지 결정한다.
  • ALUSrc
    • ALU 연산에 들어가는 데이터를 결정한다.
    • 0 : register와 register의 연산을 수행한다.
    • 1 : register와 immeidate의 연산을 수행한다.
  • PCSrc
    • = Branch
    • branch instruction인지 아닌지 결정한다.
    • 0 : branch instruction이 아니므로 PC←PC+4가 된다.
    • 1 : branch instruction으로, PC←PC + target offset가 된다.
  • MemRead
    • data memory를 read 할 지 결정한다.
    • 0 : data memory를 read 하지 않는다.
    • 1 : data memory를 read 한다.(lw)
  • MemWrite
    • data memory에 write할지 결정한다.
    • 0 : data memory에 write 하지 않는다.
    • 1 : data memory에 write한다.
  • MemtoReg
    • register에 write 할 것을 결정한다.
    • 0 : register에 write하는 내용은 ALU의 연산 결과이다.
    • 1 : register에 write하는 내용은 memory에서 read 한 값이다.
  • ALUOp
    • ALU control에 input으로 들어가서 ALU의 연산 종류를 결정한다.

 

MIPS Control signals

 

Datapath with Control

Control block에 들어가는 것은 항상 instruction의 opcode이다.

 

Opcode가 control block에 들어감과 동시에 rs, rt은 register file에, immediate는 sign-extension block에 들어간다.

Opcode에 상관없이 이렇게 진행되는 이유는, 병렬로 진행함으로써 실행시간(clock cycle time)을 줄이기 위함이다.

만약 사용되지 않는다면 읽기만 하고 사용하지 않는다.

 

예를 들어, rs와 rt를 읽어서 read register number로 사용하지만, lw, addi 등과 같이 필요없는 경우에는 사용되지 않고 버려진다.

RISC는 이렇게 instruction decoding과 register read를 parallel하게 함으로써 instruction 실행 시간을 줄인다.

 

ALU control block은 ALU operation의 종류를 결정한다.

R-type의 경우 function code로 종류가 결정된다.

 

 

Instruction Decode

Control signal의 값을 결정하는 과정으로, low-level implementation이다.

Datapath는 high-level implementation이기 때문에 datapath에는 보이지 않는다.

 


ISA Designer

Datapath와 control design을 통해 성능이 잘 나오도록 ISA를 설계해야 한다.

따라서 ISA design은 datapath와 control에 대한, 즉 low-level design에 상당한 지식을 요구한다.

 


FPGA(Filed Programmable Logic)

반도체 제조 시설은 대규모의 제조를 한다.

따라서 소수의 반도체만을 생산하기 힘들다.

 

그러나 개발 단계 등에서는 소수의 CPU만을 생산할 필요가 있다.

이를 위해서 FPGA(Field Programmable Logic)을 사용한다.

이는 Altera나 xilinx에서 활발히 제공하고 있다.

 

FPGA는 software tool과 FPGA chip을 제공한다.

Software tool은 HW을 describe 할 수 있는 language를 제공한다.(VHDL/Verilog description of our design)

또한, 이를 compile하고 test 할 수 있는 기능을 제공한다.

이를 FPGA chip으로 dump하여 기능을 확정할 수 있다.

 

'Computer Science > Computer Architecture' 카테고리의 다른 글

4. Single Cycle, Multi Cycle, Pipeline  (1) 2021.05.23
4. Single Cycle Design  (0) 2021.05.16
3. MIPS ISA  (0) 2021.05.16
3. Multimedia Arithmetic  (0) 2021.05.16
3. Floating-Point Arithmetic  (0) 2021.05.16

댓글