« PCI Expressで制御する電球と扇風機 | トップページ | Lattice XP2のUSB-JTAG書き込み(続々) »

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

|

« PCI Expressで制御する電球と扇風機 | トップページ | Lattice XP2のUSB-JTAG書き込み(続々) »

コメント

C言語のルーチンをアセンブラにしたら、LFXP2-17Eの書き込みに3分かかっていたのが1分20秒にまで縮まりました。まだまだ最適化できそうです。

目標は、
・LFXP2-17Eの書き込み・ベリファイ合わせて1分半
・LFXP2-5Eの書き込み・ベリファイ合わせて30秒
です


投稿: なひたふ | 2009.04.03 10:38

コメントを書く



(ウェブ上には掲載しません)




« PCI Expressで制御する電球と扇風機 | トップページ | Lattice XP2のUSB-JTAG書き込み(続々) »