はじめに
この記事では Vivado の Design Checkpoint に関して、その特長と用途の説明をします。
Design Checkpoint とは
Design Checkpoint とは簡単に言えば次のようなものです。
- Vivado のプロジェクトを zip 形式でアーカイブしたファイル
- 拡張子は .dcp
ただ、単純に zip 形式でアーカイブしただけではたいした意味は無いのですが、Vivado の Design Checkpoint には次のような特長があります。
- Vivado から直接読める
- Vivado から直接書ける
- cell単位で別々に Design Checkpoint を読み書き出来る
これらの特長を利用して、Vivado のデザインフローの自動化、Incremental Compile、 Partial Reconfiguration などに Design Checkpoint は利用されています。特に Partial Reconfiguration に関しては別記事で詳しく紹介する予定です。
Design Checkpoint によるデザインフローの自動化
Design Checkpoint は単一のファイルです。また、次のように入力の Design Checkpoint をなんらかの処理(implmentationなど)を行って別の名前の Design Checkpoint に書き込むことにより、次の図のようなデザインフローを作ることが出来ます。
Fig.1 Design Checkpoint のデザインフロー
- の open_checkpoint コマンドで Design Checkpoint を開きます。
- でなんらかの処理を行います。
- の write_checkpoint コマンドで Design Checkpoint に書き込みます。
- の close_design コマンドで開いていた Design Checkpoint を閉じます。
このようにすることによって、 Design Checkpoint は状態が変わらない(immutableな) 単一のファイルにすることができます。これは make などのビルド自動化ツールと相性が良いです。
all: output.dcp
output.dcp : input.dcp
vivado -mode batch -source xxxx.tcl
Design Checkpoint によるデザインのリンク
デザイン例
Vivado では Design Checkpoint を cell 単位で読み書きすることが出来ます。ここでいう cell とは、Xilinxなどの EDA 業界の用語で、コンピュータープログラムでのインスタンスに相当します。
例として次のようなデザインがあるとします。
Fig.2 Design Checkpointによるデザインのリンクの例
この例で、デザインの名前は design_1とします。ここで U0、U1、U2 が cell です。U0 は MPU というモジュールをインスタンス化したもの、U1 は SUB をインスタンス化したものです。
このデザインで、 U1:SUB を除く他のモジュールはまとめて論理合成しておき、U1:SUB のみを別に論理合成するとします。
トップレベルの論理合成結果を Design Checkpoint に保存
この場合、次の図のようにU1:SUB をブラックボックスとしておき、Vivado のプロジェクトを作って論理合成して top_synth.dcp という Design Checkpoint を作っておきます。
Fig.3 トップレベルの論理合成結果をDesign Checkpointにしておく
source create_project.tcl
synth_design
write_checkpoint -force top_synth.dcp.
close_design
SUB の論理合成結果を Design Checkpoint に保存
一方、モジュール SUB は次のように別に論理合成してsub_synth.dcp という Design Checkpoint を作ります。ここで SUB は out_of_context というフラグをつけて論理合成します。
Fig.4 SUBモジュールの論理合成結果をDesign Checkpointにしておく
source create_project.tcl
synth_design -top SUB -mode out_of_context
write_checkpoint -force sub_synth.dcp
close_design
デザインをリンクして配置配線
最後にトップレベルの論理合成結果の Design Checkpoint と SUB の論理合成結果の Design Checkpoint をリンクします。
まずトップレベルの論理合成結果の Design Checkpoint(top_synth.dcp) をopen_checkpoint コマンドで開きます。次に SUB の論理合成結果の Design Checkpoint(sub_synth.dcp) を read_checkpoint で cell を指定して読み込みます。リンクした結果を Design Checkpoint(design_synth.dcp) に書き込みます。
最後に上で作成した Design Checkpoint(design_synth.dcp) を使って配置配線を行いDesign Checkpoint(design_impl.dcp) に保存します。
Fig.5 トップレベルの論理合成結果と SUB の論理合成結果をリンク
open_checkpoint top_synth.dcp
read_checkpoint -cell U1 sub_synth.dcp
write_checkpoint design_synth.dcp
close_design
open_checkpoint design_synth.dcp
opt_design
place_design
route_design
write_checkpoint design_impl.dcp
close_design
リンクの用途
前節で説明したように、 Design Checkpoint は Vivado によって cell 単位でリンクすることが出来ます。この特長により、Vivado では、Incremental Compile や Parital Reconfiguration のデザインフローで Design Checkpoint が使われています。