7シリーズFPGAでの非同期クロック切り替え

注文済みの基板の到着を待つ間に、FPGAデザインの修正を行いました。

ADCにつながる信号線のピン配置を変更しても良かったのですが、今回の基板は、前回とは異なるコネクタに装着することになります。 つまり、新旧二つの基板を、同時に一つのZ-turn boardに装着することができます。 それで、Z-turn board上に実装されているディップスイッチで、どちらの基板からの信号を処理するかを変更できるようにしました。

FPGAの大きさとしては、両方の基板からのADCデータを同時に処理することも可能です。 でも、そこまでする必要性を今は感じません。それで、FM処理回路自体は1つだけで、当該回路にどちらの基板から信号を供給するかを、スイッチで切り替えるという算段です。

それで、ひとまず想定した実装を行って、既存基板で動作することを確認しようとしたら、どうにも動作しませんでした。 調べてみたところ、MMCMのlocked信号がHighになっていない。つまり、基板からの40MHzのクロックがちゃんと切り替えられていない。

結果として、次のようにすることで解決できました。

BUFGCTRL bufg_inst (  // use as asynchronous MUX
    .IGNORE0    (1'b1),
    .IGNORE1    (1'b1),
    .CE0        (1'b1),
    .CE1        (1'b1),
    .S0         (!SW[2]),
    .S1         (SW[2]),
    .I1         (w_adc_ck_bufg),
    .I0         (w_adc_ck_b_bufg),
    .O          (w_adck)
);

最初はBUFGMUX_CTRLを使用していましたが、それが原因でした。UG472をよく読んでみると、 BUFGMUX_CTRLは基本的には、どちらの入力クロックも常時トグルしている場合に使用することが前提となることが分かりました。

それだと、場合によって(必要な要件によって)は当然困った事態になりますので、ちゃんと回避方法が準備されています。 それが、BUFGCTRLのIGNOREピンです。IGNORE0をHighにすると、I0ピンのクロックからI1ピンへのクロックの切り替えが(クロックの変化を待たず)即時に行われます。IGNORE1をHighにすると、I1ピンからI0ピンへのクロック切り替えが即時に行われます。

というわけで、上記のように記述することで、現在のように片方の基板が接続されていない(したがってI0がずっとLow)場合でも、 SW[2]の切り替えに応じてクロック選択が可能になりました。

ADCのフロントエンドの設計

ADCの分類方法として、アナログ信号の入力部にバッファがあるか、無いかというものがあります。 後者は、スイッチキャパシタ方式と呼ばれています。文字通り、キャパシタにスイッチが付いていて、 クロックのHigh, Lowに合わせてスイッチが開閉することで、電荷を蓄積し、 その電荷をデジタル値に変換するという動作をするようです。

それぞれのタイプには、以下のような利点と欠点があります。

利点 欠点
バッファタイプ アナログ入力部のインピーダンスが一定なので、設計しやすい 消費電力が大きい
スイッチキャパシタタイプ 低消費電力 アナログ信号の周波数に応じて、入力インピーダンスが変化する

スイッチキャパシタタイプを使用する場合には、フロントエンド部の設計にも気を遣う必要があります。 それについて、Analog DevicesのAN-827(日本語)(英語)とAN-742(日本語)(英語)が参考になりました。

キャパシタに電荷をためる段階をtrack-modeと呼び、電荷を保持する段階をhold-modeと呼びますが、 track-modeのインピーダンスマッチングを取ることが必要です。 とりわけ、インピーダンスのうち、キャパシタ由来の虚数成分を、フロントエンドでインダクタを使用して打ち消すことが結構重要のようです。資料には、その定数の求め方の計算例が出ていました。

また、資料中の図から、200MHzあたりを超えるとインピーダンスは実数成分、虚数成分ともにそれほど変化していないようです。 100MHz以下の領域では周波数に依存して大きく変化しています。

現在使用しているADCであるLTC2292も、フロントエンドの推奨として、70-170MHz, 170-300MHz, 300MHz以上という3つの例がデータシートに出ていますが、おおむねこのような分類で周波数を網羅できる理由も理解できました。

ADC基板の改版

ADC基板を改版して、またElecrowに製作を依頼しました。 今回は、基板を分離して、(1) FM BPF基板、(2) ADC基板 という二枚構成にしました。 ADC基板がZ-turn boardに接続され、FM BPF基板には+5Vを供給します。

BPF基板は、トラ技2015/4を参考に、76-95MHzを通過帯域とすることを目指しています。

ADC基板は、前回とは以下の部品を大きく変えました。

  • 発振器:前回はSiTimeのMEMS発信器+-5ppm品を使用しましたが、これは結構高かった(7USD程度)のに加え、 推奨3.3V駆動であり、今回は3.0Vにしたかったので、+-1ppmのTCXO(3.26USD)を使用しました。 このTCXOはクリップ正弦波出力なので、インバータ(On semiconductor: NC7SVU04)と1MΩ抵抗フィードバックで発振させるようにしました。 このタイプの発振器は使ったことがないので、一応推奨の使用方法通りの回路としましたが、しっかり動作するか少し心配です。
  • 差動変換:前回はM/A ComのCenter-tapped transformer (MABAES0060)を使用しましたが、今回はLTC2292の推奨回路に従い、 ETC1-1-13という型番のbalunにしました。
  • SMAコネクタ:前回は基板を貫通する、ライトアングルのコネクタを使用しましたが、 各社の評価基板を見てみると、単純に基板エッジのSMAコネクタは、なんだかカッコ良いです。 真似して、今回はエッジタイプのSMAコネクタにしてみました。

その他としては、今回も音声出力用DAC(NAU8822LYG)を載せましたが、いろいろ調べてみたら、 FPGAで比較的簡単に、 同軸デジタル、あるいはS/PDIFと呼ばれるデジタル音声出力ができそうでした。 もっとも、DACとコネクタ含めても部品代は3USDちょっと程度なので、これを削除してデジタル出力のみにしても、 それほどコストダウンはできません。ただ、DAC部はそれほど注意深く設計していないので、 デジタル出力して、外部のDACで変換して音を聞く、というのは実験する意義があるかと思います。 同軸デジタルであれば、RCAコネクタ、S/PDIFであればTOSLINKコネクタを使用します。

TOSLINKコネクタは1,000円以上するかと思っていましたが、 調べていたら100円くらいとお安い(秋月)ものが存在(aitendo)するようですね。digikeyにもありました。 コネクタが高いなら、RCAで良いかと思っていましたが、光だと絶縁できるというメリットがありますからね。

S/PDIFについてはこちらのページも詳しいですね。

それぞれ2枚ずつ製作を依頼しました。これでトータル264USDでしたが、前回のクーポンが使えて、 256.62USDの支払いでした。既に日本円に換算されて、1USD=111.23JPYあたりとなり、 28544JPYでした(送料込み)。

インダクタはこちらが指定した部品を使用してもらえることになりましたが、キャパシタについては Elecrow側が選んだものを使ってもらうことにしました(お値段が高くなりすぎると言われたので…)。 ちょっと特性については心配しています。

以下はおまけのレイアウトです。

ADC基板 (4層 1.6mm)

“ADC rev 0.2”

FM BPF基板 (2層 0.6mm)

“FM BPF”

FM BPF基板の回路図は次のような感じです。

“FM BPF Schematic”

まだ到着まで2週間くらいかかりそうです。

2017/9/12追記: 基板到着しました。2セット製作したので、 1セットは予備で保管しています。試してみたいという方は、twitterでお知らせください。 ご要望が多ければ、再度製作するかもしれません。

記事のまとめ

記事が結構多くなってきて自分で参照するのも大変になってきたので、これまでの記事をまとめます。

SDR関連

ワンセグ関連

GNU Radio + ADALM-PLUTOでの受信, ワンセグデータのファイル保存, OFDM復調, TMCC, SP検出, CFOの影響, QPSK復調成功

BPFのシミュレーション

LNA前部, LNA電源, LNA出力, rev0.1基板のBPF

rev0.1基板の特性

電源, 時報測定, FMパイロット信号, アンテナ未接続時のFFT

rev0.2基板

写真と測定, 時報測定, 概要とデジタル音声出力について. BPF基板回路図

SDR処理実装

AM復調のソフトウェア実装, FM復調全体のソフトウェア実装, 周波数ミキサとCIC, FM復調, FM復調後, DAC動作完, FMステレオ復調

その他

基板写真, DDS, 全体設計構想とLinux, RF電界強度, rev0.1 RF回路図, 部品選定, ADC性能指標, ADCフロントエンド設計, FMアンテナ製作

Web関連

Canvas要素で描画, Canvas描画とWebSockets通信(Haskellサーバ), WebSocketsサーバ高速化, RustでWebSocketサーバ on Zynq, Zynqで動作するWebSocketサーバから受信したデータをブラウザにてFFT表示

FMヨコハマの時報キャプチャ

現在改版したADC基板が届くのを待っていますが、現在の基板の性能データを残しておきたいと思います。

以下はFMヨコハマの時報信号をキャプチャした時のFFTの様子と生データの様子です。

“84.7MHz time signal”

ちょっと検索した感じでは、周波数は分からなかったのですが、1.056kHz程度の信号でしょうか。

理想的には画面上部の信号が正弦波のように見えれば良いことになりますね。 それにしても現状はすごい歪みですね。図の右側の方は多少それっぽくみえていますが、 全体的にかなりギザギザしています。

ADCデータシートの読み方

ADCの性能をちゃんと把握するには、データシートの意味を理解できないといけません。 そのために自分が調べたことをまとめておきます。SDRに関連する、AC性能の指標だけです。

Understand SINAD, ENOB, SNR, THD, THD+N, and SFDR so You Don’t Get lost in the Noise Floor

上記資料に重要なことが上手くまとまっていました。

FFTの読み方

“8192 point FFT”

これは、LTC2291というADCのデータシートからの抜粋です。25MHzでサンプリングし、30MHzの正弦波を入力したデータに8192ポイントのFFTを掛けたものです。このADCは12bitの解像度ですので、SNRは最大でも6.02*12+1.76=74[dB]になるはずです。 でも図を見てみると、ノイズ部分が100[dB]近辺に表れています。

この理由は、上記資料のFigure2から読み取れます。

“FFT Noise Floor”

FFTのノイズフロアの理論値は、SNRの理論値にFFTのプロセスゲインを加えたものになります。 FFTのプロセスゲインは、Mをポイント数とすると、10log(M/2)で求まります。 つまり8192ポイントのFFTであれば、10log(8192/2)=36[dB]がFFTプロセスゲインになります。 この効果のおかげで、ノイズフロアは70[dB]近辺から100[dB]近辺に見えるようになります。

SFDRについて

SFDRとは、入力信号のRMSと一番大きなスプリアスのRMSとの比のことです。 SFDRは、フルスケール比(単位dBFS)と実際の信号振幅比(単位dBc)で表記されます。 この関係についても、上記資料から図を引用します。

“SFDR”

これを念頭に置いてデータシートのSFDRの図を見てみます。

“SFDR vs Input Level”

横軸が、入力信号のレベルになります。つまり、30MHzの正弦波の振幅を大きくしていったときのSFDRが縦軸にプロットされています。 例えば、-60[dBFS]の入力時のSFDR[dBc]は大体-40です。それで、入力信号以外で最も大きいスプリアスのスペクトルは、-60-40で-100[dB]近辺に現れていることになります(はっきりと明記はされていませんが、これも8192ポイントFFTが前提だと思います)。 この100[dB]という値は、dBFSの線の方で描かれています。

結局のところ、入力信号の振幅が大きくなっても、スプリアスの振幅はほぼ一定に保たれる(つられて大きくならない)ということを示すための図といえます。

次に、SFDRと入力信号周波数との関係を示した図を見てみます。

“SFDR vs Input Frequency”

上図から、入力信号の周波数が増すにつれて、SFDRが低下しています。すなわち、最大スプリアスがどんどん大きくなっていく、 ということが分かります。150MHzを超えたあたりで80[dBFS]を下回っています。

別のADCのデータシートから同じ内容を見てみます。

“SFDR vs Input Frequency AD9629”

FM BPFのシミュレーション(3)

前回に引き続き、トラ技の記事の回路をシミュレーションしてみます。 今回はメインとなる、LNA出力部について行いました。

まずは、1MHzから130MHzのゲインの様子です。

“FM BPF 1-130MHz”

次に、54MHzから126MHzまでを拡大してみてみます。

“FM BPF 54-126MHz”

ADC基板のBPFのシミュレーションで試したBPFと比較してみると、 狭い帯域幅で、しかも急峻なフィルタになっていることが分かります。

実際には、LNAの前段にもBPFが入るので、総合すると、 より強力に減衰するようになっています。

FM RFフロントエンドのためのLNA

現在検討しているFM受信のためのRFフロントエンド部で使用するアンプは、 トラ技にあったPSA4-5043+を使用するつもりです。

他にも手ごろで良さそうなものとして、BGU6102というのも候補になっています。こちらの方が安そうですし、しかもdigikeyで購入できるので、 中国の基板屋に頼んでも入手性に問題はなさそうです。

ただ、検討してみると、BGU6102はちょっと微妙になってしまいました。原因はパッドの大きさです。 BGU6102はパッドが小さくて、基板上はおそらく0.2mm四方のサイズになりそうです。 一方、PSA4-5043+は推奨ランドの長辺は0.95mmです。

今回検討している程度の基板なら、できれば両面2層基板で製作したいところです。わざわざ4層というのは大げさです。

でも、Microstrip Line Calculatorで計算してみるとわかりますが、 εr=4.8, h=1.6[mm], t=35[um]で計算すると、特性インピーダンス50Ωを得るには、W=2.82[mm]にもなってしまいます。 4層基板だと、GND層が近いのでhがもっと小さい(例えば0.2[mm])ため、50Ωの線幅は0.33[mm]程度になります。

ちょっと調べてみると、Fusion PCBでもElecrowでも、両面基板で基板厚0.6[mm]というのができるようです(ただ、Fusion PCBだと、0.6[mm]は料金アップで4層に近いお値段になってしまうようです。Elecrowだと料金アップはなさそうです)。

このパラメタを使って、h=0.6[mm]で計算すると、W=1[mm]となります。つまり、配線幅1[mm]で50Ω近くになりそうです。 この幅で配線すれば、PSA4-5043+の端子まで50Ωを維持できそうです。

逆にBGU6102のサイズだと、50Ωの特性インピーダンスを得るには、4層以上の基板で細い配線を使う必要が出てきます。

もっとも、GHzの高周波を扱うわけでもないので、それほどシビアになる必要は無いのかもしれませんが…

FM BPFのシミュレーション(2)

前回に引き続き、トラ技の記事の回路をシミュレーションしてみます。 今回はLNAの電源に使用されているフィルタ部について行いました。

記事で使用しているPSA4-5043は入手できなくなっている(?)ようなので、PSA4-5043+を使用するつもりです。 このチップは、RF出力と同じピンから、チップの電源を供給します。デジタルだと考えられないですが、 結局電圧のバイアスをかけるだけであり、RF信号はいずれにせよ後段でAC結合でバイアスは取り除きますので、 問題にならないのだと思います。

でも、この端子から電源を入れるとなると、こちらにノイズが混入しては元も子もありません。 電源部のためのフィルタ回路が組まれています。

シミュレーション結果は次のようになりました。

まずは、DCから120MHz全体のゲインの様子です。

“LNA Power input filter DC-120MHz”

次に、DCから11MHzまでを拡大してみます。

“LNA Power input filter DC-11MHz”

1MHzを越えると-50dB以上減衰できているようです。低周波数の領域についてはそれほど減衰していません。 こちらについてはLDOで落とすことも考えられますが、果たして必要なのか? この領域であれば、 アナログにノイズが混入しても、デジタルミキサで周波数を移動してLPFをした時点で取り除けるような気もします。

**2017/9/9追記:**次は、入力側のキャパシタの値を0.1uFから10uFまで変化させたときのシミュレーションです。 容量が大きくなるほど減衰量が大きくなっていることが分かります。 製作した基板に使用した0603サイズでも10uF程度のセラコンは入手できそうでした。

“LNA Power input filter DC-11MHz parametric”

下記も参考になりそうなので、後々読んでみたいと思います:

SW電源ACアダプタのノイズ対策①

SW電源ACアダプタのノイズ対策②

FM BPFのシミュレーション(1)

以前製作したADC基板をもう少し良くするために、ADC基板とRFフロントエンド基板を分離して製作することを検討しています。

現在RFフロントエンド基板の回路図を検討しています。実はそのものずばりのものが、トランジスタ技術2015年4月号 170ページからの記事"フルデジタルFMラジオ用アンチエイリアスBPFの製作"という記事にありました。

記事では、簡易なBPF(76-95MHz)を通した後にLNAでゲインアップし、その後、 記事の主な内容となっているBPFを通すというものになっています。

今回は、LNAの前の簡易BPFをシミュレーションしてみました。簡単のため、LやCのESR(寄生抵抗)は無視しています。

“2 pole BPF”

上のような結果になりました。緑の実線が左軸のゲインです。記事の通り76-95MHzは、ほぼ平坦な特性です。