« EXPARTAN-6T予約開始へ | トップページ | USBを使うチュートリアルを書きました »

2010.10.04

Spartan-6ボードのリファレンスデザインを更新

Spartan-6ボードのリファレンスデザインを更新しました。

Newapp

主な更新点は以下のとおりです。
■FPGAに関すること
(1) 低温時に、USBの通信データにエラーが出る現象を改善
(2) 16MBytesを超えるUSBの通信も正常に動作するようにした
(3) SDRAMコントローラをマルチポート化した
(4) USBからSDRAMの任意のアドレスを読み書きできるようにした
(5) SDRAMコントローラのソースコードをリリースの中に含めた
(6) uif_addr_opの幅を25ビットから27ビットに増やした
■DLLに関すること
(1) タイムアウト機能の追加。Read/Writeが5秒でタイムアウトするようにした。
(2) USBReset()関数を追加し、フリーズした転送を中断できるようにした。
(3) 16MBytes以上の転送も実行できるようにした
(4) 起動時にSmartJTAGモードではなく、ユーザ通信モードになるようにした
(5) 2つ以上のスレッドが同時にRead/Writeしないよう排他ロックをかけた
(6) DLL内での動的なメモリの割り当てを最適化し、IN/OUT転送を高速化した
(7) 小さなOUT転送で無駄なデータを転送せず、必要最少量のサイズで転送するようにした
■サンプルアプリに関すること
(1) 16MBytesを超えるデータの読み書きも正常にできるようにした
(2) テストパターンの種類を増やした
(3) 最大128MBytesまでのIN/OUTテストが行えるようにした
(4) SDRAMの読み書きアドレスを変更できるようにした
(5) INOUTテストでエラーが出た場合に、INのリトライを行うようにした
(6) マルチスレッド化した
(7) リセットボタンを追加した

この中で、FPGAの最初に挙げた項目の「低温時の安定動作」はたいへん重要です。最近、Spartan-6のデバイスを高速な-3グレードに変更したら、通信エラーが出るようになったのです。何かがおかしいと思い、暖めたり冷やしたりして実験していると、従来の-2のデバイスでもギンギンに冷やすとエラーが出ることが確認されたのです。しかも、それが100%いつも起こるのではなく、温度が低い場合やFPGAが高速グレードの場合に起こるのです。

それからというもの、徹夜でUSBのインタフェースを見直しました。その結果、EZ-USB FX2が出すbit9とbit10が同時に遷移する際にFPGAが誤った値を取り込む確率が高いことがわかってきました。どうやら、FPGAとUSBとの通信のタイミング、おそらくFPGAがデータをサンプリングする際のホールドタイムに問題があったようです。
このエラーの出方が厄介で、FPGAの論理合成オプションの設定(I/Oレジスタをパッキングするか否か)というマイナーなオプションよっても変わる可能性があります。

そこで、設計をいったん見直し、FPGAがデータバスを取り込むタイミングを半クロック早めました。その結果、氷点下(コールドスプレーで冷却)から高温(ドライヤーで加熱)まで、広い温度範囲で安定に動作するようにしました。

こんな凍りついた状態でもエラーなく転送できるようになりました。
Cold1

凍っている間は動作します。
Cold2

逆にいえば、いままでのUSBコアは秋・冬と寒くなるにつれて問題が生じる可能性があるので、できるだけ早く更新してください。

ezusbfx2_ctrl.ngcを新しいものに置き換えて再度論理合成すれば、安定して動作するデザインが出来上がります。

またそれから、今回のバージョンアップでは、USBコアが出力するuif_addr_op[24:0]という出力信号のビット幅を、[26:0]に変えたので、それも忘れずに更新しておいてください。(この変更により64MBytesのDDR2 SDRAMのメモリ空間を自由にアクセスできるようになります)


ついでに、Windows用のDLLも更新しました。何が変わったかというと、主に、高速化タイムアウトの実装SDRAM転送関数の実装です。

いままでは、転送のたびにmallocで一時的なバッファを確保していました。このオーバーヘッドによって、長大なデータを転送する際の速度が低下していたので、直しました。
また、DLLの中でEndPointのBuldRead/Writeする部分をマルチスレッド化して、通信の応答がない場合にはタイムアウトをするようにしました。
SDRAM転送関数は、従来のデータ送受信関数に「開始アドレス」というパラメータを追加したものです。広大なDDR2 SDRAMのメモリ空間の好きなところを読み書きできます。

それから、サンプルアプリケーションもマルチスレッド化して、操作性を向上しました。リセットボタンを付けたり、様々なバグも解消しました。

詳しいことは下記のページをご覧ください。
http://www.tokudenkairo.co.jp/sp6/download.html#sampledesign

では皆様、よろしくお願いします。

|

« EXPARTAN-6T予約開始へ | トップページ | USBを使うチュートリアルを書きました »

コメント

コメントを書く



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




« EXPARTAN-6T予約開始へ | トップページ | USBを使うチュートリアルを書きました »