SPADI-A Wiki/SPADI-A DAQ マニュアル/ファームウェア/ファームウェアの書き込み方法


ファームウェアの書き込み、ハードウェアのセットアップ方法

ここでは、ファームウェアの書き込み方法について記述する。もともとのドキュメントは RCNP 白鳥氏が書いたものがあり、それを編集しなおしたものである。

AMANEQ ボード本体および HR-TDC メザニンカードへの書き込み

AMANEQ を利用する場合、本体にファームウェアを書き込む必要がある。また、HR-TDC mezzanine (GN-1644-1) ボードを利用する場合は、このボードにもファームウェアを書き込む必要がある。ちなみに、ファームウェアの書き込み作業のことを正式にはファームウェアのダウンロードと呼ぶようであるが、このマニュアルではあまり気にせず、どちらの言葉も使用している。2024年10月現時点では、新規にAMANEQを購入した場合、なにもファームウェアがない状態で納品される模様(今後、なんらかのデフォルトファームウェアが書き込まれて出荷される可能性もある)。AMANEQ、および HR-TDC メザニンには AMD Xilinx の FPGA チップを利用しており、ファームウェアの書き込みで用いるソフトウェアは Vivado を用いる。AMANEQ および HR-TDC メザニンカード用のファームウェアは mcs ファイルと呼ばれる不揮発性のメモリ (電源を切っても記憶しているメモリ) に書き込むものと bit ファイルと呼ばれる揮発性のメモリ (電源を切っても記憶しているメモリ) に書き込むものの 2 種類が存在する。mcs ファイルの書き込みは数分程度かかる一方で、bit ファイルの書き込みは数十秒程度で終わる。そのため、テスト的にファームウェアの動作検証をしたい場合、もしくは一時的に特定のファームウェアが必要な場合 (例えばジッタークリーナーの設定の際は LR-TDC のファームウェアが必要) に bit ファイルを用いる。ただ、bit ファイルは電源を切ると書き込んだ内容が消えてしまうため、パワーサイクル (電源を落としてから再投入すること) を繰り返しても同じファームウェアを用いたい場合、mcs ファイルを不揮発性メモリに書き込む。新規に購入したボードのセットアップをする場合、よくやる手としては、まず bit ファイルでいろいろと設定したのち、実験の本番で使う mcs ファイルを書き込む。

mcs ファイル、もしくは bit ファイルは AMANEQ 本体、または HR-TDC メザニンカードについている JTAG 経由で書き込みを行うことができる。この書き込み方法に加えて、AMANEQ 本体への mcs ファイルの書き込みは、ネットワーク経由で行うこともできる。ただし、AMANEQ 本体にすでに何らかのファームウェアがすでに書き込まれていることが前提である。HR-TDCメザニンカードにはネットワーク経由でファームウェアを書き込むことはできない。また、bit ファイルの書き込みは JTAG 経由でしかできない。

このページでは準備として、書き込みに必要な Vivado と ダウンロードケーブルについて述べたのち、以下の書き込み方法を順番に説明する。

Vivado

2024年9月現在、Vivado 2024.1 というバージョンが最新であるが、安定して動くことが分かっている Vivado 2023.2 を用いることが多い。ただ、論理合成、配置配線などを行うわけではなく、単に書き込むだけなので、あまりバージョンは気にしなくてよいと思われる。

Download cable

JTAG 経由で firmware の ダウンロードを行う場合、JTAG と Vivado がインストールされているコンピュータをケーブルでつなぐ。ケーブルはいくつか種類があるが、代表的なものとして、AMD Xilinx 純正の USB download cable と DIGILENT の programming cable がある。DIGILENT の方が安くてコンパクトなのでおすすめである。2024年10月現在、Xilinx の cable が 270 ドル、DIGILENT の cable が 59 ドルである。

