LTSpice

【LTSpice】PRBS7発生回路を作ってみよう ~FFT解析あり~

【PR】この記事には広告を含む場合があります。

オシロスコープ(oscilloscope)のイラスト

この記事では、「PRBS発生器」をLTSpice(無料ソフト)で作成する方法を紹介します。

PRBS:Pseudo-Random Binary Sequence(疑似ランダム2値信号列)


PRBS発生器は、ソフトウェアでもハードウェアでも、どちらでも実現できますが、この記事では「ハードウェア回路」で作る方法を紹介しています。

作った回路は電子回路シミュレータ「LTSpice」(無料ソフト)で波形シミュレーションして、回路の動作検証まで行います。


記事の前半では、LTSpiceの回路図作成~シミュレーション実行までを画像付きで説明します。

記事の後半では、「PRBS7のランダム波形って、どんな周波数成分を持ってるのか?」、LTSpiceのFFT機能を使って見える化してみました。

FFTした結果ですが、ビットレートの奇数倍の高調波成分を中心にスペクトラムが盛り上がっているが確認できます。


この記事のPRBS発生器は、7ビットの「PRBS7」です。以下2種類の部品を使いました。

  • フリップフロップ(DFLOP)×7個 ←シフトレジスタとして使います
  • 排他的論理和(XOR)×1個


この記事のサンプル回路(LTSpice)をダウンロードできます。もしよければお試しください。

ダウンロード


PRBSとは?

PRBSとは「0 と 1 が不規則に並んだデータ」

PRBSとは「Pseudo-Random Binary Sequence」の略で、日本語訳は「疑似ランダム2値信号列」。

かんたんに言うと、「0 と 1 が不規則に並んだデータ」のことです。

SerDes(サーデス)の高速デジタル伝送インターフェースで、アイパターン(Eye Diagram)を評価するときの入力データなどで使われます。


PRBS発生器の回路構成

PRBS発生器をハードウェア回路で作るには、シフトレジスタ排他的論理和(XOR)を使います。

シフトレジスタの出力の”XOR”をとって、初段のフリップフロップへフィードバックします。

下図は PRBS7の例です。シフトレジスタの 7段目と6段目のXORをとって、初段のフリップフロップへフィードバックします。

LTSpice_prbs7_sch_all_5
LTSpice_prbs7_sch_all_5


「シフトレジスタのどこでXORをとるか?」、組み合わせはたくさんありますが、最大長のビットシーケンスを生成できるようにフィードバックします。

この最大長は、シフトレジスタの段数を n とすると、「2のn乗マイナス1」です。(全ビットが”ゼロ”の状態を除く、すべての状態)

情報を提供する人
情報を提供する人

シフトレジスタが、7個 の場合、2^7-1 = 128-1 = 127で、最大長は 127ビットです。
127ビットで一周して、また繰り返します。

実装するシフトレジスタの数には限りがあるので、発生するランダム信号にも有限の周期があります。

理想的なランダム信号は”無限”ですが、現実世界の回路でランダム信号を作ると、ある周期で繰り返すので「疑似」と言います。


PRBSの生成多項式

下の表は、PRBSのビットシーケンスが最大長になる生成多項式(せいせいたこうしき)です。

ビット数 n
(シフトレジスタの段数)
生成多項式PRBS最大周期
[ビット]
n2のn乗マイナス1
4x^4 + x^3 + 115
5 x^5 + x^3 + 131
6 x^6 + x^5 + 163
7 x^7 + x^6 + 1127
8 x^8 + x^6 + x^5 + x^4 + 1255
;;;
15x^15 + x^14 + 132767
;;;
19x^19 + x^18 + x^17 + x^14 + 1524287
生成多項式の例
情報を提供する人
情報を提供する人

PRBS7 の生成多項式は、「x^7 + x^6 + 1」です。

シフトレジスタの 7段目と6段目のXORをとって、初段のフリップフロップへフィードバックします。


作成する回路図とシミュレーション画面

LTSpiceの動作環境

  • LTSpice XVII
  • Windows10 (64bit)


作成する回路図

本サンプル回路は、階層構造を持つ、3つの回路図を作ります。

  • PRBS7発生器の回路図(.asc)←下位階層
  • PRBS7発生器のシンボル(.asy)
  • PRBS7発生器のシンボルを呼び出して、シミュレーションする回路図(.asc)。「テストベンチ」と呼ぶこともあります。←上位階層

