본문 바로가기

전공 테트리스/컴퓨터구조

[컴퓨터구조] 4. RISC-V 명령어 1

Program Counter (PC)

program counter는 메모리에서 실행할 다음 명령어의 주소를 저장하는 레지스터이다. 예를 들어, 우리가 작성한 프로그램 코드가 있을 때, PC가 한줄 씩 코드를 읽어나가면서 다음 줄의 코드 주소를 PC에 저장한다.

컴퓨터 프로그램은 CPU에게 작업을 수행하도록 명령한다. 즉, 컴퓨터 프로그램은 이 명령(instructions)으로 이루어져 있고, CPU는 이러한 명령을 차례대로 가져와서 실행한다. 이때 program counter는 다음에 실행할 명령어의 주소를 저장하는 역할을 하는 레지스터인 것이다. Instruction pointer, Instruction address register 혹은 instruction counter라고 부르기도 한다.

CPU가 명령어를 가져올 때마다 program counter는 1씩 증가한다. 컴퓨터를 재설정하면 해당 값은 다시 0이 된다.

 

 

 

Behavior of CPU

 

Fetch >> 메모리에 코드, 데이터와 관련된 부분이 같이 존재함

Decode, Execute >> 프로세서 PC가 가리키는 주소를 가지고 와서 코드 해석 및 실행한다.

Update >> PC 값은 → 다음 PC값으로 변경해준다

Loop >> 다시 변경된 주소로 가서 코드 해석 및 실행… 반복의 연속

 

 

 

CPU (Central Processing Unit)

  • PC (Program Counter)
    • 다음 명령어의 주소
  • Register file
    • 많이 사용되는 데이터의 임시적인 저장소
    • 프로세서 내의 메모리, 일시적인 공간이라 접근 속도가 빠르
  • ALU (Arithmetic & Logic Unit, 산술논리연산)
    • 산술 연산, 논리 연산
  • Control logic
    • 제어 명령어 가져오기, 디코딩 및 실행 (총괄적인 역할)

 

Architecture

Instructure Set Architecture (ISA)

  • above : 머신을 프로그래밍하는 방법
    • 프로세서들은 시퀀스에 따라 명령들을 수행한다.
  • Below : 구축해야 할 사항
    • 빠른 실행을 위해 다양한 트릭 사용
  • Instruction Set
  • Processor Registers
  • Memory addressing models
  • Data type and representations
  • Byte Ordering

 

 

Instruction Set

  • 컴퓨터 명령의 레파토리
  • 컴퓨터의 종류에 따라 다른 instruction sets를 가짐
    • 그러나 많은 측면은 공통적
  • 초기의 컴퓨터들은 간단한 instruction sets를 가짐
    • 단순화된 구현
  • 복잡한 instruction sets와 간단한 instruction sets의 경쟁 - intel 에서 만든 CISC
  • 많은 현대의 컴퓨터들 또한 간단한 instruction sets를 가짐
    • RISC (Reduced Instruction Set Computer)

 

 

