ダイレクトRFサンプリング方式のデジタル・フェーズド・アレイにおける位相の同期【Part 2】位相差の再現性を実現する
シリーズの関連記事を読む
要約
本稿で取り上げるのは、完全にデジタル化されたビームフォーミングを利用するレーダー・システムです。その種のシステムでは、送信チャンネルと受信チャンネルの間で正確な同期を実現することが重要です。各チャンネルの位相はデジタル領域で制御されますが、すべてのチャンネルの間で既知かつ再現性のある位相差が得られるようにしなければなりません。本連載のPart 1では、高速データ・コンバータ(A/Dコンバータ、D/Aコンバータ)を備える複数のモジュール式ボードの間で同期をとる方法を紹介しました。その内容を基にして、今回(Part 2)はスケーラブルなデジタル・ビームフォーミング・システムという概念を具現化する方法について説明します。具体的には、複数のミックスド・シグナル・フロント・エンド(MxFE®) I Cの同期をとり、電源のオン/オフを繰り返した場合でも位相差の再現性が得られるようにします。そのMxFE ICは、デジタル信号処理(DSP:Digital Signal Processing)機能と各4つの送信チャンネル/受信チャンネルを備えています。送信チャンネルではD/Aコンバータ(DAC)、受信チャンネルではA/Dコンバータ(ADC)を中核的な要素として使用します。
はじめに
今回は、ソフトウェアとハードウェアの両方によってPart 1で説明した概念を具現化する方法を紹介します。特に、電源のオン/オフを繰り返した場合でも位相差の再現性が得られるようにするには、どうすればよいのかを明らかにします。
MxFEボードとFPGAボードを組み合わせる
本稿で取り上げる例では、MxFE IC「AD9081」(デジタイザと呼ばれることもあります)をベースとする2つのボードにおいてリーダ/フォロア型の同期を実現します。図1は、同期が確立されているか否かを確認するための実験に使用するシステムのブロック図です。このシステムでは、AD9081の評価用キット「EVAL-AD9081」を2つ使用します。また、「AMD Zynq UltraScale+ MPSoC」の評価用キット「ZCU102」も2つ使用しています1。更に、マルチチャンネル・システム・クロッキング・デバイスの評価用ボード「AD-SYNCHRONA14-EBZ」とオシロスコープも使用します。各コンポーネントは、図1に示したように接続しました。
EVAL-AD9081には、「AD9081-FMCA-EBZ」という評価用ボードが含まれています。以下、このボードをMxFEボードと呼ぶことにします。このMxFEボードには、AD9081を様々なモード/構成で動作させるために必要なあらゆるサポート回路が実装されています。また、ジッタ減衰器「HMC7044」をベースとするクロック生成用サブシステムでは、同期信号や外部リファレンス・クロックを選択できるようになっています。これは、2つのMxFEボードのスイッチの設定を変更することで実現しました(抵抗R1Eを未実装、抵抗R2Eを実装)。後述しますが、ZCU102はno-OS用のフレームワークとAD9081のデフォルトのプロジェクトをベースとしてAD9081を制御するように実装しています。そのプロジェクトは、リーダ/フォロア型のマルチチップ同期(MCS:Multichip Synchronization)を実現できるように変更しました。以下、このZCU102をFPGAボードと呼ぶことにします。AD-SYNCHRONA14-EBZは、周波数と位相を高い精度で制御し、実装されたMCS方式の要件を満たすクロックを生成します。図1のシステムでは、2つのMxFEボード上のHMC7044に10MHzの外部リファレンス・クロックを供給します。また、同期に必要なパルスも生成します。以下、このAD-SYNCHRONA14-EBZをクロック・ボードと呼ぶことにします。オシロスコープは、システムが正常に動作していることの確認やデバッグに使用します。リセットをかけたとき、または電源のオン/オフを繰り返したときの位相差がほぼ同じ値に維持される場合、正常に同期がとれていると見なします。
ファームウェアとソフトウェア・アプリケーション
コードの記述には、アナログ・デバイセズが提供するオープンソースのリポジトリを利用しました。それらのコードによって、FPGAボードにプログラムするFPGAイメージを生成しました。AD9081を対象とするno-OSのサンプル・プロジェクトとHDL(Hardware Description Language)のサンプル・プロジェクトに修正を加え、同期に必要な動作を実装しました(no-OSのサンプル・プロジェクト、HDLのサンプル・プロジェクトのダウンロード)。
FPGAイメージ:
AD9081のデフォルトのプロジェクトに含まれるHDLコードには修正を加える必要がありました。その修正版では、FPGAボード上のPMOD0 0、PMOD0 1、PMOD0 2の各ピンを使用できるようにします。リーダ側のFPGAボードが備えるPMOD0 0ピンの信号は出力として設定されています。それにより、クロック・ボードに対して同期信号を要求します。PMOD0 1、PMOD0 2はGPIO(General-purpose Input/Output)であり、それぞれ出力、入力として設定されています。これらのピンは、数値制御発振器(NCO:Numerically Controlled Oscillator)の同期動作がトリガされた際に、2つのAD9081の動作を適切にアラインさせるために使用します。
no-OS用のコード:
FPGAボードのプログラミングにはベア・メタル方式(no-OS方式)を採用しました。開発ブランチには、AD9081向けのno-OSのサンプル・プロジェクトにおける変更点が示されています。HMC7044用のドライバ、AD9081用のドライバ、AD9081のプロジェクトには、以下のような変更を加えました。
- HMC7044用のドライバ:外部同期モードに設定されている場合には、HMC7044がSYNCのパルスを受信する までプログラムを待機させます。
- AD9081用のドライバ:リーダ/フォロア用のロジックを実装し、同期用のGPIOの設定を追加しました。また、システム内のすべてのAD9081が同時に同期パルスを待ち受けるようにしました。更に、NCOのテストを実行するための機能を追加しました。AD9081の同期用のソースはSYSREFに設定しています。そのため、内部クロックはSYSREFに同期します。
サンプル・プロジェクトでは、正しい動作方法を選択するための適切な設定を行う必要がありました。そのために、リーダとフォロアの両方を対象として以下に示すような変更を加えました。
- HMC7044のリファレンス・クロックとしてEXT HMCREFを優先的に使用するように設定します。
- HMC7044の外部同期入力を有効にします。
- 連続SYSREF信号を選択します。
- 2つのFPGAボード上で動作するプログラムが、AD9081の同期処理を同時に開始できるようにするために、2つのGPIOの設定を追加します。
no-OS用のコードは、ADC/DACのデータを転送するJESDリンクを確立するために、有限ステート・マシン(FSM:FiniteState Machine)をベースとするJESD制御を使用します。また、JESDのトポロジには新たなデバイスとして、リーダによって制御されるGPIOを追加します。このGPIOは、クロックの同期処理を行う際にMxFEボード上の2つのHMC7044用の同期パルスを供給します。no-OSのプロジェクトに対するすべての修正点はアナログ・デバイセズのno-OSのページで確認できます。
クロック・ボードの設定:
クロック・ボードのデフォルトのデバイス・ツリー・オーバーレイにも修正を加えました。具体的には、MxFEボード上のHMC7044が外部リファレンスとして使用する10MHzのクロック出力(筐体のチャンネル9、チャンネル10)と、それらの同期に使用するパルス(筐体のチャンネル5、チャンネル8)が供給されるようにしました。これらのチャンネルは、デバイス・ツリー・オーバーレイ内においてHMC7044のFPGAメザニン・カード(FMC:FPGA Mezzanine Card)のノードに属しており、この実験環境における最上位のHMC7044に対応しています。クロック・ボードはアラインされた信号を生成し、SYNC入力によって要求されるパルスが10MHzの出力と同期するように設定されています。
図2に示したのは、10MHzのリファレンス・クロック・チャンネルの設定に使用するコードです。HMC7044のチャンネル5とチャンネル12に、この設定を適用します。

