JTAGでFPGA(MAX10)を書き込んでみる

はじめに

 FPGAの書き込みにはFPGAベンダー製の書き込み用のダウンロードケーブルが必要ですが、お値段が高いのが悩みどころです。書き込みだけであれば市販のJTAGケーブルが利用可能です。書籍(FPGA電子工作スーパーキット)に付属しいるMAX10-FBとFT232HLモジュールを題材に書き込み手順を紹介します。


1.使用する機材とツール

1-1.使用する機材

 FPGAボード MAX10-FB 書籍 :FPGA電子工作スーパーキットの付属品

  書籍にはダウンロードケーブル互換基板(部品無し)が付属します。

  これを使ってもFPGAの書き込みができます。

  注意!! このページ方法でJTAGケーブルを使ってMAX10-FBに書き込みをすると

  出荷時に書き込まれている回路(PICへのダウンロードケーブル互換プログラム書き込み)が

  消去されます。ダウンロードケーブル互換基板の使用予定のある方はご注意ください。

 

 JTAGケーブル  FT232HLモージュール 購入先:秋月電子通商

  USB-シリアル変換モジュールですがJTAGも使えます。普段はUSB-シリアル変換機として使えるので

  1個持っていると重宝します。値段は1200円です。

 

1-2.使用するツール

 Quartus Prime Lite Edition (18.0を使用)

  FPGAの回路設計に使います。インテル社のサイトからダウンロードできます。

  インストール、使用方法はインテル社の情報を参考してください。

 

 UrJTAG フリーソフト

  JTAGの制御ソフトです。フラッシュROMの書き込み機能を使ってMAX10へ書き込みします。

 

1-3.UrJTAGのインストール

 Windows10でUrJTAGのインストール方法を紹介します。

https://sourceforge.net/projects/urjtag/files/urjtag/で"Download Latest Version"をクックして
インストールデータをダウンロードします。管理者権限でインストールデータを実行するとインストールが開始します。

次にUrJTAGの実行に必要なlibusb0.dllを追加します。https://sourceforge.net/projects/libusb-win32/でDownloadをクリックしてダウンロードしたデータを解凍します。解凍データのbin/x86/libusb0_x86.dllをUrJTAGのインストールファルダにコピーしてファイル名をlibusb0.dllに変更します。

 

1-4.BSDLファイルの入手

 UrJTAGのインストール時にはMAX10の情報がありません。MAX10-FBで使用しているデバイス:M08SAE144のBSDLファイルをインテル社のサイトから入手します。

入手した10M08SAE144.bsdを任意のフォルダへ保存します。

 

2.UrJTAGの設定

2-1.FT232HLモジュールとMAX10-FBの接続

 右の図のようにFT232HLモジュールとMAX10-FBを接続します。MAX10-FBの3.3v電源はFT232HLから供給します。電源に余裕がないので、初めからFT232HLの3.3V電源(3V3)とMAX10-FBの3.3V電源を接続するとFT232HLが起動しません。FT232HLにUSBを接続後にMAX10-FBの3.3V電源を接続してください。3.3Vの外部電源が用意できれば、MAX10-FBには外部電源を接続することをお勧めします。

2-2.UrJTAGの起動

 画面の左下のWindowsのスタートアイコンを押してUaJTAGのJTAG Shellをクリックして起動します。

2-3 JTAGケーブル指定と解析

 起動したJTAG Shellでケーブルをcableコマンドで指定します。

jtag> cable ft2232

 FR232HLはFT2232と互換なのでft2232を指定。次にdetectコマンドでJTAGチェーンを解析します。

jtag> detect

 デバイスが見つかってaltera製と表示されますが未知のパーツとなっています。

 

2-4.10M08SAE144のデバイス情報の追加

 MAX10-FBに搭載されている10M08SAE144の情報をUrJTAGへ追加します。bsdlコマンドで1-4でダウンロードしたbsdlファイル(10M8SAE144.bsd)を解析します。

