前回はコンタクト試験の手順を説明しましたが、今回はファンクション試験を行ってみます。

コンタクト試験というのは、いわば電気的に対象(今回ならMCU)が正常か? を確認するためのものですが、ファンクション試験はもうちょっと高レベルな「対象が正しく動作するか」を確認するものです。具体的にいえば、MCU内に診断用のプログラムをあらかじめロードしておき、これに対して外部から信号を入力、プログラムが入力信号にあわせて出力信号を生成、これをCX1000Pで取得、正しく動作を行っているかを確認することになります。これを実際に行う場合、手順としては

  1. テスト内容を設計し、それに合わせてMCUのファームウェアを記述する
  2. MCUにテスト用のファームウェアをロードする
  3. (1)の内容に合わせて入出力信号をまとめてパターンファイルを記述、コンパイルする
  4. CX1000Pでパターンファイル(を基にしたオブジェクトファイル)を読み込んで、これにあわせて入力信号を生成、出力信号を取得して比較する

という形になります。今回はスタータキットに合わせる形で、(1)~(3)の準備が完了しているので(これらについては後で少々触れます)、(4)について説明することにします。

IPの選択

ファンクション試験を行うために必要なIPは、FunctionalMeasure_IPです(Photo01)。こちらはCTS Onlineでは「ロジック機能検証」として販売されています(Photo02)。現在は拡張データ・ログ・プラグイン(Photo03)も提供されていますが、これは説明にある通りデータログを2049サイクル以上記録するためのもので、こうした長いテストパターンを実施する場合には必要になりますが、今回はもっと短いパターンで検証を行うので、拡張データ・ログ・プラグインはインストールしておりません。これを(前回の「電流・電圧検証IP」と同じ手順で)入手・インストール後に起動すると、New Measure Itemに"FunctionalMeasure_IP"が出現します。

Photo01:試用版を利用した関係で後ろに"(Trial)"の文字が見えてますが、正式版だとこれがなくなります

Photo02:IP名称が"FunctionalMeasure_IP"となっているのでそれと判ります

Photo03:CX1000Pそのものが2048サイクル分のデータしか取得できないので、これを超える分については複数回テストを行って取得する形になります

試験条件の設定

今回の試験は、電源ピンに5Vを印加し、その上でRA3/RA5ピンに対して特定の入力信号を印加すると、RA0/RA1/RA2の各ピンに対して、これに対応した出力信号が出てくる形のものです。

FunctionalMeasure_IPを選択して"Setup and Executions"画面に映ると、最初に出てくるのがこのParameter画面です(Photo04)。これは続くTabの中で出てくる細かな設定「以外」をまとめて設定するものです。今回のテストでは、"Power Sequence Off"を"ENABLE"に設定する必要があります(電源投入時に実施される、パワーオフシーケンスを実施するの意味)が、デフォルトで"ENABLE"なので、これが設定されていればそれ以上の変更は必要ありません。

Photo04:Data Log Cycle Countは、先にちょっと出た拡張データ・ログ・プラグインに関係する部分で、もし2048cycle以上のログを行う場合にはここに設定が必要ですが、今回はこの拡張データ・ログ・プラグインをインストールしていないので、最大の2048のままで問題ありません

次がPower Supplyタブです(Photo05)。ここはMCUへの電圧供給の設定を行います。設定項目としては

  • SelectPinsボタンを押し、"VDD"を指定します。
  • Bypass Capacitorをクリックして、On(接続)状態にします。
  • 右端の"Source Value[V]"に5を入力します。

の3つです。これが完了すると、テスト中はMCUに5Vを供給する設定ができた事になります。ちなみにSource Valueに4V以上を入力すると、こんなダイアログ(Photo06)が表示されますが、これはただの通知なのでOKを押して下さい。

Photo05:その他の項目はデフォルトのままで問題ありません

Photo06:これは電圧を4V以上にすると、電流クランプ値が自動的に800mA→300.8mAに変更されるという通知です

さて、次が肝心の信号パターンの設定部ですが、まず基本的な考え方をちょっとご紹介します。Photo07はCTSのテキストからの抜粋ですが、CX1000ではある期間(Period値)の範囲で信号を監視し、そのPeriodごとに信号がどういう振る舞いをしたか、を0/1/H/L/Z/Xとして区別します。この例で言えば、ピンBを0に、ピンCを1にしたタイミングから2クロック後にピンDの出力がLになり、再びピンCを1にした次のサイクルでピンDがHになる事を確認する、という図式になります。この0/1/H/L/Z/Xそのものの指定は冒頭に出てきたパターンファイルで指定することになりますが、これにあわせてそもそも0/1/H/Lという信号はどういう電圧なのか、という事をCX1000側に設定するのが、次のSignalタブ(Photo08)です。

