SP13 RgGen ご紹介 石谷太一
RgGen ご紹介
石谷太一
(PEZY Computing K.K.)
1
SP13 RgGen ご紹介 石谷太一
注意
● RgGen および GitHub 上で公開している成果物は、石谷個人が開発している
ものです
● PEZY の社員としての登壇ですが、問い合わせなどは石谷までお願いします
2
SP13 RgGen ご紹介 石谷太一
本日の内容
1. 自己紹介
2. RgGen ご紹介
3. 使ってみる (デモ)
4. 使用例紹介
3
SP13 RgGen ご紹介 石谷太一
自己紹介
● 石谷太一(いしたにたいち)
○ GitHub https://github.com/taichi-ishitani
■ RgGen: 本日紹介します
■ TNoC: SystemVerilog で実装した合成可能な NoC router
■ tvip-axi: UVM ベースの AMBA AXI VIP
■ tue: UVM の拡張パッケージ
○ Twitter @taichi600730
● SystemVerilog/Ruby 歴 13 年ちょっと
○ SV で RTL 書いたり、UVM ベースの検証環境のおもりをしたり
● 所属
○ PEZY Computing K.K.
■ PEZY-SC3 がローンチしました
■ 新規チップを開発中です
○ 求人あります
■ https://www.pezy.co.jp/career/
4
SP13 RgGen ご紹介 石谷太一
RgGen ご紹介
● レジスタマップから、コンフィグレジスタ (CSR) 関連のファイルを自動生成
するツールです
○ https://github.com/rggen/rggen
● レジスタマップは人間様が読めるフォーマットです
○ Ruby
■ レジスタマップ記述用の DSL を使用
○ 各種構造化テキスト (YAML/JSON/TOML)
○ 各種スプレッドシート (xlsx/xls/ods/csv/tsv)
○ SiFive DUH
○ SystemRDL はいずれ・・・
● 生成物
○ SystemVerilog/Verilog/VHDL RTL
○ UVM RAL model
○ Markdown
5
SP13 RgGen ご紹介 石谷太一
RgGen ご紹介
● 対応する型は(たぶん)多いです
○ 配列状/外部アクセス/間接参照レジスタ
○ ビットフィールド 33 種類
■ UVM RAL model で定義されている型は網羅しています
○ レジスタファイルも対応
● 標準的なホストプロトコルに対応
○ AMBA AXI4 Lite/APB
● プラグインによる機能拡張にも対応
○ 特殊なビットフィールド型の追加
○ 独自ホストプロトコルの対応
● EDA ツールの対応
○ シミュレータ: VCS/Xcelium/Verilator/Icarus Verilog
○ 論理合成: Design Compiler/Vivado/Quartus
● RTL/UVM RAL model はバックドアアクセスに対応
○ バスアクセスなしで、CSR の読み書きができます
○ シミュレーションの時間短縮などに使えます
6
SP13 RgGen ご紹介 石谷太一
使ってみる
● 紹介する入力/生成物のサンプルは、以下のリポジトリから取得できます
○ https://github.com/rggen/rggen-sample
● 生成物を組み込んだサンプルのテストベンチもあります
○ https://github.com/rggen/rggen-sample-testbench
○ 生成 RTL と RAL model を組み込んで、UVM で実装されている CSR のサニティチェック用
テストシーケンスを実行します
7
SP13 RgGen ご紹介 石谷太一
使ってみる - RgGen のインストール
● 前準備
○ Ruby (2.5 以上) と開発用パッケージをインストールしておきます
○ apt-get install ruby/apt-get install ruby-dev とか
● インストール
○ Ruby のパッケージ管理ツール (gem) を使ってインストールします
■ $ gem install rggen
■ 依存する他のライブラリも一緒にインストールされます
○ 追加のプラグインもインストールします
■ $ gem install rggen-verilog
$ gem install rggen-vhdl
$ gem install rggen-duh
8
SP13 RgGen ご紹介 石谷太一
使ってみる - 入力ファイル準備
● コンフィグレーションファイル
○ アドレス幅、データ幅、プロトコル等を指定します
○ YAML/JSON/TOML で記述します
○ https://github.com/rggen/rggen-sample/blob/master/config.yml
● レジスタマップ
○ CSR の仕様を記述します
○ register block/register file/register/bit field の4階層
■ 詳しくは Wiki を参照ください
https://github.com/rggen/rggen/wiki/Register-Map-Specifications
○ https://github.com/rggen/rggen-sample/blob/master/block_0.yml
https://github.com/rggen/rggen-sample/blob/master/block_1.yml
9
SP13 RgGen ご紹介 石谷太一
使ってみる - 実行!
● 実行コマンド rggen に、コンフィグレーションファイルとレジスタマップを
食わせるだけです
● $ rggen --plugin rggen-verilog --plugin rggen-vhdl -o out -c config.yml
block_0.yml block_1.yml
○ --plugin rggen-verilog/--plugin rggen-vhdl
■ Verilog/VHDL 出力プラグインを有効にします
○ -o out
■ 出力ディレクトリを指定します
○ -c config.yml
■ コンフィグレーションファイルのパスをしています
○ 生成物は “out” ディレクトリに書き出されます
● 実行時に、レジスタマップ上のエラーチェックが行われます
○ 識別子の唯一性、アドレスやビットフィールドの重複など
10
SP13 RgGen ご紹介 石谷太一
使ってみる - 生成物の組み込み
● RTL/UVM RAL model は、共通モジュール/クラス を使って構成されています
○ 以下のリポジトリから取得しておきます
■ https://github.com/rggen/rggen-sv-rtl.git
■ https://github.com/rggen/rggen-verilog-rtl.git
■ https://github.com/rggen/rggen-vhdl-rtl.git
■ https://github.com/rggen/rggen-sv-ral.git
○ 生成物と一緒に共通モジュール/クラスもEDAツールに入力します
11
SP13 RgGen ご紹介 石谷太一
使用例紹介 (PEZY での使用例)
● 採用前
○ 各モジュール担当者が CSR モジュールを各々で実装していた
■ アドレスのデコード方法などが統一されていなかった
■ あるレジスタがどのような動作をするかは、RTL を見なければならなかった
○ RTL とドキュメントが差分があった
● 現在
○ 全 CSR モジュールを RgGen で生成
■ レジスタマップをは YAML で記述
● Git で管理していて、変更履歴を追いやすくて良いです
■ レジスタ仕様、実装を標準化できた
○ 社内用プラグインを作成
■ 社内用バスプロトコル、特殊ビットフィールドに対応
○ ドキュメントを自動生成
■ Markdown の生成とドキュメント用サーバーへのアップロードを、更新毎に自動実行
● 仕様、RTL、ドキュメントの乖離を防止
12
SP13 RgGen ご紹介 石谷太一
おわり
13

