TNJ-011:グラウンドが重要な回路のプロトタイピングの方法(PRBS-16 RTLつき)
2014年8月22日 公開
はじめに
とある理由により、図1のような基板をつくりました。本来であればプリント基板を起こしたかったのですが、手持ちで無垢基板の古いものがあり、また秋月電子で0.65mmのTSOP-8、0.8mmのSOT-23の変換基板が売っていたので、基板を作らずに試作してみようと思いました。

アナログ・エンジニアが好んで使う無垢基板
この写真は途中まで作った基板のようすです。無垢の基板をベタ・グラウンドとしています。アナログ回路は「安定したグラウンド」が大切です。ワイヤを使ってグラウンドを手配線すると、どうしてもインダクタンスの問題が生じてしまいますので、このような形が良いといえます。
周りにアナログ回路ご専門のエンジニアの方がいらっしゃると、その人の作業台のうえで、このような基板を見ることもあろうかと思います。とはいえ、あまりそのような環境ではない方などにとっては、ご参考になろうかと思いましたのでご紹介します。
変換基板で高速コンパレータを実装する
基板上には、高速コンパレータADCMP601を取り付けました。ADCMP601は0.65mmピッチかつ小型パッケージ(SC70)であるため、TSOP-8の変換基板には実装できず、0.8mmのSOT-23の変換基板の方にギリギリ乗せて実装しました。
ADCMP601: コンパレータ、超高速、6ピンSC70およびSOT-23パッケージ
また写真右側にDIP ICソケットが見えますが、ここにはディレイラインを挿入します。各タップから遅延した出力が得られます。今まであまり良いICを探すことができませんでしたが、Data Delay Devices社というものを見つけ、この会社のもの(3D3220シリーズ)を使うこととしました。
「アナログ回路基板のプロトタイピングのはずでは?」と疑問もお持ちになるかもしれませんが、プロトタイピングの一般論としてご覧ください…。
無垢の銅張基板の加工方法
無垢の銅張基板の加工方法について説明しておきましょう。無垢基板はサンハヤトなどで入手可能です。取引のあるプリント基板メーカにお願いするのも手かもしれません。
適切な工具を用いて加工する
これを図2のようなカッター(これはOLFAのpカッターというもの)の、刃の下の鋭角部分を基板に当てて、何度かそぎ切るように切り込み(溝)を作ります。ジョリジョリと切り込みが入れられます。切り込むようすはOLFAのHPで動画がありますので、参考にしてみてください。
片側を深さ1/2程度切り込みを入れて、反対(裏)側もちょっと切り込みを入れると、簡単にパキッと折ることができます。

図2.プリント基板の切断に用いる特殊カッター (OLFAのpカッター)
無垢の銅張基板の加工方法
とはいえ、この無垢の基板は長期間在庫していると化学変化(酸化)して表面の色が変わり、半田付けができなくなってきてしまいます。
そこで折り取った基板を以下のようにして対応します。実は今回使用した無垢基板も「ぼろぼろ」になっているモノでした。
- クレンザーとスポンジで水を使いながら表面を磨きます
- 当然ですが台所や給湯室などのスポンジは使わないでください。また実施する場所も考慮してください
- キレイになったところで、エアーガンやドライヤーで乾かします
- 表面にフラックスを塗っておきます。半田付けがしやすくなるとともに、再度の表面酸化から(ある程度の期間ではありますが)保護することができます
このようにして作った基板が図1の写真です。「グラウンドを安定にさせるべき」ちょっとしたアナログ回路の試作のときに、ご活用ください。
他の方から頂いた試作方法ノウハウ
他の方からも試作ノウハウ情報をいただきました!
「私は高周波回路を試作するときには、銅箔テープをよく使います。ダンボールを適当に切って銅箔テープを貼り付ければ、全面GND基板の出来上がりです。これなら、はさみとカッターナイフだけで作れます」
とのことでした。耐久性は問題ですが、プロトでは充分かと思います。銅箔テープはホームセンターなどで購入できます。
出来た基板でナニをする?
ここまでの基板も他のデジタルICも入手でき、図3のように、すべてを接続して動作することができました。詳しい説明はしませんが、3.3Vロジックで中間レベルになったところでトリガを出そうという回路です。イメージとして、ADCMP601 & ADCMP601 ⇒ TC7S00FU ⇒ TC7W74FU
2つのADCMP601がウインドコンパレータになっています。この実装のようすを図3に示します。

図3. 作った回路(完成状態)
図4の上半分は3.3Vロジックの中間レベルを生成する回路です。2出力を抵抗で接続し、PRBS-16(Pseudo Random Binary Sequence-16)の65535シーケンスのうち、1シーケンスで「のみ」論理がH/Lになる状態の2出力を作り、この出力の間に2本の直列を接続します。この2抵抗の中間タップから中間電圧レベルを図5のように生成します。
図4.入力信号として与えるFPGA基板とともに

図5.入力信号として与えるロジック中間レベルの信号
PRBS-16には手持ちのFPGA基板を使用した
PRBS-16の回路を入れた基板は雑誌付録のFPGA基板で、ツールはISE 9.1iです(当時)。「そんな古いバージョン使ってないで、ちゃんと最新のバージョンに上げてくださいよ」…と言っていただくのは、弊社代理店様の心やさしいシニア・マネージャの方でした(^_^;。
作った回路の動作するようす
作った回路は、図5のような中間レベルを検出するものです。このような中間レベルは「メタステーブル」とか出力の衝突が発生したときに見られるものです。
この回路図を図6に、またこの回路で図5の中間レベルの状態を検出した波形を図7に示しておきます。
この基板はP板.comの「パネルdeボード」サービス(アナログ・デバイセズと共同でご提供しているもの)で購入できます。


図7.ロジック中間レベルを検出したようす
FPGA内部の回路(RTL)のご紹介
アナログ技術ノートの趣旨を逸脱するようなデジタル系の話なのですが、今回作ったFPGAから出すランダム・データPRBS-16のソースを添付します。entity以降です。entity PRBS16 is
port (
CLK, RESET : in std_logic;
CK_OUT : out std_logic;
PRBS : out std_logic;
PRBS2 : out std_logic
);
end PRBS16;
architecture RTL of PRBS16 is
signal LFSR : std_logic_vector(15 downto 0);
begin
CK_OUT <= CLK;
process (CLK, RESET) begin
if (RESET = '0') then
PRBS <= '0';
elsif (CLK'event and CLK='1') then
PRBS <= LFSR(0);
end if;
end process;
process (CLK, RESET) begin
if (RESET = '0') then
PRBS2 <= '0';
elsif (CLK'event and CLK='1') then
if (LFSR = x"ffff") then
PRBS2 <= not LFSR(0);
else
PRBS2 <= LFSR(0);
end if;
end if;
end process;
process (CLK, RESET) begin
if (RESET = '0') then
LFSR <= x"ffff";
elsif (CLK'event and CLK='1') then
-- LFSR Shift
-- Polynomial is X(n) = X16 + X15 + X9 + X4
LFSR(0) <= LFSR(15) xor LFSR(14) xor LFSR(8) xor LFSR(3);
for I in 0 to 14 loop
LFSR(I+1) <= LFSR(I);
end loop;
end if;
end process;
end RTL;
著者について
デジタル回路(FPGAやASIC)からアナログ、高周波回路まで多...
{{modalTitle}}
{{modalDescription}}
{{dropdownTitle}}
- {{defaultSelectedText}} {{#each projectNames}}
- {{name}} {{/each}} {{#if newProjectText}}
-
{{newProjectText}}
{{/if}}
{{newProjectTitle}}
{{projectNameErrorText}}