①から順に作っていきます。

情報を提供する人
情報を提供する人

今回作るPRBS発生器は、 「シンボル化」しておきます。

使い勝手の面から自作ライブラリにためおいて、必要なときにシンボルを呼び出して使うようにします。


具体的な作成手順は、後半「>>PRBS7発生器を作ってみよう!」で紹介しています。

まずは、今回作る回路の完成形を先に紹介します。①②③の3つあります。


① PRBS7発生器の回路図(下位階層)

下図が、PRBS7発生器の回路図です。

使う部品モデルは、

  • フリップフロップ(DFLOP)x7個 ←シフトレジスタとして使います
  • 排他的論理和(XOR)×1個

です。

左下辺りの「電圧源V1」は、シフトレジスタを初期化するための、プリセット信号パルスを出力します。

LTSpice_prbs7_sch_all_3
LTSpice_prbs7_sch_all_3


② PRBS7のシンボル

「①PRBS7発生器の回路図」が完成したら、PRBS7のシンボルを作成します。このシンボルをトップ階層の回路図から呼び出します。

LTSpice_prbs7_symbol_after
LTSpice_prbs7_symbol_after


② トップ階層の回路図(PRBS7のシンボルを呼び出す)

下図が、PRBS7のシンボルを呼び出すトップ階層の回路図です。

PRBS7の信号波形シミュレーション(Transient解析)は下記回路図で行います。

LTSpice_prbs7_top_sch
LTSpice_prbs7_top_sch


  • ビットレート:2Gbps
    LTSpice上では「.param BR=2G」でビットレートを定義。
  • 1UI:500psec
    1ビットあたりの時間幅(Unit Interval)。2Gbpsの逆数。
  • 周波数:1GHz
    ビットレートの半分が、周波数
  • 周期:1000psec = 1nsec
    周波数の逆数


シミュレーション画面

下図の上段が、PRBS7の信号波形(青色:V(q))です。

本サンプル回路のシフトレジスタの段数は、7個です。なので、2^7-1 = 127ビットごとに同じビットシーケンスを繰り返します。

LTSpice_prbs7_top_sim_1
LTSpice_prbs7_top_sim_1


情報を提供する人
情報を提供する人

では、これから、回路図の作成方法とシミュレーションの実行方法を説明していきます。


PRBS7発生器を作ってみよう

新しい回路図を作成する

新しい回路図を作成します。

LTSpiceを起動 ⇒ ツールバーの「File」⇒「New Schematic」⇒ 新しい回路図が開きます ⇒ もう一度「File」⇒「Save as」でファイル名をつけて保存します。

prbs7.asc

ファイルの保存忘れがないように、はじめに保存しておきます。


「部品」を回路図に配置する

>>完成成回路図を見ながら、各部品を回路図上に配置して、部品同士をつないでいきます。


「部品」を設定する

部品を設定します。サンプル回路の設定画面を見ながら同じように設定していきます。

プリセット信号のパルス生成用電圧源「Voltage」

「電圧源V1」を”右”クリック ⇒ 設定画面が表示 ⇒ 「PULSE」をチェック ⇒ 下記画面のように入力 ⇒ 「OK」ボタン。

Transien解析スタート直後に、電圧源V1からパルスを1個出力し、全フリップフロップのQ出力をHighレベルに初期化します。

  • Vinitial: 0
  • Von: 1
  • Tdelay: 0
  • Trise: {gDly/10}
  • Tfall: {gDly/10}
  • Ton: {gDly}
  • Tperiod: 空欄
  • Ncycles: 空欄
LTSpice_prbs7_set_Voltage_prst
LTSpice_prbs7_set_Voltage_prst


フリップフロップの注意点

フリップフロップは、必ず、”初期化”しよう!

本サンプル回路図では、全フリップフロップの出力を、プリセット信号で ’1’ に初期化しています!

シミュレーション開始直後のフリップフロップの出力は、0か1か決まっていない不定状態です。不定状態のままシミュレーションを継続しても、期待した動作にはなりません。

プリセット信号のパルス幅は、Ton欄のgDlyで決まります。

「.param gDly = {0.1/BR}」の定義から、「gDly = 0.1 * 500psec = 50psec」です。

シミュレーション開始直後に、必ず、リセット信号、または、プリセット信号をフリップフロップへ入力して、0か1か状態を確定させておく必要があります。


