TNJ-074 : たまには手を動かして DDS AD9913 の動作実験をしてみよう(後編)

TNJ-074 : たまには手を動かして DDS AD9913 の動作実験をしてみよう(後編)

著者の連絡先情報

石井 聡の写真

石井 聡

はじめに

生きることに精一杯で(笑)、はんだごてを握ったり、手持ちの測定器の電源を入れたりする機会が非常に少ない今日このごろです。そんななかのちょっと前のある日、なんだったか記憶はありませんが、何かの信号波形を観測しようと思い、手持ちのスペクトラム・アナライザ(以降「スペアナ」)HP 8560E の電源を入れました。

スペアナの起動画面を見ることなく、測定を開始したところ、測定対象である信号波形のスペクトルが観測できません。「?」と思いオシロスコープで確認すると、その波形自体は観測できます。「おかしいなあ、まあ電源を入れなおしてみるか…」とスペアナの電源を入れ直し、起動画面を見ていると…、「あちゃー」。図 1 のようなエラー(ERR334)が表示されているではありませんか…。がっくり…。

がっくり…でした。使用頻度が低いとしても、故障は頻度に関わらず発生してくれます(笑)。とうの昔にメーカ修理対象外になっていますので、たまに修理をお願いする、自宅から少し離れた中古測定器販売・修理を行う業者さんに持ち込むことにしました。

サービス・マニュアルは記述が丁寧であり、ネットをみるとご自身で修理する方も結構いらっしゃるのですが、自分の時間的都合と自身の知見を考え、「ある程度値段が張っても、結果的には早いか」と、その業者さんにお願いすることになった次第です。2週間後に返却となり、修理金額は◎◎◎円でしたが無事に動作し、ほっとしました。故障個所は「YTO; YIG = “Yttrium Iron Garnet” Tuned Oscillator)不良」ということで、私の手におえる故障ではありませんでした(笑)。

図 1. 手持ちのスペアナ HP 8560E に表示されたエラー、ERR334(がっくり…)
図 1. 手持ちのスペアナ HP 8560E に表示されたエラー、ERR334(がっくり…)
図 2. AD9913 のデータシート[1]から抜粋した DDS ブロックの詳細構造
図 2. AD9913 のデータシート[1]から抜粋した DDS ブロックの詳細構造
図3. AD9834 のデータシート[2]から抜粋した DDS ブロックの詳細構造
図3. AD9834 のデータシート[2]から抜粋した DDS ブロックの詳細構造

この顛末も「スペナアナさん、たまにはちゃんと使ってあげますか」と、この技術ノート・シリーズで DDS AD9913 を取り上げようと思った、実は…、別の理由なのでした。

 

前回そして今回のお話しは

前回(前編)は、DDS IC AD9913 [1]を 25MHz の XTAL クロックで動作させ基本動作とスペクトルを確認し、内蔵クロック逓倍器(PLL Clock Multiplier)を動作させ、DDS 動作クロックを 𝑓𝑆𝑌𝑆𝐶𝐿𝐾 = 250MHz (250Msps)にして、そのスペクトルを観測してみました。

また最後に AD9834 [2]という DDS ICで生じた奇妙なスプリアスをみてみました。そしてそのスプリアスは「Phase Truncation (位相打ち切り)」というものが原因だと、ちらりとお話ししました。

今回はこの Phase Truncation(位相打ち切り)のようすをより詳しくみていきたと思います。またさらに AD9913 の便利な機能をご説明し、その動きを実際に観測してみたいと思います。

 

Phase Truncation によるノイズ(位相打ち切り誤差ノイズ)

前回の図 11 でみてきたスプリアス、Phase Truncation(位相打ち切り)によるスプリアスは、[3]の文献中の「The Effect of Truncating the Phase Accumulator on Spurious Performance」という節で説明されています。

図 2、図 3 は AD9913 と AD9834 のデータシート[1, 2]から抜粋した DDS ブロックの詳細構造です。0°から 360°の位相数値を刻むアキュムレータ(累積器)は、𝐹𝑇𝑊(𝐹𝑇𝑊は Frequency Tuning Word の頭文字をとったもので、TUNINGWORD の設定値です)と同じビット幅の 32 ビット/28 ビット(AD9913/ AD9834 の順。以下同様)になっています。しかし正弦波数値に変換する「ANGLE TO AMPLITUDE CONVERSION(位相/角度数値から正弦波振幅数値への変換)」ブロックへ供給されるワードは、そのうち上位の 15 ビット/12 ビットになっています。さらにその出力は 10 ビット DAC を動作させるため、10 ビット幅になっています。

