1 of 7

Ruby製制御レジスタ生成ツールRgGenご紹介

R07.08.28

石谷太一

2 of 7

自己紹介

  • 石谷太一(いしたにたいち)
    • GitHub taichi-ishitani
    • X @taichi600730
  • 所属
    • PEZY Computing K.K.
      • https://www.pezy.co.jp
      • ハードウェアやさん
      • HPC/AI 用アクセラレータチップ開発に従事
        • 今日は業務で使っているツールを紹介
    • 三浦半島.rb
      • https://miurahantorb.connpass.com
      • https://ruby-jp.slack.com/archives/C08F7U7TLQG
      • 三浦半島(神奈川)を中心に活動中
        • いつかYRPでRuby会議やりたい
      • マグロ兜焼きを食す会(10/25予定)があります

3 of 7

制御レジスタとは?

  • コンピュータシステムの構成
    • 機能ブロック(GPU/NIC/USB ctrl/etc.)がCPUに接続されている
    • CPUが機能ブロックを制御し、所望の機能を実現する
  • 制御レジスタ(Control and Status Register; CSR)の役割
    • CPUから各機能ブロックを制御するために使う
      • CPUとのインターフェースを提供
      • 設定値や、自身の動作ステータスを保持
    • CSRを読み書きすることで、各機能ブロックを制御する

4 of 7

制御レジスタの実装方法と問題点

  • 仕様をExcelに纏めて、手書き実装
    • 書くコード自体は単純で難しくはない
  • 問題点
    • 量が多い
    • 微妙に違いがあり、間違いやすい
      • アドレス、ビット位置、幅、等
    • 特殊な挙動をするレジスタもある
      • 読み出しでクリア
      • 1書き込みでセット、自動クリア
    • 仕様と実装の乖離
      • Excelの更新が忘れられがち
    • 回路記述以外も実装する必要がある
      • Cヘッダー
      • 検証用期待値モデル
  • 仕様を神様にして、各コードを自動生成するのが幸せ

5 of 7

Ruby製制御レジスタ生成ツールRgGen

  • https://github.com/rggen/rggen
  • 多彩な入力フォーマットと出力ファイル
    • 入力フォーマット
      • 構造化テキスト
        • YAML/JSON/TOML
      • スプレッドシート
        • XLSX/ODS/CSV
      • Ruby + CSR記述用DSL
        • 詳細は次スライドで
    • 出力ファイル
      • 回路記述
        • SystemVerilog/Verilog/Veryl/VHDL
        • デファクトの記述言語をサポート
      • 検証用期待値モデル
      • Cヘッダーファイル
      • Markdown
  • プラグイン機能
    • 使用環境に合わせて、RgGenを拡張できる
    • Rubyのメタプログラミング向け機能があってこそ

6 of 7

Ruby製制御レジスタ生成ツールRgGen

  • CSR仕様をRubyで記述できる
    • 他の類似ツールにはない特徴
    • 仕様記述中で、Rubyの構文を使うことが出来る
      • 演算やメソッド呼び出し
      • 制御構文
    • 共通化や大規模化に威力を発揮

7 of 7

使ってみる

  • サンプルはこちら