오픈 소스 아키텍처로 하드웨어와 소프트웨어를 확장해서 최적화된 디자인 달성

[마우저 일렉트로닉스=존 가바이(Jon Gabay)] 개발자는 새로운 프로젝트를 통해 성능과 속도를 개선할 때 매번 새로운 프로세서 아키텍처와 개발 환경을 학습해야 했다. 물론, 새로운 프로세서가 기존에 사용한 아키텍처와 비슷한 부분이 있다면 개발자는 작업을 조금 더 쉽게 진행할 수 있다.

하나 가정을 해보자. 새로운 아키텍처를 통해 지속적으로 설계가 쉽고 빠르게 진행 가능하다면 어떨까? RISC-V 기반의 확장성 뛰어나고 복제 가능한 오픈 소스 프로세서를 사용할 경우, 이는 충분히 가능한 일이다.

[이미지=게티이미지뱅크]

RISC(Reduced Instruction Set Computer)는 CISC(Complex Instruction Set Computer)를 간소화하기 위한 대안으로 수십 년 전에 등장했다.  CISC 프로세서는 현재까지도 많이 사용되고 있지만  폰 노이만(Von Neumann) 아키텍처를 따르기 때문에 명령을 불러오고 디코드하고 실행하기 위해서는 프로세서 코드를 수 사이클로 실행해야 한다.

RISC 프로세서는 하버드(Harvard)에서 개발한 아키텍처로서, 명령어 코드 버스를 데이터 버스와 분리함으로써 동시적인 액세스가 가능하다. 프로세서가 단일 사이클에 각각의 명령어를 실행할 수 있어, 개발자가 빠르게, 확정적으로 컴파일러와 함수 라이브러리를 개발하고 손쉽게 다른 머신으로 이식할 수 있다.

하지만 CISC 프로세서와 마찬가지로, 업체들마다 내부적 아키텍처, 주변장치, I/O 및 명령어 세트가 상이한 상황이다. 디자인을 개발하기 위해서는 특정 업체나 부품에 따라서 특정한 개발 툴을 사용해야 하는데, 각 프로세서마다 다른 툴 체인으로 “플러그인”과 헤더파일을 사용해야해 개발자들에게 어려움이 많다. 

RISC-V 프로젝트는 2010년에 캘리포니아주 버클리에서 시작됐으며, 2018년에야 프로세서 업체와 설계 엔지니어들로부터 주목을 받게 됐다. RISC-V를 통해 칩 설계 시 A사에게 종속되는 경향에서 해방될 수 있다는 점을 인식했기 때문이다.

RISC-V는 명령어 세트 아키텍처(ISA)를 위한 공개 표준으로, 어느 업체든 동일한 코드를 실행하는 프로세서를 제조할 수 있다. 이러한 오픈 소스 명령어 세트 접근법에 의해 각기 프로세서 아키텍처마다 고유의 개발 에코시스템을 학습하고 구축할 필요가 없어진다. 전문적인 프로세서뿐만 아니라 ASIC과 FPGA로도 RISC-V 코어를 사용해 더더욱 높은 집적도를 달성할 수 있다.

오픈 소스 RISC-V 명령어를 사용하는 것은 중층적이며 확장이 가능한 일이다. 다시 말해 오픈 소스 표준 명령어 세트를 사용하면서도 디자이너가 깊이 임베디드 된 기능들을 좀더 효율적으로 수행할 수 있는 명령들을 추가해서 ASIP(Application Specific Instruction-set Processor)를 작성할 수 있다. 이것은 칩 제조사의 차별화된 확장이나 설계 엔지니어들이 자유롭게 구상한 ASIC/FPGA 하드웨어의 형태를 띌 수 있다. 가령 EDA 업체들이 Verilog나 VHDL를 통해서 확장을 할 수 있다.

첨단 기술의 장기적인 지속가능성을 위해서는 많은 요인들이 작용한다. 특히 군용이나 보안 용으로는 더 그렇다. 오픈 소스 RISC-V 아키텍처는 이 모든 다양한 분야의 요구를 충족하기에 적합하다.

◆ 아키텍처 설명