mcs ファイルを JTAG 経由で AMANEQ 本体に書き込む

  1. まず、mcs ファイルの準備を行う。例として、LR-TDC firmware を AMANEQ に書き込む。mcs ファイルは
    https://github.com/AMANEQ-official/StrLrTdc
    のリポジトリの mcs ディレクトリ内の amaneq-4-strlrtdc-v2.5.mcs という RAW ファイルである。これをダウンロードする。ダウンロード方法は、amaneq-4-strlrtdc-v2.5.mcs をクリックして、さらに Download raw file というボタンをクリックすればよい。ここで、amaneq-4-* はAMANEQ v4 用の mcs ファイルであることを表す。AMANEQ v1 に書き込みを行う場合は、amaneq-1-* という mcs ファイルを選ぶ。v2.5 の部分はファームウェアのバージョン。(以下のキャプチャー画像では Vivado 2019.1のときの画像を使用。ただ、Vivado 2023.2 とほとんど同じ。また、MCSファイル名: amaneq_skeleton_wosdram.mcs をサンプルとして用いている。ちなみに、Vivado 2019.1 のときは MCS ファイルとセットで PRM ファイルというファイルも必要だったが、Vivado 2023.2 のような新しい Vivado では必要なくなったようだ。)
  2. PCとAMANEQのJTAGをXilinxのダウンロードケーブルで繋ぎ、AMANEQの電源をONする。電源ONはAC/DCアダプターを挿すのみでよい。2024 年9月に購入した AMANEQ v4 では、初回電源投入時はLEDも何も点かない状態 (今後、場合によってはデフォルトファームウェアが入った状態で納品される可能性もあり、そのときはなんらかのLEDが点灯するかもしれない)。
    amaneq_fw_writting_01.png
  3. Vivado を立ち上げ、Tasks の Open Hardware Manager を click
    vivado_bit_stream_01.png
  4. Open Target > Auto Detect を click
    vivado_bit_stream_02.png
  5. しばらくして、以下の画面のように”Hardware”が表示される。Xilinxのダウンロードケーブルを使っている場合は、ランプがグリーンになる。繋がらない場合はエラーメッセージが出る。(繋がらない時はケーブルがちゃんとささってない場合やUSBダウンロードケーブルが認識されていないなど)
    vivado_bit_stream_03.png
    vivado_bit_stream_04.png
  6. ”Hardware”内の 「xc7k160t_0」上で右クリックし、”Add Configuration Memory Device”を選択。
    vivado_bit_stream_05.png
  7. ウィンドウがポップアップし、ここで Manufacturer 「Cypress/Spansion」、Type 「All」、Density (Mb) 「128」、Width 「x1_x2_x4」 を選択すると、Name 「s25fl128sxxxxxx0-spi-x1_x2_x4」, Alias 「s25fl127s-spi-x1_x2_x4」 が出てくるのでこれを選択し、OK ボタンを押す。Do you want to program the configuration memory device now? と聞かれるので、OKボタンを click。
    amaneq_fw_writting_08.png
    ちなみに、Vivado 2024.2 では、この Memory Device の Manufacturer が Spansion から Infineon に変わっているので注意(以下の画像参照)。
    IMG_1234.JPGIMG_1235.JPG
  8. Configuration fileとして使用する MCS ファイル (amaneq-4-strlrtdc-v2.5.mcs) を選択する。ちなみに、Vivado 2019.1 の場合、PRMファイル(amaneq-4-strlrtdc-v2.5.prm) も選択する必要があるが、Vivado 2023.2では prm の選択は必要ない。 (上記画像は Vivado 2019.1 の場合で、prmファイルを選択するようになっているが、Vivado 2023.2 では、PRM file の項目がグレイアウトしている) 。その他の設定はデフォルトのままでよい。"OK" を押すと firmware ファイルのダウンロードが開始される。
    amaneq_fw_writting_10.png
  9. ダウンロード作業中の図。図のようなインジケーター表示される。エラー時は赤い文字でエラーメッセージが出る。(SPIフラッシュメモリの選択ミスなど)。問題が無ければ、だいたい5分で完了する。
    amaneq_fw_writting_11.png
    amaneq_fw_writting_12.png
  10. ダウンロードが成功すると図の表示が出る。
    amaneq_fw_writting_13.png
  11. HARDWARE MANAGER の青いバーの X ボタンを click すると AMANEQ との接続が切れる。これで download cable を抜き、AMANEQ の電源を OFF する。
  12. これで firmware のサウンロード作業は完了。電源 ON を再度投入すると、LED の DONE が赤く点灯。LED の点灯の仕方はファームウェアバージョンによって異なるので、上記写真と異なる場合もある。mcs ファイルは不揮発性メモリに書き込まれるが、この内容が読み込まれるのは、電源投入時である。そのため、mcs ファイルを書き込んだ時点では、hul-common-lib のバイナリを用いてファームウェアバージョンなどを読んでも、更新されない。電源を再投入して、バージョンを確認すると、更新されているのがわかる。
  13. DIP の最初のビット(DIP-1)を "0" にするとデフォルト IP が設定される。LR-TDC の場合、ネットワークプロセッサーとしてSiTCP を用いるため、デフォルトIP は 192.168.10.16 となる。一方、HR-TDC の場合は SiTCP-XG を用いるため、デフォルトIP は 192.168.10.10 となる。ping をこれらの IP に飛ばすと、通信できることがわかる。ちなみに、SFP1 の光モジュールスロットに指すモジュールが異なるので注意する。LR-TDC の場合、SFP (1 Gbps) の光モジュールを挿入し、HR-TDC の場合、 SFP+ (10 Gbps) の光モジュールを挿入する。