Photo07:0/1はそれぞれ入力信号で、0がLow、1がHighです。H/L/Z/Xは出力信号側への区別となります

Photo08:初期状態はこのような感じです

ここでは

  • TS(Timing Set) 1の際のPeriodを31.25n(31.25ns)に設定します。CloudTesting Labは最大16種類のTiming Setを保持できるので、たとえばTS1は10MHz、TS2は5MHzといった様に複数の速度での動作を確認することが可能です。ここではまずTS1に31.25ns(32MHz相当)をセットします。ちなみに指定の際にs(second)の入力は不要で、単に"31.25n"だけで十分です。
  • SelectPinsボタンを押して、"IO_PINS"を指定します。
  • "Mode"に"I/O"を指定します。
  • パターン0は立ち下がり(Photo09)、パターン1はダブルエッジ(Photo10)に設定します。この際、パターン1の<B>(ダブルエッジの立ち下がり)の部分の数字をダブルクリックし、"15.625n"(15.625ns)を入力します(Photo11)。
  • VIHに"5"(5V)、VILに"0"(0V)、VOHとVOLに"2.5"(2.5V)を入力します。これは、「入力電圧は、Hが5V、Lが0Vとし、出力電圧は2.5V以上ならH、2.5V未満ならLと判断する」の意味です。
  • LoadModeを"None"に設定します。これは出力に負荷は掛けない事を意味します。

Photo11:パターン1の&ltB>部の数字はダブルクリックすると、こんな具合に入力可能になります。マウスで左右に移動させての指定もできますが、細かい値の調整は困難なので数字入力が無難です

ここまでで、IO_PINSに対する設定は完了しましたが、さらにあと2つ、RA3とTRIG_PINについての設定も行います。2行目と3行目のPin NameにそれぞれRA3/TRIG_PINを入力します。設定値は

RA3 : ModeはI/O、Timingのパターン0は立ち下がり、パターン1は立ち上がり。VIH/VIL/VOH/VOLはそれぞれ5/0/2.5/2.5に設定します。LZHには"15.625n"を指定します。またLoad Modeは"None"とします。
TRIG_PIN : ModeはIn、Timingのパターン0は立ち下がり、パターン1は立ち上がり。VIH/VILは5/0に設定します。ModeがIn(入力)なので、VOH/VOLの設定、あるいはLoad Modeなどは指定出来ない様になる筈です。

最終的には、Photo12の様な設定画面になったら、TS 1の設定は完了です。「TS 1の」と書いたからには、もうひとつあります。今度はTSを2に設定し、Periodを"1u"(1μs)にします。ほかの設定はほぼTS 1と同じですが、唯一違うのはIO_PINSの<B>で、こちらはPeriodの半分ということで"500n"(500ns)にすることです。設定が終わった状態がこちら(Photo13)になります。

Photo12:複数の信号を設定すると、どうしても画面が縦方向に長く延びることになるので、大きな画面での作業を推奨します

Photo13:こちらがTS 2のケース。IO_PINSとRA3におけるLHZのタイミングは自動的に"500n"(500ns)になっている筈です

次に"Pattern"タブに移ります(Photo14)。ここは、先に説明したパターンファイル(正確に書けば、パターンオブジェクトファイル)を指定します。今回はスタータキットにあわせたパターンオブジェクトファイルを指定します。

Photo14:"pic12f1822_fmax.pobj"がそのパターンオブジェクトファイルになります

最後がPower sequenceタブになります。これは、テストの際に電源と信号をどのタイミングで投入するかを決定するものです。MCUに限らずどんな機器でも、電源投入直後にすぐ動作可能、というものは殆どなく、通常は一定のセットアップ時間が必要です。なので、電源投入から入力信号投入開始までの時間を指定する必要があります。また、テスト終了後、どのタイミングで電源をオフにするかも指定しないと、いつまでも電源が入りっぱなしになってしまいます。こうした設定を行うのがこの画面です。

Photo15がその画面で、電源投入後、6ms後に試験を実行します。また、試験終了後、6ms後に電源オフになります。これが初期設定となっています。ここに

  • ALL_PINSを追加、2msで信号投入とする。
  • TRIG_PINを追加、2msで信号投入とする。

という2項目を追加します。Photo16が設定完了後の画面となります。

Photo15:VDDはデフォルトで追加されています

Photo16:ピン名の指定は、右の"…"ボタンを押すことで可能になります

テストの実行

