2014年10月31日金曜日
ロジックアナライザを使ってジッタ計測を行ない、システムの安定性を検証する
■概要
昨年2013年の組込み総合技術展におけるプレゼンテーションの内容について「ET2013のTOPPERSパビリオンでショートプレゼンテーションをさせて頂きました」で簡単に触れました。今日は、この中でお話させて頂いたロジックアナライザを使ってジッタ計測を行ない、システムの安定性を検証する方法について述べたいと思います。現代の組み込みシステムでは、ソフトウェアがシステム制御の一部を担う事が非常に多くなりました。ソフトウェアで発生するジッタというのは、リアルタイムシステムを構築する上で必ず評価しなければならない項目です。現場でお仕事をしていると、意外にも「どうやって評価して良いのかわからない」、「機材がない」といった内容の話をよく聞きますが、ちょっとした工夫と道具で指標となるデータを簡単に得る事ができます。
■題材
題材として用意したのは、7セグメントLEDが複数付いたデジタル時計です。このデジタル時計は、6桁の数値表示をソフトウェアで制御する設計になっています。シンクドライバは各桁共通になっており、ソースドライバを選択的に駆動しながら各桁の数値を順次表示する仕組みです。
■計測
システムの安定性を検証するにはデータが必要です。先ほどのシステムで、各桁の駆動時間間隔を調べることにします。
チャネル毎の計測結果をファイルとして吐き出せるツールならば何でも構わないのですが、私はWindows、Linux、Mac OS Xと三つのプラットフォームで使用可能な上、GUIもサクサク軽快に動作するSaleae Logicを愛用しています。
先に述べたように、ソースドライバの駆動時間によって輝度にばらつきが出ることがわかっていますから、今回はソースドライバの各チャネルのタイミングを計測してリアルタイム性について確認を行います。
以下に示すのが計測した結果です。
と言ってもこれではわかりませんよね。
少し拡大してみましょう。
一見良さそうに見えますが、これで「良し」というわけにはいきません。
先に示した膨大な量の計測結果に、処理遅延が発生していない事をこれらのデータで判別する事は出来ません。
この計測結果からデータを整理抽出して欲しいデータを得るのがこれからの作業です。
■整理
それでは先ほど得た計測結果を整理して欲しい情報を抽出してみます。Saleae Logicのアプリケーションは、データをCSVにエクスポートする機能が付いています。
この機能を使って計測データをCSVに変換します。
何故変換するのかというと、後でシェルで自分の都合に合わせて加工するためです。
エクスポートしたデータは、イベントが発生した時間と、その時の各チャネルの信号状態が記述された形式になっています。
このまとまったデータから各チャネルのOnの状態だけを抽出してみましょう。
以下のようなスクリプトを書けば、簡単にチャネル毎のデータに分割できます。
先のデータを使ってチャネル0のOnの状態だけを抽出したファイルは以下のようになります。
このデータは、まさにOnになった瞬間のリストで、後から述べる方法を使うことで、処理のバラツキを知ることができます。
■工夫
ここまでの作業で、各桁のピンの状態がOnになる瞬間の時刻の羅列を得ることができました。しかし、今回の題材では基準となるクロックが外部に存在しません。そこで、今回は処理のバラツキについて、前後のイベントの間隔で見ることにしました。計測したデータの分析にはScilabを用いると便利です。基本となる操作は、ファイルになったデータを読み込む事と、前後のイベントの間隔を抽出する事で、以下に示すたった二つの記述で実行できます。
一行目でデータを読み込み、二行目で各値の差分を抽出します。この操作を行ったデータを可視化すると、以下のようなグラフが得られます。
この可視化されたデータは、ドライバの特定ピンがOnになった瞬間のイベント間隔のバラツキを時間軸方向に見たものです。しかし、これでは望んでいるリアルタイム性が確保できているのか判断しづらいので、異なる表現のデータも得てみましょう。
上記で示したScilab用の記述は、時間軸方向に並べられたイベント差分データを、単にヒストグラムに展開するものです。何か特別な加工をしているわけではありませんが、データの表現方法を変えるだけで、ずいぶんとわかりやすくなりました。
このバラツキのデータから中心値、最悪値、標準偏差を求め、システムが十分に安定したリアルタイム性を有しているのかどうかを判定します。
■まとめ
今回使用したのは、安価なロジックアナライザとLinux環境のみです。高価な専用機器を購入しなくても、工夫次第で今まで見ることの出来なかったシステムの性能を計測し把握できます。こういったちょっとした工夫で今までと違う結果を得られるのが、組み込みシステムの面白いところなのかもしれません。
■玩具
ちょっと楽しくしたい場合、いろんなシチュエーションのデータを使ってアニメーションgifなどにすると面白いです。組込み総合技術展のプレゼンテーションでお見せしたアニメーションは、まさに上記で示した作業を経て作りました。結構手間が・・・かかってないか。■ダウンロード
今回の「ロジックアナライザを使ってジッタ計測を行ない、システムの安定性を検証する」を実際に体験してみたい方のために、データ一式をダウンロードできるようにしました。こちらからダウンロード
- 無保証です。
- 上記内容に関しての無断転載は御遠慮下さい。
ラベル:
Saleae LLC,
TOPPERS
2011年5月1日日曜日
Saleae LLCのロジックアナライザを使ってみた
まずはhttp://www.saleae.com/downloads/からソフトウェアとドライバが一式になったパッケージをダウンロードします。
インストール後に本体を接続してソフトウェアを起動すると以下のような画面が表示されます。
[Connected]と状態が表示されていますね。
被測定対象にプローブを取り付けます。
今回はUART, I2C, SPIと三種類に対してプローブを付けてみました。
手始めにUARTでその機能を試してみましょう。
まず、測定ポイントに対する名前を付けます。
次にチャンネルに対するプロトコルを選択します。
プロトコルに対する設定が出てきます。
トリガをかけることもできます。
トリガをかけたいチャンネルのトリガ選択ボタンを押してからStartを押すとトリガ待ち状態になります。
この状態でUART TXからデータが出力されると・・・
上記のように確かに指定した条件でトリガがかかっているのがわかります。
取得したデータに対する値が表示されていませんが、御安心下さい。
ここで、マウスのホイールをクリクリ回転してズームアップしてみます。
(ついでにウインドウを少し横に伸ばしました。)
例えば、嬉しいのはデータビットに「●」が付いている事。
これでスタートビットやストップビットに惑わされる事もありません。
こんな感じでUARTの状態を簡単に見る事ができました。
うーん。便利。
また、解析結果をテキストファイルで出力することもできます。
txtとcsvを選べるようですが、どちらも出力内容は同じようです。
同じようにI2CやSPIなども簡単に確認することができます。
先ほどと同様、プロトコル解析の追加を行なうだけです。
I2Cの設定画面。
SPIの設定画面。
例えば、以下の画像はSDカードをSPIモードで読み出している場合の例です。
まぁ、何と言いますか「あれ?何でクロックがこんなにもたついてるんだ?」とか、そういうのも見れます・・・。
UARTやI2CやSPIなどプロトコル上のデバッグをする場合、「データの値が何であるのか?」を抽出するのに頭を使いたくありません。
むしろ、デバッグ時には「何が原因で問題を起こしているのか?」を突きとめる為に頭を使いたいところです。
データを可視化する部分はこういった便利な道具を使って効率よくデバッグしたいものです。
インストール後に本体を接続してソフトウェアを起動すると以下のような画面が表示されます。
[Connected]と状態が表示されていますね。
被測定対象にプローブを取り付けます。
今回はUART, I2C, SPIと三種類に対してプローブを付けてみました。
手始めにUARTでその機能を試してみましょう。
まず、測定ポイントに対する名前を付けます。
次にチャンネルに対するプロトコルを選択します。
プロトコルに対する設定が出てきます。
トリガをかけることもできます。
トリガをかけたいチャンネルのトリガ選択ボタンを押してからStartを押すとトリガ待ち状態になります。
この状態でUART TXからデータが出力されると・・・
上記のように確かに指定した条件でトリガがかかっているのがわかります。
取得したデータに対する値が表示されていませんが、御安心下さい。
ここで、マウスのホイールをクリクリ回転してズームアップしてみます。
(ついでにウインドウを少し横に伸ばしました。)
例えば、嬉しいのはデータビットに「●」が付いている事。
これでスタートビットやストップビットに惑わされる事もありません。
こんな感じでUARTの状態を簡単に見る事ができました。
うーん。便利。
また、解析結果をテキストファイルで出力することもできます。
txtとcsvを選べるようですが、どちらも出力内容は同じようです。
Time [s],Value
0,0x0D
0.000173,0x0A
0.000345,0x54
0.000518,0x4F
0.000691,0x50
0.000864,0x50
同じようにI2CやSPIなども簡単に確認することができます。
先ほどと同様、プロトコル解析の追加を行なうだけです。
I2Cの設定画面。
SPIの設定画面。
例えば、以下の画像はSDカードをSPIモードで読み出している場合の例です。
まぁ、何と言いますか「あれ?何でクロックがこんなにもたついてるんだ?」とか、そういうのも見れます・・・。
UARTやI2CやSPIなどプロトコル上のデバッグをする場合、「データの値が何であるのか?」を抽出するのに頭を使いたくありません。
むしろ、デバッグ時には「何が原因で問題を起こしているのか?」を突きとめる為に頭を使いたいところです。
データを可視化する部分はこういった便利な道具を使って効率よくデバッグしたいものです。
もう1つ面白いのはアナライザのソースコードをSDKと合わせて一緒にダウンロードできる点です。
これを起点にオリジナルプロトコルの解析を追加することもできるでしょう。
Saleae LLCのロジックアナライザを購入してみた
検討の経緯
昨年から購入しようかどうか迷っていたロジックアナライザ。論理的にコードを組み立てて動けば良いけど、動かない時に相当悩むのがI2CやSPIなどのデバッグです。
そんな時、プロトコル解析のできるロジックアナライザが欲しくなります。
国内では秋月電子通商さんやストロベリーリナックスさんで扱いのあるZERO PLUS社のロジックアナライザが有名です。
私は昨年からSaleae LLCのLogic USB Logic Analyzerに目を付けていました。
ZERO PLUS社の製品も物の感じとしては悪くないのですが、アプリケーションがWindows専用だったり、Saleae LLCの物に比べて動作が「いかにもWindows風」であまり盛り上がりませんでした。
Saleae LLCのアプリケーションはQtで実装してある模様で、Linux、Windows、Mac OSと対応プラットフォームについては何の不満もありません。
そして、その挙動もマウスでビュンビュン動かせる感じもたまりません。
ハードウェアを購入する前からソフトウェアのみで体験できるので、この時点でかなりニンマリしてしまいました。
国内ではスイッチサイエンスさんで取り扱いがあります。(私は直接購入しました。)
スイッチサイエンスさんのページはこちら。
本日荷物が到着しましたので早速開けてみる事にしました。
開けてみる
荷物はこんな感じで到着しました。
Invoice入ってます。
専用ケースに収められ、緩衝材に入っています。
専用ケースはこんな感じの物。
(どうでも良いけどロゴが可愛いです。)
必要な小物と本体の一式がコンパクトに収納されています。
専用ケース、使い方説明、クリップ、本体(小さい!)、ワイヤー、USBケーブルがセットです。
本体はもう少し大きい物かと思っていたので若干拍子抜けですが気にしません。
こんな感じのサイズです。
カードより小さい。
次の記事では実際の使用感などを見ていきたいと思います。
登録:
コメント (Atom)