bit ファイルを JTAG 経由で AMANEQ 本体に書き込む

bit stream ファイルを書き込むための方法を記述する。ここでは、AMANEQ の skeleton firmware を書き込むことを例にする。skeleton firmware の bit stream ファイルは以下のリポジトリの bit ディレクトリから入手。

  1. まず、Xilinx の FPGA ダウンロードケーブルで AMANEQ 本体の JTAG とコンピュータの USB コネクタを繫ぐ。
  2. その後、AMANEQ に電源を投入する。AMANEQ の電源は直流安定化電源で 35 V をかけるか、24V - 1A 程度の AC - DC アダプター (外径 5.5 mm - 内径 2.1 mm DC ジャック、センタープラス) を繋ぐ。直流安定化電源で 35 V の電圧をかける場合、徐々に電圧をあげることはせず、一気に 35 V をかけないとヒューズが飛ぶので注意する。
  3. Vivado を立ち上げ、Tasks の Open Hardware Manager を click
    vivado_bit_stream_01.png
  4. Open Target > Auto Detect を click
    vivado_bit_stream_02.png
  5. しばらくして、以下の画面になる
    vivado_bit_stream_03.png
    vivado_bit_stream_04.png
  6. xc7k169t_0を右clickし、Program Device... を click 選択
    vivado_bit_stream_05.png
  7. ここで、Bitstream File: の […] を click
  8. 以下の画面になるので、amaneq-skeleton-v*.*.bit を download した directory に行き、amaneq-skeleton-v*.*.bitを選択し、OK button を click
    vivado_bit_stream_06.png
  9. これで Program ボタンをクリック
    vivado_bit_stream_07.png
  10. 数秒で書き込み (ダウンロード) 完了。
    vivado_bit_stream_08.png
  11. Skeleton firmware を書き込んだ場合、LED は 以下の写真のように、
    jitter_cleaner_04.jpg
    DONE と LED2 が点灯する。AMANEQ User Guide の Skeleton の項目を参照すると LED2 の点灯は "MMCMのロック状態です。点灯していればファームウェアは正常に動作しています。"とのこと。
  12. Vivado の Hardware Manager を閉じて、download cable を抜く。ちなみに、Hardware Manager を閉じずに、download cable を抜くと、エラーメッセージが出る(ただ、エラーメッセージが出ても問題ない?)。

mcs ファイルを JTAG 経由で HR-TDC メザニンカードに書き込む

HR-TDC メザニンカードへの mcs ファイル書き込み方法は、おおむね AMANEQ board の書き込み方法と同様でありそれを踏襲する。ただ、ダウンロードする mcs ファイルが異なる。さらに、mcs ファイルを書き込む先のメモリデバイスも AMANEQ board 本体と異なるので注意する。

  1. まず、HR-TDC firmware を書き込んだ AMANEQ board に HR-TDC mezzanine を載せ、AMANEQ board 本体に電源を投入する。
  2. mcs ファイルの準備を行う。mcs ファイルは以下のリポジトリ
    https://github.com/AMANEQ-official/MznStrHrTdc/
    の mcs ディレクトリからダウンロードする。ただ、最新版の firmware は書き込む memory device の種類によって2つに分かれている。
    • mzn-strhrtdc-v2.7-mt25qu256.mcs
    • mzn-strhrtdc-v2.7-n25q128.mcs
      の 2 つがある。最新の HR-TDC Mezzanine の場合は mzn-strhrtdc-v2.7-mt25qu256.mcs を利用する。古めの HR-TDC Mezzanine 持っていて、それを利用したい場合、mzn-strhrtdc-v2.7-n25q128.mcs が必要になる。どちらの mcs ファイルを書いたら良いかは、納品時に同梱されたメモでわかるようだ。このメモがない場合は、片方のmcs ファイルを書いてみて、成功したら問題ないし、Errorが生じた場合、そのerror message から書き込むべき memory device の名前を知ることができる。
  3. HR-TDC mezzanine の JTAG connector に download cable を挿し、コンピュータと繋ぐ
  4. AMANEQ board 本体への mcs ファイル書き込み方法を踏襲し、Vivado を立ち上げ、"Hardware" 内の 「xc7k160t_0」上で右クリックし、”Add Configuration Memory Device”を選択。ウィンドウがポップアップし、ここで Manufacturer 「Micron」、Type 「All」、Density (Mb) 「256」、Width 「x1_x2_x4」 を選択すると、Name 「mt25qu256-spi-x1_x2_x4」, Alias 「n25q256-1.8v-spi-x1_x2_x4」が出てくるのでこれを選択し、OK ボタンを押す。もしくは、 Search window で mt25qu256 を検索しても良い。Do you want to program the configuration memory device now? と聞かれるので、OKボタンを押す。
  5. Configuration file として使用する MCS ファイル(.mcs) を選択する。新しい HR-TDC Mezzanine の場合は、mzn-strhrtdc-v2.7-mt25qu256.mcs を選択し、古めの HR-TDC Mezzanine の場合は mzn-strhrtdc-v2.7-n25q128.mcs を選択する。バージョンの不整合がある場合、error message がでるので、その message を見て正しい mcs ファイルを選択する。例えば、間違った memory device を選択している場合、以下のような error message が出る。
    hr_tdc_mezzanine.png
    ERROR: [Labtools 27-3291] Flash Programming Unsuccessful. Part Select s25fl128sxxxxxx0, but part mt25qu256 detected.
    この場合、mt25qu256 という memory device を選択すれば良いことがわかる。
  6. mcs ファイルを書き込んだら、AMANEQ board 本体の場合の手順を踏襲する。