ここまでの設定が全部終わったら、実行をしてみます。これは前回同様、画面上段の実行ボタンを押すだけで完了します。問題がなければ、Photo17の様に緑色で"Pass"の文字が示されると共に、ログ表示欄に正常実行したという結果のみが示されます。では異常があった場合はどうか? ということで、パターンファイルをちょっと書き換えてエラーが出るようにした場合の結果がPhoto18になります。このケースでいえば、Cycle 39~3Cの4cycleで、本来RA0ピンがHになるべきところが、Lになっているとして示されます。

Photo17:ログの最後の"Result: PASS"で正常実行が判ります

Photo18:勿論これは本来Lになるのが正常で、ところがパターンファイルの方を"Hがくることを期待する"と書き換えたためにこう示される訳です

このテスト結果の後処理については来月ご紹介するとして、ここで少しパターンファイルについて説明したいと思います。パターンファイルそのものはテキストファイルで、拡張子は.patになっています。中身は? ということで、今回利用したpic12f1822_fmaxの冒頭をちょっと抜き出すとList 1の様になっています。

List 1:
Version 1.0;

MainPattern
{
    CommonSection
    {
        Timing      "CTLabTiming.Tim:CTLabTiming";
        PinDescription  "CTLabPins.pin";

        Domain _CTLabDPINDomain
        {

            NOP     {V{ALL_PINS=XXX1X0; TRIG_PIN=0;} W{ALL_PINS=TS2;TRIG_PIN=TS2;}}
            IDXI    1   {V{ALL_PINS=XXX1X1;}}

            IDXI    4   {V{ALL_PINS=XXX0X1;}} #5uS MCLR=LOW

            IDXI    47  {V{ALL_PINS=XXX1X1;} W{ALL_PINS=TS1; TRIG_PIN=TS1; TRIG_PIN=TS1;}}

            IDXI    3   {V{ALL_PINS=LLL1X1;} W{ALL_PINS=TS1;}} #1
            IDXI    3   {V{ALL_PINS=LLL1X1;} W{ALL_PINS=TS1;}} #2
            IDXI    3   {V{ALL_PINS=LLL1X1;} W{ALL_PINS=TS1;}} #3
            IDXI    3   {V{ALL_PINS=LLL1X1;} W{ALL_PINS=TS1;}} #

最初の10行ほどを飛ばして、次の

NOP {V{ALL_PINS=XXX1X0; TRIG_PIN=0;} W{ALL_PINS=TS2;TRIG_PIN=TS2;}}

という行を取り上げると、まず先頭のNOPはパターンニーモニックと呼ばれ、何をするかというコマンドです。NOPであれば続く行を1回実行することになります。次のV{}で囲まれた部分が値の設定です。ここの指定であれば

RA0/RA1/RA2/RA4 : 不定(チェックしない)
RA3/TRIG_PIN    : 1(High)を入力
RA5             : 0(Low)を入力

という事になります。最後のW{}で囲まれた部分はTimingSetの指定で、この場合はALL_PINSとTRIG_PINのどちらもTS2(つまりPhoto13の、Periodが1μsの方)で動作する形です。ちなみに続く行には末尾に #がついているものもありますが、これはコメントです。

最初に述べたとおり、これは当然ながらMCU上で動くプログラムの動作と合わせる形で記述する必要があるわけですが、さすがにMCU側のプログラムを記述すると連携して自動的にこのパターンファイルが生成されるところまでは行かず(そもそもCTSは別にPIC12専用でも何でもないので、連携させようというのが無理です)、手でこれを記述することになります。

ちなみにこの記述したパターンファイルですが、これをパターンオブジェクトファイルに変更するためにはPattern Compilerが必要になります。これはCloudTesting Labのソフトウェアをインストールすると自動的にインストールされています。使い方ですが、スタートメニューからこれを呼び出すと(Photo19)、コンソールが立ち上がります(Photo20)。このコンソールの中で、パターンファイルが保存してあるフォルダに移動してから、

CTLab_patcom パターンファイル名

と指定することで、パターンファイルをパターンオブジェクトファイルに変更できます。上でエラーが出るパターン例を示しましたが、これは元々のパターンファイルの一箇所を"L"から"H"に書き換えてコンパイルし直して指定したものです。こんな具合に、比較的簡単にパターンの変更が出来るようになっています。

Photo19:スタートメニューのCloudTesingフォルダの中にPattern Compilerが用意されています

Photo20:これそのものは通常のコマンドプロンプトのコンソールですが、必要な環境設定などが行われているので、CTLab_patcomコマンドをそのまま実行できます

次回は、こうしたテストの集計や連続実行などの手順についてご紹介したいと思います。