2009/04/26からのアクセス回数 22012 はじめに †ディジタル・デザイン・テクノロジにLattice XP2が付録として付いてきました。 残念ながら、
ためUrJtagを使ってプログラムを書き込むことにしました。 JTAGケーブルの選定 †UrJtagは、 様々なJTAGケーブル をサポートしています。
しかし、
そこで、USB-Blasterの互換ケーブルを使うことにしました。 私は試していませんが、 世の中にはUSB-Blasterもどきというのもあるみたいです。 UrJtagのインストール †MacPortを使って、UrJtagをインストールします。 ターミナルから以下のコマンドを入力します。 $ sudo port install urjtag これだけで、urjtagのインストールは完了です。ターミナルから使用する場合には、/opt/local/binがPATHにセットする必要があります。ホームディレクトリの.profileに以下の1行を追加してください。 export PATH=/opt/local/bin:/opt/local/sbin:$PATH UrJtagの動作確認 †urjtagが正常にインストールできたかどうか確認します。USB-Blasterは、接続直後は不安定なので、USBに接続してしばらく待ちます。
UrJtagの使い方 †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が登録されていないためです。 BSDLファイルからJTAG情報を抽出 †今回のチップは、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ファイルに保存します。 JTAG情報のセット †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のチェック †最初にIDCODEを出力してみます。 JTAGでの手順は以下の通りです。
を実行した結果は以下の通りです。 jtag> instruction IDCODE jtag> shift ir jtag> shift dr jtag> dr 00000010000010100001000011011101 jtag> drの値にdetectの出力でてた、 Device Id: 00000010000010100001000011011101 (0x00000000020A10DD) の値がセットされていいます。 SAMPL/PRELOADコマンド †次に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コマンド †次に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が 消灯しています) CPLDへの書き込み †UrJtagは、CPLDへの書き込み用にSVFフォーマットをサポートしています。 LatticeのツールでSVFファイルを作成 †それでは、Latticeのツールが生成したプログラムからSVFファイルを生成する には、どのようにすればよいかご説明します。 このツールは、GoogleでLattice jed svf convertで検索し、 http://www.it.lth.se/digp/PDF_files/lattice/lattice_dcd.pdf の中の、Fig. 2-1の図でSVFファイルへの変換をサポートしていることを見つけました。 手順は以下の通りです。
Lattice XP2のBDSL情報 †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が点滅します。 コメント †この記事は、 皆様のご意見、ご希望をお待ちしております。
Tweet |