aster_ismの工作室

FPGAとかマイコンとか

Vivadoを使ったFlashメモリへの書き込み

開発環境はVivadoにほぼ移行したのに,未だにFlashへの書き込みはiMPACT(LabToolだけインストール)を使っているのが嫌になったので,すべてVivado上から行うための方法について調べた(覚え書).

参考としたのは,UG908 Vivado Design Suite ユーザーガイド プログラムおよびデバッグ *1

  1. Bitstream Settingsで-bin_fileをONにする(書き込みできるのはbin/mcsでbitはできない) f:id:aster_ism:20150426133812p:plain

  2. Generate Bitstreramを行う

  3. Open Targetして,Add Configureate Memory Deviceを選択(Program Deviceをクリックしないと選択できない.書き込む必要はない.もしくはターゲットデバイスで右クリックする)

    f:id:aster_ism:20150426134418p:plain

  4. Flashを選択する.今回のターゲットはBASYS3なのでSpansionのS25FL32を選択.

    f:id:aster_ism:20150426134438p:plain

  5. Configuration fileにbinファイルを選択して,OK

    f:id:aster_ism:20150426134833p:plain

  6. 書き込みが正常に終了すれば完了

  7. Flashが追加されている

    f:id:aster_ism:20150426134408p:plain

  8. ボード上のMODEがQSPIになっていることを確認して,PROGボタンを押す. もしくは,FPGAデバイスを右クリックしてBoot frome Configuration Deviceをクリック.

    f:id:aster_ism:20150426142259p:plain

SDKを使った場合のプログラム込みのbin/mcsファイルの生成(download.bitを変換)

あらかじめSDKで,Program FPGA(ELF file to Initialize in Block RAMはbootloopから実行したいelfファイルに変更しておく)を行いソフトウェア込みのbitファイルを生成して,動作を確認しておく.

Tclコンソールで下記コマンドを実行(SpansionのS25FL32の場合の設定.-interface-sizeFlashに合わせる).

   write_cfgmem -format mcs -interface SPIx1 -size 4 -loadbit "up 0 project_1.sdk/design_1_wrapper_hw_platform_0/download.bit" -file download.mcs

-sizeは,MbitではなくMByteなので8で割った値を指定する.

   Creating config memory files...
   Creating bitstream load up from address 0x00000000
   Loading bitfile project_1.sdk/design_1_wrapper_hw_platform_0/download.bit
   Writing file ./download.mcs
   ===================================
   Configuration Memory information
   ===================================
   Format             MCS
   Size               4M
   Start Address      0x00000000
   End Address        0x003FFFFF

   Addr1       Addr2       Date                    File(s)
   00000000    0021728B    Apr 26 14:57:41 2015    project_1.sdk/design_1_wrapper_hw_platform_0/download.bit

あとは,できたmcsファイルを先ほどと同じようにVivado上で書き込んでFlashから起動すればMicroblazeのコードが実行される.Bitstream Settingsで-bin_fileを指定しないで,このコマンドでbitファイルを変換して指定することもできる.