RISC-V는 표준적인 5-스테이지 파이프라인을 사용하며, 매 클록 사이클에 최대 2개 명령어를 실행할 수 있다. 표준적인 Load/Store 아키텍처를 사용하는데, 이것이 ALU가 메모리 연산과 구별되는 점이다. 기본 정수 ISA로서 기본 레지스터가 오프셋 레지스터 값을 추가하고 소스 레지스터 또는 대상 레지스터와 함께 동작해서 외부 메모리로 액세스를 가능하게 한다. 이 공간으로 I/O를 맵핑해서 I/O와 블록 연산을 유연하게 프로그램 할 수 있다. 이와 함께 Load-Reserved/Store-Conditional 명령(LR/SC)은 조건부 기준에 따라서 업데이트나 출력을 할 수 있다.

기본 정수 명령어는 정수 레지스터 폭과 사용자 설계 공간의 크기로 구별된다. RV32I 및 RV64I 명령어 변형은 32비트 및 64비트 사용자 레벨 어드레스 공간을 지원한다. 향후의 RV128I는 플랫 128비트 어드레싱 용량을 지원할 것이다. 이 명령어는 과잉설계를 할 필요 없이 하드웨어를 구현할 수 있도록 하기 위한 것으로써, ASIC이나 FPGA로 구현하기에 적합하다.

명령어 변형은 32비트 및 64비트 어드레싱 용량을 포함하며, 사용자 레벨 ISA 확장과 특수 변형을 지원한다. Little Endian 구성은 x86 아키텍처처럼 사용된다. 예를 들어 액세스하고자 하는 메모리 어드레스가 16비트, 32비트, 64비트, 128비트 워드 폭과 일치하지 않아도 된다. 또한 “fence” 명령은 선행 명령의 결과 값을 다른 쓰레드나 I/O 디바이스가 볼 수 있도록 한다. 그럼으로써 I/O에 영향을 미치지 않으면서 메모리 읽기와 쓰기 동작을 분리시킴으로써 대기 시간을 없앤다.

또 한 가지 유용한 기능으로, memory load upper immediate 명령은 32비트 어드레스 레지스터의 상위 20비트를 로드하고 단일 사이클 명령으로 즉각적인 데이터 값을 제공한다. 이와 함께 또 다른 메모리 어드레스 조작 명령이 하위 12비트를 설정할 수 있다. 그러므로 위치에 대해서 독립적인 코드를 생성할 수 있으며, 프로그램이 프로그램 카운터 레지스터와 관련해서 32비트 어드레스를 생성할 수 있다.

32개 정수 레지스터 셋으로는 스택, 글로벌, 쓰레드 포인터를 포함한다. 전달인자, 매개변수, 결과값을 위해서 또 다른 32개의 부동소수점 레지스터를 사용할 수 있다. 레지스터 x0은 읽었을 때 항상 “0”을 반환하며 모든 구현으로 공통적이다. 또 한 가지 특징으로서 RISC-V는 임베디드 애플리케이션으로는 16비트 변형을 사용하고 정수 및 부동소수점 레지스터 셋으로는 32비트 번형을 사용한다.

RISC-V는 16비트, 32비트, 48비트, 64비트, 80+x비트 길이 명령어가 가능하다. 가변 길이 명령어를 지원하며, 현행 규격으로 192비트 이상의 명령어 길이를 위한 인코딩을 예비적으로 포함한다. 예외(exception), 트랩(trap), 인터럽트(interrupt)를 완벽하게 지원한다.

산술 연산으로 확장자를 사용해서 고정 소수점, 부동 소수점, 정수, 정밀도, 높은 반환 값, 낮은 반환 값, 연산 타입을 지정할 수 있다.(표 A)

Arithmetic Extensions for Multiply and Divide

Type

Extension

Intefer

M

Single Precision

S

Double Precision

D

With Floationg Point

F

Atomic Operation

A

Quad Precision

Q

Decimal Nonation

L

표 A: 곱셈 및 나눗셈 용의 확장자

변형(Variants)과 벡터 프로세싱(Vector Processing)은 RISC-V 아키텍처의 확고한 목표로서 다양한 데이터 병렬 가속화기를 지원한다. 유연한 메모리 모델은 데이터 병렬 코프로세서나 가속화기 기능과 함께 더 손쉽게 작동할 수 있도록 한다. 예를 들어 필수적인 애플리케이션 도메인으로부터 커널을 실행하도록 사용자 정의 가속화기를 설계할 수 있다. 그러면 기본 정수 연산만을 제외하고 모든 것을 제거할 수 있으며 주어진 작업을 더 효율적으로 실행하기 위한 확장자만을 사용할 수 있다.

