はじめに
FPGAボードをVivadoのHardware Managerと接続したままでなくとも、電源を投入することで書き込んだ回路が動くようにするための備忘録です。
FPGAは揮発性のSRAMを用いているため、JTAGで書き込んだ回路は電源を落とすと消えてしまいます。
そこでボード内の不揮発メモリに回路情報を書き込むことで、電源投入時に回路情報を不揮発メモリから読み出し、書き込んだ回路を動かすことができます。
参考文献
もはやほとんどこの記事のパクリです
https://scrapbox.io/craftmemo/CMOD_A7_(Artix7-35T)_%E3%82%92_QSPI_flash%E3%81%8B%E3%82%89%E3%83%96%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B
Digilent社によるArty A7のリファレンスマニュアル
https://digilent.com/reference/programmable-logic/arty/reference-manual?srsltid=AfmBOorvT8GNlYDh4SFIFGzOqkwjGcnMyln4I0WMFoC-QodvpXfMxhW2
実行環境
Vivado 2025.1 ML edition
Arty A7-100T または Basys3-35T
実行手順
では、実際に不揮発メモリに書き込みを行っていきます。が、正確に書き込まれていないのか設計したRTLが意図通りに動かないのか問題の切り分けを行えるようにするため、設計したRTLをJTAGで書き込み、正確に動作することを確認してからにしましょう
1.出力ファイルの形式を設定する
画面上部のToolsから一番下にある歯車マークSettings...を選択する。
出てきたウィンドウの左側からBitstreamを開き、bin_fileのチェックボックスを有効にしてOKを押す。

2.Bitstreamの設定を行う
まず、Run Synthesisを実行し、実行後のポップアップでOpen Synthesized Designを開く。
もし誤ってポップアップを消去してしまった場合でもVivado上部のFlowsからOpen Synthesized Designを開くことができる。
次に、Vivado上部のToolsからEdit Device Propertiesを開き、以下の項目を設定する。
・General内のEnable Bitstream CompressionをTRUEへ変更
・Configuration内のConfiguration Rate(MHz)を33に変更
・Configuration Modes内のMaster SPIx4にチェックを入れる
以上3つを行ってOKを押してクリックする。



画像の通り設定したのちにCtrl + Sを押して保存する。
出てきたポップアップに対して既存のXDCファイルを選択してOKを押す。(ここではArty_master.xdcを選択している)

保存するとXDCファイルに以下の三行が追加されている。
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 33 [current_design]
set_property CONFIG_MODE SPIx4 [current_design]
Generate Bitstreamを実行する。
3.QSPI Flashの型番を設定する
FPGAボードとパソコンを接続し、Open Hardware Managerを開き、Open targetをクリックしてFPGAボードと接続する。
左上のHardwareからxc7a100t_0(basys3ではxc7a35t_0)を右クリックし、Add Configuration Memory Deviceを選択、Select Configuration Memory Partからs25fl128sxxxxxx0-spi-x1_x2_x4(basys3ではmx25l3273f-spi-x1_x2_x4)を指定する。
4.書き込む
Configuration fileを選択し、プロジェクトディレクトリ/プロジェクト名.runs/impl_1/プロジェクト名.binを選択しOKで書き込む。Hardware Managerを閉じてFPGAボードへの電源供給を切り、再度電源を投入すると書き込んだ回路が動作する。
5.再度書き込みを行う場合
FPGAボードとパソコンを接続し、Open Hardware Manager選択し、Open targetをクリックしてFPGAボードと接続する。
左上のHardwareからs25fl128sxxxxxx0-spi-x1_x2_x4(basys3ではmx25l3273f-spi-x1_x2_x4)を右クリックし、Program Configuration Memory Deviceを選択、プロジェクトディレクトリ/プロジェクト名.runs/impl_1/プロジェクト名.binを選択しOKで書き込む。Hardware Managerを閉じてFPGAボードへの電源供給を切り、再度電源を投入すると書き込んだ回路が動作する。

