0

ザイリンクス Zynq チップのプログラマブル ロジックで実行されている Verilog モジュールの 1 つで特定の信号 (デジタル パルス) を生成しています。信号はかなり高速で、クロックは約 200MHz です。また、後でアプリケーションを制御するために、シンプルな Linux とフレームバッファ Qt インターフェイスを実行しています。

Qt アプリ内でオシロスコープのようなインターフェイスを作成するために信号をサンプリングするにはどうすればよいですか? 生成しているパルスを視覚的に提供できるようにしたいと考えています。

そのようなクロック周波数で十分なデータをサンプリングできるようにするには、何を使用する必要がありますか? そして、カーネルモジュールまたはmmapでQtに渡すにはどうすればよいですか?

4

1 に答える 1

0

ほとんどのオシロスコープが行うことを行うのが最善です。データをRAMにサンプリングし、それから表示/分析のためにプロセッサに転送して、より「リラックスした」ペースで行います。

FPGA 側では、おそらくソフトウェア側からモード レジスタのビットが設定された後に、ある種の開始またはトリガー条件を検出するステート マシンが必要になります。

ステート マシンは、サンプルを 1 つまたは複数のブロック RAM で構成されるバッファーに格納します。キャプチャされたサンプルの途中にトリガーを配置する場合は、それを循環バッファーとして使用し、トリガー後に構成可能な数のサンプルを停止して連続的に記録する必要があります。これにより、トリガー条件の前からの必要な数が残りますそれに続く新しいものによって上書きされません。

FPGA ブロック RAM は通常デュアル ポートであるため、読み出し用に他のポートを CPU バスに接続するだけです。サンプリング ステート マシンの状態と、循環バッファ アプローチを使用する場合は停止したアドレスを読み取るレジスタが必要になる可能性があります。これにより、データを時間の線形レコードにアンラップできます。

ストリーミング リアルタイム サンプリングを試みることは可能かもしれませんが、はるかに困難であり、リアルタイムで生成されたデータで意味のあることができるかどうかは明らかではありません。それでも、試してみたい場合は、おそらくサンプリングとプロセッサ バスの間に FIFO バッファを配置する必要があります。おそらくデータをチャンク単位でしか消費できず、その間に他の操作を処理する必要があるためです。サンプルの一定速度の流入を吸収するために必要です。別のアプローチとして、サンプルを外部システム RAM に直接書き込む DMA エンジンを構築することも考えられますが、それはさらに困難になる可能性があります。

また、CPU で利用できる高速インターフェイスがあるかどうかを確認することもできます。たとえば、それらはもともとビデオ用に意図されたものである可能性があります。

また、デジタル信号のみを測定しているようにも見えます。つまり、おそらく1ビットずつ測定しています。FPGA ファブリックがサポートできるよりも高い入力サンプル レートを処理する必要がある場合、FPGA のエッジでデシリアライザー ブロックのようなものを使用して、1 ビットの入力ストリームをより広いサンプルの低速ストリームに変換できる可能性があります。保管する。

出力に関して言えば、バッファにサンプルのベクトルがあれば、ズーム、カーソル注釈、自動測定などを好きなだけ使用して、それをスコープ/ロジック アナライザ タイプのプロットに変換するのは非常に簡単です。

また、開発中にこれを使用することだけが目的である場合、FPGA とそのツールには、多くの場合、ロジック アナライザーをデザインに直接組み込む機能があり、PC でプロットするためにプログラミング インターフェイスを介して要求されたデータを使用することも忘れないでください。

于 2016-06-06T07:00:40.303 に答える