この記事では、「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をとって、初段のフリップフロップへフィードバックします。
「シフトレジスタのどこでXORをとるか?」、組み合わせはたくさんありますが、最大長のビットシーケンスを生成できるようにフィードバックします。
この最大長は、シフトレジスタの段数を n とすると、「2のn乗マイナス1」です。(全ビットが”ゼロ”の状態を除く、すべての状態)
シフトレジスタが、7個 の場合、2^7-1 = 128-1 = 127で、最大長は 127ビットです。
127ビットで一周して、また繰り返します。
実装するシフトレジスタの数には限りがあるので、発生するランダム信号にも有限の周期があります。
理想的なランダム信号は”無限”ですが、現実世界の回路でランダム信号を作ると、ある周期で繰り返すので「疑似」と言います。
PRBSの生成多項式
下の表は、PRBSのビットシーケンスが最大長になる生成多項式(せいせいたこうしき)です。
ビット数 n (シフトレジスタの段数) | 生成多項式 | PRBS最大周期 [ビット] |
---|---|---|
n | 2のn乗マイナス1 | |
4 | x^4 + x^3 + 1 | 15 |
5 | x^5 + x^3 + 1 | 31 |
6 | x^6 + x^5 + 1 | 63 |
7 | x^7 + x^6 + 1 | 127 |
8 | x^8 + x^6 + x^5 + x^4 + 1 | 255 |
; | ; | ; |
15 | x^15 + x^14 + 1 | 32767 |
; | ; | ; |
19 | x^19 + x^18 + x^17 + x^14 + 1 | 524287 |
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」は、シフトレジスタを初期化するための、プリセット信号パルスを出力します。
② PRBS7のシンボル
「①PRBS7発生器の回路図」が完成したら、PRBS7のシンボルを作成します。このシンボルをトップ階層の回路図から呼び出します。
② トップ階層の回路図(PRBS7のシンボルを呼び出す)
下図が、PRBS7のシンボルを呼び出すトップ階層の回路図です。
PRBS7の信号波形シミュレーション(Transient解析)は下記回路図で行います。
シミュレーション画面
下図の上段が、PRBS7の信号波形(青色:V(q))です。
本サンプル回路のシフトレジスタの段数は、7個です。なので、2^7-1 = 127ビットごとに同じビットシーケンスを繰り返します。
では、これから、回路図の作成方法とシミュレーションの実行方法を説明していきます。
PRBS7発生器を作ってみよう
新しい回路図を作成する
新しい回路図を作成します。
LTSpiceを起動 ⇒ ツールバーの「File」⇒「New Schematic」⇒ 新しい回路図が開きます ⇒ もう一度「File」⇒「Save as」でファイル名をつけて保存します。
ファイルの保存忘れがないように、はじめに保存しておきます。
「部品」を回路図に配置する
>>完成成回路図を見ながら、各部品を回路図上に配置して、部品同士をつないでいきます。
「部品」を設定する
部品を設定します。サンプル回路の設定画面を見ながら同じように設定していきます。
プリセット信号のパルス生成用電圧源「Voltage」
「電圧源V1」を”右”クリック ⇒ 設定画面が表示 ⇒ 「PULSE」をチェック ⇒ 下記画面のように入力 ⇒ 「OK」ボタン。
Transien解析スタート直後に、電圧源V1からパルスを1個出力し、全フリップフロップのQ出力をHighレベルに初期化します。
本サンプル回路図では、全フリップフロップの出力を、プリセット信号で ’1’ に初期化しています!
シミュレーション開始直後のフリップフロップの出力は、0か1か決まっていない不定状態です。不定状態のままシミュレーションを継続しても、期待した動作にはなりません。
プリセット信号のパルス幅は、Ton欄のgDlyで決まります。
「.param gDly = {0.1/BR}」の定義から、「gDly = 0.1 * 500psec = 50psec」です。
シミュレーション開始直後に、必ず、リセット信号、または、プリセット信号をフリップフロップへ入力して、0か1か状態を確定させておく必要があります。
シフトレジスタ用フリップフロップ「DFLOP」
「フリップフロップ」を”右”クリック ⇒ 設定画面が表示 ⇒ Value欄に入力 ⇒ 「OK」ボタン。
すべてのフリップフロップを同様に設定します。
排他的論理和「XOR」
「XOR」を”右”クリック ⇒ 設定画面が表示 ⇒ Value欄に入力 ⇒ 「OK」ボタン。
ツールバーの「File」⇒ 「Save」で上書き保存します。
以上で、① PRBS7発生器の回路図が完成です!
PRBS7の「シンボル」を作成しよう
ここでは、作成した「①PRBS7の回路図」からシンボルを作ります。
「①PRBS7の回路図」を開く ⇒ メニューバーの「Hierachy」⇒ 「Open this Sheet's Symbol」 ⇒「Shall I try to automatically generate one ?」と表示されたら「はい(Y)」をクリック。
下図のシンボルが自動的に作成されます。
下図のように、シンボルの見た目を整えます。
- PRST入力端子は不要なので削除。
削除のやり方は、「F5キー(Delete)」⇒ アイコンが”ハサミ”に変わる ⇒ ハサミを「PRST」の文字の上へ移動 ⇒ 左クリックすると削除できます。 - CLK入力端子を左側へ移動。また、Q出力、NQ出力端子を右側へ移動します。
ツールバーの「File」⇒ 「Save」で上書き保存します。
以上で、②PRBS7のシンボルが完成です!
トップ階層の回路図を作ってみよう
ここでは、作成した「② PRBS7のシンボル」を呼び出して、シミュレーションするトップ階層の回路図を完成させます。
下記の手順で、新しい回路図を作成します。
LTSpiceを起動 ⇒ ツールバーの「File」⇒「New Schematic」⇒ 新しい回路図が開きます ⇒ もう一度「File」⇒「Save as」でファイル名をつけて保存します。
ファイルの保存忘れがないように、はじめに保存しておきます。
ツールバーの「Component」アイコン ⇒ prbs7 を入力 ⇒ OKボタン ⇒ 回路図上で左クリックすると配置されます。
次に、PRBS7のビットレートを指定します。
「PRBS7のシンボル」を”右”クリック ⇒ 設定画面が表示 ⇒ PARAMS欄に入力 ⇒ 「OK」ボタン。
ツールバーの「File」⇒ 「Save」で上書き保存します。
以上で、③トップ階層の回路図が完成です!
Transient解析を設定する
Simulate ⇒ Edit Simulation Command をクリック。
「Edit Simulation Command」画面が表示されるので、Transientタブ ⇒ 下記画面のように入力します。
入力が終わると、Transient解析のSpiceコマンド「.tran 0 {STOP_TIME} 0 10p」が自動的に設定されます。
Transient解析を実行する
シミュレーションを実行して、アイパターンを表示してみよう。
メニューバーの「RUN」(人が走っているアイコン)をクリック ⇒ シミュレーションが実行されます。
シミュレーション結果を確認する
下図の上段が、PRBS7の信号波形です(緑:CLK信号、青:PRBS7信号)。
本サンプル回路では、シフトレジスタの段数が 7個です。
なので、2^7-1 = 127ビットごとに同じビットシーケンスを繰り返します。
以上で、回路図作成〜シミュレーションまで実行できました。
FFTで、PRBSの周波数成分を見える化
LTSpiceのFFT機能を使って、「PRBS7の周波数成分がどのように広がっているか?」、そのようすを見てみます。
やり方は、信号波形 V(q)の上へマウスカーソルを移動し、"右"クリック ⇒ View ⇒ FFTをクリック。
下記の設定画面が表示されます。
「Number of data point samples in time」の値を調整して、FFTの結果を最大10GHzまで表示させることにします。
本サンプル回路では「4096」にすると10GHzより少し高い周波数まで表示できました。
あとは、FFTグラフのヨコ軸の目盛り設定で、きっちり10GHzに設定し直します。
下図が、PRBS7のFFTの結果です。0Hz~10GHzまで表示しています。
ビットレート1GHz(2Gbps)の奇数倍の高調波を中心にして、周波数成分が盛り上がっている!
- ヨコ軸:Left 0Hz, tick 1GHz, Right 10GHz, Logarithmicのチェックはなし。
- タテ軸:Top 70mV, tick 10mV, Bottom 0V, Linear
サンプル回路をダウンロードする
この記事のサンプル回路(LTSpice)をダウンロードできます。もしよければお試しください。
無料の電子回路シミュレータ「LTSpice」のオススメ本を紹介します。
「LTSpiceをマスターしたい!」という方に、初心者向けのオススメ本の紹介です。もし興味があれば以下リンクもチェックしてみてください。
>> 初心者でもLTSpiceを使いこなす!使い方の基本とテクニックを学べるおすすめ本3冊+動画
-
初心者でもLTSpiceを使いこなす!使い方の基本とテクニックを学べるおすすめ本3冊+動画
続きを見る
まとめ:【LTSpice】PRBS7発生回路
この記事では、「PRBS7発生器」をLTSpice(無料の回路シミュレータ)で作る方法を紹介しました。
PRBS7発生器は、下記の部品モデルで作ることができます。
- フリップフロップ(DFLOP)
- 排他的論理和(XOR)
本サンプル回路のPRBS7は、7ビットですが、ビット数を増減したPRBS発生器を作りたい場合は、フリップフロップの数を同じように増減させればOKです。
また、シフトレジスタのどこでXORをとるかは、生成多項式をネットなど調べれば確認できると思います。ぜひチャレンジしてみてください!
追記:参考図書
ギガビットの高速信号の回路設計についてもっと知りたい方にオススメの本を紹介しています。以下のリンクもぜひご覧ください。
>>【高速デジタル信号】回路設計・基板パターン設計の第一歩!初心者にピッタリの本3冊
-
【高速デジタル信号】回路設計・基板パターン設計の第一歩!初心者にピッタリの本3冊
続きを見る