Vivado
Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 現在の悩みどころはメモリアクセスの制御だ。CPUはワードアクセス以外に、ハーフワード、バイトアクセスなども発生する。 Vivado-HLSのモジュールのインタフェースはAXIだけれども、C言語でこれをどの…
Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 すべてのテストパタンを通したいのだが、バスをどのように作ればよいのか迷っている。 これまでは32bitでバスを作っていた。これは通常のLW/SW命令だとよいのだが、HalfWord, Byteのロードストアでは…
Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 s_axiliteとm_axiの違いで動作しなくなってしまい苦労していたが、色々調べていると、#pragmaでいろんなところにm_axiを入れていけば解決することが分かり、無事にデザインを合成することができた。 g…
Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 テストがこんなに遅いのはなんでだ?デザインに根本的な間違いがあるのではないかと思いいろいろ見直していたのだが、あれ、よく見るとCPUのバスがスレーブの設定になってるじゃないか。 directives.t…
Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 一つのテストパタンが動作するようになったので、全てのテストパタンを動作させて実装の確認を行っていく。 追加していない命令はたくさんあるので、テストは完走はしないだろうが、一応チェックして…
Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 とりあえず基本的なパタンが動くようになったので、Co-Simulationの実施とサイクル測定を実施する。 Co-Simulationを実施すると、RTLシミュレーションでも無事に動作していることが確認できた。 では…
Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 まずは性能を度外視して動くものを作る。 次に、性能を向上させるための様々な試行を実施する。 まずは、標準的なテストパタンをPassさせるために命令を追加していこう。 これまでは、CPUのクラスは存…
Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 まずは性能を度外視して動くものを作る。 次に、性能を向上させるための様々な試行を実施する。 まずは、標準的なテストパタンをPassさせるために命令を追加していこう。 一般的なCPUと同じで、まずは…
Vivado-HLSで高位合成からCPUを作ってみたい。 高位合成でCPUを作るというのはネタとしてはイマイチだけれども、高位合成がどういうものか、目標をもって試してみるには良い題材だと思うので試してみている。 前回はとりあえずメモリにアクセスしてデータを…
Vivado-HLSの勉強をしてみたいのだけれども、何か題材をもってデザインを作ってみる方が良いと思う。 そこで、簡単なモデルでも良いのでCPUを作ってみることにした。 最終的にはRISC-Vを実行させてみたいのだけれども、まずは簡単なモデルから動かすというこ…
Vivado HLSについて再入門しようと思っている。 最近は環境をVirtual BoxからWindows Subsystem on Linux(WSL)に変更したので、その環境下でVivado HLSが動くようにしておきたい。 私が使うのは、基本的にGUIは立ち上げずにスクリプトだけで処理を行いたい。…
Zynqを使ったカスタムデザインのIPが作りたくて、IPの生成方法をいろいろ調査しているのだが、どうもGUIを操作するものばかりでつまらない。 GUIの操作方法なんて一瞬で忘れてしまうので、tclとmakefileで一気に作れるような環境を用意しておきたい。 いろい…
Vivado 2017.1 AXI VIP Packageについていくつか情報が出ている。 japan.xilinx.com XILINX_AXI_VIP_2017_1.zipをダウンロードすると、いくつかVIPパッケージ内の機能について記述されている。 また、VivadoインストールディレクトリにはAXI VIPパッケージの…
自作RISC-Vプロセッサの設計もおおよそ完了してきたので、FPGA向けに論理合成する環境を構築している。 GUIを立ち上げてボタンをポチポチ押すのはあまり好きではないので、VivadoをCUIで立ち上げて動作させる環境を構築した。 VivadoのtclはDesign Compiler…
いろいろとVagrantの環境を仕込んでいるが、今回はRISC-V向けのRocket-Chip向け環境をVagrantとChef-soloでビルドする。 github.com 参照しているのは単純に以下のRocket向けgithubに書いてあるビルド手順をChef-soloに落としただけだ。 github.com 問題は、…
前回はVagrant上のUbuntuにVivadoをインストールする途中だった。 何度か試行を繰替えしているが、どうにかなりそうだ。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com Vivadoのインストールと、ZedBoard向けLinuxの立ち上げに必要なデザインの構築…
msyksphinz.hatenablog.com 前回で、Linuxをブートするためのローダのビルドは完了したので、今度はVagrant上のCUIだけでZedBoard用デザインのビルドに挑戦する。 参考にしたのは以下のサイトだ。 qiita.com あとはVivadoをCUIでインストールするのには、自…
これまで、Zynq ZedBoard向けにLinuxを作成する環境はいくつか構築してきたが、ちゃんとした自動化スクリプトを構築していなかった。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com このさい、VagrantとChef-soloを利用して、ZedBoard向けのLinux環…
たまには「FPGA開発日記」らしくFPGA関連の話題を。 Vivado 2016.3がリリースされた。主な変更内容としては、 Vivado Design Suite User Guide Release Notes, Installation, and Licensing https://www.xilinx.com/support/documentation/sw_manuals/xilinx…
AXI4-DMAの試行をしているが、どうもうまくいかない。Vivado-HLSのリファレンスデザインを試行してみることにした。 試行するのは、xapp1170のリファレンスデザインだ。どうやらVivado 2015.2 での実装で確認されているらしい。そこでVivado 2015.2をインス…
AXI4-DMAを試行している。Vivado-HLSでカスタムIPを作成し、Vivado-HLSのコアをAXI4-Streamで接続し、SDKから制御できるようになりたい。 前回、VivadoにカスタムIPをインプリメントし、デザインを生成した。次にSDKを使って制御してみる。 msyksphinz.haten…
前回に、Vivado-HLSで作成した浮動小数点行列積回路をAXI4-Streamに対応させた。今度はVivado側で、作成したIPをDMAに接続して、デザインを作成してみよう。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com 参考にしたのは…
前回行列乗算回路を最適化することで、ソフトウェアと比較して大幅に性能を向上させることに成功した。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com その時に参照していたのが以下の資料だが、そこにはAXI4-DMAを使ったときの方法が書いてある。 h…
Vivado-HLSで行列積演算回路を作成したが、この性能はあまり良いものでは無かった。 msyksphinz.hatenablog.com その後いろいろ調査を行った結果、以下の資料を発見した。 以下の資料は、その名の通り浮動小数点行列積をVivado-HLSで実装したときの最適化ガ…
Vivado-HLSで行列積の回路を設計した場合と、普通にARM Cortex-A9上で動作する行列積のプログラムでどれくらいの速度差になるのか調査してみることにした。 今回使用するのは48×48の行列データで、ころ2つのデータの行列積を計算するものとする。 for (j = 0…
Vivado HLSで高位合成言語での開発を行うにあたり、これまでどうしてもGUIを使う必要があった。 マウスの操作が必要になりどうしても面倒なので、Vivado HLSでの高位言語合成を一気通貫でやってくれるスクリプトを作成した。 といっても、これまでGUIでやっ…
前回は行列積演算の回路を用いて、パイプラインディレクティブの効果を測定した。 次はループアンローリングの効果を測定してみる。Vivado HLSにはUNROLLディレクティブが存在するため、こちらを行列積演算回路のループに適用して、どの程度効果があるのかを…
msyksphinz.hatenablog.com 前回、基本的な演算性能の測定方法を確立した。まずは、PIPELINEディレクティブを挿入することで、どの程度高速化されるか試行してみよう。 とりあえず、前回のパイプライン挿入無しの場合の計測結果が間違えていた。修正済。 パ…
Vivado HLSを使った行列積演算について記事を書いた。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com この場合、データ転送も含めてどの程度時間がかかっているんだ…
Vagrant経由でLinuxにVivadoをインストールする場合は、どうしてもXが必要になるため一度X-Forwardingを実行するか、VirtualBoxのGUIを立ち上げてインストールを実行している。 これは非常に面倒で、VivadoのインストールのためだけにGUIを立ち上げなければ…