이것은 AI 가속화와 머신 러닝에 유용하게 사용될 수 있다. Domain-Specific Extensions(DSE), Tensor 명령어, Vector ISA를 사용해서 teraFLOPS/Watt를 향상시키기 위한 작업이 진행 중이다. 사용자 정의 하드웨어 가속화기가는 일관되게 소프트웨어 기반 연산 솔루션보다 우수한 작업 화 데이터 파이프라인으로 이러한 커스텀 가속화기를 통합하고 그래픽, 멀티미디어, DSP, 실시간 모터 제어, 여타의 특정한 아키텍처 요구를 가속화할 수 있다.

최근에는 벡터 확장자가 승인을 받았다. 이것은 32비트 벡터 레지스터로 7개의 비특권 CSR을 추가한다. 벡터 맥락 상태 필드 mstatus.vs를 적절히 설정해야 한다. 그렇지 않으면 어떠한 벡터 명령어를 실행하거나 액세스하려고 할 때 부정한 명령어 예외를 발생시킬 수 있다.

가속화기는 하드웨어 및 컴퓨터 집중적 작업에 적합하며, 게스트나 프로세스로써 가상 머신을 구현할 때는 하이퍼바이저 명령어가 유용하다. 내부적으로 임베디드 된 메소드가 집중적 기능이나 하우스키핑 기능을 처리할 수 있으며, 프로세서 코드의 일부로 포함시키거나 시스템 내의 다른 코어에게 맡길 수도 있다. “H” 확장자를 사용하는 하이퍼바이저 명령어는 특권 명령어 셋에 속하며, 머신 모드로 실행되는 프로세서가 다중의 사용자, 프로세서, 수퍼바이저를 가질 수 있도록 한다. 직교(orthogonal) 구현으로 계획할 때는 구성 비트를 사용해서 수퍼바이저 코드가 하이퍼바이저 레지스터를 액세스하거나 액세스 시에 인터럽트를 생성할 수 있다.

암호화와 머신 러닝 작업은 벡터 확장자를 사용하며, 이것은 특정 도메인으로 추가적인 벡터 확장자를 위한 토대가 된다. RISC-V 아키텍처는 32비트 및 64비트 데이터 패스를 지원하는 암호화 워크로드를 가속화할 수 있다. 그러므로 NIST AES 암호해독 및 NIST AED 암호해독뿐만 아니라 블록 암호, 해쉬 기능, 엔트로피 소스 확장, 크로스바 순열 등을 구현할 수 있다.

최근에 주목할 만한 개발로는, SiFive의 Freedom SDK 개발 시스템으로 Trusted Execution Environment(TEE)를 지원하게 됐다. RISC-V로 HexFive Security Multizone을 추가함으로써 무한정한 수의 보안 영역으로 강제 분리에 기반한 하드웨어 정책이 가능하게 됐다. 이를통해 펌웨어 개발자가 데이터를 완벽하게 통제하도록 구현할 수 있다. 코드, 주변장치, 인터럽트 록아웃은 보안 침해 시도로 간주된다.

하드웨어 쓰레드를 명확하게 정의하는 것은 특권 명령(privileged instructions)에 속하는 것으로서, 실행되지 않고 정지된 쓰레드나 (입력을 기다리거나 연산을 처리하는 중이라서) 실행할 준비가 되지 않은 쓰레드를 복구할 수 있다. 하드웨어 쓰레드는 좀더 효율적인 인터럽트를 구현할 수 있다. save 및 restore 연산을 구현할 필요가 없으므로 빠르게 실시간 서비스 루틴이 가능하기 때문이다. RISC-V의 ISA는 다섯 가지 모드의 하이퍼바이저 연산을 지원한다. 이것들은 machine, supervisor, user, supervisor-under-hypervisor, user-under-hypervisor이다. 그러므로 다중의 프로세스들이 서로를 방해하지 않으면서 실행할 수 있는 유연성을 가능하게 한다.

RISC-V의 실제 적용 사례

SiFive는 다양한 용도의 시스템온칩(SoC) 용으로 포괄적인 RISC-V 프로세서 코어 포트폴리오를 제공한다. 이 포트폴리오는 저전력 임베디드 마이크로컨트롤러 스타일의 코어에서부터 멀티 코어 애플리케이션 프로세서에 이르기까지 다양하다. 뿐만 아니라 구성가능 코어를 HyperX 아키텍처, 파이프라인 아키텍처, 벡터 아키텍처, 병렬 프로세싱 아키텍처 같은 특정한 필요를 충족하도록 맞춤화 할 수 있다.