The RISC-V Instruction Set

  • 완전히 오픈된 ISA - 학회와 산업이 자유롭게 이용 가능한
  • UC Berkeley에서 개발된 다섯 번째 RISC ISA 디자인
    • RISC-I(1981), RISC-II(1983), SOAR(1984), SPUR(1989) 및 RISCV(2010)
  • RISC-V 재단(http://riscv.org)에서 관리
  • 많은 최신 ISA의 전형 모델
  • 유사한 ISA가 임베디드 코어 시장에서 큰 점유율을 차지
    • 가전제품, 네트워크/스토리지 장비, 카메라, 프린터 등의 응용 분야

 

 

Why freely open ISA?

  • 자유 시장 경쟁을 통한 더 큰 혁신
    • 다수의 핵심 디자이너, 비공개 소스 및 오픈 소스
  • 공유된 오픈 코어 디자인
    • 시장 출시 시간 단축, 재사용 비용 절감, 더 많은 시선으로 인해 오류 감소, 투명성 덕 분에 정부 기관이 비밀 트랩 도어를 추가하기가 어려움
  • 더 많은 장치에 적합해지는 프로세서
    • 1$ 정도의 적은 비용으로 사물 인터넷(IoT)을 확장할 수 있음
  • 소프트웨어 스택의 오랜 기간 생존 (→ a.k.a. 하드웨어의 재생산)
  • 건축 연구와 교육을 더욱 현실화
    • 완전 개방형 하드웨어 및 소프트웨어 스택
  • 수출 통제(특히 중국)

 

 

RISC-V

 

RISC-V ISAs

  • 3개의 기본 정수 ISA(주소 폭당 하나)
    • RV32I, RV64I, RV128I
    • RV32I : 40개의 명령어만 정의됨
    • RV32E: 임베디드 시스템용 레지스터가 16개인 RV32I의 축소 버전
  • 표준 확장
    • 고정된 32비트 instruction format에서 → 표준 RISC encoding
    • C 확장은 일반적인 32비트 RISC_V 명령보다 짧은 16비트 버전을 제공한다.

 

 

 

 

RISC-V Registers

 

RISC-V Data Types

 

  • 1, 2, 4 혹은 8 바이트의 정수 데이터
    • 데이터 값
    • 주소 (untypted pointers)
  • 4 혹은 8 바이트의 Floating Point data (+ F 혹은 D 확장)
  • 배열이나 구조체 같은 집계 유형은 없다
  • 메모리에 연속적으로 바이트 할당

 

 

 

RISC-V Addressing

  • immediate value (constant)

  • value in register
    • R[rs1]
    • 레지스터는 32비트밖에 안 돼서 다른 레지스터에 저장해놓고 그 레지스터의 주소를 저장해둠 → 레지스트 어드레싱

 

  • value in memory (= base addressing)
    • MEM [rs1 + immediate]
    • 베이스 주소 = 레지스터 주소, immediate가 offset역할을 해서, 레지스터 번지 + immediate 를 통해 메모리 번지에 접근하여 데이터 값을 가져올 수 있도록 load byte하는 것

 

  • address : pc + immediate
    • 베이스 어드레싱과 비슷
    • PC + immediate

 

 

 

RISC_V Operations

 

  1. 레지스터 데이터에 있는 산술/ 논리 함수를 수행한다
  2. 메모리와 레지스터 사이의 데이터 전송
    1. 메모리로부터 → 레지스터로 데이터 load
    2. 레지스터 데이터 → 메모리에 저장
  3. 전송 컨트롤
    1. Unconditional jump (조건없는 점프. 무조건 뛰어라)
    2. Conditional branch (조건 분기)
      • beq(branch equality), bne(branch noe equality)
    3. Precedure call and return (함수 호출 및 반환)

 

 

1) Arithmetic Operations

  • add
  • sub
  • 3개의 피연산자 (operands)
    • 소스 2개, destination 1
  • 모든 연산 수행은 이 형식을 가짐
  • 디자인 원칙 1 : 단순성은 규칙성을 선호한다
    • 규칙성은 구현(implemetation)을 간단하게 만든다
    • 단순성은 낮은 금액으로 높은 성능을 가능하게 한다.

 

 

 

2) Register Operands

  • 산술 instruction은 레지스터 연산자를 사용한다.

  • 디자인 원칙 2 : 작을수록 빠르다!
    • c.f. 메인 메모리 : millions of locations (수백만개의 위치)

 

Example : Register Operand

 

 

