2009/04/26からのアクセス回数 21463
ディジタル・デザイン・テクノロジにLattice XP2が付録として付いてきました。
残念ながら、
ためUrJtagを使ってプログラムを書き込むことにしました。
UrJtagは、 様々なJTAGケーブル をサポートしています。
しかし、
そこで、USB-Blasterの互換ケーブルを使うことにしました。 私は試していませんが、 世の中にはUSB-Blasterもどきというのもあるみたいです。
MacPortを使って、UrJtagをインストールします。 ターミナルから以下のコマンドを入力します。
$ sudo port install urjtag
これだけで、urjtagのインストールは完了です。ターミナルから使用する場合には、/opt/local/binがPATHにセットする必要があります。ホームディレクトリの.profileに以下の1行を追加してください。
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
urjtagが正常にインストールできたかどうか確認します。USB-Blasterは、接続直後は不安定なので、USBに接続してしばらく待ちます。
$ jtag UrJTAG 0.9 #1359 Copyright (C) 2002, 2003 ETC s.r.o. Copyright (C) 2007, 2008 Kolja Waschk and the respective authors UrJTAG is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. There is absolutely no warranty for UrJTAG. WARNING: UrJTAG may damage your hardware! Type "quit" to exit, "help" for help. jtag> cable UsbBlaster Connected to libftdi driver. jtag>のようにConnected to libftdi driver.が表示されたら、urjtagがUsbBlasterを正しく 認識できています。
urjtagの基本的な使い方を、トラ技2006年4月号の付録、ALTERAのCPLD Max II で調べてみます。
これが、MAX IIとHDL-CQ1の実験用ボードです。
接続しているチップを調べるコマンドがdetectです。 UrJtagのdetectを実行します。
jtag> detect IR length: 10 Chain length: 1 Device Id: 00000010000010100001000011011101 (0x00000000020A10DD) Manufacturer: Altera Unknown part! chain.c(133) Part 0 without active instruction chain.c(184) Part 0 without active instruction chain.c(133) Part 0 without active instruction jtag>
メーカーがAlteraであることは認識しているようですが、チップはUnknown part!と 出力されます。
これは、UrJtagのデーターベースにMAX IIが登録されていないためです。
今回のチップは、Altera EPM240T100です。
Googleで、EPM240T100 BSDLで検索して、EPM240T100のBSDLファイルをダウンロードします。 私は、ここからEPM240T100 のBSDLファイルをダウンロードしました。
BSDLファイルには、EPM240T100のチップ情報が定義されています。
次に、ダウンロードしたEPM240T100.BSD.txtをbsdlコマンドを使ってJTAG情報に変換します。
$ jtag jtag> bsdl dump EPM240T100.BSD.txt signal GND(1) signal GND(2) signal GND(3) signal GND(4) signal GND(5) 途中省略 bit 236 O ? IO27 235 1 Z bit 237 I ? IO26 bit 238 C 1 * bit 239 O ? IO26 238 1 Z jtag>
dumpコマンドの結果をコピーし、epm240ファイルに保存します。
UrJtagのJTAG情報は、インストール先のxxxx/share/urjtag/以下に保存されています。 MacPortでインストールしたUrJtagの場合、/opt/local/share/urjtagになります。
JTAG情報は、製造会社名/型名/品番名のような階層構造になっており、MAX IIの情報は
/opt/local/share/urjtag/altera/epm240/epm240
に置くことにします。
このディレクトリは管理者権限でないとアクセスできないので、
$ sudo mkdir -p /opt/local/share/urjtag/altera/epm240/ $ sudo cp -p epm240 /opt/local/share/urjtag/altera/epm240/
次に、/opt/local/share/urjtag/altera/のPART情報にepm240の型情報をセットします。
BSDLに
attribute IDCODE_REGISTER of EPM240T100 : entity is "0000"& --4-bit Version "0010000010100001"& --16-bit Part Number (hex 20A1) "00001101110"& --11-bit Manufacturer's Identity "1"; --Mandatory LSB
と定義されていますので、0010000010100001がパート番号になります。
PARTSに以下の1行を追加します。
0010000010100001 epm240 EPM240
次に、/opt/local/share/urjtag/altera/STEPPINGSにバージョン番号を登録します。
0000 epm240 0
これで、EPM240が正しく認識できるか調べてみましょう。
$ jtag jtag > cable UsbBlaster Connected to libftdi driver. jtag> detect IR length: 10 Chain length: 1 Device Id: 00000010000010100001000011011101 (0x00000000020A10DD) Manufacturer: Altera Part(0): EPM240 Stepping: 0 Filename: /opt/local/share/urjtag/altera/epm240/epm240 jtag>
今度は、EPM240として認識されました。これで完了です!
先にEPM240が認識された状態から、バウンダリスキャンを実行します。
最初にIDCODEを出力してみます。
JTAGでの手順は以下の通りです。
を実行した結果は以下の通りです。
jtag> instruction IDCODE jtag> shift ir jtag> shift dr jtag> dr 00000010000010100001000011011101 jtag>
drの値にdetectの出力でてた、
Device Id: 00000010000010100001000011011101 (0x00000000020A10DD)
の値がセットされていいます。
次にSAMPL/PRELOADコマンドを使って各ピンの状態を出力します。
jtag> instruction SAMPLE/PRELOAD jtag> shift ir jtag> shift dr jtag> dr 001001001001001001001001001001 001001001001001001001001001001 001001001001001001001001001001 001001001001001001001001001001 001001001001001001001001001001 001001001001001001001001001001 001001001101001001001001001001 001001001001001001001001001001 jtag>
見やすいようにdrの出力を30ビット単位で区切ってあります。 MAX IIは、IOピンが80ピンで、各ピンの情報は3つのセルで 管理されています。 一番右下の値がLSBの値です。
ほとんどが001のパターンに対して
だけ101となっています。これは、右下から数えて17ピン目の情報です。 EPM240T100.BSDファイルをみると
--BSC group 16 for I/O pin 1 "48 (BC_4, IO1, input, X)," & "49 (BC_1, *, control, 1)," & "50 (BC_1, IO1, output3, X, 49, 1, Z)," &
とあり、ピン番号1番の情報であることが分かります。
MAX IIに書き込まれているプログラムは、1番ピンに1を出力し、LEDを点灯させるサンプルプログラム なので、その値を正しくスキャンできていることが分かります。
次にEXTESTコマンドを使ってピンの出力を変えてみます。 HDL-CQ1ボードのLED7は、EPM240の37ピンです。 EPM240T100.BSDファイルをみると、
--BSC group 70 for I/O pin 37 "210 (BC_4, IO37, input, X)," & "211 (BC_1, *, control, 1)," & "212 (BC_1, IO37, output3, X, 211, 1, Z)," &
とあり、ちょうどdrの出力の上から10ピン目になります。 この値を001から101に変更して、出力値として1を送るとLEDは消灯するはずです。
jtag> instruction EXTEST jtag> shift ir jtag> dr 001001001001001001001001001101 001001001001001001001110001001 001001001001001001001001001001 001001001001001001001001001001 001001001001001001001001001001 001001001001001001001001001001 001001001101001001001001001001 001001001001001001001001001001 001001001001001001001001001101 001001001001001001001110001001 001001001001001001001001001001 001001001001001001001001001001 001001001001001001001001001001 001001001001001001001001001001 001001001101001001001001001001 001001001001001001001001001001 jtag> shift dr jtag>
(ビット列は、10ピン単位に改行してあります)
すると予想通り、LED7が消灯します。 (中央の緑のLEDが3個だけ点灯しており、一番下のLEDが 消灯しています)
UrJtagは、CPLDへの書き込み用にSVFフォーマットをサポートしています。
それでは、Latticeのツールが生成したプログラムからSVFファイルを生成する には、どのようにすればよいかご説明します。
このツールは、GoogleでLattice jed svf convertで検索し、
http://www.it.lth.se/digp/PDF_files/lattice/lattice_dcd.pdf
の中の、Fig. 2-1の図でSVFファイルへの変換をサポートしていることを見つけました。
手順は以下の通りです。
MAX IIと同様にLattice XP2のBSDLを取得し、JTAGファイルに変換します。
以下のファイルを参照してください。
最後に、SVFファイルをLattice XP2に書き込みます。
jtag> cable UsbBlaster Connected to libftdi driver. jtag> detect IR length: 8 Chain length: 1 Device Id: 00000001001010011001000001000011 (0x0000000001299043) Manufacturer: Lattice Semiconductors Part(0): lfxp2-5e-tqfp144 Stepping: 0 Filename: /opt/local/share/urjtag/lattice/lfxp2-5e-tqfp144/lfxp2-5e-tqfp144 jtag> svf hdl_sample.svf 時間がかかりますが、そのまま待ってください jtag> instruction BYPASS jtag> shift ir jtag> quit
これで、Lattice XP2をリセットすると、DL3の緑のLEDが点滅します。
この記事は、
皆様のご意見、ご希望をお待ちしております。