ultra96 v2 たぶん 独自IPで加算器を追加した

ultra96でFPGAの設計をしようと思ったが。。。

・そもそもFPGAの設計をしたことがない。
・vivadoも触ったことない。

ってことで、困った。

tutorialの次に何をしたら良いか困りました。。。

いろいろ調べて、やりたいことに一番近く簡単そうなページが以下のページでした。
このページには本当助かりました!!

Zynq-7000で,独自回路をIPにして,AXI4でPS-PL通信してプログラムから利用する (Vivado)


このページとultra96のtutorial1と2を見ながら実装したら、一応、同じ結果になったので成功したと思われる。
なので、メモを残しておく。

vivado を起動する。ultra96のtutorialによると2018.2が良さそうだった。

・Create Block Designで、Block Designを開きAdd IPを選択で、「Zynq UltraScale+ MPSoC」を選択する。追加しただけど、Ultra96用になっていないので、「Run Block Automation」をクリックする。


たぶんだけど、そのRun Block Automationのダイアログで、Apply Board Presetにチェックがついているので、ultra96用にZynq UltraScale+MPSoCの設定がなってくれていると思う。」Qiitaの記事だと、ZynqコアをカスタマイズしてPresetから選択して。。。となっているが、自分のVivadoにはPresetがなく、選択できなかった。

次に、tutorial01にあるように、クロックをつなげてあげる。この必要性はよくわからないが、とりあえず、言われたままやっておく。

このクロックをつなげないまま進めるとあとで、エラーになった。

pl_clk0を、maxhpm1_fpd_aclkとmaxhpm0_fpd_aclkに接続しておく。



加算器の方は、Qiitaの元の記事の通り、IPを追加すればよかった。

追加したのは以下の4行になる。HDLも初めてだったし、ifの書き方も知らず、一応エラーがないからこんな感じでよかったのだと思う。

--------------
    else
      begin
        slv_reg2 <= slv_reg0 + slv_reg1;
      end
--------------

XilinxのSDK上だと、どのbeginとendがつながっているかか、わかりずらいし、どうやってプログラミングしているんだろうー。

で、IPができたら元の画面に戻ってきて、Re connection Automationを選択する。
何!自動で接続してくれるだと!!



Qiitaの元の記事と少し違う。DDRとFIXED_IOの線がない!でも気にせずとりあえずOKとした。DDRつなってないことになるんですかねー??




で、Qiitaの元の記事通り、
・Craete HDL Wrapper
・Generate Output Porducts
・Generate BitStream
・Export Hardwareを実行する。

で、次にSDKを起動する。


最初に、tutorial2の通りに、Hardware Platformを作成して、bspを作成する。bspはtutorialの通り、stdinとstdoutをpsu_uart1に変更する必要がある。

そして、Qiitaの元の記事の通りにhello worldを作成して実行すればいい。

自分は、IPの名前やプロジェクト名を適当に決めたので、IPのベースアドレスの定義が違ったりした。ベースアドレスは、xparameters.hにあるので探せばよいとでてくると思う。

tutorial2の通りに、実行したらターミナルから
------------------
Hello World
123 + 456 = 579
------------------
と表示された!!

初めてのFPGA実装が成功したことになった!!Qiitaの記事を書いてくれた方感謝です!!


プロジェクトを以下においておく

https://github.com/y38y38/fpga/tree/master/my_ip




コメント