信号発生器を使用して、波形のリンクやループによりカスタム信号を生成したり、スクリプトという機能を使って動的波形を生成したり、マーカやデータマーカイベントを使用して他の計測器と同期したりする方法を紹介します。
さまざまなNIモジュール式計測器に搭載されているNI SMC (Synchronization and Memory Core) アーキテクチャは、高度な波形のトリガとシーケンスを可能にします。そのため、SMC機能は任意波形発生器、RFベクトル信号発生器、および高速デジタル製品にも搭載されています。
図1: SMCアーキテクチャで実装した波形シーケンス
最新の任意波形発生器は大容量オンボードメモリを搭載しているため、大量の波形を保存することができます。一般に「リンクとループ」と呼ばれる機能を使用することで、波形を順次生成することができます。 この機能を使用すると、あらかじめ設定した順序で複数の波形を連続的に発生させることが可能です。さらに、生成中に順序を変更することも可能です。
図2は、信号発生器のメモリに保存できる波形の例を示しています。
図2: メモリに保存された複数の任意波形
これらの波形をメモリに保存したら、リンクとループを順序立てて行うことができます。生成セッションを開始するには、どのような順序で波形を発生させるかというシーケンス手順もメモリに保存する必要があります。NIの信号発生器では、オンボードメモリに複数の波形と複数のシーケンス命令を保存することができます。図3は、NI信号発生器のメモリ使用例を示しています。
図3: NI信号発生器のオンボードメモリに複数の波形を保存
図3を見ると、信号発生器に保存された波形データがメモリのかなりの部分を占めていることがわかります。たとえば、100 MS/sで1秒間サンプリングした波形は、200 MBにもなります。信号発生器のオンボードメモリを効率よく使用するのは重要なことです。実際に、波形のリンクとループを行うメリットの1つとして、複雑なシーケンスを生成してもオンボードメモリの使用は最小限に留められるということがあります。
NI信号発生器のリンクオプションとループオプションは、シーケンスモードおよびスクリプトモードという2つのリンク/ループモードに分けることができます。シーケンスモードでは、オンボードメモリに保存されたシーケンスにより指定された順序で波形を生成するよう計測器を構成することができます。一方、スクリプトモードはさらに高度な機能で、ハードウェアまたはソフトウェアトリガの状態に基づいて波形が生成されるダイナミック波形シーケンスを作成することができます。さらに、スクリプトモードでは “if/else” などの条件を使って分岐波形シーケンスを実装することも可能です。リンクモードとループモードでは、マーカやマーカイベントなどの機能により、1つまたは複数のトリガ信号を出力するよう信号発生器を構成することもできます。
シーケンスモードでは、各ステップに波形名、ループ回数、マーカ位置の3つのパラメータ情報が含まれるよう波形シーケンスを構成する必要があります。図4は、一般的なスクリプトで構成されたパラメータを示しています。
図4: 波形シーケンスの構成パラメータ
シーケンスのソフトウェアプログラミングのインタフェースが、LabVIEWでNI-FGENドライバの高度な任意シーケンスパレットに作成されます。このドライバを使用して、図5に示す「niFgen任意シーケンスを作成」VIにより信号発生器にシーケンス命令を書き込むことができます。
図5: オンボードメモリにシーケンスを書き込む
このVIを使用した場合、シーケンス命令は2つの配列として書き込まれます。1つは各波形の反復回数、もう1つは各波形の処理情報を含むものです。また、さらに高度なシーケンスを作成して、各波形のマーカイベントを出力することもできます。このオプションを有効にしている場合は、3つ目の配列を構成して各波形のマーカオフセットを指定する必要があります。
どのトリガ方式を選択するかによって、さまざまなモードを使ってシーケンスとして構成された波形を生成することができます。トリガイベントはソフトウェアイベントとして発生することもありますが、使用可能な多くのトリガラインのいずれかでハードウェアイベントとして発生する方が一般的です。NIの信号発生器では、シングルトリガ、連続トリガ、ステップトリガ、バーストトリガの4つのトリガモードを波形シーケンスに使用できます。波形が生成されたときの出力オプションは、モードにより異なります。それを以下に説明します。
シングルトリガモードは4つの中で最もシンプルなトリガモードで、生成周期の中で1回だけ使用します。そのため、トリガがかかると、計測器をリアーム (トリガを待つ状態に戻す) する必要があります。シングルトリガモードの場合、トリガは波形生成を開始するための開始トリガとして使用するのが一般的です。図6に示すように、信号発生器は開始トリガを待つ間に、最後の波形の最後の値 (サンプル) を出力します。このトリガ条件が一致すると、信号発生器は波形または波形シーケンスの生成を開始します。
図6: シングル開始トリガによるシーケンス
図6からわかるように、信号発生器は開始トリガの立ち上がりエッジで出力を開始します。ただし、開始トリガの発生とチャンネル0出力の開始にはわずかな遅延があります。この遅延はサンプリングレートと補間係数の関数となっているもので、信号発生器の仕様に記載されています。また、このケースでは2つの波形のシーケンスが生成用に構成されています。シーケンスの最後の波形が生成されると、信号発生器は最後のサンプル値の生成を続けます。
連続トリガモードでは、波形セグメントをすべて組み合わせた全シーケンスが連続的に生成されます。信号発生器がトリガを受信すると、シーケンス内の最初の波形から信号の生成を開始します。さらに、シーケンス内の各ステップ (波形セグメント) を出力してから、シーケンスが終了次第最初のステップに戻って繰り返します。
図7: 連続トリガモードによるシーケンス
図7からわかるように、出力は開始トリガ条件が一致した直後に開始しています。また、信号発生器は生成セッションが停止するまで波形シーケンスの生成を続行します。図6を見ると、信号発生器は時間t2でシーケンス内の最初の波形に戻ることがわかります。
ステップトリガモードでは、トリガを使用してシーケンスリストの各波形を段階的に生成します。生成セッションが開始すると、最初の波形がそのステップで構成された回数分だけ繰り返されます。波形が指定の回数生成されると、次のトリガを受信するまでその波形の最後のサンプルが連続的に出力されます。次のトリガを受信すると、2つ目の波形が指定の回数生成されます。このプロセスは、最後の構成波形が生成されるまで繰り返されます。この時点で、生成シーケンスをもう一度開始するにはトリガが必要です (図8)。
図8: ステップトリガモードによるシーケンス
図8を見てわかるように、信号発生器は最初のトリガを受信した時間t0で最初の波形の生成を開始します。また、‘waveform0’ (最初の波形) の生成は、指定のループ回数 (ここでは2回) に達するまでループを続けます。この場合、‘waveform0’ は2回繰り返すよう構成されていることがわかります。図8でわかるように、信号発生器は次の波形が生成される時間t1まで、‘waveform0’ の最後のサンプルの生成を続けます。
バーストトリガモードは、ステップトリガモードと似ていますが、シーケンス内の各波形が次のトリガがかかるまで連続的に反復する点が異なります。このモードでは、信号発生器はトリガを受信したときに波形の生成を開始します。さらに、以降のトリガが受信されるまで繰り返しその波形を生成します。そこでようやく次の波形に進むことができます (図9のタイミング図を参照)。
図9: バーストトリガモードによるシーケンス
図9に示すように、‘t0’ で最初のトリガがかかり、そのトリガによって信号発生器がシーケンスの最初のステップを生成します。信号発生器は、次のトリガがかかるまでこの波形を繰り返し出力します。そのため、‘t1’ で2つ目のトリガがかかると、信号発生器はシーケンス内の次のステップへ進みます。
シーケンスモードでは、トリガがかかると信号発生器は一連の波形を出力しますが、制約もあります。原則的に、シーケンスモードでは信号生成を開始する前に各ステップを構成する必要があります。条件付き出力のダイナミックスクリプトを構成するには、スクリプトと呼ばれるより高度なシーケンスを使用することが必要になります。
スクリプトを使用すると、信号発生器はシステム内のハードウェアまたはソフトウェアイベントにより波形のシーケンスを動的に出力できます。また、その柔軟性により高度な波形制御を実現します。複数の波形間でリンクやループを行うだけでなく、出力対象の変化に応じて波形を生成することができます。このセクションでは、いくつかのスクリプト例をもとに、基本的なスクリプト言語要素について説明します。
スクリプト機能の原理は、指定の波形を信号発生器のメモリに保存し、ある一定の時間にどの波形を生成するかを特定するスクリプトによって呼び出すというものです。スクリプトは、信号生成の前に任意波形発生器にダウンロードすることもできます。
ソフトウェアでは、スクリプトプログラミングインタフェースには3つの基本関数が必要です。それぞれを図10に示します。
図10: LabVIEWでのスクリプトの構成
まず、各波形を任意波形発生器 (AWG) に指定の波形としてダウンロードします。スクリプトは各波形を名前で識別するため、必ず指定の波形を書き込む必要があります。次に、スクリプトを波形に書き込みます。スクリプトには、それぞれの波形が生成される順序を指定するさまざまなコマンドが含まれています。最後に生成が始まり、AWGはSMC出力エンジンから波形の生成を開始します。
スクリプトトリガを使用すると、さらに複雑なスクリプトでも生成することができます。スクリプトを使うと、信号を出力しながら、外部信号を使ってどの波形を生成するかを特定することができます。この信号は、バックプレーンのPXIトリガラインから、または波形発生器のフロントパネルコネクタのPFI (プログラム可能な機能的インタフェース) トリガから受信できます。
スクリプトトリガは、「niFgen Configure Script Trigger」VIを使用してソフトウェアで構成することができます。この関数を使用すると、特定のトリガラインについてレベルトリガまたはエッジトリガを設定できます。図11の関数呼び出しの後、スクリプトは “scriptTrigger0” を変数として使用して波形が生成される順序を指定できます。
図11: スクリプトトリガの構成
スクリプト言語では、スクリプトトリガは特定のハードウェア状態に関連付けられた変数として処理されます。図11のスクリプト例に示すように、scriptTrigger0はTrue/Falseのブール論理式として評価される必要があります。それを図に示したのが図12です。
図12: スクリプトトリガの評価
スクリプトトリガを使用するとスクリプト言語に含まれる条件文を使用できるため、信号発生器は実際の検査対象デバイスからの信号に基づき信号を出力することができます。次のセクションでは、スクリプト言語の基本ステートメントのいくつかを紹介し、スクリプト機能の概要について説明します。
スクリプト言語には、波形を生成する順序を決める複数の基本コマンドが含まれています。このセクションでは、それらの基本コマンドについて説明し、それらを使用する基本シーケンスをいくつか紹介します。基本的なスクリプトコマンドには、以下のようなものがあります。
“Repeat until” コマンドを使用すると、トリガが発生するまで波形を繰り返し生成することができます。図13は、そのコマンドを使ったシンプルなスクリプトを実装するのに必要なコマンドセットを示しています。
図13: “Repeat until” コマンドを使用したスクリプト例
どの波形を生成するかを特定する変数として “scriptTrigger0” が使用されています。スクリプト言語を視覚的に表すと、図14のようになります。
図14: “Repeat until” コマンドを含むスクリプトのフローチャート
このスクリプトでは、信号発生器はまず “waveform0” を生成します。次に “waveform1” を繰り返し生成し、“scripttrigger0” の値がTRUEになるまでこの波形を繰り返します。このイベントが発生すると、信号発生器はシーケンスを完了する前に “waveform2” を生成します。図15は、このスクリプトの結果出力される信号を示しています。
図15: “Repeat until” スクリプトを使用した信号発生器出力
図15に示すように、AWGは “scripttrigger0” の値がTRUEになるまで “waveform1” の生成を続けます。
“Wait until” コマンドを使用すると、あるハードウェア条件が一致するまで波形の生成を開始しないよう信号発生器を構成することができます。図16は、“Wait until” を使用したスクリプト例を示します。 ここでも、“scriptTrigger0” がAWGによる波形生成再開のタイミングを指定する変数として使用されています。
図16: “Wait until” コマンドを使用したスクリプト例
“Wait until” ステートメントの前に “Clear” ステートメントが使用されている点にご注意ください。Clearステートメントを使用すると、“waveform0” の生成中に発生するすべてのトリガ状態を無視できます。図17は、このスクリプトのフローチャートを示しています。
図17: “Wait until” コマンドを含むスクリプトのフローチャート
このスクリプトでは、まず “waveform0” を生成することでAWGが開始します。その後、トリガ条件が満たされるまで、“waveform0” の最後のサンプルを出力します。トリガ条件が満たされると、AWGはスクリプトを再開し、まず “waveform1”、次に “waveform2” を生成します。 発生器の実際の出力を図18に示します。
図18: “Wait until” スクリプトを使用した信号発生器出力
“if/else” コマンドシーケンスを使用すると、ハードウェア条件に基づいて波形を生成する順序を特定することができます。また、それらのコマンドがネストされている場合は、波形が複数のトリガ条件に基づいて生成される真理値表を実装することもできます。図19は、“if/else” コマンドシーケンスを使用したシンプルなスクリプトを示しています。
図19: “if/else” コマンドを使用したスクリプト例
さらに、図20には特定の波形が生成される順序を表すフローチャートを示します。
図20: “If/else” コマンドを含むスクリプトのフローチャート
この例では、まず “waveform0” を生成することでAWGが開始します。次に、“scripttrigger0” の値により次に生成する波形が決まります。“scripttrigger0” の値がFALSEになると、“waveform1” が生成されます。“scripttrigger0” の値がTRUEになると、“waveform2” が生成されます。図21は、AWGの実際の出力を時間の関数として表したものです。
図21: “If/else” スクリプトを使用した信号発生器出力
図21では、“scripttrigger0” の値がTRUEになると、“waveform2” が生成されます。この例では、1つの条件ステートメントしか使用していません。NIのAWGを使用すると、最大4つのスクリプトトリガを設定できます。そのため、“If/else” ステートメントをネストして、さらに複雑な論理ステートメントを作成することもできます。
ここまでは、主に入力トリガを使用して信号発生器の出力を制御する方法について説明しました。ただし、信号発生器には他の計測器の動作を制御する出力トリガを生成する機能もあります。出力トリガには、マーカイベントとデータマーカイベントの2つの種類があります。マーカイベントの場合、指定したサンプル番号と同期して状態を変更するよう、最大で1つ (シーケンスモード) または4つ (スクリプトモード) のトリガラインを構成できます。一方データマーカイベントでは、最大4ビットのアナログ波形を最大4つのトリガラインにルーティングすることができます。このタイプの出力トリガの場合、トリガの状態は実際の波形に埋め込まれています。
マーカイベントを使用すると最大4つのトリガラインを構成できるため、特定のサンプルが生成されるのと同期して状態を変化させることが可能です。このデジタルパルスは、信号発生器のフロントパネルまたはPXIバックプレーンにあるPFIトリガラインで生成できます。
マーカイベントを指定するには、波形の開始地点からオフセットカウント (サンプル数) を設定します。シーケンスモードでは、シーケンス内の各ステップに対し1つのマーカイベントを構成します。スクリプトモードでは、特定の波形の異なるオフセットについて最大4つのマーカを構成できます。図22に示すように、マーカに関連付けられたトリガラインが20個目のサンプルを生成した同じクロックエッジでアサートされるようになります。さらにこのケースでは、トリガラインはサンプルクロックの40周期で状態が変化するように構成されています。
図22: マーカイベント出力のタイミング
マーカ出力の動作は、プロパティノードを使って多くの方法で構成することができます。図23に示すとおり、マーカイベントはサンプルクロック40周期分のパルスとして構成されています。この動作は、niFgenプロパティノードを使用して指定します (図23)。
図23: プロパティノードを使用してマーカイベントを構成
図23は、出力端子、出力の動作、およびパルス幅の構成が可能であることを示しています。図23に示すマーカはパルスとして構成されていますが、トグルとして構成することもできます。
マーカイベントは、複数の計測器を同期することが必要な場合に特に便利です。また、PXI信号発生器を使用すると、マーカイベントトリガをデジタイザやRFベクトル信号発生器、高速デジタルI/Oハードウェアなど、複数のモジュールに簡単にルーティングすることができます。
データマーカイベントを使用すると、最大で4つの波形データビットを実際のトリガラインにデジタル信号としてエクスポートできます。たとえば、一般的な信号発生器では16ビットDAC (デジタル-アナログ変換器) を使用します。そのため、信号を生成する際は、16ビットサンプルがサンプリングレート周波数の周期毎にDACに送られます。また、各サンプルの最大4ビットを実際のトリガラインにルーティングすることもできます。したがって、その4ビットの波形はデジタル波形として他のハードウェアと同期するように構成することができます。
データマーカイベントのデジタルレベルは、波形データ内で特定のデータビットが切り替わると変化します。波形データビットがセグメント内で複数回切り替わると、データマーカレベルはそのたびに変化します。データビットレベルがHighのとき、データマーカレベルもHighになります。また、データビットマーカは逆論理を使用するよう構成することができます。データビットマーカを使用した信号のタイミング図を図24に示します。
図24: ビット単位で表した波形
図24からわかるように、一般的な信号発生器の各サンプルは16ビット数からなっています。信号発生器のサンプルクロック毎に16ビット数をアップデートすることができます。図24では、各16ビットサンプルの最下位ビット4桁が強調表示されています。上述のように、実際のトリガラインの個々のビットをデジタル信号としてルーティングすることが可能です。デジタルトリガラインの動作は、図25のデータビットトリガラインのタイミング図に示しています。
図25: データマーカイベントのタイミング図
図25を見ると、各データビットマーカを外部トリガラインとしてルーティングされるように構成できることがわかります。トリガラインの状態は、各サンプルのビット値によって決まります。‘DataBit3’ では、最初の3クロック周期のビットは ‘0’、時間 ‘t2’ で ‘1’ に変化することがわかります。 その結果、‘PXI_Trig 3’ のデジタル状態は最初の3周期ではLowになり、時間 ‘t2’ でHighに変わります。
データマーカイベントを使用すると、ハードウェア側でタイミングをとることができるため、信号発生器と他のデバイス間でより緊密な同期を実現できます。さらに、モジュール間での外部配線が不要なため、複数のPXI計測器間での同期はさらに簡単です。
高度な波形のトリガおよびシーケンス機能を備えたNIの信号発生器を利用すれば、複雑な波形を生成し、複数の計測器間での同期を行うことができます。同じPXIシステムの計測器を同期できるため、複数の計測器間で緊密に同期された複雑なテスト信号を生成することが可能です。図26は、複数の計測器を含むテストのセットアップ例を示しています。PXIシステムでは、信号発生器はマーカイベント機能またはデータビットマーカ機能を実装して、計測器の動作を制御します。
図26: 自動化されたPXIテストシステム
図26からわかるように、信号発生器は被試験ユニット (UUT) に刺激信号を送ることができます。さらに、マスタの信号発生器からの刺激信号を使用して、別の計測器がUUTへ信号を出力したり、UUTからの信号を入力することもできます。ATEシステムの設計の詳細については、テストシステムリソースライブラリから技術ガイドのコレクションをダウンロードしてください。
また、UUTからの刺激信号を使って、AWGからの刺激信号を決定することもできます。スクリプト機能とスクリプトトリガを使用すると、実際のトリガイベントに基づいて信号の出力を制御することが可能です。図27は、信号発生器がUUTからのデジタル制御信号に基づいてさまざまな信号を生成するテストシナリオのブロックダイアグラムを示しています。スクリプトを使用すると、信号発生器は波形の生成を停止することなく、それらのデジタル制御信号にリアルタイムで応答することができます。
図27: ダイナミックシーケンスを使用する
図27では、PFI0とPFI1がUUTからの入力信号を受信するスクリプトトリガとして構成されています。信号発生器は、最大4つのスクリプトトリガを使用して信号出力を制御できます。3つ以上の制御ラインが必要な場合は、PXIタイミング/同期モジュールを使用してデジタルトリガ信号を信号発生器にルーティングすることができます。
最新の信号発生器では、NI Synchronization and Memory Core (SMC) アーキテクチャを採用することで、複雑で高精度のアナログ信号を生成することが可能となっています。そのため、信号発生器はさまざまな信号を生成し、広範なアプリケーションに対応することができます。