RgGen ご紹介

  • 1.
    SP13 RgGen ご紹介石谷太一 RgGen ご紹介 石谷太一 (PEZY Computing K.K.) 1
  • 2.
    SP13 RgGen ご紹介石谷太一 注意 ● RgGen および GitHub 上で公開している成果物は、石谷個人が開発している ものです ● PEZY の社員としての登壇ですが、問い合わせなどは石谷までお願いします 2
  • 3.
    SP13 RgGen ご紹介石谷太一 本日の内容 1. 自己紹介 2. RgGen ご紹介 3. 使ってみる (デモ) 4. 使用例紹介 3
  • 4.
    SP13 RgGen ご紹介石谷太一 自己紹介 ● 石谷太一(いしたにたいち) ○ GitHub https://github.com/taichi-ishitani ■ RgGen: 本日紹介します ■ TNoC: SystemVerilog で実装した合成可能な NoC router ■ tvip-axi: UVM ベースの AMBA AXI VIP ■ tue: UVM の拡張パッケージ ○ Twitter @taichi600730 ● SystemVerilog/Ruby 歴 13 年ちょっと ○ SV で RTL 書いたり、UVM ベースの検証環境のおもりをしたり ● 所属 ○ PEZY Computing K.K. ■ PEZY-SC3 がローンチしました ■ 新規チップを開発中です ○ 求人あります ■ https://www.pezy.co.jp/career/ 4
  • 5.
    SP13 RgGen ご紹介石谷太一 RgGen ご紹介 ● レジスタマップから、コンフィグレジスタ (CSR) 関連のファイルを自動生成 するツールです ○ https://github.com/rggen/rggen ● レジスタマップは人間様が読めるフォーマットです ○ Ruby ■ レジスタマップ記述用の DSL を使用 ○ 各種構造化テキスト (YAML/JSON/TOML) ○ 各種スプレッドシート (xlsx/xls/ods/csv/tsv) ○ SiFive DUH ○ SystemRDL はいずれ・・・ ● 生成物 ○ SystemVerilog/Verilog/VHDL RTL ○ UVM RAL model ○ Markdown 5
  • 6.
    SP13 RgGen ご紹介石谷太一 RgGen ご紹介 ● 対応する型は(たぶん)多いです ○ 配列状/外部アクセス/間接参照レジスタ ○ ビットフィールド 33 種類 ■ UVM RAL model で定義されている型は網羅しています ○ レジスタファイルも対応 ● 標準的なホストプロトコルに対応 ○ AMBA AXI4 Lite/APB ● プラグインによる機能拡張にも対応 ○ 特殊なビットフィールド型の追加 ○ 独自ホストプロトコルの対応 ● EDA ツールの対応 ○ シミュレータ: VCS/Xcelium/Verilator/Icarus Verilog ○ 論理合成: Design Compiler/Vivado/Quartus ● RTL/UVM RAL model はバックドアアクセスに対応 ○ バスアクセスなしで、CSR の読み書きができます ○ シミュレーションの時間短縮などに使えます 6
  • 7.
    SP13 RgGen ご紹介石谷太一 使ってみる ● 紹介する入力/生成物のサンプルは、以下のリポジトリから取得できます ○ https://github.com/rggen/rggen-sample ● 生成物を組み込んだサンプルのテストベンチもあります ○ https://github.com/rggen/rggen-sample-testbench ○ 生成 RTL と RAL model を組み込んで、UVM で実装されている CSR のサニティチェック用 テストシーケンスを実行します 7
  • 8.
    SP13 RgGen ご紹介石谷太一 使ってみる - RgGen のインストール ● 前準備 ○ Ruby (2.5 以上) と開発用パッケージをインストールしておきます ○ apt-get install ruby/apt-get install ruby-dev とか ● インストール ○ Ruby のパッケージ管理ツール (gem) を使ってインストールします ■ $ gem install rggen ■ 依存する他のライブラリも一緒にインストールされます ○ 追加のプラグインもインストールします ■ $ gem install rggen-verilog $ gem install rggen-vhdl $ gem install rggen-duh 8
  • 9.
    SP13 RgGen ご紹介石谷太一 使ってみる - 入力ファイル準備 ● コンフィグレーションファイル ○ アドレス幅、データ幅、プロトコル等を指定します ○ YAML/JSON/TOML で記述します ○ https://github.com/rggen/rggen-sample/blob/master/config.yml ● レジスタマップ ○ CSR の仕様を記述します ○ register block/register file/register/bit field の4階層 ■ 詳しくは Wiki を参照ください https://github.com/rggen/rggen/wiki/Register-Map-Specifications ○ https://github.com/rggen/rggen-sample/blob/master/block_0.yml https://github.com/rggen/rggen-sample/blob/master/block_1.yml 9
  • 10.
    SP13 RgGen ご紹介石谷太一 使ってみる - 実行! ● 実行コマンド rggen に、コンフィグレーションファイルとレジスタマップを 食わせるだけです ● $ rggen --plugin rggen-verilog --plugin rggen-vhdl -o out -c config.yml block_0.yml block_1.yml ○ --plugin rggen-verilog/--plugin rggen-vhdl ■ Verilog/VHDL 出力プラグインを有効にします ○ -o out ■ 出力ディレクトリを指定します ○ -c config.yml ■ コンフィグレーションファイルのパスをしています ○ 生成物は “out” ディレクトリに書き出されます ● 実行時に、レジスタマップ上のエラーチェックが行われます ○ 識別子の唯一性、アドレスやビットフィールドの重複など 10
  • 11.
    SP13 RgGen ご紹介石谷太一 使ってみる - 生成物の組み込み ● RTL/UVM RAL model は、共通モジュール/クラス を使って構成されています ○ 以下のリポジトリから取得しておきます ■ https://github.com/rggen/rggen-sv-rtl.git ■ https://github.com/rggen/rggen-verilog-rtl.git ■ https://github.com/rggen/rggen-vhdl-rtl.git ■ https://github.com/rggen/rggen-sv-ral.git ○ 生成物と一緒に共通モジュール/クラスもEDAツールに入力します 11
  • 12.
    SP13 RgGen ご紹介石谷太一 使用例紹介 (PEZY での使用例) ● 採用前 ○ 各モジュール担当者が CSR モジュールを各々で実装していた ■ アドレスのデコード方法などが統一されていなかった ■ あるレジスタがどのような動作をするかは、RTL を見なければならなかった ○ RTL とドキュメントが差分があった ● 現在 ○ 全 CSR モジュールを RgGen で生成 ■ レジスタマップをは YAML で記述 ● Git で管理していて、変更履歴を追いやすくて良いです ■ レジスタ仕様、実装を標準化できた ○ 社内用プラグインを作成 ■ 社内用バスプロトコル、特殊ビットフィールドに対応 ○ ドキュメントを自動生成 ■ Markdown の生成とドキュメント用サーバーへのアップロードを、更新毎に自動実行 ● 仕様、RTL、ドキュメントの乖離を防止 12
  • 13.
    SP13 RgGen ご紹介石谷太一 おわり 13