Chipignite チップ作製に向けた,Caravel の試用(mpw-9g)

(2024/03版)efabless 社 chipignite サービスを利用したチップ作製を目指す.

チップ作製データの生成では,あらかじめ用意されたクロック・リセット生成やIOパッド・制御回路を統合した Caravel ハーネスを利用しすることでデジタル回路の設計のみ注力できる手法を用いる.

Caravel ハーネスは efabless 社から提供されるが,chipignite 用のものはefablessへの登録が必要となる.チップ作製前に手順の確認や手法に慣れるため,オープンソースの OpenMPW プロジェクト用の Caravel を試用する.

Caravelのサンプルプロジェクトではlitexを元とした回路が初期設定されているが,2024/03現在,ゲートレベルシミュレーションが動作しない不具合がある.

※参考資料

efabless社: https://efabless.com

ユーザ向け公開Caravelハーネス: https://github.com/efabless/caravel_user_project

日本有志による分かり易い情報: https://vlsi.jp/OpenMPW.html

動作環境

動作環境 : Windows11 22H2, VMWare workstation pro 17.0.2, Ubuntu 22.04.4 LTS

シミュレーションでは大きくメモリを要する点に注意.(サンプルで 10GB~ 程度)

Caravel と Caravel 向け OpenLane・PDK のセットアップ

必要パッケージの導入

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential python3 python3-venv python3-pip
sudo apt-get install make git
python3 -m pip install pyyaml click

Docker-ce, community edition の導入

docker は 無償の商用利用可能な CLI を用いる.(docker desktopは有償)

下記は公式の手順を掲載している.

公式: https://docs.docker.com/engine/install/ubuntu/

まず,必要なパッケージと公開鍵を設定する.

sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

安定版のリポジトリを設定し,docker をインストールする.

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get install docker-ce

docker の動作確認を行う.

sudo docker run hello-world

ローカル計算機でdockerをユーザ権限により動作させる設定

グループ docker にユーザを登録してユーザ権限で実行できるように設定する.

sudo groupadd docker
sudo usermod -aG docker ${USER}

再起動(ログアウトでも可)して設定を反映させ,ユーザ権限での動作を確認する.

docker run hello-world

参照: https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04

Caravel インストールフォルダの構成

本手順では,下記ディレクトリ構成にてインストールを行う.

$HOME/
|-- Caravel_mpw-9g/
    |-- caravel_mpw-9g/
    |-- dependencies/
    |   |-- openlane_src/
    |   |-- pdks/
    |-- mpw-9g_precheck/
    |setenv.sh

Caravel (mpw-9g) ディレクトリを作成する.

mkdir Caravel_mpw-9g
cd Caravel_mpw-9g

Caravel ハーネスのパッケージ導入とセットアップ

git レポジトリから mpw-9g タグのものをクローンする.

git clone -b mpw-9g https://github.com/efabless/caravel_user_project.git caravel_mpw-9g

EDAの環境変数設定のファイルを作成する.(setenv.shというファイル名とする)

export OPENLANE_ROOT=$HOME/Caravel_mpw-9g/dependencies/openlane_src
export PDK_ROOT=$HOME/Caravel_mpw-9g/dependencies/pdks
export PDK=sky130A
export CARAVEL_ROOTT=$HOME/Caravel_mpw-9f/caravel_mpw-9g/caravel
コマンドラインからファイルを生成する方法 ``` touch setenv.sh echo "export OPENLANE_ROOT=\$HOME/Caravel_mpw-9g/dependencies/openlane_src" | tee -a setenv.sh echo "export PDK_ROOT=\$HOME/Caravel_mpw-9g/dependencies/pdks" | tee -a setenv.sh echo "export PDK=sky130A" | tee -a setenv.sh echo "export CARAVEL_ROOTT=\$HOME/Caravel_mpw-9f/caravel_mpw-9g/caravel" | tee -a setenv.sh ```
次に,環境変数の設定,dependencies ディレクトリを作成する.
source setenv.sh
mkdir dependencies
cd caravel_mpw-9g

