JTAGロジアナ
ブロックRAMに溜め込んだデータをJTAGで吸い出して解析するタイプの、JTAGロジックアナライザの開発をつづけています。
この新ロジアナ機能は、ロジアナ用のIPコアを、FPGAの中に埋め込んで使うタイプです。
このIPコアはNGCネットリストの形で配布しようと考えていました。
最初、このコアのVHDLソースでは、ロジアナのパラメータ(バス幅やデータ長など)をGenericで受け渡ししていました。しかし、VHDLから論理合成して作成されたNGCファイルをngc2edif.exeで変換してみてみると、IF~GENERATE構文を思わせる内容が書かれていませんでした。どうやら、GENERICで指定した初期値で作られてしまっている感じでした。GENERICで渡していたような値は、ネットリストにする段階で確定させなければならないのでしょうか。
そこで、結局、GENERATE構文を使うのはやめ、論理合成での最適化を期待して、各種パラメータをSTD_LOGICのSIGNALで渡すことにしました。
いろいろと苦労しましたが、データバスの幅を1~72ビットまで、データ長を512~1024ワードにまで対応させることができるようになりました。Spartan3のブロックRAMを1個または2個または4個消費します。
今後、データの幅や長さをより柔軟に変えられるようにしたり、より一層気前良くブロックRAMを使って、もっと大量のデータを蓄えられるようにしたいところです。
とりあえず、40MHzのサンプリングで、72ビット幅のデータ(LFSRの出力)をキャプチャしてみたところ、ものすごい迫力のロジアナとなりました。

クリックで拡大
ところで、この回路を作る上で、いくつかハマった点があります。例えば、
integer range 0 to 1023みたいに指定しているところを、
実際に使われる数値の範囲を決めて
integer range 16 to 512みたいに親切に書くと、合成された回路の挙動が怪しくなりました。
この詳しい原因は解析していませんが、合成結果の予測がしやすいSTD_LOGIC_VECTORが一層好きになりました。
| 固定リンク
コメント