オンラインショップ
問い合わせ
即日発送 送料無料 佐川急便かクロネコでお届け。カード、銀行振り込み、代引き決済。
製品情報>ZYNQ搭載 ADCボード「Cosmo-Z」>開発日記>2017年6月

2017年6月

ハードウェアフーリエ変換器の納品

2017.06.14

FPGAを使ったハードウェアフーリエ変換器を納めに行ってきました。

Hwfft

Cosmo-Zの下に、18bit 8ch 5MHzのADCを搭載しています。

ZYNQのPL部分に2ch分のハードウェアFFT回路が搭載されていて、65536ポイントのFFTを毎秒150回程度で切れ目なく連続して行うことができます。

ただ、整数演算での16bit精度での演算なので、計算誤差が目立ちます。

次回は浮動小数点にしたいという要望をいただきました。

 

ZYNQのAXI HPポートを250MHzで動かすにはレジスタが必要

古い設計で恐縮なのですが、ISE+XPSでZYNQの開発をするときの注意点を見つけました。おそらくVivadoでも同じだと思います。

こういう↓フーリエ変換マシンを作っていて、

Fft_machine

たまに起こる演算間違いをなくそうして、この問題に気が付いた次第です。

sun

さて、AXI HPポートを使ってPLからPSのDDR3メモリを読み出したいのですが、AXI HPポートのクロックを250MHzにすると、-1のスピードグレードのZYNQではタイミングエラーが出てしまいます。

-1グレードのZYNQは250MHzでHPポートを動かせない・・というわけではなく、XPSの設定画面を開いて、HPポートの各チャネルをFULLY_REGISTEREDにすればタイミングエラーは出なくなります。Vivadoの場合でもAXI Interconnectの中に似たような設定があります。

Interconnect Settings for BUSIFの中のS_AXI_HP1の設定で、以下の部分を変更します。

Fully_reg

 

ここのデフォルトの設定であるBYPASSというのは、AXIを100MHzとか125MHzで動かすためのものであって、クロック250MHzで動かす場合はレジスタを入れろと解釈できます。

レジスタを入れてレイテンシを増やして高い周波数でも動くようにするという当たり前の話です。

しかし、困ったことにAXIのプロトコルも変わってしまうのです。

下の図は、FULLY_REGISTEREDにしたときのAXIバスの波形です。DDR3メモリからデータを読み出すべく、バースト長256にして読み出しリクエストを発行しました。

Rvalid

何ということでしょう。

RVALID='0'なのに、RLAST='1'というパターンが出てきてしまうのです。

このパターンは出たり出なかったりなので、推測ですが、AXIのバーストリードを発行したものの、DDR3メモリがリフレッシュ等でデータを用意できないときに偶然、こういうパターンになるのかと思われます。

下の波形は、5回目のバーストまではうまくいっているのですが、6回目のバーストリードでLASTが出てしまってそれきりステートマシンがハングしてしまっています。

Last_5burst

データがまだ残っているのにLASTと判断しているため、この後の通信がハングしてしまっています。そこで、RVALIDが0ならば、RLASTは無視して、ステートマシンを止めないようにしたところ、続きから正しいデータを読み出すことができました。

このパターンはInterconnect Settings for BUSIFで各チャネルのUse RegisterをBYPASSにすると出ません。よって、FULLY_REGISTEREDにしたときに自動的に挿入されるロジックの問題だと思われます。

つまり、RVALID='0'かつRLAST='1'は無視して良いのだと思います。

 

このようにすることで、250MHzでAXI HPポートを安定して動かすことができるようになりました。

 

 

 


© 2017 TokushuDenshiKairo Inc. All rights reserved