すなわちアキュムレータから、正弦波数値として変換されるビット幅は 15 ビット/12 ビットで Truncate(打ち切り)され、さらに 10 ビットに Truncate されています。AD コンバータが AD 変換動作で量子化ノイズを生じることと同じく、DDS 出力 (DAC 出力)が 10 ビット分解能であることから、DAC 出力で振幅誤差や位相誤差が生じ、それが「ゆらぎ」となり、スプリアスとして見えることになるわけですね。

これをもう少し詳しく見ていきましょう。

 

Phase Truncation によるノイズを詳しくみてみる

DDS の出力周波数𝑓𝑂𝑈𝑇

数式1

と表現できます。𝑓𝑆𝑌𝑆𝐶𝐿𝐾 は DDS 動作クロック、𝐹𝑇𝑊 は TUNINGWORD の設定値、𝑁はアキュムレータのビット幅(ワード長)です。AD9913 なら𝑁 = 32ビット、AD9834 なら𝑁 = 28ビットです。

FTW = 1 だとして、位相数値である図 2、図 3 のアキュムレータ出力が非常にゆっくり変化していく例を考えます。これを図 4 に示しますが、たとえば AD9913 であれば 32 ビット分解能なので、非常に細かい位相変化ステップとなり、その変化は「連続信号(アナログ)」とみなすことができます。

DAC は 10 ビットです。その前段の「ANGLE TO AMPLITUDE CONVERSION(位相数値から正弦波振幅数値への変換)」ブロックの演算精度は、AD9913 なら図 3 のように 15 ビットです。 DAC の 10 ビット幅から見れば ANGLE TO AMPLITUDE CONVERSIONブロックの 15ビット幅は「十分に高精細」、5ビットなので 1/32 =-30dBに微細化とみなすことができます。

そうするとちょっと乱暴な取り扱いですが(位相数値から正弦波振幅数値への変換処理を無視していますが)、図 5 のように、 図 4 の「連続信号(アナログ)」とみなせるアキュムレータ出力を 10 ビット分解能に「Truncation(打ち切り)」する動作だと簡略的に考えることができます。

この「Truncation(打ち切り)」により、10 ビット DAC において本来の位相・振幅値からの誤差が生じ、それが前回の図 11 で見えたスプリアスになるわけです。それこそ 10 ビット AD コンバータでアナログ信号をサンプリングしたときに生じる量子化誤差と同じです。

図 6、図 7 は上記を具体的に説明するために、具体的な数字を入れて、連続した 2 周期でのゼロクロスの状態を表現したものです。

図 4. アキュムレータ出力は 32 ビット(AD9913 では)なので「連続信号(アナログ)」とみなせる(FTW = 1 で考えると腹落ちする)
図 4. アキュムレータ出力は 32 ビット(AD9913 では)なので「連続信号(アナログ)」とみなせる(FTW = 1 で考えると腹落ちする)
図 5. 「連続信号(アナログ)」とみなせたアキュムレータ出力を DAC への入力信号として 10 ビットに Truncation(打ち切り)すると量子化ノイズに相当する誤差が生じる
図 5. 「連続信号(アナログ)」とみなせたアキュムレータ出力を DAC への入力信号として 10 ビットに Truncation(打ち切り)すると量子化ノイズに相当する誤差が生じる

同図では以降に例として示す𝐹𝑇𝑊 = 0x47AE147Bにして計算してみました。このとき得られる周波数は、さきの条件で 70,000,000. 00698Hz。周期は 14.286ns です。

図 6 は図 5 で「連続信号(アナログ)」とみなすことができた 32 ビットアキュムレータ出力を、「32 ビット DAC への入力信号」として Truncation(打ち切り)なしにしたときのゼロクロス付近の数値例です。DAC 出力の数値(sinθ)を赤で示していますが、小数点以下を 4 桁で表示しています。本来はもっと微細ですが 4 桁で表記しました。これを基準にします。

