본문 바로가기

분류 전체보기

(36)
[Background] RV32I ISA (Instruction Set Architecture) RISC-V RV32I는 RISC-V 프로세서의 기본 32비트 정수 명령어 집합 아키텍처(ISA)입니다. 이는 완전한 32비트 컴퓨터를 구현하는 데 필요한 최소한의 명령어 집합을 제공하며, 다양한 확장을 통해 기능을 확장할 수 있는 기반이 됩니다. 주요 특징은 다음과 같습니다. 32비트 아키텍처: 32비트 정수 레지스터와 주소를 사용합니다.로드-스토어 설계: 산술 및 논리 연산은 레지스터에서 수행되며, 메모리 접근은 별도의 명령어로 처리됩니다.고정 길이 명령어: 모든 명령어가 32비트로 고정되어 있어 디코딩이 단순해집니다.간단한 주소 지정 방식: 즉시값, 레지스터, 변위 주소 지정 모드를 지원합니다.32개의 범용 레지스터: x0에서 x31까지의 32비트 레지스터가 있으며, x0는 항상 0으로 고정되어 있..
[Background] Design Methods (Why HLS?) 현재 칩 설계에서는 Verilog나 VHDL과 같은 HDL( Hardware Description Language )을 사용하고 있습니다. 1990년 이전에는 게이트를 하나하나 연결하여 디자인하는 Schematic 방식을 사용하였으나, RTL ( Register Transfer Level )이라는 설계 방법론이 등장하면서 Schematic Design에 비해 생산성이 크게 향상되었습니다. Synopsys, Cadence와 같은 회사들이 디자인 툴을 개발하면서 함께 발전해 왔습니다. HDL보다 익숙한 프로그래밍 언어인 C/C++을 RTL로 변환해주는 HLS (High Level Synthesis)도 1990년대부터 꾸준히 연구가 이루어졌습니다. 현재도 주류 디자인 흐름에 속하지는 않지만, Vision 처리..
[Background] Why RISC-V? ChatGPT에게 RISC-V의 역사와 마일스톤에 대해서 간략히 설명해 달라고 하면 아래와 같은 답을 줍니다. 훌륭한 요약이네요. 덧붙이자면 SiFive의 설립자들이 이 역사를 시작했습니다. RISC-V란 무엇인가?RISC-V는 오픈 소스 명령어 집합 구조(ISA)로, Reduced Instruction Set Computing의 약자인 RISC 아키텍처의 철학을 따릅니다. 이는 프로세서 설계에 필요한 명령어를 최소화하여 효율성과 확장성을 높이는 것을 목표로 합니다. RISC-V의 가장 큰 특징은 공개된 표준을 기반으로 하여 누구나 무료로 사용하고 수정할 수 있다는 점입니다.역사와 주요 마일스톤2010년: 캘리포니아 대학교 버클리에서 RISC-V 프로젝트가 시작되었습니다. 연구 및 교육 목적으로 개발되었..
[Background] RISC-V 설계를 들어가며 Machine learning 관련 Startup을 계획하고 있던 2021년 당시 소위 HW Accerelator라고 부르는 칩들이 시장에 조금씩 나오던 시기였습니다. 이미 NVIDIA AI Model Training 시장을 독점했고, Modeling 시장 대비 열 배의 시장이라는 Inference 시장을 놓고 HW Accelerator의 경쟁이 치열한 상황이었습니다. 당시 대부분의 모델은 CNN 계열이었고 NVIDIA GPU가 CNN Inference에서는 전력이나 가격면에서 효율이 좋지 않았기 때문에, 너도나도 CNN Inference에 특화된 많은 Accelerator들을 개발했습니다.  미국에서는 구글의 TPU 한국에서는 퓨리오사, 리벨리온, 사피온 등이 출사표를 던졌죠. 당시의 HW Accere..
J-Type J-type은 RISC-V 아키텍처에서 무조건 점프(jump) 명령어를 수행하는 명령어 형식입니다. J-type 명령어는 프로그램의 흐름을 변경할 때 절대적인 주소가 아닌, PC-relative 오프셋을 사용하여 상대적인 위치로 점프합니다. 이 명령어 형식은 주로 함수 호출, 루프 구현, 조건문 처리에 활용됩니다.J-type 명령어의 구조J-type 명령어는 다음과 같은 필드로 구성됩니다:| imm[20], imm[10:1], imm[11], imm[19:12] | rd      | opcode || 1 bit,       10 bits,      1 bit,       8 bits          | 5 bits | 7 bits    | 각 필드의 역할은 다음과 같습니다:imm[20], imm[10:1..
U-Type U-type은 RISC-V 아키텍처에서 상위 즉시값(Upper Immediate)을 레지스터에 로드하거나, 프로그램 카운터(PC)와 상위 즉시값을 연산하는 명령어 형식입니다. U-type 명령어는 주로 큰 즉시값을 사용하여 연산을 수행하거나, 주소 계산에 사용됩니다. RISC-V는 32비트 아키텍처이므로, 큰 값을 즉시값(immediate)으로 처리하기 위해 U-type 명령어가 필요합니다.U-type 명령어의 구조U-type 명령어는 다음과 같은 필드로 구성됩니다:| imm[31:12] | rd      | opcode || 20 bits        | 5 bits | 7 bits    | 각 필드의 역할은 다음과 같습니다:imm[31:12] (20 bits): 상위 20비트 즉시값입니다. U-typ..
B-Type B-type은 RISC-V 아키텍처에서 조건부 분기(branch) 연산을 수행하는 명령어 형식입니다. B-type 명령어는 두 레지스터 값의 비교 결과에 따라 프로그램의 제어 흐름을 변경합니다. 이를 통해 조건문(예: if-else)이나 반복문(예: for, while)을 구현할 수 있습니다. B-type 명령어는 특정 조건이 만족될 때 지정된 오프셋만큼 점프하여 다른 명령어로 분기합니다.B-type 명령어의 구조B-type 명령어는 다음과 같은 필드로 구성됩니다:| imm[12], imm[10:5] | rs2    | rs1     | funct3 | imm[4:1], imm[11] | opcode | | 1 bit,       6 bits        | 5 bits | 5 bits | 3 bits ..
S-Type S-type은 RISC-V 아키텍처에서 메모리 저장(store) 연산을 수행하기 위한 명령어 형식입니다. S-type 명령어는 레지스터의 데이터를 메모리에 저장하는 작업을 수행하며, 주로 변수나 배열의 값을 메모리에 쓰는 데 사용됩니다. 이 명령어는 메모리 주소를 계산하기 위해 **기준 레지스터(base register)**와 **즉시값(offset)**을 사용합니다.S-type 명령어의 구조S-type 명령어는 다음과 같은 필드로 구성됩니다:css코드 복사| imm[11:5] | rs2     | rs1     | funct3 | imm[4:0] | opcode || 7 bits        | 5 bits  | 5 bits | 3 bits  | 5 bits      | 7 bits    |각 필드의 ..