FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages

Vivado

Vivado-HLSを使って高位合成でCPUを作ってみる(9. HLSでAXIのバイトイネーブルはどう制御する?)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 現在の悩みどころはメモリアクセスの制御だ。CPUはワードアクセス以外に、ハーフワード、バイトアクセスなども発生する。 Vivado-HLSのモジュールのインタフェースはAXIだけれども、C言語でこれをどの…

Vivado-HLSを使って高位合成でCPUを作ってみる(8. RISC-VのテストベンチをすべてPassさせる)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 すべてのテストパタンを通したいのだが、バスをどのように作ればよいのか迷っている。 これまでは32bitでバスを作っていた。これは通常のLW/SW命令だとよいのだが、HalfWord, Byteのロードストアでは…

Vivado-HLSを使って高位合成でCPUを作ってみる(7. Cosimulationで波形をダンプして解析する)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 s_axiliteとm_axiの違いで動作しなくなってしまい苦労していたが、色々調べていると、#pragmaでいろんなところにm_axiを入れていけば解決することが分かり、無事にデザインを合成することができた。 g…

Vivado-HLSを使って高位合成でCPUを作ってみる(6. m_axiとs_axiliteの謎)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 テストがこんなに遅いのはなんでだ?デザインに根本的な間違いがあるのではないかと思いいろいろ見直していたのだが、あれ、よく見るとCPUのバスがスレーブの設定になってるじゃないか。 directives.t…

Vivado-HLSを使って高位合成でCPUを作ってみる(5. リグレッションテスト環境の構築)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 一つのテストパタンが動作するようになったので、全てのテストパタンを動作させて実装の確認を行っていく。 追加していない命令はたくさんあるので、テストは完走はしないだろうが、一応チェックして…

Vivado-HLSを使って高位合成でCPUを作ってみる(4. RTL合成後のシミュレーションとサイクル測定)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 とりあえず基本的なパタンが動くようになったので、Co-Simulationの実施とサイクル測定を実施する。 Co-Simulationを実施すると、RTLシミュレーションでも無事に動作していることが確認できた。 では…

Vivado-HLSを使って高位合成でCPUを作ってみる(3. CPUクラスへの実装まとめ上げとテストベンチ実行)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 まずは性能を度外視して動くものを作る。 次に、性能を向上させるための様々な試行を実施する。 まずは、標準的なテストパタンをPassさせるために命令を追加していこう。 これまでは、CPUのクラスは存…

Vivado-HLSを使って高位合成でCPUを作ってみる(2. 標準的な命令を実装する)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 まずは性能を度外視して動くものを作る。 次に、性能を向上させるための様々な試行を実施する。 まずは、標準的なテストパタンをPassさせるために命令を追加していこう。 一般的なCPUと同じで、まずは…

Vivado-HLSを使って高位合成でCPUを作ってみる(1. メモリのRead/Writeのモデルを作成)

Vivado-HLSで高位合成からCPUを作ってみたい。 高位合成でCPUを作るというのはネタとしてはイマイチだけれども、高位合成がどういうものか、目標をもって試してみるには良い題材だと思うので試してみている。 前回はとりあえずメモリにアクセスしてデータを…

Vivado-HLSを使って高位合成でCPUを作ってみる(1. メモリのRead/Writeのモデルを作成)

Vivado-HLSの勉強をしてみたいのだけれども、何か題材をもってデザインを作ってみる方が良いと思う。 そこで、簡単なモデルでも良いのでCPUを作ってみることにした。 最終的にはRISC-Vを実行させてみたいのだけれども、まずは簡単なモデルから動かすというこ…

Vivado HLSをWindows Subsystem on Linuxで動作させるための手順

Vivado HLSについて再入門しようと思っている。 最近は環境をVirtual BoxからWindows Subsystem on Linux(WSL)に変更したので、その環境下でVivado HLSが動くようにしておきたい。 私が使うのは、基本的にGUIは立ち上げずにスクリプトだけで処理を行いたい。…

VivadoでIPを生成する方法の調査(tclを使った生成方法)

Zynqを使ったカスタムデザインのIPが作りたくて、IPの生成方法をいろいろ調査しているのだが、どうもGUIを操作するものばかりでつまらない。 GUIの操作方法なんて一瞬で忘れてしまうので、tclとmakefileで一気に作れるような環境を用意しておきたい。 いろい…

Vivado 2017.1 AXI VIP packageの情報

Vivado 2017.1 AXI VIP Packageについていくつか情報が出ている。 japan.xilinx.com XILINX_AXI_VIP_2017_1.zipをダウンロードすると、いくつかVIPパッケージ内の機能について記述されている。 また、VivadoインストールディレクトリにはAXI VIPパッケージの…

CUIからVivadoを立ち上げて論理合成するためのスクリプト

自作RISC-Vプロセッサの設計もおおよそ完了してきたので、FPGA向けに論理合成する環境を構築している。 GUIを立ち上げてボタンをポチポチ押すのはあまり好きではないので、VivadoをCUIで立ち上げて動作させる環境を構築した。 VivadoのtclはDesign Compiler…

Chef-soloによるRISC-VのRocket-Chip向け環境自動ビルド

いろいろとVagrantの環境を仕込んでいるが、今回はRISC-V向けのRocket-Chip向け環境をVagrantとChef-soloでビルドする。 github.com 参照しているのは単純に以下のRocket向けgithubに書いてあるビルド手順をChef-soloに落としただけだ。 github.com 問題は、…