bit ファイルを JTAG 経由で HR-TDC メザニンカードに書き込む

基本的に AMANEQ board 本体における bit stream ファイルの書き込み手順を踏襲する。

  1. まず、bit stream file の準備を行う。bit file は以下のリポジトリ
    https://github.com/AMANEQ-official/MznStrHrTdc/
    の bit ディレクトリからダウンロードする。mcs ファイルは 2 種類用意されているが、bit ファイルの場合、1 種類 (2025年3月24日時点で mzn-strhrtdc-v2.7.bit) がある。

mcs ファイルをネットワーク経由で AMANEQ 本体に書き込む

  1. まず、プログラムを書き込むための hul-common-lib をインストールする。インストール方法は、以下のページのインストールのインストラクションを参照のこと。
    https://github.com/spadi-alliance/hul-common-lib
    この hul-common-lib をインストールすると、install/bin ディレクトリができ、いくつかの実行体ができる。ここでは flash_memory_programmer というプログラムを用いる。
  2. mcs ファイルの準備を行う。例として、LR-TDC firmware を AMANEQ に書き込む。mcs ファイルは以下のリポジトリ
    https://github.com/AMANEQ-official/StrLrTdc/
    の mcs ディレクトリの amaneq-4-strlrtdc-v2.5.mcs という RAW ファイルをダウンロードする。ダウンロード方法は、このページの amaneq-4-strlrtdc-v2.5.mcs をクリックして、さらに Download raw file というボタンをクリックすればよい。ここで、amaneq-4-* はAMANEQ v4 用の mcs ファイルであることを表す。AMANEQ v1 に書き込みを行う場合は、amaneq-1-* という mcs ファイルを選ぶ。v2.5 の部分はファームウェアのバージョン。
  3. すでになんらかの firmware が書き込まれた AMANEQ をネットワークに繋いで、ping が通ることを確認。
  4. flash_memory_programmer を用いて mcs ファイルを書き込む。具体的には、このディレクトリに移動してから、以下のようなコマンドを打つ。<path to mcs file directory>/amaneq-4-strlrtdc-v2.5.mcs
    cd <hul-common-lib>/install/bin
    ./flash_memory_programmer 192.168.10.16 <path to mcs file directory>/amaneq-4-strlrtdc-v2.5.mcs
  5. これで書き込みが完了。AMANEQ の電源を切って、再投入する。
  6. 電源 ON にて LED が赤く点灯するはず。LED の点灯の仕方はファームウェアバージョンによって異なるので、上記写真と異なる場合もある。mcs ファイルは不揮発性メモリに書き込まれるが、この内容が読み込まれるのは、電源投入時である。そのため、mcs ファイルを書き込んだ時点では、hul-common-lib のバイナリを用いてファームウェアバージョンなどを読んでも、更新されない。電源を再投入して、バージョンを確認すると、更新されているのがわかる。
  7. DIP の最初のビット(DIP-1)を "0" にするとデフォルト IP が設定される。LR-TDC の場合、ネットワークプロセッサーとしてSiTCP を用いるため、デフォルトIP は 192.168.10.16 となる。一方、HR-TDC の場合は SiTCP-XG を用いるため、デフォルトIP は 192.168.10.10 となる。ping をこれらの IP に飛ばすと、通信できることがわかる。ちなみに、LR-TDC を書き込まれていた状態から HR-TDC のファームウェアを入れた場合、SFP1 の光モジュールスロットの光モジュールはSFP光モジュールから SFP+ の光モジュールに差し替える必要がある。これは、LR-TDC の場合、SFP (1 Gbps) の光モジュールに対応し、HR-TDC の場合、 SFP+ (10 Gbps) の光モジュールに対応することによる。

リンク

本稿執筆者

2024/10/18 小林 信之 (大阪大学RCNP)