jtag> bsdl dump [パス]10M8SAE144.bsd

 

表示された内容をマウス操作で”signal GND(1)”から最後の行までの表示をコピーしてメモ帳等にペーストします.

情報を追加するためUrJTAGはquitコマンドを実行して終了します。

 

jtag> quit

UrJTAGのインストールファルダ/data/alteraの下にファルダ:10m08sae144を作成してメモ帳の内容を10M08SAE144のファイル名でセーブします.

2-5.他の設定ファイルの作成

 あと二つの設定ファイルを作成します。一つ目はdata/altera/PARTSです。10M08SAE144の情報を追加します。必要な情報は16-bit Part NumberでBSDLファイル(10M8SAE144.bsd)から探します。以下が該当部分の抜粋です。

--10M8SAE144.bsdの抜粋

attribute IDCODE_REGISTER of MAX_10_10M08SAE144 : entity is
  "0000"&               --4-bit Version
  "0011000110000010"&   --16-bit Part Number
  "00001101110"&        --11-bit Manufacturer's Identity
  "1";                  --Mandatory LSB

 

16-bit Part Numberは"0011000110000010"となっています.PARTSの最後の行に 10M08SAE144の情報を以下のように追加します。

--PARTSの内容

# bits 27-12 of the Device Identification Register
0010000010000010 ep1c6q240  EP1C6Q240
0010000010000011 ep1c12   EP1C12
0010000010000100 ep1c20f400  EP1C20F400
0111000100101000 epm7128aetc100  EPM7128AETC100
0111000001100100 epm3064a  EPM3064A
0010000010110010 ep2c8   EP2C8
0011000110000010    10m08sae144  10M08SAE144 #この行を追加

 

二つめのファイルはSTEPPINGSファイルです。UrJTAGインストールファルダ/data/altera/10m08sae144STEPPINGSファイルを追加します.内容は以下になります。

--STEPPINGSの内容

0000 10m08sae144  0

設定ファイルの追加は以上です。

 

2-6.detectの再実行

 UrJTAGを起動して再度cable,detectコマンドを実行します。

jtag> cable ft2232
Couldn't connect to suitable USB device.
Error: Cable connection failed!
jtag> cable ft2232
Connected to libftd2xx driver.
jtag> detect
IR length: 10
Chain length: 1
Device Id: 00000011000110000010000011011101 (0x00000000031820DD)
  Manufacturer: Altera
  Part(0):         10M08SAE144
  Stepping:     0
  Filename:     c:\program files (x86)\urjtag\data/altera/10m08sae144/10m08sae144
こんどはパーツが10M08SAE144と認識されます。

 

3.MAX10への書き込み

3-1.svfの作成

 JTAGケーブルとUrJTAGで書き込むファイルはsvfファイルになります。Quartusのプログラマを使って回路情報の入ったsofファイルをsvfファイルに変換します。

 予めQuartusで書き込む回路を設計しておきます。設計プロジェクトが開いてる状態でプログラマを起動します。書き込むsofファイルが選択されていることを確認して、

File→Create JAM,JBC,SVF or ISC File ...を選択します。

 開いたウィンドでFile naneは任意に指定,

File formatは Serial Vector Format(msvf)を選択してOKをクリックする。設計プロジェクトのファルダにsvfファイルが作成される。

3-2.svfファイルの書き込み

 UrJTAGからsvfコマンドでMAX10へ書き込みを実行します。

svfの後にパスも含めたsvfファイル名を指定します。

jtag> svf c:\svf\max10_fb_led.svf stop progress
Warning svf: unimplemented mode 'ABSENT' for TRST
Parsing   1460/1467 ( 99%)
Scanned device output matched expected TDO values.

jtag>

書き込みには多少時間が掛かり、書き込み中にエラーが発生した場合はエラーメッセージの表示されます。

エラーメッセージがなく、"jtag>"プロンプトが表示されれば書き込みに成功です。