同期チャンネルの設定は図3に示したコードで行います。

図4に示したのは、HMC7044によって10MHzのリファレンス・クロックと同期信号を出力するための一般的な設定です。パルス・ジェネレータ・モードは1パルスに設定されています。クロック・ボードはSYNC入力を介してコマンドを受信すると、10MHzの出力に同期した単一のインパルスを出力します。

図5に示したのは、2つのAD9081が備えるNCOの信号の同期をとるために用意した実験環境です。図の中央を見ると、追加したオシロスコープが配置されています。これはデバッグに使用します。図5の状態では、このオシロスコープの画面に、2つのMxFEボードが備える2つのHMC7044の出力信号が表示されています。この信号は、アラインされたSYSREF信号です。図中の左側のオシロスコープには、NCOの信号の位相差が表示されています。それだけでなく、2つのチャンネルの信号間の差(単位は ° とピコ秒)と、それらの統計値(ヒストグラム)も表示されています。
以下、実験の手順を示します。
- クロック・ボードからMxFEボードに入力される10MHzのクロックに最も高い優先度が割り当てられるようにHMC7044の設定を行います。HMC7044は、複数のリファレンス入力を受け取ることができ、ユーザが設定した優先度に基づいて適切なソースを選択します。
- MxFEボード上のHMC7044を外部同期に対応するように設定します。外部同期信号が印加されるまでデバイスが待機するようにドライバを修正します。
- JESD FSMのトポロジにMCS用のGPIOをデバイスとして追加します。それにより、クロック・ボードにリクエストを送信し、2つのHMC7044の同期をトリガします。MxFEボードとFPGAボードを組み合わせた2つのシステムのうち、フォロアの電源を先に投入して再起動し、SYNCパルスが入力されるまで待機します。一方、リーダは、リーダ側のFPGAボードのPMOD0 0とクロック・ボードのSYNC入力の間の接続を介してパルスを要求します。リーダ側にだけ、MCS用のGPIO(PMOD0 0)とクロック・ボード上のSYNCの間の物理的な接続が存在します。
- リーダはプログラムを進行させ、フォロアの準備が完了したことを表すPMOD0 2の入力が1になるまで待機します。その後、NCOのリセットをトリガします。
- フォロアは、同期用のパラメータを設定した後、出力ピン(PMOD0 1)を1に設定します。このピンは、リーダ側のFPGAボードの入力(PMOD0 2)に接続されており、待機状態になっています(ここまでの手順を参照)。この時点で、フォロアでは同期の準備が完了しており、選択されたGPIO(MxFEボード上のGPIOであり、図1のGPIO 4に相当)によってコマンドの到達を待ちます。その後、フォロアは入力ピン(PMOD0 2)の値が1になるまで待機します。
- リーダは、入力ピンの状態が1になったことを検知すると、プログラムを進行させてMCSをトリガします。その後、リーダは出力ピン(PMOD0 1)の値も1に変更します。フォロアはそれを認識し、FSMも先に進めます。
- 2つのAD9081のDAC0間で測定される位相差は、リセットや電源のオン/オフを繰り返してもほぼ同じ値になります。
- その位相差を測定したら、ad9081_init関数の後に、NCOの適切な位相に対応するAPI(Application Programming Interface)を呼び出します。それにより、位相のオフセットを補正します。このようにすることで、2つのMxFEボードからの信号をアラインすることができます。具体的には、一方のボードをリファレンスとして使用し、もう一方のボードのチャンネルに位相のオフセットを適用することになります。
実験の結果
図6に示したのが実験の結果です。10分間にわたる測定によって得られた位相差(単位は ° とピコ秒)と、それに対応するヒストグラムが表示されています。また、表1は実験結果についてまとめたものです。電源のオン/オフを何度か繰り返した後、2つのAD9081が備える2つのDACの出力間に現れる位相差のデータを示しています。
| リセットの回数 | 電源の投入後 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 遅延〔ピコ秒〕 | 121.7 | 121.4 | 120.9 | 119.4 | 119.5 | 120 | 119.3 | 118.1 | 118.9 | 122.1 | 116.8 |
| 位相〔 °〕 | 88.02 | 87.55 | 87.35 | 86.3 | 86.57 | 86.36 | 84.46 | 84.55 | 85.92 | 87.75 | 85.03 |
| NCOの補正後の位相〔 ° 〕 | 1.3 | 2.55 | 1.41 | 0.7 | 1.92 | 2.24 | 1.48 | 2.08 | 2.32 | 2.09 | 1.81 |
これらの結果は、2つのMxFEボード上のDACが出力する信号の位相差には再現性があることを表しています。統計データの平均値に基づけば、それらの位相差(2GHzにおける時間遅延)には高い精度の再現性があることは明らかです。位相差の平均値は86°、時間差の平均値は119.8ピコ秒となっています。図7には、リセットを繰り返した場合(反復)の位相差の測定結果を示しました。
2つのMxFEボードにおいてチャンネル間の位相差が確定したら、NCOによって位相を補正することができます。この位相の制御機能はファームウェア内のAPIを介して利用することが可能です。Part 1で説明したように、取得した位相の値はルックアップ・テーブル(LUT:Lookup Table)に保存することができます。表1の最後の行は、フォロアの位相(図6の黄色の信号)に対して-86°という位相差の補正(図8)を施した後、リセットを繰り返した場合の位相差を表しています。

