« 2009年3月 | トップページ | 2009年5月 »

2009.04.30

ザイリンクスのパートナーになりました!

夢が叶って、XILINXのデザインハウスパートナーになることができました。

XILINXのトップページ(http://japan.xilinx.com/)にある「デザインハウスパートナー」をクリックしていただくと、(ログインの認証を経た後)、デザインハウスパートナーの一覧を見ることができます。

Designhousepartner_1

その中に特殊電子回路株式会社がいます。

弊社の紹介文は、「特殊電子回路株式会社は、各種組み込み電子回路とその制御用ソフトウェアの設計/開発を行っており、とりわけ JTAG に関する分野を得意としています。」
としました。本当は回路設計とFPGA全般をやっていますが、それでは他の多くの会社さんと同じなので、JTAGに特化していることをアピールしてみました。

先日、XILINX Inc.を訪問し、いろいろお話させていただきMITOUJTAGのデモなどを披露させていただいてきたところです。晴れてパートナーになれたことで、MITOUJTAGのXILINX FPGAへの対応に、より磨きをかけていきたいと思います。

| | コメント (0)

2009.04.28

MITOUJTAGサポート掲示板開設!

MITOUJTAGサポート掲示板を開設しました。

http://www.tokudenkairo.co.jp/jtag/bbs/wforum.cgi

この掲示板は、MITOUJTAGをご購入いただいた方や、MITOUJTAG体験版をご利用の方、もしくは、これから購入しようと検討されている方や興味をお持ちの方々が安心してMITOUJTAGをご利用いただけるように、ご質問やご意見を気軽に投稿できる掲示板をと思って立ち上げたものです。

いただいた貴重なご意見は、MITOUJTAG開発者(つまり私)が3営業時間以内を目標として回答するつもりです。

MITOUJTAGの操作方法や機能に関するご不明な点はもちろん、うまく動かなかった点、ご意見・ご要望など、どのような些細なことでも、どしどしお問い合わせください。

もちろん、製品購入前のご相談なども承ります。
製品版、体験版を問わずお気軽にご利用ください。

なお、公開したくないご質問については従来どおりご意見・ご要望フォーム(http://www.tokudenkairo.co.jp/jtag/request.html)や、JTAGサポート係へのメールでのご質問も引き続きご利用いただけますので、あわせてご利用ください。

それでは、よろしくお願いします。

| | コメント (1)

2009.04.20

テクノフロンティア2009・ボードコンピュータ展に出展しました

先週は、テクノフロンティア2009・ボードコンピュータ展に出展しました。
多くの皆様のご来場、誠にありがとうございました。

当社のブースは、下の写真のような感じで、MITOUJTAGとPCI Expressボードを展示しておりました。
Technofrontier2009

今回、PCI Expressボードのポスターをつくり横の壁に貼っていました。
なかなかインパクトのあるポスターに仕上がったと思います。
Pcie

FPGAの動作がパソコン上で見えたり、論理合成せずにFPGAを動かせることについて、たくさんの驚きの声をいただきました。ご来場、本当にありがとうございました。

また、展示会では多くのお客様にMITOUJTAG Pro体験版CD-ROMをお渡ししました。お渡しした体験版は、MITOUJTAGサービスパックのページからパッチをダウンロードしていただくと、最新版のVersion2.04eにバージョンアップできます。
どうぞ、最新のバージョンの状態にしてからご利用ください。

次の展示会は来月の26日ごろに行われるIPAX2009を予定しています。場所は、たぶん東京ドームシティではないかと思います。それでは来月の展示会でもお待ちしております。

| | コメント (0)

2009.04.14

玄箱ProのPCI Expressに自作拡張機器をつなぐ

Debian化した玄箱ProのPCI Expressに、特電PCI Expressボードをつないで、プログラムを書いて制御することができました。

玄箱Proの正面蓋を開け、特電PCI Expressボードを挿しこみます。
一昨年挑戦
した時は、XILINXのPCI Expressスタータキットを使っていましたが、基板サイズが大きかったため筐体のプラスチックを外さないとだめでした。今年は特電PCI Expressボードなので、筐体を外さなくてもよく、見た目もスマートになりました。
玄箱ProのPCI Expressに自作機器をつなぐ

拡張ボード上のFPGAには、PCIeサポートページにあるPCI Express GPIOのサンプルデザインを論理合成して出来あがったBitStreamを入れておきます。

そして、玄箱Proを起動します。

起動中に次のようなメッセージが出ているのを確認します。


CPU Interface
-------------
SDRAM_CS0 ....base 00000000, size 128MB
SDRAM_CS1 ....disable
SDRAM_CS2 ....disable
SDRAM_CS3 ....disable
PEX0_MEM ....base e0000000, size 128MB
PEX0_IO ....base f2000000, size 1MB
PCI0_MEM ....base e8000000, size 128MB
PCI0_IO ....base f2100000, size 1MB

このメッセージは、PCI Expressには最大で128Mバイトのメモリ空間を割り当てられるよと解釈できます。GPIOサンプルは64kバイトと256バイトのメモリ空間を要求するので、割り当て可能でしょう。

起動したら、早速、lspciコマンドでコンフィグレジスタを見てみます。


kurobox:/home/naitou# lspci -vxxx
00:01.0 DPIO module: Unknown device 5678:1234 (rev 01)
Subsystem: Unknown device 5678:1234
Flags: bus master, fast devsel, latency 0, IRQ 11
Memory at e0010000 (32-bit, non-prefetchable) [size=256]
Memory at e0000000 (32-bit, non-prefetchable) [size=64K]
Capabilities: [60] Message Signalled Interrupts:
Mask- 64bit- Queue=0/0 Enable-
Capabilities: [70] Power Management version 3
Capabilities: [80] Express Endpoint IRQ 0
Capabilities: [100] Unknown (22136)
00: 78 56 34 12 46 01 10 00 01 00 00 11 00 00 00 00
10: 00 00 01 e0 00 00 00 e0 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 78 56 34 12
30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 01 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 05 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 01 80 03 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 10 00 01 00 05 00 00 00 00 20 00 00 11 04 00 00
90: 00 00 11 10 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

コンフィグレジスタは設計値どおりです。認識には問題ないようです。

PCI Expressカードが認識されたので、自作のプログラムを作って制御したいところですが、どうやら玄箱用のPCI Express制御プログラムを作るには、ちゃんとしたLinuxのデバイスドライバを作る必要はなさそうです。
Linuxでは、/dev/memというスペシャルファイルを経由して、メモリ空間の任意の物理アドレスにアクセスできるからです。

この方法を使うには、まずメモリ空間がどこに割り当てられたかを知る必要があります。そのためには、
cat /proc/iomemと打ちます。


kurobox:/home/naitou# cat /proc/iomem
00000000-07ffffff : System RAM
00025000-00372a5f : Kernel text
00374000-003eb333 : Kernel data
e0000000-e7ffffff : PCI Memory Primary
e0000000-e000ffff : 0000:00:01.0
e0010000-e00100ff : 0000:00:01.0
e8000000-efffffff : PCI Memory Primary

どうやら、PCI Expressの拡張ボードは、0xe0010000~の256バイトと、0xe0000000からの65536バイトに割り当てられたようです。おそらく前者がBAR0空間でしょう。

つまり、物理メモリ空間の0xe0010000にアクセスすれば、PCI expressのボード上のFPGA内に作ったBAR0空間のレジスタに指令が伝わるはずです。

ところが、Linuxのメモリ空間は仮想メモリ空間なので、*(unsigned long *)0xe0010000とやってもアクセスできません。mmapという関数を使ってマップしてやる必要があります。プログラムは次のようになりました。


int main()
{
unsigned char buff[256];
memset(buff,0,256);
int fd = open("/dev/mem",O_RDWR);
if(fd < 0) printf("can not open /dev/mem\n");
unsigned long *mm = mmap(0,0x100,PROT_READ
| PROT_WRITE,MAP_SHARED,fd,0xe0010000);
if(mm != MAP_FAILED)
{
*mm = 0x00030055;
sleep(1);
*mm = 0x000300AA;
sleep(1);
*mm = 0x00030055;
sleep(1);
*mm = 0x000300AA;
sleep(1);
}
close(fd);
}

このプログラムは、まず/dev/memというファイルを開きます。そして、mmap関数を使って0xe0010000からの0x100バイトを仮想アドレス空間に割り当てます。割り当てられた仮想アドレスは、mmというポインタを通じてアクセスできるようになります。
以後、*mmとやれば、物理メモリの0xe0010000番地を読み書きできるというしくみです。
(そういえば、Windowsのデバイスドライバでも同じような関数がありました。根底の部分では似ているのですね)

Linuxの場合、root権限さえあれば本格的なデバイスドライバを書かなくても、ユーザモードのプログラムでPCI Expressに簡単にアクセスできることがわかりました。この場合、ベンダIDもデバイスIDも不要です。どの物理アドレスに割り当てられたかということさえわかればよいようです。

玄箱ProのPCI Expressに自作機器をつなぐ玄箱ProのPCI Expressに自作機器をつなぐ

どこまで高速にできるか、と試してみたくなり、
memcpy(mm,buff,256);
とやればバースト転送ができるかと思ったのですが、そこまで賢くは作られていませんでした。
JTAGロジックアナライザでPIPEの波形を観察したところ、1ワード(4バイト)の転送が64回発行されているのが確認されました。
Kuropro_4

memcpyを使う限りでは、玄箱→FPGA方向へは4MBytes/sec程度、FPGA→玄箱方向は3.2MBytes/sec程度の転送速度でした。動作速度を向上させるには、combined writeや、DMA readを発行させるようにしたほうがよいのでしょう。それには、ちゃんとしたデバイスドライバを作らないといけなさそうです。玄箱ProはARM9なので、combined writeみたいなのがあるかどうかはわかりません。DMAを使えば、FPGA→玄箱方向の転送は190MByesくらい出せるのではないかと思います。

しかし、デバドラ不要の簡単なプログラムでもそこそこの速度が安定して出せるのはPCI Expressの魅力です。USBと違って反応速度が速い(1000倍違う)のも大きな魅力です。

さて、今回使った特電PCI Express IPコアとGPIOサンプルは、あわせてXC3S1200Eの17%くらいのリソースしか使用しません。このボードは120万ゲートのFPGAを使っているので、単純に考えれば残りの100万ゲートほどをユーザが自由に使える計算になります。

『ネットワーク経由で制御されるスタンドアローンのコンピュータに、PCI Express接続のFPGAがつながっていて、100万ゲート相当の回路が自由にカスタマイズできる』というのも、夢が広がって面白いのではないでしょうか。
アイデア次第でいろんなことに応用できそうです。

| | コメント (2)

2009.04.13

ボードコンピュータ展に出展します

平成21年4月15日(水)から17日(金)にかけて、幕張メッセで行われる展示会「テクノフロンティア2009 ボードコンピュータ展」に出展します。特定非営利活動法人FPGAコンソーシアムの中での共同出展です。
場所は、幕張メッセ HALL6 ブースN0.6507、特別企画ブースです。

Tf2009_1


・・という案内を書こうと思っていたら、早いものでもう今週ですね。
ようやく展示内容が固まりましたので、ご案内申し上げます。

Mitoujtag_thumb_120①MITOUJTAG Proのデモンストレーション
「FPGAの動作可視化」、「マウスクリックで回路を操作」、「埋め込みJTAGロジックアナライザ」、「ハードウェアのステップ実行」、「論理合成せずにFPGAを動かす」など、従来の常識を覆す最先端のFPGAデバッグ技術を実演します。
ブログでは伝えきれない、活きたデバッグをご覧ください。

Tf2009_4② トラ技78Kマイコンを使ったUSB-JTAGによるDDT基板への書き込み実演
トラ技付録78Kマイコン基板を使ったUSB-JTAGの実演を行います。使い始めるまでのハードルが高いと言われているDDT付録基板を手軽に書き込みます。
DDT付録基板に対するバウンダリスキャンのデモ等も行えると思います。

③スタンドアローン基板検査装置の展示
JTAGバウンダリスキャン検査を、パソコンなしで行いたいとは思いませんか?特電の開発したスタンドアローン検査装置は、電源投入後すぐに動作開始し、目的のターゲット基板をバウンダリスキャンできます。基板検査だけなら、もうパソコンは要りません。

Tf2009_2④特電PCI Express 評価ボードの動作実演
大規模FPGAとDDR2メモリを搭載した「特電PCI Express評価ボード」は、IPコア込みでお得な価格の商品です。どうぞ手にとってご覧下さい。

⑤External CablingによるPCI Expressバス延長の実演
PCI Expressはケーブルを用いてパソコン外部にバスを延長することができま。パソコンの背面から伸びた延長ケーブルで制御されるAC100Vをご覧下さい。


Tf2009_5⑥玄箱 ProのPCI Expressスロットの拡張
Debian GNU/LINUXがインストールされた玄箱Proで、特電PCI Express評価ボードを制御するデモンストレーションを行います。玄箱ProのPCI Expressスロットを活用する夢が広がります。

Tf2009_3⑦MITOUJTAG体験版CD-ROM配布
最新のMITOUJTAGの使用感をできるだけ多くの方に体験していただくために、MITOUJTAG体験版を無償でお配りします。。

また、出展者セミナーも企画しています。
セミナーは16日(木)の16:45~17:00と、終了間際の時間に開催されます。タイトルは、
「実践!JTAGを使ってFPGAを動的にデバッグする技術」
です。
どうかお帰りになる前に、FPGAビレッジのセミナー会場へお越しください。

FPGAは、「ハードウェアでありながらソフトウェアのように書き換え変更ができる再構成可能な論理デバイス」といわれていますが、実際にはソフトウェアとは比べ物にならないほどデバッグが非常に難しいのが現状です。

このセミナーでは、MITOUJTAGを使って、FPGAをソフトウェアのように柔軟にデバッグする方法をご提案します。論理合成せずにFPGAを動かす技術や、FPGAを1クロックづつ動かすステップ実行する技術など、従来のやり方とは全く違う、近代的なFPGAデバッグのやり方をぜひご覧下さい。
FPGA開発の効率がぐっと向上するはずです。もう、JTAGなしのデバッグや、精神力のデバッグには戻れなくなること受け合いです!

もし開発が間に合えば、Ajax版のJTAGバウンダリスキャン・ソフトウェア「MITOUJTAG WebScan」が本当に動いているところも披露できるかと思います。

当社展示内容の詳細はこちらのページに記載しました。
http://www.tokudenkairo.co.jp/techno-frontier2009.html

皆様、どうぞよろしくお願いします。

| | コメント (0)

2009.04.12

Lattice XP2のC-SRAM書き込みモードに対応しました

LatticeのXP2は、4種類くらいのコンフィギュレーション方法があります。
① 普通のモード・・内蔵フラッシュROMに書く
② SPIモード・・外付けのSPIフラッシュROMに書く
③ スレーブSPIモード
④ C-SRAMモード・・FPGAのロジックセルだけを書き換える(フラッシュを書き換えない)

このうち、スレーブSPIモードは、FPGAがSPIスレーブデバイスとなるモードのようです。Latticeの純正書き込みツール(ispVM)では、JTAG信号をうまくSPI信号にみせるやり方で、この方法を実現しているようです。
XILINXに喩えればSlaveSerial、ALTERAならPSでしょうか。

SPIモードは、外付けのSPI ROMにデータを格納する方法ですが、ispVMでは、まずFPGAのC-SRAMを消去した後、プライベート・インストラクションを注入するようです。すると、JTAG端子と外付けSPI用端子がFPGA内部でつながって、JTAGポート経由でSPIの書き込み信号を流しこむような形で、外付けSPI ROMに書き込むらしいです。
(もし、JTAGデバイスがチェーン接続されていて2個のFPGAがあったら・・とか考えると悩みます)

ispVMでSPIモードのコンフィギュレーションを行うには、どうやらJEDファイルをあらかじめBitファイルに変換しておかないと、うまくいかないようです。まだ成功していません。
これら2つの方法は複雑なので、私が作っているツールでは実装しないことにします。

今日実装したのは、C-SRAMモードです。
このモードでは、FPGAのフラッシュROMを書き換えることなく、揮発性のメモリ素子のみを書き換えます。
(LFXP2はフラッシュROMの耐久性は10000回と書かれているので、普通の開発で何度書き換えてもフラッシュROMが劣化するようなことは考えにくいのですが、書き込みに失敗して変なデータが残ったときにも安全に復帰できるよう、このモードを実装しました。)

C-SRAMモードを使うには、xp2jtagのコマンドラインで-csramオプションを指定してください。

DOSのプロンプトで次のように入力します。
xp2jtag -csram -auto e:\DATA\tutorial\hdl_example\hdl_example.jed

やはりフラッシュROMの書き込み時間を待たないでもよいせいか、若干、高速です。
USB-JTAGで消去→書き込み→ベリファイをすると、66秒くらいです。
書き込みだけなら28秒です。

パラレルポートなら12秒くらいでしょうか。

ダウンロードはこちらにあります
http://www.nahitech.com/nahitafu/trg78k/78kjtag.html

では皆様,、どうぞよろしくお願いします。

あと、基板上のLEDがPWMでじわじわと光るサンプルも作りました。内蔵オシレータを使うので、外付け部品は不要です。
「jiwa.lzh」をダウンロード

| | コメント (3)

2009.04.11

LATTICE XP2用JTAGプログラマをリリースしました

LATTICE XP2用JTAGプログラマをリリースしました。

http://www.nahitech.com/nahitafu/trg78k/78kjtag.html

「トラ技78KマイコンでつくるUSB-JTAG」だけではなく、XILINXやALTARAのパラレルケーブルを使っても書き込むことができるようにしました。

XILINXのケーブルで、LatticeXP2にJTAG書き込みl
XILINXのケーブルで、LatticeXP2にJTAG書き込み

DDTの24ページの回路を作るのは面倒。Parallel IIIやParallel IV、ByteBlasterなら手元にあるけどこれを使えないの?という人も多いのではないでしょうか。

できるようにしました。

このツールは、DOSプロンプトから、ファイル名を指定するだけで使えるので便利かなと思います。
たしか、Latticeの論理合成ツールはライセンスを取得するのに1日~2日くらいかかったと思いますが、↑のツールを使えば、とりあえずCD-ROMの内容をダウンロードするだけならできます。

今日リリースしたのはあくまで、XP2の中の内蔵コンフィグメモリに書き込む機能しかありません。
XP2は、コンフィグメモリの内容を書き換えずに、SRAM部分だけを書き換えたり、SPI ROMを書き換えたりといったこともできたと思いますが、それは将来のバージョンアップ時にサポートすることにします。
まだ、動作検証が完璧ではないので少し変な部分もあるかもしれませんが、ご意見やご感想は当ブログのコメント欄か掲示板にお書きください。

なお、このソフトウェアは無償で使えますが、無保証です。

書き込みに失敗してデバイスを壊すようなことはないとは思いますが、一度だけ冷や汗をかいたことがあるので、それをお伝えしておきます。
LFXP2-17Eを消去中に強制的にプログラムを終了させたら、FPGAの中に消去途中の変なデザインが残ってしまい、FPGAの起動後のコンフィギュレーション中に大電流を食うということがありました。大電流を食って電源電圧が低下し、リセットがかかり、コンフィギュレーションが最初から行われ、また大電流が流れ・・・ということを繰り返すことがありました。
このときはSPIからのコンフィグモードに切り換えてFPGAの内蔵フラッシュを使わないようにし、それから改めて内蔵フラッシュを消去することで事なきを得ました。
コンフィグデータはCRCとかでチェックしているとは思いますが、詳しくは調べていません。消去中や書き込み中に強制終了するのはできるだけ避けてください。

それでは、よろしくお願いします。

| | コメント (0)

2009.04.10

デジタル・デザイン・テクノロジの基板に書き込み成功

ついに、デジタル・デザイン・テクノロジ ディジタル・デザイン・テクノロジが発売されたので、速攻買ってきました。
前々から準備していた78K-USB-JTAGによるLattice XP2書き込みツールで上手く書き込めることが確かめられました。

DDT基板書き込みのようす

付録CD-ROMのデータを書きこんでみたところ、予想よりも速く、77秒でした。消去時間が予想よりも短かったのが影響しているかと思います。

Ddt_writing_dos

付録CD-ROMに入っているのは、LEDが3・3・7拍子で点滅するアプリケーションでしょうか!?

この基板を使おうとしてハマった点をいくつか。
① デフォルトでSPI ROMコンフィギュレーションに設定されている。基板裏面のジャンパをカットしないと、FPGA内蔵コンフィグROMからのコンフィギュレーションにならない。
② CN3の10ピンのJTAGコネクタにシルクがない。どこが、TDIかTCKか・・記事を読まないとわからない。基板にはシルクをもっと入れて欲しい。

CN3のJTAG信号の割り当ては、こういう感じになっていますね。
毎回本を開くのが面倒なので、備忘録として書いておきます。
10 [××××○] 1

---------------------------------
・・・TCK
・・・GND
・・・TMS
・・・TDI
・・・TDO
・・・Vref
---------------------------------

さて、記事を読んでみたところ、記事ではパラレルポートによるコンフィギュレーションが解説されていて、プリンタポートにつなぐLATTICE用JTAGケーブルの作り方などが描かれていました。ベースボードも発売されるようですが、これもパラレルポートを使うものでした。

これはちょっと厳しいですね。
最近のパソコンには本当にレガシーI/Oはないのです。一昔前なら「パラレルポートのついているパソコンを用意してください」、で済んだかもしれませんが、今はもう、パラレルポートがあるパソコンを探すほうが大変だと思います。
それに、もし、パソコンにパラレルポートがあったとしても、わざわざLATTICE用の互換ケーブルを作るというのは酷です。

FPGAを動かすまでに高いハードルが2つもあります。記事に紹介されている方法では、一体何人の人がコンフィギュレーションまでたどり着けるのでしょうか。

ちなみに、一部で噂されていたみたいですが、この付録基板には私は全く関わっていません。1月にLatticeのツールを作ろうと決意したのも全くの偶然の一致です。昨年の展示会でLatticeの評価ボードを見て、欲しくなって、それでMITOUJTAGを対応させたというだけです。

何はともあれ面白そうな基板なので、趣味的にいろいろ作って、いろいろ遊んでいきたいと思います。
Lattice用の78K-USB-JTAGツールは本日公開予定としていましたが、デバッグのためもう1日ほどリリース時期が延びます。期待していた方には申し訳ございませんが、もうしばらくお待ちください。


ちなみに、CD-ROMのサンプルを書き込んだ後、バウンダリスキャンしてみると、FPGA右下の隅の端子がチカチカしていました。
Ddt_bscan

JTAGロジックアナライザでみてみると、やっぱり3・3・7拍子!?
Ddt_jtag_logiana


| | コメント (7)

トラ技78Kマイコン基板サポートページを更新

この2週間くらい、78KマイコンによるUSB-JTAGアダプタに没頭していたので、いろいろノウハウが溜まってきました。

そのノウハウの中のいくつかを、「トラ技付録78K基板 私設サポートページ」に追記しました。

今後、この回路とソフトを使ってFPGAのJTAG書き込みを試してみていただける方がいらっしゃるかもしれません。
そこで、情報共有のため、78Kマイコンのサポート掲示板を作りました。プログラミングテクニックやUSB-JTAGについて何でもお気軽にお問い合わせください。

今日、78Kのページを更新した箇所としては、バッファ付きUSB-JTAGアダプタの回路図を描いて、
78kusbjtag_1

実際に作ってみたところ、もちろん、ちゃんと動きました。
78k_usb_writer

この回路は、JTAGの信号にバッファが入ったので、安心して使えます。
ただ、この回路は3.3V系と5.0V系の変換で少しズルをしています。3.3Vと5.0Vのハイスピードな変換を手軽にやろうとすると、仕事なら2電源のバッファICとか便利なものがあるのですが、趣味として秋葉原にあるDIP部品だけでやるのは意外と難しいのかもしれません。

78k_usb_jtag_2_photo_2でも、私の一番のお気に入りは、やはり直結方式の78K-USB-JTAGアダプタです。バッファも抵抗も何もついていない、非常にシンプルな回路です。ルール違反はいっぱいあるのですが、ずっとこれを使って開発していたし、これからも使いつづけるのでしょう。


また、今日はもう時間切れなので書けませんでしたが、USBの転送速度(OUT方向)を10倍高速化するルーチンなども近いうちにアップロードしたいと思います。

P.S. 今日、帰りがけに書泉へ寄ってみたけれど、例のものはフライングされていませんでした。明日、入手でき次第、Lattice XP2のLFXP2-5EへのJTAG書き込みを試してみようと思います。

| | コメント (0)

2009.04.06

Ajax版のJTAGバウンダリスキャン

Ajax版のJTAGバウンダリスキャン環境ですが、地道に改良を続けてきた甲斐あって、かなり安定して動くようになってきました。

Ajax_jtag_1

AJAXというのは、ブラウザの中で起きた現象をサーバに送り、サーバから返ってきた結果をブラウザの画面上に表示するやつです。Googleマップや、検索エンジンにキーワードを入力しようとすると勝手に補完してくれるあの技術です。画面の遷移を伴わずに、ブラウザの中の一部の情報(画像や文字など)だけを書き換えることができます。
それを、JTAGバウンダリスキャンに応用しようとしています。

トラ技78kマイコン基板をパソコンのUSBコネクタに挿し、78Kマイコン基板の端子をFPGAターゲット基板につなぎ、AJAX版MITOUJTAGのページにアクセスして「開始」ボタンを押すと、サーバからJTAGコマンドが伝わってきて、XMLやJavaScriptやActiveXが動いて78Kマイコンを動かし、78KマイコンがFPGAに対してJTAGのコマンドを実行し、その結果をサーバに返し、サーバは視覚化してブラウザの画面に表示するという構想です。

現在はまだ文字ベースでFPGAのピンの状態を表示していますが、いずれは画像を送ってくるようにしたいと思います。また、FPGAやCPLDなどの書き込みのためのアルゴリズムもAJAXで送ってくるようにしたいと思います。
つまり、ユーザはブラウザの中から書き込みたいファイル(JEDやBITなど)をサーバに送れば、サーバは遠隔操作でJTAGケーブルを操作して、FPGAに書き込んでくれるというしくみです。

JTAGは、ハードウェアは簡単な構造をしていますが、ソフトウェアはデバイスごとに全く異なり互換性がありません。そういったデバイスごとの非互換な部分のアルゴリズムをサーバにもたせてしまえば、デバイスが変わった時や、アルゴリズムが更新されたとき、新規デバイスがリリースされたときにも速やかに対応できるだろうという考えです。
今週末にはデジタル・デザイン・テクノロジが発売されるので、誰もが無料でバウンダリ・スキャンの素晴らしい世界を体験できるようにしたいと思っています。
もっと安定してうまく動くようになれば、来週か再来週にはこのアプリケーションをリリースしようと考えています。

| | コメント (0)

2009.04.05

Lattice XP2のUSB-JTAG書き込み(続々)

数日間、昼も夜もトラ技78Kマイコンで作るUSB-JTAG書き込みアダプタの高速化に費やしていました。

JTAGのコアとなる部分をアセンブラで組みなおし、手作業でギチギチに最適化したところ、およそ3倍の速度になりました。アセンブラは頭の体操になります。
さらにUSBの転送タイミングを見直して微調整したところ、LFXP2-17Eの書き込みでは、トータルで4倍の速度を実現できました。

78k_usbjtag_lfxp2_17e

アセンブラ、速い!苦労した甲斐があります。

このルーチンで、デジタル・デザイン・テクノロジの付録LFXP2-5Eを書き込んだ場合の時間を予想してみたところ、次のような計算結果となりました。

78k_usbjtag_lfxp2_5e

FPGAの書き込みに80秒くらいなら待てるでしょうか・・
もっと頑張ればこの2倍くらいにはなると思いますが、ここから先は大変かもしれません。
DDTが発売されて付録基板が入手できたら、実機で試してみたいと思います。

Latticeで上手くいったので、ほかにもいろんなFPGAやCPLDに書き込んでみました。
・Spartan3AN  XC3S700AN  ・・・25秒
・XC9500XL XC95288XL  ・・・34秒
・MAX2 EPM240    ・・・40秒
・Spartan3   XC3S1500   ・・・47秒
・コンフィグROM XCF04S    ・・・112秒
・MAX2 EPM2210   ・・・223秒

MAX2 EPM2210の書き込みはまだ遅いみたいですが、それ以外は耐えられるレベルに来ました。

ソフトにもう少し磨きをかけ、どのような形でリリースするかを考えることにします。

| | コメント (0)

2009.04.01

Lattice XP2のUSB-JTAG書き込み(続)

トラ技78K基板を使ったLattice XP2のUSB-JTAG書き込みプログラムの開発を行っています。

前回のボトルネックは、PC→78K側への転送速度でした。トラ技2008年8月号153ページに書いてあるように、trg_recvdata関数を使ったのでは毎秒5kバイトの速度しか出ません。そこで、153ページ右側にあるルーチンに相当するものをRAM上に作ったところ、たしかに速度は向上し、約2倍にはなりました。

78Kマイコンは、プログラムを拡張RAM上で動かすよりもROM上で動かしたほうが若干早いのでしょうか。データシートの命令サイクルにはROM上での値です、と書いてありますし。

そういうわけで、78K-USB-JTAGはROMプログラムにすることにして、さらに、USBファームウェアの中のルーチンを直接コールしたり、USBのパケットを調べる処理の発行タイミングを最適化したりして、ブロック読み出し関数を作リ直してみたところ、PC→78K方向への転送速度は毎秒42kバイトにまで向上しました。

これは、ざっと8倍の速さです。たぶん、Cで書いている限りこれが限界でしょう。高速化Readルーチンはいずれ公開するとして、今はUSB-JTAGの開発を進めることにします。

いろいろプログラムを改良していたら、LFXP2-17Eでは、書き込みとベリファイをあわせて6分程度でできるようになりました。前の状態から比べるとだいたい2倍速くなりました。DDTの付録のLFXP2-5Eならば、書き込み・ベリファイ合わせて2分程度でできるでしょう。

LFXP2-17Eを、MITOUJTAGでバウンダリスキャンしてみると、毎秒22回でした。

Lfxp217e

できれば、もっと速くしたい。

USBの転送とかは最適化したはずなので、現在のボトルネックはJTAG信号を作り出すC言語のルーチンにあります。78KのCコンパイラは、よくあるCコンパイラと同様にローカル変数をどんどんスタックに入れていきます。78Kのアーキテクチャにとっては、これは重そう・・

JTAG信号の送受信ルーチンを、手作業で徹底的に最適化されたアセンブラで書けば、いまよりずっと速くなるとは思うのですが、さて、どうなることやら。

| | コメント (1)

« 2009年3月 | トップページ | 2009年5月 »