SiFive의 중요한 장점은 상세한 아키텍처 구성과 확장이 가능한 온라인 마이크로 아키텍처 생성기 툴을 제공한다는 것이다(그림 1). 디자이너가 단일 또는 다중 부동소수점 프로세서, 비트 조작 명령, 유연한 인터럽트 핸들러, 예측 분기 등을 사용해서 단일 코어 디자인에서부터 8개 혹은 그 이상의 코어를 작성할 수 있다. “design for test” 후크와 J-TAG를 통한 디버그 및 트레이스 기능을 사용해서 아키텍처를 빌드한다.

그림 1: 단일의 모놀리식 디자인으로 다중의 코어를 조합해 필요에 맞게 맞춤화 가능하며 전체 디자인을 변경할 필요 없이 특정 부분을 업그레이드하거나 향상시킬 수 있다. [자료=SIFIVE]
그림 1: 단일의 모놀리식 디자인으로 다중의 코어를 조합해 필요에 맞게 맞춤화 가능하며 전체 디자인을 변경할 필요 없이 특정 부분을 업그레이드하거나 향상시킬 수 있다. [자료=SIFIVE]

주변장치 포트는 32비트 폭이고, 코드와 데이터를 위한 메모리 포트는 64비트 폭이다(그러므로 더 적은 횟수의 액세스와 더 빠른 속도 가능). 메모리 블록은 코어마다 고유하거나 코어들 사이에 액세스를 공유하도록 맵핑 할 수 있다. SiFive 접근법의 가장 큰 장점은, 이종으로나 모노리식으로나 연산 집중적 기능과 주변장치 기능들을 위해서 프로세스를 필요에 따라서 조합할 수 있다는 것이다. 공유 메모리와 주변장치에 대한 Atomic Access로 연산 집중적 작업을 데이터 I/O, 로드 및 저장, 통신 명령과 나란히 실행할 수 있다.

SiFive의 또 다른 장점은 보안을 향상시킨다는 것이다. WorldGuard 기법을 적용해서 미세한 입도로 실행을 위한 코드와 데이터를 위한 코드를 분리시킬 수 있다. 이를 위해서 무한정한 숫자의 사용자 정의 영역을 사용해서 다중의 특권 수준을 지정할 수 있다. 뿐만 아니라 월드 ID 마커를 사용해서 프로세스들을 서로 격리시킴으로써 실행을 분리하고 보호할 수 있다.

중요 정보를 보호하기 위한 방어 아키텍처를 포함하며, 암호화와 엔트로피 기반 보안 기능을 위해서 NIST SP-800-90A/B/C 규격 참 난수 생성기를 사용한다. AES 암호화 엔진을 다양한 공격으로부터 보호하며, 보안적인 암호 해시 엔진이 SHA-2 및 SHA-3 표준과 공용 키 암호화를 지원한다.

SiFive는 새로운 칩과 개발 플랫폼으로서 Crown Supply HiFive FE310-G002 32비트 RISC-V SoC와 개발 보드를 제공한다. 이 3.3V 개발 보드는 32비트 폭 데이터 버스를 특징으로 하고 무선 기술을 포함함으로써 높은 수준의 프로세싱 성능을 필요로 하는 네트워킹 및 IoT 애플리케이션에 사용하기에 적합하다.

RISC-V 기반 제품을 코어로서 개발하면 모든 기능과 데이터 전송이 모노리식으로 이루어지므로 최대의 집적도와 성능을 달성할 수 있다.

하드 코어는 완벽하게 테스트와 디버그를 마친 프로세서를 출발점으로 삼을 수 있으며, 소프트 코어는 사용자 정의 기능들을 추가할 수 있도록 한다.

무료 라이선스 IP를 사용해서 마이크로컨트롤러와 마이크로프로세서 아키텍처를 맞춤화할 수 있으며 현재뿐 아니라 미래의 제품 라인까지 표준화할 수 있다. 뿐만 아니라 오픈 소스이므로 일단 처음에 필요한 학습 곡선을 거친 다음에는 능력 있는 디자이너들의 인재 풀을 활용해서 제품 아키텍처를 계속해서 발전시켜 나갈 수 있다.

기존의 것을 무조건 다 버리는 것이 아니라 하드웨어와 소프트웨어 구현을 현명하게 재사용할 수 있다. 그러므로 디자이너가 새로운 디자인으로 새로운 측면들에 집중할 수 있으며, 디자인 요소, 라이브러리, 함수, 블록 등을 미래에까지 재활용할 수 있는 안정적인 기반을 마련한다.

이 기사를 공유합니다
Tag

키워드

#RISC-V #CISC #RISC #Arm
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지