🛠️

ASIC開発チームの技術スタック

2024/12/19に公開

はじめに

技術スタックというと使用しているプログラミング言語やフレームワークをまとめたもので、最近はWeb系を中心にこれを公開する会社が増えているようです。
しかしASIC開発の分野で技術スタックを公開しているという話は聞いたことがないな、と思ったので自社の技術スタックを書いてみることにしました。

PEZY Computingの技術スタック

というわけで私の所属している株式会社PEZY ComputingのASIC開発チームの技術スタックが以下です。

もちろんASIC開発をするのにはこれだけでは足りず、本来は利用しているファウンドリ(LSIの製造会社、TSMCなど)やEDAツールベンダ(ASIC開発におけるコンパイラ相当のツール群を提供している会社、SynopsysCadenceなど)も入ってくるはずなのですが、そのあたりはNDAなどあるので省略しています。

以下では各項目について簡単に紹介します。

Design / Verification

ハードウェア記述言語としてはSystemVerilogをメインで使っています。最近は一部のモジュールにVerylを導入し、今後採用を広げていきたいと思っています。
また、CSR(Control and Status Registers)の生成にはRgGenを全面的に採用しています。
検証はバス周りなど検証コンポーネントの再利用性が高いところはUVM、それ以外はSystemVerilogによる直書きとなっていることが多いです。

Supporting Software

設計をサポートするためのプログラミング言語としてRustPythonRubyを使っています。Rustの用途としては、検証用のモデルを書いてDPIでRTLシミュレータと接続したり、検証用にランダムパターンを生成させたりしています。
PythonとRubyはファイルリスト生成などビルドプロセスの補助や、ログの簡易チェックなどに使用しています。
また、弊社のASICはプロセッサなので、コンパイラ基盤としてLLVMを利用しています。自社プロセッサ向けにLLVMのバックエンドを開発し、RTLの検証やソフトウェア開発者向けのSDKなどに利用しています。

Infrastructure

最近の会社だとGitHubで完結するような運用もよくありそうですが、ASIC開発の場合クラウドの利用はかなり厳しいです。
ASIC開発のために必要なファウンドリからの情報はNDAが厳しく社外に出せないため、基本的にはオンプレミスサーバを運用する必要があります。
サーバのOSとしてはAlmaLinuxがメインです。Ubuntu等でないのは使用するEDAツールがサポートしていないためです。
GitリポジトリやCI環境にはGitLabを使っています。特にEDAツールはライセンスが高額で数が限られているので、CI用にはgitlab-runnerの本数を絞るなどして調整しています。タスク管理はRedmineを使っています。
GitLabやRedmineなどのサービス運用にはDockerを使っています。Kubernetesについては自前で運用するコストが高いのと、そこまでの管理を必要としていないので採用していません。
サーバのセットアップにはAnsibleを使っています。開発のフェーズによって短期的にたくさんの計算力が必要になることがあるので、簡単に同じ環境のサーバを追加できるようにしています。

おまけ

ちなみにこの記事を書くのに最も時間がかかったのは本文でも技術スタックの図でもなく、図に載せるロゴが著作権・商標権的に適切に使用できるのか確認する作業でした。
せっかくなので、今回調べたロゴの使用について(GitHub上で提供されているものについてはそのライセンス)のページをまとめておきます。 
個人的には「SystemVerilogやUVMのロゴは管理が適当でどこに許可をもらえばいいのかはっきりしなかったりするのでは?」と心配していましたが、Accelleraはちゃんとしているようで良かったです。
また、GitLabだけロゴマークを載せていませんが、これはGitLab自体の再配布以外の目的でのロゴ使用が明示的に禁止されているためです。(「許可を得るにはメールせよ」と書かれていて、もしかするとカジュアルに許可する運用なのかな、と思ってメールしてみましたが不許可とのことでした。)

おわりに

ASIC開発チームにおける技術スタックについて書いてみました。転職でもしない限りなかなか他社の技術スタックについて知る機会というのはないので、皆さんどうされているのかとても興味があります。NDAが多い分野なのでなかなか難しいですが、OSSの活用などは比較的公開しやすいのではないかと思いますので、自社の開発環境について書いてみてはいかがでしょうか?

Discussion