自作のIPを作る手順をまとめておく。XilinxのVivadoのマニュアルを読めば良いと思うが、マニュアルが多くて、いろいろ読む気しない。。。FPGAのエンジニアはすごいなぁと思う。
IPの作り方
自作のIPを作成する手順です。
Tools->Create and Package New IP…を選択する
Nextを選択する
今回は、AXIのIPを作成するので、Create AXI4 Peripheralを選択して、Nextを選択する
IPの名前を適当に入力して、Nextを選択する
ここで必要なAXI系を追加が必要であれば、追加しておく、今回は、AXIのSlave IFがあれば良いので、追加なし。
少しIPを修正するので、Edit IPを選択して、Finishを選択する
IPのプロジェクト用のVivadoが起動する。
今回は、レジスタをライトしたら、信号をHigh→LowするIPを作成する
コードは2個用意されている。
今回のIPの最終イメージになります。レジスタをライトすると、STARTの信号を制御するIPになる。
myip_test_v1_0.vを修正する。Users to add ports here にSTARTという信号を追加する。
module myip_test_v1_0 #
(
parameter integer C_S00_AXI_DATA_WIDTH = 32,
parameter integer C_S00_AXI_ADDR_WIDTH = 4
)
(
// Users to add ports here
output wire START, //★追加
// User ports ends
myip_test_v1_0.vに、もう1箇所追加する。下位のモジュールにSTARTの信号を接続する。
myip_test_v1_0_S00_AXI # (
.C_S_AXI_DATA_WIDTH(C_S00_AXI_DATA_WIDTH),
.C_S_AXI_ADDR_WIDTH(C_S00_AXI_ADDR_WIDTH)
) myip_test_v1_0_S00_AXI_inst (
.START(START), //★追加
.S_AXI_ACLK(s00_axi_aclk),
次に、myip_test_v1_0_S00_AXI.v側を修正する。同じように、STARTの信号を追加する。
module myip_test_v1_0_S00_AXI #
(
parameter integer C_S_AXI_DATA_WIDTH = 32,
parameter integer C_S_AXI_ADDR_WIDTH = 4
)
(
// Users to add ports here
output wire START,//★追加
// User ports ends
myip_test_v1_0_S00_AXI.vで、regを追加する
reg start = 0; //★追加
assign START = start;//★追加
myip_test_v1_0_S00_AXI.vで、レジスタ制御部分を追加する。テンプレート通りだと200行目付近のalwaysで、slv_reg_wrenのelse節を追加する。
always @( posedge S_AXI_ACLK )
begin
//省略....
if (slv_reg_wren)
begin
//省略....
end else begin //★追加
if (slv_reg0[0] == 1'b1) begin//★追加
start <= 1'b1; //★追加
slv_reg0[0] <= 1'b0; //★追加
end else begin //★追加
start <= 1'b0; //★追加
end //★追加
コードの追加が終わったら、Package IPを確認する。Packaging Stepsで、緑になっていない部分があったら、Merge…のところをクリックしてチェック完了とする。
そして、最後に、Review and Packageをクリックして、Re-Package IPをクリックする。
これで、IPの作成は完了だ。
カスタムIPを使う
IPを使う側は、まずは、プロジェクトを起動する。そして、Tools→Settingsを選択する。
IP Repositoryで、IP Repositoriesで、↑で、作成したIPのディレクトリを指定する。そうすると、+ボタンを押した時に、カスタムIPが表示される。
そして、OKをクリックする。
あとは、Block desginで、「+」をクリックして、IPを選択する画面に、自分で作ったIPがあらわれるはずだ。
IPを選択すると、Block Desgin上に追加される。
IPの修正
次に、IPを修正したくなった場合だ。
IPのVivadoのプロジェクトファイル のxprファイルは、今回は、IPを保存するディレクトリにできた。
そうしたら、IPを編集画面が表示できた。必要に応じて、コードを編集するのが良いと思う。
そして、変更が終わったら、SourcesのDesign Sources のIP-XACTにあるComponent.xmlをクリックする
そうすると、Package IPがでてきて、各項目をチェックし、最後に、Review and Packageで、Re-Package IPをクリックする。
自分の場合は、IPを使っている側で、Updateされたかわからなくなるので、Package IPのIdentificationでバージョンを少しあげておく。
IPを更新する
もし、自作したIPを、あるプロジェクトで使用していた場合は、プロジェクト側に、IPが更新されたことが通知される。Report IP Statusをクリックする。
IP Statusを確認すると、Current Versionが1.0で、更新されたバージョン(Recommended Version)は、1.01と表記されている。
更新するIPをクリックして、Upgrade Selectedをクリックする。
そうすると、IPがアップデートされる。Generate Output Productを行う。
こちらが、今回作成したIPのプロジェクトとコードになります。