シフトレジスタ用フリップフロップ「DFLOP」

「フリップフロップ」を”右”クリック ⇒ 設定画面が表示 ⇒ Value欄に入力 ⇒ 「OK」ボタン。

すべてのフリップフロップを同様に設定します。

設定内容

Td={gDly} ←素子の遅延時間を設定。

LTSpice_prbs7_set_DFLOP
LTSpice_prbs7_set_DFLOP


排他的論理和「XOR」

「XOR」を”右”クリック ⇒ 設定画面が表示 ⇒ Value欄に入力 ⇒ 「OK」ボタン。

設定内容

Td={gDly} ←素子の遅延時間を設定。

LTSpice_prbs7_set_XOR
LTSpice_prbs7_set_XOR
arrow_red_down_2_2

ツールバーの「File」⇒ 「Save」で上書き保存します。

情報を提供する人
情報を提供する人

以上で、① PRBS7発生器の回路図が完成です!


PRBS7の「シンボル」を作成しよう

ここでは、作成した「①PRBS7の回路図」からシンボルを作ります。

「①PRBS7の回路図」を開く ⇒ メニューバーの「Hierachy」⇒ 「Open this Sheet's Symbol」 ⇒「Shall I try to automatically generate one ?」と表示されたら「はい(Y)」をクリック。

LTSpice_prbs7_open_symbol
LTSpice_prbs7_open_symbol
arrow_red_down_2_2

下図のシンボルが自動的に作成されます。

LTSpice_prbs7_symbol_before_1
LTSpice_prbs7_symbol_before_1
arrow_red_down_2_2

下図のように、シンボルの見た目を整えます。

LTSpice_prbs7_symbol_after_1
LTSpice_prbs7_symbol_after_1
  • PRST入力端子は不要なので削除。
    削除のやり方は、「F5キー(Delete)」⇒ アイコンが”ハサミ”に変わる ⇒ ハサミを「PRST」の文字の上へ移動 ⇒ 左クリックすると削除できます。
  • CLK入力端子を左側へ移動。また、Q出力、NQ出力端子を右側へ移動します。
arrow_red_down_2_2

ツールバーの「File」⇒ 「Save」で上書き保存します。

prbs7.asy

情報を提供する人
情報を提供する人

以上で、②PRBS7のシンボルが完成です!


トップ階層の回路図を作ってみよう

ここでは、作成した「② PRBS7のシンボル」を呼び出して、シミュレーションするトップ階層の回路図を完成させます。

下記の手順で、新しい回路図を作成します。

LTSpiceを起動 ⇒ ツールバーの「File」⇒「New Schematic」⇒ 新しい回路図が開きます ⇒ もう一度「File」⇒「Save as」でファイル名をつけて保存します。

ファイル名

prbs7_top_01.asc

ファイルの保存忘れがないように、はじめに保存しておきます。

arrow_red_down_2_2

ツールバーの「Component」アイコン ⇒ prbs7 を入力 ⇒ OKボタン ⇒ 回路図上で左クリックすると配置されます。

LTSpice_prbs7_import_symbol
LTSpice_prbs7_import_symbol
arrow_red_down_2_2

次に、PRBS7のビットレートを指定します。

「PRBS7のシンボル」を”右”クリック ⇒ 設定画面が表示 ⇒ PARAMS欄に入力 ⇒ 「OK」ボタン。

BITRATE = {BR}

LTSpice_prbs7_top_sch_param
LTSpice_prbs7_top_sch_param
arrow_red_down_2_2

ツールバーの「File」⇒ 「Save」で上書き保存します。

情報を提供する人
情報を提供する人

以上で、③トップ階層の回路図が完成です!


Transient解析を設定する

Simulate ⇒ Edit Simulation Command をクリック。

usb3_5Gbps_ctle_ac_01_LTSpice_7_cmd
usb3_5Gbps_ctle_ac_01_LTSpice_7_cmd
arrow_red_down_2_2

「Edit Simulation Command」画面が表示されるので、Transientタブ ⇒ 下記画面のように入力します。

入力が終わると、Transient解析のSpiceコマンド「.tran 0 {STOP_TIME} 0 10p」が自動的に設定されます。

  • Stop time: {STOP_TIME}
    Transient解析の終了時刻です。
    {STOP_TIME}の値は「.param STOP_TIME=1/{BR} * 127 * 2」で、PRBS7の2周期分 計254ビット分の127nsです。
  • Time to start saving data: 0
  • Maximum Timestep: 10p