mpw_precheck のインストールフォルダを変更するため Makefile の PRECHECK 行を修正する.

# PRECHECK_ROOT?=${HOME}/mpw_precheck
PRECHECK_ROOT?=${HOME}/Caravel_mpw-9g/mpw-9g_precheck

セットアップ実行する.

make setup

Caravel環境によるビルド

レポジトリに登録されているサンプル回路をビルドし,ユーザ回路と Caravel を含めた一連のビルド手順を確認する.なお,ユーザ回路/Caravelを含んだ回路のビルドに1~2時間程度要する.

まず,サンプル回路では GPIO の電源投入時の設定の記述 (verilog/rtl/user_define.v) の修正を行う.本手順では,全てのピンについて 初期値のGPIO_MODE_INVALID を GPIO_MODE_MGMT_STD_OUTPUT に修正する.

`define USER_CONFIG_GPIO_5_INIT  `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_6_INIT  `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_7_INIT  `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_8_INIT  `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_9_INIT  `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_10_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_11_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_12_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_13_INIT `GPIO_MODE_MGMT_STD_OUTPUT 

// Configurations of GPIO 14 to 24 are used on caravel but not caravan.
`define USER_CONFIG_GPIO_14_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_15_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_16_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_17_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_18_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_19_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_20_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_21_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_22_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_23_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_24_INIT `GPIO_MODE_MGMT_STD_OUTPUT 

`define USER_CONFIG_GPIO_25_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_26_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_27_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_28_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_29_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_30_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_31_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_32_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_33_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_34_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_35_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_36_INIT `GPIO_MODE_MGMT_STD_OUTPUT 
`define USER_CONFIG_GPIO_37_INIT `GPIO_MODE_MGMT_STD_OUTPUT 

書き換え後,Caravel_mpw-9g/caravel_mpw-9g ディレクトリに移動し,ビルドを実行する.

make user_proj_example
make user_project_wrapper

エラーなど表示されずビルドが成功すると,gdsフォルダ下に user_progect_wrapper.gds ファイルが生成される.

デザインのローカルチェック

デザインチェックではチップ製造の工程との整合性が確認される.例えば,デザインの README.md の内容が更新についてもチェックされる.ローカルチェックに適合するよう,README.mdを下記の内容に書き換える.なお,元の文章を残した場合やREADME.bak などとしてオリジナルのファイルを残した場合,チェックでエラーが報告されるため注意.

This project is minimally modified to mpw-8c caravel template.
The function is 32-bit counter. All of 38-bit IOs are set to OUTPUT.

デザインチェックの環境セットアップ~実行を行う.run-precheck は1時間弱程度かかる.

make precheck
make run-precheck

デザインチェックでエラーが報告されないことを確認する.以上の手順によりサンプルユーザデザインのビルド~Caravelを含めたデザインのビルド~出力チェックまでできることを確認できる.

Caravelのファイル構造

・gds/:GDSIIファイルが生成される
・openlane/:OpenLANEの設定ファイル
・verilog/dv/:シミュレーションとテストベンチ用ファイル
・verilog/rtl/:ユーザデザインのverilogファイル

全ディレクトリの説明は下記を参照:https://caravel-harness.readthedocs.io/en/latest/getting-started.html#required-directory-structure

Docker導入のトラブルシューティング

パッケージ元の追加を実行すると,apt 実行時に「複数回設定されています」など表示されインストールなどできない状態となる.

これは,/etc/apt/sources.list.d/ 下のパッケージ記述が重複していることが原因と考えられる.grep /etc/apt/sources.list.d/* docker と確認した際に複数の行が表示される場合はパッケージ記述が重複しており,該当する *.list からdocker記載を「#」でコメントアウトすることで回避できる.