ZCU111を会社に持ち帰って、正月早々から開発開始です。
実験していて思い通りの波形が出なかったのですが、最初にわかったのは、RF Data Converter(ADCとDACを使うためのIPコア)のtvalidとtreadyは飾りであるということです。
普通、AXI Streamはtvalidとtdataでフロー制御するのですが、RF Data Converterではそれを見ていないようです。起動後はtreadyは常に'1'で変化しなのでフロー制御はできません。DAC周波数に同期したクロックを与えるのが正解です。
その代わりに、RF Data Converterが出す出力クロック(サンプリングクロックが分周されて出てくる)に同期してデータを与えるようです。
さて、DACに入っている「ミキサ」という機能を有効にすると、RFSoC内部にNCO(数値発振器)を作ってくれて、IQ用の波形を作ってくれます。
変調のかかったIと変調のかかったQを出力してみました。
拡大してみると、IとQが90°ずれていていい感じです。
500MサンプリングでNCOは100MHzという、微妙に周波数があっていない設定でも正しく動くなんてすごいですね。
これを足し合わせればそのままRF信号になるというわけでしょう。
同じ要領で、のこぎり波 /|/|/|/|/|/| を作って、それをに2GHzで変調をかけた波を出すことにも成功しました。
この出力チャネルには「バラン」という部品が入っていて、差動信号をシングルエンドにしているのですが、バランはトランスなのでBPFになっています。そのため、頂点から落ちるところで位相が180°回転するので波形が乱れているのだと思われます。
どこまで周波数を上げられるかというと、6.5GHzのDACなので、最大は3.2GHz付近。
私のオシロは2.5GHz帯域なので減衰してしまいますが、何とか見ることはできました。
上の波形を作るのに使ったRF DCの設定は以下のとおりです。
さて、DACは理解したので今度はADCを使おうとしたら、いきなりの難題。
なぜかADCのほうは128bit幅しかありません。
データシートを読むと確かに128ビット幅と書かれています。
DACの半分のビット幅しかないのですがこういう仕様のようです。
ゆっくりとした波形を見るときには問題ないのですが、
早い波形を見て拡大すると、やはり、データが半分消えてしまっています。
どうすればよいのかというと、4Gサンプリング時、128bit 500MHzでデータを出力してきたデータをAXI StreamのInter connectを使って256bit 250MHzに変換してあげればよいようです。
これで綺麗な波形がキャプチャできるようになりました。
下の図は、ファンクションジェネレータで作った正弦波をZCU111に入れて、ADCでサンプリングしたものをそのままDACから出力したものです。
パルス波形なんかも入力と出力できるのですが、バランが入っているせいで歪んでしまいます。
ここに至るまで相当苦労しましたが、ZCU111のADCとDACを使いこなせるようになってきました。
最近のコメント