LTSpice_prbs7_top_set_transient_1
LTSpice_prbs7_top_set_transient_1


Transient解析を実行する

シミュレーションを実行して、アイパターンを表示してみよう。

メニューバーの「RUN」(人が走っているアイコン)をクリック ⇒ シミュレーションが実行されます。

LTSpice_run_icon
LTSpice_run_icon


シミュレーション結果を確認する

下図の上段が、PRBS7の信号波形です(緑:CLK信号、青:PRBS7信号)。

本サンプル回路では、シフトレジスタの段数が 7個です。

なので、2^7-1 = 127ビットごとに同じビットシーケンスを繰り返します。

LTSpice_prbs7_top_sim_1
LTSpice_prbs7_top_sim_1
情報を提供する人
情報を提供する人

以上で、回路図作成〜シミュレーションまで実行できました。


FFTで、PRBSの周波数成分を見える化

LTSpiceのFFT機能を使って、「PRBS7の周波数成分がどのように広がっているか?」、そのようすを見てみます。

やり方は、信号波形 V(q)の上へマウスカーソルを移動し、"右"クリック ⇒ View ⇒ FFTをクリック。

LTSpice_prbs7_top_set_fft_1_1
LTSpice_prbs7_top_set_fft_1_1
arrow_red_down_2_2

下記の設定画面が表示されます。

LTSpice_prbs7_top_set_fft_2_1
LTSpice_prbs7_top_set_fft_2_1

「Number of data point samples in time」の値を調整して、FFTの結果を最大10GHzまで表示させることにします。

本サンプル回路では「4096」にすると10GHzより少し高い周波数まで表示できました。

あとは、FFTグラフのヨコ軸の目盛り設定で、きっちり10GHzに設定し直します。

arrow_red_down_2_2

下図が、PRBS7のFFTの結果です。0Hz~10GHzまで表示しています。

ビットレート1GHz(2Gbps)の奇数倍の高調波を中心にして、周波数成分が盛り上がっている!

作業するネコ
作業するネコ
LTSpice_prbs7_top_sim_fft
LTSpice_prbs7_top_sim_fft
  • ヨコ軸:Left 0Hz, tick 1GHz, Right 10GHz, Logarithmicのチェックはなし。
  • タテ軸:Top 70mV, tick 10mV, Bottom 0V, Linear


サンプル回路をダウンロードする

この記事のサンプル回路(LTSpice)をダウンロードできます。もしよければお試しください。

ダウンロード


情報を提供する人
情報を提供する人

無料の電子回路シミュレータ「LTSpice」のオススメ本を紹介します。

LTSpiceをマスターしたい!」という方に、初心者向けのオススメ本の紹介です。もし興味があれば以下リンクもチェックしてみてください。

>> 初心者でもLTSpiceを使いこなす!使い方の基本とテクニックを学べるおすすめ本3冊+動画

あわせて読みたい
LTSpiceフライバック電源回路の図
初心者でもLTSpiceを使いこなす!使い方の基本とテクニックを学べるおすすめ本3冊+動画

続きを見る


まとめ:【LTSpice】PRBS7発生回路

この記事では、「PRBS7発生器」をLTSpice(無料の回路シミュレータ)で作る方法を紹介しました。

PRBS7発生器は、下記の部品モデルで作ることができます。

  • フリップフロップ(DFLOP)
  • 排他的論理和(XOR)

本サンプル回路のPRBS7は、7ビットですが、ビット数を増減したPRBS発生器を作りたい場合は、フリップフロップの数を同じように増減させればOKです。

また、シフトレジスタのどこでXORをとるかは、生成多項式をネットなど調べれば確認できると思います。ぜひチャレンジしてみてください!


追記:参考図書

ギガビットの高速信号の回路設計についてもっと知りたい方にオススメの本を紹介しています。以下のリンクもぜひご覧ください。

>>【高速デジタル信号】回路設計・基板パターン設計の第一歩!初心者にピッタリの本3冊

あわせて読みたい
Semiconductor circuit boards
【高速デジタル信号】回路設計・基板パターン設計の第一歩!初心者にピッタリの本3冊

続きを見る


-LTSpice