つづいて図 7 は 32 ビットアキュムレータ出力を、図 5 の 10 ビット DAC への入力信号として 10 ビットに Truncation(打ち切り)したときのゼロクロス付近の数値例です。ビット幅が 10 ビットということで、図 6 の小数点以下 4 桁(実際はもっと微細ですが)が 3 桁に丸められているという形で、Phase Truncation(打ち切り)を簡略的に表現しています。

図 6、図 7 では、連続した前後の 2 サンプル間を直線で補間しています(実際は sinc 関数で補間することが適切でしょう)。丸め誤差のようすを少し誇張して書いてあります。ここから分かることは、丸めにより、図 6 で示した本来ゼロクロスするタイミングから、図 7 ではそれが若干異なっていることです。

これは「位相ジッタ」になります。この成分が前回の図 11 のスペクトルで見えたスプリアスになっているわけです。また別の見方としては位相ジッタだけでなく、振幅においても量子化誤差が生じている、振幅変動もある、とも言えます。

図 6. 「連続信号(アナログ)」とみなせた 32 ビットアキュムレータ出力を 32 ビット DAC への入力信号として Truncation (打ち切り)なしにしたときのゼロクロス付近の数値例(赤の sin 値は 4 桁で表記)
図 6. 「連続信号(アナログ)」とみなせた 32 ビットアキュムレータ出力を 32 ビット DAC への入力信号として Truncation (打ち切り)なしにしたときのゼロクロス付近の数値例(赤の sin 値は 4 桁で表記)
図 7. 「連続信号(アナログ)」とみなせた 32 ビットアキュム レータ出力を 10 ビット DAC への入力信号として 10 ビットに Truncation(打ち切り)したときのゼロクロス付近の数値例(赤の sin 値は 10 ビットで丸められたとしている。拡大して表記している
図 7. 「連続信号(アナログ)」とみなせた 32 ビットアキュム レータ出力を 10 ビット DAC への入力信号として 10 ビットに Truncation(打ち切り)したときのゼロクロス付近の数値例(赤の sin 値は 10 ビットで丸められたとしている。拡大して表記している)

 

整数倍にならない条件で AD9913 ではどうなる

それでは前回 AD9834 でおこなったものと同じ実験を、AD9913 でやってみましょう。図 8 は AD9913 において𝑓𝑂𝑈𝑇と𝑓𝑆𝑌𝑆𝐶𝐿𝐾が整数倍にならない条件、これは前回の AD9834 で実験した条件と同じ、𝑓𝑆𝑌𝑆𝐶𝐿𝐾: 𝑓𝑂𝑈𝑇 = 1: 1/3.57142857 (1:0.28)という比率で実験したものです。

AD9913 では𝑓𝑆𝑌𝑆𝐶𝐿𝐾 = 250MHzですから、出力周波数𝑓𝑂𝑈𝑇 ≈ 70MHzになります(𝐹𝑇𝑊 = 0x47AE147B)。ただし 70MHz は整数で割り切れません。実際の𝑓𝑂𝑈𝑇も 70,000,000.00698Hz となりピッタリの周波数を出力できません。

スペアナは中心周波数を 80MHz にして、スパンを 160MHz にしてあります。ここでは広帯域での観測ということで、ダイナミック・レンジを稼ぐため(ノイズ・フロアを低下させるため)、差動プローブの減衰比を、これまで÷10 だったものを、ここで は÷1 にしてあります(情けない話しですが、差動プローブ P6247 が高価なので、大入力で飛ばしたくないのです…汗)。

またスペアナのスイープごとで若干周波数位置が変動するようで(古いスペアナなので…)、複数回のアベレージングを施すと平均化によりスペクトルが低下してしまいました(涙)。そこで今回の測定ではアベレージングは無しにして、RBW, VBW (Resolution Bandwidth, Video Bandwidth。スペアナの信号検出帯域幅設定)を狭くし、掃引時間を長くして観測してみました。

図 8 では AD9834 と同じように Phase Truncation によるスプリアスが確認できます。キャリア比で-60dBc以下程度で AD9834とだいたい同じレベルといえるでしょう。AD9834と同じ周波数比の条件ではありますが、それでもスプリアスの出ている周波数は異なっています。

図 9 はスパンを 5MHz にしてみたものです。出力周波数を上昇させると、内蔵 PLL によるクロック逓倍器のサイドバンド(Single Side Band; SSB)位相ノイズが明確に見えてくることが分かります。

前回の図 11(15.625MHz出力)では 1kHz離調(キャリアからのオフセット周波数という意味です)で-101dBc/Hz 程度でしたので、明確には(綺麗には)サイドバンド位相ノイズを観測できていませんでした。これは出力周波数が低かったため、DDS 動作クロックによる位相ジッタの影響もそれに比例して低速になり、出力信号のサイドバンド位相ノイズが発生する離調周波数や影響度が低減することが理由と考えられます。また前回のその図では、キャリア近傍のサイドバンド位相ノイズを観測しようとしても、スペアナ 8560E 自体のサイドバンド位相ノイズ・フロア [4]により、測定限界に近づいていたこともあります。

周波数が4.5倍(70MHz)になると、サイドバンド位相ノイズも 250kHz 離調付近で最大となり、きちんと-102.5dBc/Hz と測定できます。離調度が大きいので、スペアナ 8560E 自体のサイド

図 8. AD9913 で 70MHz の信号のスペクトルを測定 (スパン 160MHz。アベレージングは無し)。AD9834 と同様にスプリアスが観測できる
図 8. AD9913 で 70MHz の信号のスペクトルを測定 (スパン 160MHz。アベレージングは無し)。AD9834 と同様にスプリアスが観測できる
図 9. AD9913 で 70MHz の信号のスペクトルを測定 (スパン 5MHz。アベレージングは無し)。サイドバンド 位相ノイズがきれいに観測できる
図 9. AD9913 で 70MHz の信号のスペクトルを測定 (スパン 5MHz。アベレージングは無し)。サイドバンド 位相ノイズがきれいに観測できる
図 10. AD9913 で 4.375MHz の信号のスペクトルを測定 (スパン 10MHz。アベレージングは無し)
図 10. AD9913 で 4.375MHz の信号のスペクトルを測定 (スパン 10MHz。アベレージングは無し)

バンド位相ノイズ・フロア [4](測定限界)もその離調周波数では低減するため、綺麗にサイドバンド位相ノイズが観測できるようになるわけです。

図 10 は出力周波数を 70MHz の 1/16 である 4.375MHz にしてみたものです。ここでもスペアナはアベレージングを施していません。この条件でも整数関係にはなっていませんが、周波数を下げることで、Phase Truncation によるスプリアスが低減していることが分かります。またサイドバンド位相ノイズも低減していることも分かります。

 

ピッタリ周波数を発生させるための PROGRAMMABLE MODULUS 機能

 

ピッタリ周波数を出したいんだが

式(1)からも分かるとおり、DDS は非常に細かいステップでの信号を発生させることができます。𝑓𝑆𝑌𝑆𝐶𝐿𝐾 = 250MHzであれば AD9913 のステップ周波数は 58mHz ステップです。

しかし 10MHz の外部クロック(よく基準周波数として用いられる周波数)を AD9913 に供給し、クロック逓倍器で 25 倍し DDS 動作クロックを𝑓𝑆𝑌𝑆𝐶𝐿𝐾 = 250MHz (250Msps)にし、たとえば 「20MHz ピッタリを出力したい」という場合は、残念ながら、そのピッタリ周波数を出力させることはできないのです。これは式(1)を𝑁 = 32として変形すると、

数式2

という関係になりますから、この条件では𝐹𝑇𝑊は整数にはならないからです。たとえば、

𝐹𝑇𝑊=343,597,383で19,999,999.9604Hz
𝐹𝑇𝑊=343,597,384で20,000,000.0186Hz

となります。実際に 10MHz を外部からクロック源として加え、クロック逓倍器を×25 に設定して𝑓𝑆𝑌𝑆𝐶𝐿𝐾 = 250MHz、また FTW = 343, 597,383 (16 進数で 0x147AE147)で「ほぼ」20MHz の周波数を出力し、10MHzのクロック源(正弦波)と DDS 出力 の時間波形を測定したものを図 11 に示します。

この測定ではオシロスコープを 5 秒間の累積表示(パーシステント; persistent)にし、クロック源の 10MHz でトリガをかけています。上の 10MHz クロックに対して、下の DDS 出力の 20MHz とおぼしき波形が「流れていく」ことが分かります。これはふたつの周波数が同期して「いない」ことを示しています。

「20MHz ピッタリを出力したい」という場合はどうしたらよいでしょうか。

 

AD9913 に内蔵されている「PROGRAMMABLE MODULUS MODE

AD9913 のデータシートを読んでみると、「PROGRAMMABLE MODULUS MODE」という機能が紹介されています。そういう私も前回(TNJ-073)の図 1 のクロック発生器を製作したときには気がつきませんでした(使う必要もありませんでしたが)。

前回ご紹介した『私の部品箱』[5]の原稿執筆中に AD9913 のデータシートを読んでいたとき、「なんだこれは?」と気づいた機能なのでありました。データシートには以下のように記載されています。

図 11. FTWを十進数で 343,597,383 にしてみると 10MHz のクロック源(上)と 20MHz の DDS 出力(下)のふたつの周波数が同期していないことが確認できる[5 秒間の累積表示(パーシステント; persistent)で観測]
図 11. FTWを十進数で 343,597,383 にしてみると 10MHz のクロック源(上)と 20MHz の DDS 出力(下)のふたつの周波数が同期していないことが確認できる[5 秒間の累積表示(パーシステント; persistent)で観測]

In programmable modulus mode, the auxiliary accumulator is used to alter the frequency equation of the DDS core, making it possible to implement fractions which are not restricted to a power of 2 in the denominator.

日本語に翻訳してみると

PROGRAMMABLE MODULUS MODE(係数設定モード)では、補助アキュムレータを使用することで、DDS コアの周波数生成式を変えることができます。それにより周波数生成式の分母にある 2 の累乗の係数に制限されることなく、分数形式の周波数生成式を設定することができます。

 

DDS の周波数分解能は 2 の N 乗ぶんの 1 のかたち

ごちゃごちゃと仕組みを説明していきますが、最後に実測結果を示したいと思いますので、お付き合いください(汗)。

DDS の周波数分解能∆𝑓𝑂𝑈𝑇は 2 の累乗分の 1 で制限されます。 AD9913 の NCO(Numeric Controlled Oscillator; 数値制御発振器)のアキュムレータは32 ビット幅であることから、

数式3

として「2 の 32 乗分の 1」となります。先に示したように、この周波数分解能ステップから偏移した周波数を発生させることはできません。

PROGRAMMABLE MODULUS MODE はこの「周波数分解能ステップからの偏移」を可能にする動作モードなのです。しかしデータシートにはその詳細が示されておらず、「詳細は AN-953 [6]を参照してください」と記されています。

その AN-953の説明を利用しながら、周波数分解能ステップから偏移した周波数を発生できるしくみを考えてみましょう。

さきと同じく 250MHz を DDS 動作クロック𝑓𝑆𝑌𝑆𝐶𝐿𝐾とし(外部クロック 10MHz を 25 逓倍)、出力周波数𝑓𝑂𝑈𝑇 = 20MHz を得るケースで考えてみましょう。式(2)でも判明したように、

数式3-2

を満たす𝐹𝑇𝑊は整数にはなりません。単純計算してみると 𝐹𝑇𝑊 = 429,496,729.6で「コンマ 6」の端数が生じてしまいます。整数で計算すると、これも先に示したように

数式3-3

となり、ぴったり 20MHz を生成できません。「ミリヘルツ・オーダのズレなら問題ないだろう」とも思いますが、相互に周波数同期が必要なシステムであれば、このような周波数ズレは許容できません。ここで威力を発揮するのが「PROGRAMMABLE MODULUS MODE」なのです。

繰り返しますが、これまで示したように常識的な DDS として得られる出力周波数は、式(2)を再掲すると

数式2再掲

であり、𝐹𝑇𝑊は整数値です。式の分母は AD9913 の 32 ビット幅アキュムレータの仮定です。PROGRAMMABLE MODULUS MODE ではこれを

数式4

とできるものです。𝑋, 𝐴, 𝐵は整数値(32 ビット幅)です。この式により TUNINGWORD を非整数値(Fraction; 分数値)

数式5

として設定できるようになるのです。それでも𝐴, 𝐵は「整数値」である制限があります。具体的に先の例で計算してみます。

数式6

ここで232 < 12.5𝑋となる最大の𝑋を選ぶと

𝑋=343,597,383

であり、さきに𝐹𝑇𝑊を計算した例と同じです。上記の式(6)を移項して𝑋の数値を代入し、

数式6-2

ここで232 = 4,294,967,296なので

数式6-3

これにより(右辺を整数にするため、両辺を 2 倍し)

数式7

が得られます。上記をより一般化してみると

数式8-9

ここで𝑃,𝑄は𝑓𝑂𝑈𝑇, 𝑓𝑆𝑌𝑆𝐶𝐿𝐾の比、𝑁はアキュムレータのビット幅 (AD9913 では 32 としてきたもの)、Frac( )はカッコの中の数値の小数点以下の部分を分数として返す関数を意味し、𝑋は上記同様、カッコ中の数値の小数点以下を切り捨てた最大の整数値ですから、Frac( )の計算には𝑋は影響がなく、結局

数式10

と表すこともできます。また𝑋も

数式11

さきの AD9913 で 250MHz から 20MHz を出力する例であれば、 𝑃/𝑄 = 20/250 = 1/12.5で式(9) を用いて

数式12

図 12. PROGRAMMABLE MODULUS MODE で 20MHz の信号のスペクトルを測定(差動プローブでの測定。スパン 10kHz。基準周波数自体が同期していないから無意味な測定ともいえるが…)
図 12. PROGRAMMABLE MODULUS MODE で 20MHz の信号のスペクトルを測定(差動プローブでの測定。スパン 10kHz。基準周波数自体が同期していないから無意味な測定ともいえるが…)
図 13. 10MHz 外部クロック(上)と PROGRAMMABLE MODULUS MODE で発生させた 20MHz の DDS 出力(下)。ふたつの信号の周波数が同期していることが確認できる[5 秒間の累積表示で観測]
図 13. 10MHz 外部クロック(上)と PROGRAMMABLE MODULUS MODE で発生させた 20MHz の DDS 出力(下)。ふたつの信号の周波数が同期していることが確認できる[5 秒間の累積表示で観測]

として、当然ながら式(7)と同じ結果を得ることができます。

図 12 にPROGRAMMABLE MODULUS MODE で 20MHz ピッタリを出力したスペクトルを示します。スペアナと AD9913 の基準周波数自体が同期していませんから、この測定はホント無意味ですが…。それでもサイドバンド位相ノイズが殆んど上昇していないことが分かります。つま り PROGRAMMABLE MODULUS MODE で動作させても、DDS 出力信号の位相ジッタ変動は非常に低いということです。

図 13 にクロック源の 10MHz でトリガをかけ、オシロスコープ で 5 秒の累積表示をさせ、クロック源の 10MHz(上)と、PROGRAMMABLE MODULUS MODE で発生させた 20MHz の DDS 出力(下)の時間波形を測定した結果を示します。位相ズレが生じておらず、ここまでの考えが正しいことが分かります。

 

整数動作しかできないデジタル回路である DDS でどのように非整数値(Fraction;分数値)の動 作を実現するのか

しかしここで不思議なことは、「整数動作しかできないデジタル回路である DDS で、どのように非整数値(Fraction;分数値)の動作を実現するのか(見出しのまま…汗)」ということです。 𝐴/𝐵 = 17/25 = 0.68なんというタイミングで DDS 動作クロック𝑓𝑆𝑌𝑆𝐶𝐿𝐾が都合よく動くことなどありえません。

アナログ・デバイセズの日本法人に勤務していても、設計詳細情報は、実は…知ることができないので(本社のアプリケーション・エンジニア経由で聞き出すこともできるでしょうが、スルーされそうです)、このうごきを自分なりに考えてみました。

データシートによると、PROGRAMMABLE MODULUS MODE でAD9913にプログラムする値は、𝑋, 𝐴, 𝐵と記載されています。

Register 0x06 [63:32] = B

Register 0x06 [31:0] = X

Register 0x07 [31:0] = A

それぞれ 32 ビット幅です。これまでの条件だと、それぞれ十進数で、

𝑋=343,597,383

𝐴=17

𝐵=25

なお列挙の順番は変更しました。𝑋はこの技術ノート・シリーズの最初から示してきた TUNINGWORD 設定値と同じもの(𝐹𝑇𝑊)で、NCO のアキュムレータの 1 累積動作(1 CK)での増分になります。

ここで𝐵 = 25回の累積動作(25 CK)のうち、𝐴 = 17回ぶん、TUNINGWORD 設定値(𝐹𝑇𝑊)が「𝑋プラス 1」でアキュムレータが増加したとします。𝐵 = 25のみを考えると、25 回(25 CK)の累積動作における「総累積増分数」

𝑋×𝐵=343,597,383×25=8,589,934,575

に対して、𝐴 = 17回ぶんの動作で「𝑋プラス 1」されれば

𝑋×𝐵+𝐴=343,597,383×25+17=8,589,934,592

の「総累積増分数」を実現できます。これは NCO での

数式1

回に相当する累積動作(CK 数)で 1 周期の正弦波が生じている状態で、(実際は𝑊とは無関係ですが)𝐵回数(25 回)において𝐴回ぶん(17 回)だけ、TUNINGWORD 設定値(𝐹𝑇𝑊)が 1 だけ増える動作だと考えることができます。

つまり𝐴, 𝐵, 𝑊の関係で、ときどき正弦波のタイミング(位相と言えるかも)が変化することになります。しかしこのケースでは、本来の TUNINGWORD 設定値(𝐹𝑇𝑊)が 343,597,383 ですから、これが 1 だけプラスされても、0.003ppm 程度の変化となり、波形の乱れにはほとんど影響を与えないことが分かります。

 

低い周波数ではどうなるのか

「𝐹𝑇𝑊が大きい場合は問題ないことが分かった。しかし𝐹𝑇𝑊が小さい場合はどうなるか?」という疑問が続いて湧いてきます(笑)。

ここでも DDS 動作クロックは𝑓𝑆𝑌𝑆𝐶𝐿𝐾 = 250MHzで考えましょう。一例として非整数値 TUNINGWORD を

数式11-3

としてみましょう。目的の出力周波数は、式(1)から

数式11-4

となります。整数で計算すると(それぞれ十進数)

𝐹𝑇𝑊 = 10で𝑓𝑂𝑈𝑇 = 0.58208Hz
𝐹𝑇𝑊 = 11で𝑓𝑂𝑈𝑇 = 0.64028Hz

でこの真ん中の周波数です。𝐴と𝐵の比が 1:2 なので、NCO が繰り返し正弦波を生じさせるなか、TUNINGWORD 設定値(𝐹𝑇𝑊)が 1 だけ増える動作は、2 回に 1 回となります。

しかしこれは全く問題ありません。波形(カウンタ、アキュムレータである NCO)の 1 周期のカウンタ・ステップ数が 4,294,967,296(232)で、この1周期ステップにおいて𝐹𝑇𝑊 = 10 (十進数)とする累積動作が 50%、𝐹𝑇𝑊 = 11(十進数)とする 累積動作も50%とはなりますが、1周期の正弦波波形出力におけ る累積動作が𝑊 = 409,044,504.38 回(CK)もあるため、波形の 1 周期においての位相ジッタ変動は「ない」と言い切れるほど 小さいものになります。

ところで当然ながら、このような低い周波数を発生させるのであれば、250MHz などという非常に高い DDS 動作クロック 𝑓𝑆𝑌𝑆𝐶𝐿𝐾を使用する必要はありません。その低い DDS 動作クロックを用いるときでも、TUNINGWORD 設定値(𝐹𝑇𝑊)が大きくなるわけですが、それでも十分な累積動作回数となるため、波形(位相)変化は非常に微小であることが予想されます。

AD9913。よくできていますね。いつものように執筆しながら考えていく回路設計WEBラボ。関心しながらの執筆となっています。

 

最近のアナログ・デバイセズの DDS 製品

最近のアナログ・デバイセズでは、「ダイレクト・シンセサイザ」というカテゴリでの新製品は発売されていません。それは「もう作らないのか」ということではなく、実は高速 DAC 製品のうちの、ひとつの機能として用意されています。

一例として AD9174 をご紹介しておきましょう。

AD9174 デュアル、16 ビット、12.6 GSPS RF DAC および DDS(ダイレクト・デジタル・シンセサイザ)

https://www.analog.com/jp/ad9174 

【概要】

AD9174 は、最大 12.6GSPS の DAC サンプル・レートをサポートする高性能なデュアル 16 ビット D/A コンバータ(DAC)です。15.4Gbps の 8 レーン JESD204B データ入力ポート、高性能オンチップ DAC クロック逓倍器に加えて、DC~無線周波数(RF)のシングルバンドとマルチバンドのワイヤレス・アプリケーションを対象としたデジタル信号処理機能を特徴としています。

AD9174 は高速データ入出力インターフェース JESD204B をもつ 高速 DAC なのですが、「Standalone (DDS) Mode / NCO Only Mode」というものを搭載しており、JESD204B によるデータを 与えることなく、単独で DDS として動作できるものです(PROGRAMMABLE MODULUS MODE も用意されています)。

高速 DAC AD917x シリーズの他の製品などでも、DDS 動作が実現できます。DAC の分解能 16 ビット、かつ FTW もなんと!48 ビット幅と非常に微細な周波数チューニングが実現できます。

図 14. AD9174 の DDS 設定のポイント。DC AMPLITUDE LEVEL を設定して、データパスを DC 入力に切り替えて NCO を動作させる(データシート Figure 80)
図 14. AD9174 の DDS 設定のポイント。DC AMPLITUDE LEVEL を設定して、データパスを DC 入力に切り替えて NCO を動作させる(データシート Figure 80)
図 15. 図 14 の NCO ブロック内部構造(データシート Figure 73)
図 15. 図 14 の NCO ブロック内部構造(データシート Figure 73)

「とりあえずこんな感じ」というご参考までに、図 14 と図 15 に AD9174 を DAC として動作させず、DDS として動作させるとき に関連するデータ経路についてご紹介しておきます [7]。

この DAC AD9174 の本来の機能としては、NCO によるキャリア数値に、入力信号電圧に相当する数値で変調をかけるものですが、DDS として動作させる場合には、図 14 にあるように DC AMPLITUDE LEVEL で直流レベルを設定し、この直流レベルと NCO 数値を乗算させることで、CW(Continuous Wave)出力の DDS 動作を実現できます。

 

遥かなる思い出「74HC16x ロジックをしゃぶりつくしてみた日々」

「DDS のコアはカウンタ回路」だとさきに(前回の TNJ-073 で)説明しました。最近の論理設計は、HDL や C 言語ベースの記述言語が使われますが、それらの言語で設計するうえでも知っておいたほうが良いと思うのが、HCMOS IC の 74HC160, 161, 162, 163(シーケンサ活用からすれば 162, 163 が良好かも)をしゃぶりつくす技…だと「私は考えます」。

これらは 4ビットの Binary/Decimalのカウンタですが、ロード動作や Enable P/T、リプル・キャリ出力を活用すると相当複雑な論理動作(シーケンサ/ステート・マシン)を実現することができます。私もグルー・ロジックを付加したり、74HC16x を複数にカスケード接続したりして、結構複雑な動作をさせたものでした。

「論理動作の基本を骨に染み入らせることができますので、是非 74HC16x ロジックをしゃぶりつくしてみてください!」と申し上げたいところですが、近年の複雑な仕様要求かつ有り余るロジック・ゲートをもつ FPGA の設計などの世界では、「そんな時代遅れな…」とか言われてしまいそうですね(笑)。

ちなみにただいまアナログ・デバイセズ株式会社では、若手チームが「マイコン入門」という自学勉強会を開催しているそうです。これが組み込みプログラミングの勉強ではなく、「RTL でマイコンを設計する」という、なんとハイレベルな勉強会のようです…(伝え聞いているだけですが)。それを知って 「74HC で 4 ビット・マイコンでも作ってみますか!」なーんてつぶやいてみる齢(よわい)の私でありました。なお RTL も VHDL なら(Verilog は読めませんが)十分に書けますけれども…。

齢は齢なんですが、「頭脳構造は中学生のころのままのレベルだなぁ」と、妻とも話しをしています(笑)。いや、「言われています」が正しいでしょうか(汗)。