이론/컴퓨터구조

명령어 실행과 데이터 경로

ohojee 2024. 1. 24. 06:41

데이터 경로의 구현

  • 데이터 경로는 아키텍처가 사용하는 명령어들이 모두 실행 될 수 있도록 설계
  • 아키텍처마다 다르게 구현, 동일 아키텍처에서도 다양하게 구현 가능

picoMIPS의 개요

  • 스탠퍼드 대학에서 제안한 RISC 프로세서 모델
  • picoMIPS 아키텍처 특징
    • 32bit MIPS 아키텍처를 모방한 16bit 아키텍처 (워드 길이 16bit)
    • 모든 명령어는 16bit로 구성
    • 기본적으로 3-주소 명령어 형식을 사용
    • 적재-저장 명령어 구조
    • 8개의 레지스터
      • $n: n번 레지스터
    • 16bit 2의 보수 방식 정수 데이터

picoMIPS의 명령어 형식

명령어 형식

  • R-형식 명령어: Reg[rd] ← fn(Reg[rs], Reg[rt])
    • 대부분의 연산 명령어 형식
    • op에는 사실상 0000, fn도 op코드의 일부처럼 쓰임 + 역할을 함
    • rs와 rt 2개의 레지스터를 사용하여 연산 → 결과는 rd 레지스터에 저장
  • I-형식 명령어
    • imm = immidiate 데이터 = 그냥 데이터 값이라는 것 = 0주소 데이터 같이 연산자 자체가 값인 경우
      • 2의보수 방식이라 음수 쓸 수 o
    • 6bit imm(immediate) 필드
      • -32 ~ 31 사이의 상수
      • 워드 단위(2byte)로 메모리에 정렬되므로 *2 하여 사용
    • 명령
      • 적재 명령 lw(load word): Reg[rt] ← M[Reg[rs] + imm × 2]
        • 피연산자 두개로 하나의 주소를 정하는 것 <= 2-주소지정방식
        • imm = 즉치주소
      • 저장 명령 sw(store word): M[Reg[rs] + imm × 2] ← Reg[rt]
      • 조건 분기 명령 beq(branch equal): if (Reg[rs] == Reg[rt]) PC ← PC + 2 + imm × 2
      • 기타 명령 addi, subi: Reg[rt] ← f(Reg[rs], imm)
      왜 곱2? 명령어도, 데이터도 2바이트 ⇒ 메모리를 읽을 때 짝수번지부터 읽음
  • J-형식 명령어: PC ← PC + 2 + addr × 2
    • 무조건 분기 명령(점프 명령)에 사용
    • 피연산자 1개
      • 12bit로 주소 표현
      • 주소도 음수값을 가질 수 o, pc 상대주소로 값을 지정하기 때문
  • pc상대주소로 pc주소 지정
  • 쓰기용 레지스터가 rd가 될 때가 있고 rt가 될 때도 o

picoMIPS 명령어의 단계적 실행

  • 인출사이클: 1번
    실행사이클: 2번(명령어 형식별로 공통 실행), 3번(명령어에 따라 실행 과정 다름)
  1. 명령어 인출
    • PC가 가리키는 주소의 명령어 읽기
    • PC가 다음 명령어를 가리키도록 갱신
  1. 명령어 해독 및 레지스터 읽기
    • R-형식 명령어: 3개의 레지스터 주소 추출 → rs와 rt의 내용 읽음
    • I-형식 명령어: 2개의 레지스터 주소 추출 → rs 또는 rs, rt의 내용 읽음
    • J-형식 명령어: 레지스터 읽을 필요 x
  1. 명령어 실행 (명령어 종류별 고유 과정 실행)
    • 산술연산 및 논리연산: ALU로 연산 수행 후 결과를 레지스터에 저장
    • 메모리 참조: ALU로 메모리 주소를 계산하고, 메모리와 레지스터 사이에 데이터 이동
    • 조건 분기: 조건에 따라 분기 주소로 PC 갱신
    • 무조건 분기: 조건 없이 분기 주소로 PC 갱신

단일 사이클 방식의 데이터 경로 골격

  • 실제 메모리는 1개, 캐시를 구분해서 명령어 메모리(캐시)와 데이터 메모리(캐시)로 나누는 방식
  • 명령어가 한 사이클 동안 전체 데이터 경로를 사용하기 때문에 데이터 경로에 포함 된 동일한 자원을 다시 사용할 수 없음
    • ALU로 PC를 갱신할 수 없으므로 별도의 PC 갱신장치 필요
      • ex) lw할 때 imm * 2해서 더함 but pc값도 +2가 필요 <= 이렇게 명령어 하나 안에 여러 개의 연산이 들어가있는 경우는 별도의 장치로 계산해야 o, 데이터를 연산장치로 계산, 주소같은 것들은 별도의 pc 갱신장치로 계산
      • pc 계산 방식은 3가지
        • pc ← pc + 2
        • pc ← pc + 2 + imm * 2
        • pc ← pc + 2 + address * 2

          ⇒ 이걸 pc 갱신장치가 계산

  • 단일 사이클 방식은 한 사이클 이내에 명령어를 실행하므로 데이터 흐름의 중간 과정을 임시 저장소에 보관 할 필요 x
    • 명령어 레지스터, 임시 레지스터를 사용할 필요 x

다중 사이클 방식의 데이터 경로 골격

  • 메모리 1개, 거기서 명령어와 데이터 모두 읽음
    • 다중사이클은 명령어 하나를 여러 개의 사이클로 처리
      ⇒ 메모리 1개만 있어도 o
  • 명령어가 데이터 경로에 포함 된 컴퓨팅 자원을 여러 번 사용 가능
    • 메모리를 분할하지 않고 명령어를 읽거나 데이터를 읽고, 쓸 수 있음
    • PC 갱신장치 없이 ALU를 사용하여 PC 갱신 및 산술/논리연산 수행 가능
  • 사이클마다 처리한 결과를 다음 사이클에서 사용할 수 있도록 구조화
    • 사이클마다 처리한 결과를 다음 사이클에서 사용할 수 있도록 임시 저장소 필요
    • 메모리에서 읽은 내용을 저장하는 IR, DR(data register) 필요
    • 레지스터에서 읽은 내용을 보관하는 A, B버퍼, ALU의 처리 결과를 보관하는 C버퍼

Uploaded by N2T