失くしちゃいけないメモ書き

(原著者Petteri Aimonenさん了解で日本語ページ作成しました)                                                                                 

 
”DSO Quad"メニューへ

USBのプロトコルアナライザ


DSO Quadで使用しているシリコンブルー社のFPGAの開発用ツールが無償になったので、正しいコードをかけるようになりました。SEEEDのアプリケーション競技会に出したロジックアナライザが動くかどうかが今の関心事です。でもまあちょっと延期しましたが。
オープンコアからUSB PHYを使えれば考え方の正しさを簡単に試すことができると思っています。それがうまく動くようになって、USBプロトコルアナライザみたいなDSO QUAD上でアプリを書くぞと決めました。また今回は完全にPawnで書き、QUADPAWNでできることの限界を試そうと決心しました。

FPGA論理

USBプロアナの処理の多くはFPGAで動きます。FPGAが受信してUSBのプロトコルをデコードし、限られたRAMメモリーを使いこなすため、パケットをフィルターします。こんだけのことをFPGAの上でやっても4000素子中の1300しか使いませんでした。

FPGAコードの中で最も面白いのはおそらく繰り返しフィルタです。これはパケットの繰り返しシーケンスを節約するためで、例えば「IN,NAK]などはホストがデータをポーリングするときに発生します。FPGA上で可変長パケットを処理するのはそんなに簡単なものではありません。しかし2レベルの設計法でこの問題を何とか解決しました。

繰り返しフィルタの下層部分はパケットのバッファであり、「読み込みパケット」「比較パケット」「書き込みパケット」のような簡単なコマンドになります。上層の部分はコンピュータプログラムのようですが、プロセッサなしで力ずくで書き込みます。繰り返しを検知し、それらを省くために60種からなるプログラムを実行させます。

DSO QUADのFPGAをプログラムするための一番大きい問題点は速度が遅いという点です。ワタシとしては何でも72MHzでCPUに同期し走らせたかったのです。そうすると理論的にはUSBを36MHzで受信できてUSBのPHYに対するクロック領域と他とを分離できるはずです。しかし72MHzで行くことにし、2,3の最適化でうまく行くようになりました。もっとも大事なことは何でもパイプライン処理することで、特にFPGA論理ではうまく行きます。また各論理素子としてレジスタがあったんですが、なぜか使いませんでした。問題点としてパイプライン化のためにコードはビット複合化しました。

使い方

ここからプログラムをダウンロードしてください。ソースコードはこっちです。このプログラムを走らせるためにはQuadPawnの0.06より新しいコードが必要です。それは同じページからダウンロードできます。インストールするためにはusb.amxとusb.fpgをUSBのメモリーにQuadPawnが走っているときにコピーしてください。そして再投入するとメニューが現れます。

このプログラムを使うために何とかしてUSB信号線にプローブをつなぎます。簡単な方法としてはUSB延長ケーブルから何らかの方法で取り出します。CH-AをD-につなぎ、CH-BにはD+を繋がないといけません。繋いで見ると画面に何かパケットが現れるはずです。

もしあなたの使っているブラウザでWebMがサポートされていないときはYOUTUBEを見るか、ビデオにダウンロードしてください。このプログラムでは画面コピーをBMPに取れるし、TXTでも生データでも取れます。デバッグ時には生データは有効です。なぜなら標準的な様式ではないからです。私は例えばWIRESHARKなどで取り込めばよいなどどうすれば簡単にできるかはまだ勉強できていません。

制限


現状ではUSBのフルスピードだけをサポートしております。ロースピードをサポートするのはとても難しいです。しかしハイスピードもこのハードでは速すぎます。バッファの空きは8kBしかないのですが、ホビイストには十分と思います。

– Petteri Aimonen on 13.1.2013

このページにはコメントが付いてます。

inserted by FC2 system