Chef-SoloによるVivadoの自動インストールとADV7511向けデザインの自動ビルド

前回はVagrant上のUbuntuにVivadoをインストールする途中だった。 何度か試行を繰替えしているが、どうにかなりそうだ。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com Vivadoのインストールと、ZedBoard向けLinuxの立ち上げに必要なデザインの構築…

ZedBoard向けデザインを構築するスクリプトを自動化する(途中)

msyksphinz.hatenablog.com 前回で、Linuxをブートするためのローダのビルドは完了したので、今度はVagrant上のCUIだけでZedBoard用デザインのビルドに挑戦する。 参考にしたのは以下のサイトだ。 qiita.com あとはVivadoをCUIでインストールするのには、自…

FSBLを構築するスクリプトを自動化

これまで、Zynq ZedBoard向けにLinuxを作成する環境はいくつか構築してきたが、ちゃんとした自動化スクリプトを構築していなかった。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com このさい、VagrantとChef-soloを利用して、ZedBoard向けのLinux環…

Vivado 2016.3がリリースされました

たまには「FPGA開発日記」らしくFPGA関連の話題を。 Vivado 2016.3がリリースされた。主な変更内容としては、 Vivado Design Suite User Guide Release Notes, Installation, and Licensing https://www.xilinx.com/support/documentation/sw_manuals/xilinx…

Vivado-HLSとAXI4-DMAの試行(4. Vivado-HLSのリファレンスデザインを試行する)

AXI4-DMAの試行をしているが、どうもうまくいかない。Vivado-HLSのリファレンスデザインを試行してみることにした。 試行するのは、xapp1170のリファレンスデザインだ。どうやらVivado 2015.2 での実装で確認されているらしい。そこでVivado 2015.2をインス…

Vivado-HLSとAXI4-DMAの試行(3. Vivado-HLSのカスタムIPをSDKから制御する)

AXI4-DMAを試行している。Vivado-HLSでカスタムIPを作成し、Vivado-HLSのコアをAXI4-Streamで接続し、SDKから制御できるようになりたい。 前回、VivadoにカスタムIPをインプリメントし、デザインを生成した。次にSDKを使って制御してみる。 msyksphinz.haten…

Vivado-HLSとAXI4-DMAの試行(2. Vivado-HLSのカスタムIPをVivadoにインポートして接続する)

前回に、Vivado-HLSで作成した浮動小数点行列積回路をAXI4-Streamに対応させた。今度はVivado側で、作成したIPをDMAに接続して、デザインを作成してみよう。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com 参考にしたのは…

Vivado-HLSとAXI4-DMAの試行(1. Vivado-HLSデザインをAXI-Streamインタフェースに対応させる)

前回行列乗算回路を最適化することで、ソフトウェアと比較して大幅に性能を向上させることに成功した。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com その時に参照していたのが以下の資料だが、そこにはAXI4-DMAを使ったときの方法が書いてある。 h…

Vivado-HLSで書いた回路とプログラムで速度比較(2. directive挿入による性能改善)

Vivado-HLSで行列積演算回路を作成したが、この性能はあまり良いものでは無かった。 msyksphinz.hatenablog.com その後いろいろ調査を行った結果、以下の資料を発見した。 以下の資料は、その名の通り浮動小数点行列積をVivado-HLSで実装したときの最適化ガ…

Vivado-HLSで書いた回路とプログラムで速度比較(1)

Vivado-HLSで行列積の回路を設計した場合と、普通にARM Cortex-A9上で動作する行列積のプログラムでどれくらいの速度差になるのか調査してみることにした。 今回使用するのは48×48の行列データで、ころ2つのデータの行列積を計算するものとする。 for (j = 0…

コマンドラインからVivado HLSを使用するためのスクリプトテンプレート作成

Vivado HLSで高位合成言語での開発を行うにあたり、これまでどうしてもGUIを使う必要があった。 マウスの操作が必要になりどうしても面倒なので、Vivado HLSでの高位言語合成を一気通貫でやってくれるスクリプトを作成した。 といっても、これまでGUIでやっ…

行列積演算のHLS設計高速化検討(3. Unroll Directiveの検討)

前回は行列積演算の回路を用いて、パイプラインディレクティブの効果を測定した。 次はループアンローリングの効果を測定してみる。Vivado HLSにはUNROLLディレクティブが存在するため、こちらを行列積演算回路のループに適用して、どの程度効果があるのかを…

行列積演算のHLS設計高速化検討(2. Pipeline Directiveの検討)

msyksphinz.hatenablog.com 前回、基本的な演算性能の測定方法を確立した。まずは、PIPELINEディレクティブを挿入することで、どの程度高速化されるか試行してみよう。 とりあえず、前回のパイプライン挿入無しの場合の計測結果が間違えていた。修正済。 パ…

行列積演算のHLS設計高速化検討(1. サイクル数計測方法の構築)

Vivado HLSを使った行列積演算について記事を書いた。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com この場合、データ転送も含めてどの程度時間がかかっているんだ…

VivadoをGUIを使用せずにインストールする方法調査

Vagrant経由でLinuxにVivadoをインストールする場合は、どうしてもXが必要になるため一度X-Forwardingを実行するか、VirtualBoxのGUIを立ち上げてインストールを実行している。 これは非常に面倒で、VivadoのインストールのためだけにGUIを立ち上げなければ…