[컴퓨터구조] #10. Single-Cycle MIPS(1)
Lec 10. Single-Cycle MIPS_1 (The Processor)
- Introduction
Architecture : CPU 구조
-> instructions
-> registers
Micro-architecture : CPU 구조를 이해하고 거기에 맞게 동작하는 hardware structure
-> datapaths (데이터 흐름, 경로. 데이터 처리에 사용되는 모든 로직들)
: operate on or hold data
ex) ALU, register file, MUX, memory
-> controllers (data path 제어/지시)
: receives the current instructions from memory and
tells the datapath how to execute instructions
ex) memory write signals, mux select, register enable, ALU control
- Multiple microarchitectures for an ISA
Single-cycle : Each instruction is executed in a single cycle
-> 명령어 balance 안맞으면(너무 오래걸리는거랑 빠른거 공존하면)
가장 느린거 기준으로 맞춰지므로 전체적으로 느려짐. clock frequency가 제한됨.
Pipeline : Execution is broken up into a series of steps
-> multiple instructions 들이 중첩 실행됨. -> throughput 증가.
Microarchitecture (Hardware implementation) affect CPI ans T (f)
-> cost⬇ power⬇ performance⬆ 하는 것이 목표임.
- Digital Logic Design Basics
Combinational logic 조합 회로
: Output is directly determined by current input. 결과가 즉시 결정됨.
Sequential logic 순차 회로 (state를 갖고있음)
: Output is determined not only by current input, but also internal state (i.e., previous inputs)
-> needs *state elements to store information
-> flip-flops(edge triggered) and latches(level sensitive) are used to store the state information
* State Element (동기화 / 데이터 기억하는 역할)
- (flip-flops로 구현된) Registers store data in a curcuit
: Clock signal determines when to update the stored value.
-> Rising-edge triggered : update when clock changes from 0 to 1
-> Data input determines what (0 or 1) to update to the output
- Register with write control (or enable)
: Only updates on clock edge when write control (enable) input is 1
- Clock Methodology
: all digital systems are syncronous to the clock. 클럭에 동기화 하기위해 플립플랍 사용함.
Combinational logic(원하는대로 신호를 바꾸거나 제어하는 역할) sits between state elements(flip-flops)
- Our MIPS Model
원래는 위의 그림 오른쪽 그림처럼 Address Bus 와 Data Bus가 1쌍만 있는데
우리는 아래 그림처럼 2쌍 있다고 가정하고 디자인 할거임.
- Verilog-HDL로 기술할 때 두가지 modeling을 사용할 거임
-> Behavioral modeling
: lowest modules. ex) ALU, register files
-> Structure modeling
: top module. ex) mips.v
- Our MIPS implementation is simplified by designing only
-> Data processing instructions(산술/논리) : add, sub, and, or, slt
-> Memory access instructions(메모리 접근) : lw, sw
-> Branch instructions(분기) : beq, j
- Instruction Execution in CPU
1) Fetch (메모리->CPU로 명령어 가져오기)
: program counter(PC) 사용 to supply the instruction address and fetch instruction from memory
2) Decoding (가져온 32bit 명령어 해석하기)
: Extract opcode (determine what operation should be done)
opcode 분해해서 덧셈/뺄셈/논리연산/점프/메모리 읽기쓰기 등등 중에 뭔지 해석하기,
Extract operands (register numbers or immediate from fetched instructions
피연산자 뽑아오기. R-format이면 레지스터에서만, I-format이면 imm-field에서도.
3) Execution (실행하기)
3-1) Use ALU
- 산술.논리 연산
- lw/sw 할 메모리 주소값 계산
- 분기하고자하는 target 주소 계산
3-2) Access memory for load/store
4) Next Fetch
: PC <- target address(분기하는 경우) or PC + 4(순차적인 경우)
1) Instruction Fetch
PC와 Adder를 통해서 명령어 가져오기
* reset
: initialize the PC to 0x0000_0000 이라고 가정하자. 실제로는 0xBFC0_0000
- Instruction Fetch Verilog Model
* always 있을 때만 output을 reg에 담음
- Generic Memory Model in Verilog
* input[7:2] 인 이유?
2) Instruction Decoding
Control Unit이 Opcode랑 Function field를 보고 어떤 operation을 해야하는지 판단하고
필요시 각 data path element들에게 지침을 내려줌,
명령어의 특정한 field 값이 immediate field가 될 여지도 있고 register file의 register name을 가리키기 위한
address가 될 여지도 있기때문에 그런걸 감안해서 register file에 입력 혹은 sign extension unit에 입력으로
들어가게 해줌.
-> Opcode and funct fields determine which operation the instruction wants to do
: Control logic 이 opcode와 funct를 읽어서 무슨 동작을 해야하는지 판단하고,
판단 결과를 datapath에게 알려줌
-> Operands 피연산자
: R type 이면 모든 피연산자가 Register numbers.
I type 이면 Immediate field도 있음.(연산에 활용하기 위해 32bit로 확장해야함)
-> 명령어에 따라 control logic이 판단해서 sign/zero extended 중에 뭐할지 알려줌.
- Register File(data path) in Verilog
- Sign & Zero Extension in Verilog
3) Instruction Execution #1
Control Unit은 명령어가 산술/논리 연산인지 혹은 메모리 접근인지에 따라서 다르게 지휘해줌.
여기서는 산술/논리 연산만 다루었음.
- Execution of the arithmetic and logical instructions
R-type
: 2 source operands from the register file
ex) add, sub, and, or, ...
I-type
: 1source operand from the register file, 1 source operand from the immediate field
ex) addi, ansi, ori, ...
=> destination register(=target =쓰기 동작 할 레지스터의 정보가 담긴 곳) 이 서로 다름 주의!!
- MUX in verilog
3) Instruction Execution #2
Control Unit은 명령어가 산술/논리 연산인지 혹은 메모리 접근인지에 따라서 다르게 지휘해줌.
여기서는 산술/논리/메모리 연산을 다루었음.
- Execution of the memory access instructions
lw, sw
: I-type
3) Instruction Execution #3
beq, bne : 조건에 따라 분기(conditional)
j, jal, jr : 무조건 분기(Unconditional)