현재 칩 설계에서는 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 처리나 AI 하드웨어 가속기 설계에는 점점 많이 도입되고 있습니다. 특히 FPGA 하드웨어 가속기에서는 AMD (구 Xilinx)의 Vitis 솔루션이 많이 활용되고 있으며, Cadence, Siemens 등의 회사에서도 ASIC을 목표로 하는 HLS 툴이 많이 쓰이고 있습니다.
특이하게도, RISC-V 코어는 UC Berkeley에서 처음 개발될 당시 Chisel이라는 새로운 언어로 작성되었습니다. Chisel은 모든 툴을 오픈소스로 전환하는 연구 단체인 Chips Alliance의 프로젝트 중 하나로 개발되었습니다. Verilog/VHDL보다는 고수준 언어인 Scala를 기반으로 필요한 라이브러리를 제공하는 형태로 제작되어, 모듈화나 인터페이스 정의가 RTL보다 훨씬 용이하여 RISC-V와 같은 모듈러 개념의 설계에 적합합니다. 그러나 기본적으로는 RTL 언어와 유사한 개념으로, RTL 설계를 잘 아는 엔지니어라면 쉽게 습득할 수 있지만, 기존 C/C++ 언어에 익숙한 엔지니어에게는 Verilog/VHDL과 비슷한 학습 곡선이 요구됩니다. 결국 Chisel과 RTL 모두를 알아야 어느 정도 설계가 가능하므로, 처음 입문하는 엔지니어에게는 여전히 진입 장벽이 높은 언어로 보입니다. 또한 Chisel은 HLS를 위한 언어가 아니기 때문에 합성 과정에서 로직을 최적화하는 기능이 없으며, Chisel 코드를 RTL 언어로 변환하는 용도로만 사용됩니다. 따라서, RTL에서 원하는 성능이 나오지 않는 경우 Chisel을 근본적으로 수정하여 다시 그 과정들을 반복해야 합니다. 그 외, RISC-V 오픈소스로 많이 활용되는 Vexrisc-v 코어는 SpinalHDL이라는 Scala 기반 언어로 구현되어 있습니다. Chisel에 비해 SpinalHDL에서 생성된 RTL의 가독성은 좋은 편이나, 여전히 Chisel과 비슷한 학습 곡선을 요구합니다.
반면 HLS는 C/C++ 프로그램을 설계 언어로 사용하며, HLS 툴이 성능/면적/전력 소모를 고려해 최적의 하드웨어 설계를 출력해주기 때문에 기존 방식에 비해 설계 반복 횟수를 크게 줄일 수 있습니다. 물론 HLS 스케줄러가 모든 C/C++ 코드를 완벽하게 스케줄링할 수 있는 것은 아니며, 원활한 구현을 위해 C/C++ 코딩 스타일에 약간의 제약이 따르지만 설계에 큰 부담이 되는 수준은 아닙니다. 향후 디자인 과정에서 사용할 #pragma라는 지시어들이 자동 설계를 상당히 편리하게 만들어줍니다. HLS의 입문서로 무료 다운로드 가능한 Parallel Programming for FPGAs - UCSD에 의하면, RTL 엔지니어가 할 작업을 HLS가 자동으로 해 줄 수 있는 항목을 아래와 같이 요약하고 있습니다.
| • HLS analyzes and exploits the concurrency in an algorithm. • HLS inserts registers as necessary to limit critical paths and achieve a desired clock frequency. • HLS generates control logic that directs the data path. • HLS implements interfaces to connect to the rest of the system. • HLS maps data onto storage elements to balance resource usage and bandwidth. • HLS maps computation onto logic elements performing user specifed and automatic optimizations to achieve the most effcient implementation |
여기서 가장 중요한 포인트는 동시성(Concurrency)입니다. 이 개념을 이해하는 것이 매우 중요합니다. RTL의 각 프로세스는 동시적이라고 볼 수 있는데, 전원이 공급되면 모든 로직들은 동시에 작동됩니다. 이는 C/C++의 순차적 실행과 완전히 대조되는 개념입니다. 물론 RTL에서도 순차적 실행을 구현할 수 있지만, 기본적으로 전원이 들어오면 입력에 따라 출력이 바뀌는 게이트 집합이기 때문에 하드웨어는 기본적으로 동시적입니다. 동시적 상황에서 하나의 로직이라도 원하는 출력이 나오지 않으면 동작하지 않기 때문에 다양한 시뮬레이션을 통해 충분히 검증해야 합니다. 동시성 개념은 RTL 설계의 큰 장점이자 시간과 검증 노력이 많이 필요한 단점이기도 합니다. 또한 타이밍을 맞추기 위해 중간에 레지스터를 삽입해야 하는 경우가 생기며, RTL 엔지니어는 수작업으로 진행해야 합니다. 인터페이스가 변경될 때도 많은 수작업이 필요합니다. 그럼에도 여전히 RTL이 주류 설계 흐름인 이유는 축적된 경험 때문입니다. 여전히 많은 경험 있는 RTL 엔지니어들이 로직을 최적화할 수 있으며, 특히 ASIC 설계 흐름에 맞는 툴의 지원이 많기 때문입니다. HLS를 도입한다고 해도 결국 전체 통합 및 ASIC으로 가기 위해서는 RTL로 변환하여 진행할 수밖에 없습니다. 이는 한때 칩 설계를 하는 스타트업이 모두 사라지고, 새로 생겨나지 않는 주요 원인 중 하나이기도 합니다. 최근 대규모 자금을 투자하는 벤처 캐피털을 통해 일부 칩 스타트업이 생겨나고 있지만, 여전히 숙련된 설계자 확보가 어려운 과제로 남아 있습니다.
RTL 설계 엔지니어의 공급이 줄어들고, 특히 경험 많은 엔지니어들이 감소하고 있기 때문에, HLS를 고려하는 회사들이 증가하고 있습니다. 특히 AI 시대에 SW 엔지니어 수요가 줄어들게 되면 기존 SW 인력을 HW 설계 인력으로 흡수할 수 있는 좋은 기회를 HLS가 제공할 것입니다. 본 블로그에서는 최신의 AMD Vitis HLS 툴을 사용하여 무료로 설계해볼 예정입니다. 다음 편에서는 RISC-V ISA 설명과 설계 시 고려할 점들을 본격적으로 다룰 예정입니다. 이 과정을 모두 진행한 후 적극적으로 Github Copilot을 이용한 설계 기법을 같이 진행해 보면서 HLS가 가지고 있는 태생적인 한계들을 AI로 해결할 수 있을지도 같이 살펴보도록 합시다.
'RISC-V' 카테고리의 다른 글
| [Background] RV32I ISA (Instruction Set Architecture) (0) | 2024.10.27 |
|---|---|
| [Background] Why RISC-V? (1) | 2024.10.27 |
| [Background] RISC-V 설계를 들어가며 (0) | 2024.10.27 |
| [Extension Design] CUSTOM Instruction Design (0) | 2024.07.23 |
| [FPGA] Vitis platform generation and application SW (0) | 2024.07.23 |