Towards a Hardware DSL Ecosystem : RubyRTL and Friends

📝 Abstract
For several years, hardware design has been undergoing a surprising revival: fueled by open source initiatives, various tools and architectures have recently emerged. This resurgence also involves new hardware description languages. Inspired by the Migen Python community, we present RubyRTL, a novel internal domain-specific language for hardware design embedded in the Ruby language. Ruby – which is best known in the field of web design – has proven to be an excellent solution for the design of such DSLs, because of its meta-programming features. This paper presents the main aspects of RubyRTL, along with illustrating examples. We also propose a language-neutral interchange format, named Sexpir, that allows to seamlessly exchange RTL designs between Migen Python DSL and RubyRTL. This paves the way for interactions between various agile communities in the field of open source hardware design.
💡 Analysis
For several years, hardware design has been undergoing a surprising revival: fueled by open source initiatives, various tools and architectures have recently emerged. This resurgence also involves new hardware description languages. Inspired by the Migen Python community, we present RubyRTL, a novel internal domain-specific language for hardware design embedded in the Ruby language. Ruby – which is best known in the field of web design – has proven to be an excellent solution for the design of such DSLs, because of its meta-programming features. This paper presents the main aspects of RubyRTL, along with illustrating examples. We also propose a language-neutral interchange format, named Sexpir, that allows to seamlessly exchange RTL designs between Migen Python DSL and RubyRTL. This paves the way for interactions between various agile communities in the field of open source hardware design.
📄 Content
수년 동안 하드웨어 설계 분야는 예상치 못한 부활을 맞이하고 있습니다. 이 부활은 주로 오픈 소스 이니셔티브에 힘입어 이루어졌으며, 그 결과 최근에는 다양한 설계 도구와 아키텍처가 연이어 등장하고 있습니다. 이러한 흐름 속에서는 새로운 하드웨어 기술 서술 언어(Hardware Description Language, 이하 HDL)도 함께 등장하고 있는데, 이는 기존의 전통적인 HDL이 제공하던 기능을 넘어 보다 유연하고 생산성을 높일 수 있는 방법들을 제시하고 있습니다.
특히, 파이썬 기반의 Migen 커뮤니티가 보여준 성공적인 사례에 영감을 받아, 우리는 Ruby 언어 안에 내장된 새로운 내부 도메인‑특정 언어(internal domain‑specific language, 이하 DSL)인 RubyRTL을 제안합니다. Ruby는 주로 웹 개발 분야에서 널리 알려져 있지만, 그 메타프로그래밍(meta‑programming) 기능 덕분에 복잡한 DSL을 구현하기에 매우 적합한 환경을 제공합니다. 메타프로그래밍이란 프로그램 자체를 실행 시간에 동적으로 생성·수정·확장할 수 있는 기술을 말하는데, Ruby는 클래스와 메서드를 런타임에 자유롭게 정의하고 재정의할 수 있는 풍부한 문법적·런타임적 지원을 갖추고 있습니다. 이러한 특성은 하드웨어 설계와 같이 구조가 복잡하고 계층이 깊은 도메인에서 DSL을 설계할 때, 설계자가 하드웨어 구조를 고수준 추상화 수준에서 기술하면서도 필요에 따라 저수준 세부 사항을 직접 제어할 수 있게 해 줍니다.
본 논문에서는 RubyRTL의 핵심 설계 원칙과 주요 기능을 상세히 소개합니다. 먼저 RubyRTL이 제공하는 레지스터 정의, 연산 블록, 시계 신호(clock signal) 관리, 입출력 포트 선언 등의 기본 요소들을 예시 코드를 통해 설명하고, 이러한 요소들이 Ruby의 블록(block)과 메서드 체이닝(method chaining) 문법과 어떻게 자연스럽게 결합되는지를 보여줍니다. 예를 들어, reg :counter, width: 8와 같은 선언은 Ruby의 심볼(symbol)과 해시(hash) 리터럴을 활용하여 레지스터 이름과 비트 폭을 직관적으로 지정할 수 있게 하며, 이어지는 counter.next = counter + 1 구문은 Ruby의 연산자 오버로딩을 통해 하드웨어의 다음 상태(next state)를 기술하는 방식을 그대로 차용합니다.
또한 RubyRTL은 조건부 로직과 파이프라인 구조를 구현하기 위한 DSL 전용 메서드 집합을 제공하는데, 이는 복잡한 상태 머신(state machine)이나 파이프라인 단계들을 간결한 코드 블록으로 표현하도록 돕습니다. 예컨대, when reset do … end 구문은 전통적인 HDL에서 흔히 볼 수 있는 if (reset) …와 동일한 의미를 갖지만, Ruby의 블록 스코프를 이용해 가독성을 크게 향상시킵니다.
이와 더불어, 우리는 언어에 독립적인 교환 포맷인 Sexpir(S‑Expression + IR)를 제안합니다. Sexpir은 S‑Expression 형태의 텍스트 기반 구조에 하드웨어 중간 표현(Intermediate Representation, IR) 정보를 결합한 포맷으로, Migen 파이썬 DSL과 RubyRTL 사이에서 RTL(Register‑Transfer Level) 설계를 손쉽게 교환할 수 있도록 설계되었습니다. 구체적으로, 설계자는 RubyRTL에서 작성한 모듈을 Sexpir 포맷으로 내보내고, 이를 Migen 환경에서 읽어들여 동일한 하드웨어 구조를 파이썬 코드로 재생성하거나, 반대로 Migen에서 만든 설계를 Sexpir 파일로 추출한 뒤 RubyRTL에서 불러와 추가적인 수정·확장을 수행할 수 있습니다. 이러한 양방향 호환성은 오픈 소스 하드웨어 커뮤니티가 서로 다른 언어·툴 체인에 얽매이지 않고 협업할 수 있는 기반을 마련해 주며, 궁극적으로는 설계 재사용성(reusability)과 생태계 확장성을 크게 높이는 효과를 기대할 수 있습니다.
마지막으로, RubyRTL과 Sexpir이 제공하는 장점들을 정리하면 다음과 같습니다.
- 메타프로그래밍 기반 DSL: Ruby의 강력한 메타프로그래밍 기능을 활용해 설계자가 하드웨어 구조를 고수준 추상화와 저수준 제어를 동시에 구현할 수 있다.
- 가독성·생산성 향상: Ruby 특유의 간결하고 직관적인 문법 덕분에 복잡한 RTL 코드를 짧은 코드 블록으로 표현할 수 있어, 설계·디버깅·리뷰 과정이 효율적으로 진행된다.
- 언어 중립적 교환 포맷: Sexpir은 Migen 파이썬 DSL과 RubyRTL 사이의 설계 데이터를 손실 없이 변환·전송할 수 있는 표준화된 인터페이스 역할을 수행한다.
- 오픈 소스 커뮤니티 연계: 서로 다른 커뮤니티(예: 파이썬 기반 Migen 사용자, 루비 기반 웹·스크립트 개발자) 간에 설계 결과물을 자유롭게 공유·협업함으로써, 하드웨어 설계 분야의 혁신 속도를 가속화한다.
본 논문은 위와 같은 내용들을 구체적인 코드 예시와 실험 결과를 통해 입증하고자 하며, 향후 연구 방향으로는 RubyRTL의 시뮬레이션 엔진 최적화, Sexpir 포맷의 표준화 작업, 그리고 다른 오픈 소스 HDL(예: Chisel, SpinalHDL)과의 상호 운용성 확보 등을 제시하고 있습니다.
요약하면, Ruby 언어의 메타프로그래밍 능력을 활용한 내부 DSL인 RubyRTL은 하드웨어 설계자에게 새로운 생산성 향상의 길을 열어 주며, 언어‑중립적인 교환 포맷인 Sexpir은 다양한 오픈 소스 하드웨어 설계 커뮤니티 간의 원활한 협업을 가능하게 합니다. 이러한 시도는 오픈 소스 하드웨어 설계라는 넓은 영역에서 다양한 민첩(agile) 커뮤니티가 서로 교류하고, 공동으로 발전해 나갈 수 있는 토대를 마련하는 중요한 발걸음이라 할 수 있습니다.