3) Memory Operands (피연산자)

  • 메인 메모리는 합성 데이터에 주로 사용됨
    • arrays, structures, dynamic data
  • 산술 연산을 적용하기 위해
    • 메모리에서 → 레지스터로 데이터를 load (→ 산술 연산 적용)
    • 레지스터에서 → 메모리로 결과 저장!
  • 메모리는 바이트 주소!! (word 단위 아님)
    • 각각의 주소는 8비트 바이트를 식별한다.
  • RISC-V의 Byte Ordering은 Little Endian
  • RISC-V는 단어를 메모리에 정렬할 필요 없음. (다른 ISA들과의 차이점)

 

Example : Memory Operands

 

(*) Register vs. Memory

  • 접근 속도 : 레지스터 > 메모리 (레지스터가 더 빠름)
    • 100~500배 정도 빠름 (1회 액세스 지연 시간 측면에서)
  • RISC-V에서, 메모리에 있는 데이터를 직접 주소로 지정할 수 없습니다.
  • 메모리 데이터 작업에는 로드 및 저장이 필요
    • 더 많은 instruction이 실행됨
  • 컴파일런 변수에 대해 무조건 최대한의 레지스터를 사용해야 한다.
    • 덜 자주 사용되는 변수에 대해서만 메모리로 유출
    • 레지스터 최적화가 중요

 

 

4) Immediate Operands

  • instruction에 지정된 상수 데이터
  • 디자인 원칙 2 : 가장 자주 사용하는 케이스를 빠르게 만들기
    • 작은 상수들은 흔함 (12비트에 한하여)
    • immediate operand(피연산자)는 load instruction을 피한다.

• andi, ori, xori는 RISC-V ISA 사양의 정수 계산 명령어

  • instructions for bitwise manipulation (비트 단위 조작 명령)
    • word 안에서 비트 그룹을 추출하고 삽입할 때 유용

 

  • AND Operations
    • 비트를 mask할 때 유용함 (특정 비트 추출, 나머지는 0 처리)

 

  • OR Operations
    • 단어에 비트를 포함하는 데 유용 ( 일부 비트는 1로 나머지는 변화 x)

 

  • XOR Operations
    • 차별화 작업
      • 일부 비트는 1로, 나머지는 변화 x
      • xor x9, x10, x11
      • 원래 RISC-V에서는 not 연산을 공식적으로 지원하지 않는데, pseudo 명령에서는 만들어 놓았음.

 

 

 

32-bit Constants Load Operation

  • 대부분의 상수들은 작음
    • 12비트 immediate로도 충분!!
  • 그러나~~ 가끔 32비트 상수의 경우 :
    • lui rd , 상수 (Load upper immediate)
      • load 20비트 상수 → left 12비트 shift
    • 20비트 상수를 [31:12] 비트인 rd로 복사 → [11:0]비트의 rd는 0으로 초기화
  • 예시 : x19 ← 0x003D0500

 

 

 

 

 

 

 

 

 

 

 

 

 

[참고]

 

1.1 Introduction

일단은 워밍업,, 1. 컴퓨터 구조를 배워야 하는 이유 문제 해결 능력 향상 어떤 CPU를 사용할지, 어떤 메모리를 사용할지 -> 선택에 따라 성능/용량/비용 달라짐 2. 컴퓨터 구조의 큰그림 1) 컴퓨터

velog.io

 

 

컴퓨터 구조 2(RISC-V)

명령어 컴퓨터 언어 명령어 하드웨어가 알아들을 수 있는 언어로 말하는 것 명령어 집합(ISA) 특정한 구조가 이해할 수 있는 명령들의 집합 RISC CISC와 비교했을 때 적은 수의 명령어를 가진다는

hashtae9study.tistory.com

 

[컴퓨터 구조] 명령어(Instruction)[2] - Operands(피연산자)

🧐 피연산자 (Operands) 산술 명령어의 피연산자에는 제약이 있습니다. 레지스터(register)의 주소 혹은 상수만이 해당 위치에 올 수 있습니다. RISC-V 컴퓨터는 32개의 레지스터를 가지고 있으며, 각각

ttl-blog.tistory.com