AD9081では、NCOの位相を非同期で更新することができます。APIによって最上位のレベルの初期化が実行された後に、その更新を適用することが可能です。本稿の例では、NCOの位相を補正するためのAPIを使用して再現性のある位相差を実現しました。この補正を行った後の位相差の平均値は1.8°です(表1を参照)。図9に、この結果をグラフとして示しました。
今後の取り組み
今後の取り組みとしては、再現性について統計的かつ適切に表現するために、電源のオン/オフを繰り返した場合のデータを引き続き収集する予定です。また、将来的にはMxFEボード全体の温度が変動した場合に時間の経過に伴って位相の安定性に及ぶ影響についても評価したいと考えています。HMC7044では、外部から供給される周波数の低いクロックをロックするフェーズ・ロック・ループ(PLL)を使用します。そのため、2つのMxFEボードの温度に差が生じると、両ボードの出力が位相シフトの影響を受けやすくなります。そのクロックの位相シフトは、2つのMxFEボードの出力における位相シフトとして現れます。2つのボードの温度差が変化すると、両ボードの位相差にドリフトが生じると予想されます。PLLにおける位相の温度依存性については、「マルチチップ同期機能を活用し、広帯域対応のDAC/ADCをデタミニスティックな位相で起動する」で説明されています。本稿では、2つのHMC7044(PLLとクロック分配を担うIC)の同期をとる方法を示し、MxFE ICにおいて位相差の再現性が得られることを実証しました。
参考資料
1UG-1182: ZCU102 Evaluation Board User Guide(評価用ボード「ZCU102」のユーザ・ガイド)、Advanced Micro Devices, Inc.、2023年2月
