タイミングチャート清書ツール:実例と書き方
細かいところは文法をみて頂くとして(一度は一通り目を通してください)、ここでは概要について述べたいともいます。
本ツールでは時間を「単位時間」と呼ぶ一定の間隔で区切り、その単位時間毎に信号のレベルを規定する、という型式で作図していきます。信号の定義で「_」「~」「-」「=」の4文字のいずれかを書くことで、1単位時間がローレベル・ハイレベル・ハイインピーダンス・ハイもしくはロー(High-Zではないが任意)/バス(複数の信号の合成)として表記されます。 基本はそれだけで、それにバスの遷移を表す「X」などを追加したり、適当に文字列を書き込んで、信号に注釈や、バスの値を書き込んだりします。

まず、原稿は原則として半角英数文字と記号で書きます。1行毎に独立していて、その構造によって、信号を記述する行、パラメータを設定する行などがあります。
「@」で始まる行はパラメータを設定する行で、1単位時間を清書した図の上でどれだけの幅にするか、行間をいくらにするかなどを規定します。
空白文字(タブ・スペースなど)で区切られる行は、前半を信号の名前とし、後半をその信号の時間変化として解釈して、上記の記号が出てきた順番に、時間を追ってレベルを規定していきます。

例: Clock _~_~_~_~_~_~

文法と以下の実例を見て頂ければ、簡単に図が書けるようになると思われます。実例は文法を読んだことを前提にしている記述もありますが、まずは図とその原稿の対応をご覧ください。

本ツールを用いて、タイミングチャートの編集ができるのは、原則として最終出力に似た形で原稿が書けるためです。 信号のレベルだけを書いているうちは、容易に出力図がイメージできますが、それに文字などを書き込み始めると信号間で時間がずれてきます。そのため、図を書く際は
  1. 基準となる信号を作成する。
    例えば、クロック同期式の回路ならクロックを先に書いてそれにそろえて信号を書いていく。
    この時、クロックエッジによってのみ信号が変化するなら、1クロックを2単位時間として表記(「_~_~_~_~」)し、クロックにかかわらず信号が変化する場合も含めて記述する場合は1クロックを4以上の偶数の単位時間とする(「__~~__~~」など)。単位時間より細かい信号変化は記述できないため。
  2. 一通り信号のレベルだけ書いてしまう。
    レベルだけを書いているうちは、信号間で時間がそろっているので、先に信号の形だけ 固めてしまう。
    その後、適当に文字列を書き込んで行く場合も、重要な信号についてはコピーを残しておく。
  3. 文字列を書き込んだり、縦線をいれるなどして修飾し、最後にパラメータを調整して、図の横幅などを整える。
という手順で行うのがよいでしょう。

以下の実例では、キーとなるポイントや実際に作図したときの様子なども記載しておきましたので参考にしてください。

出展(修正あり):トランジスタ技術誌2002年9月号 140ページ 図1-2

ポイント:

  • 信号の立ち上がりは鉛直 → @slant 0
  • 出力のバス表記とステートの表示
  • 単純なクロック同期信号のみなので、1クロックあたり2単位時間として作図

作図の手順(調整も含めて5分くらい):
最初に、とりあえず必要なだけクロックを だぁ〜っとコピーで伸ばしていって、繰返しのあるパターンもコピーで増やして、長すぎたらあとで削るくらいの気分で書きました。 SYNC, G_LD, NG_D_FFは根本的に同じなので、これも行ごとコピー、NG_LDもコピーしてから一部書き換えました。G_OUT, NG_OUTもほとんど同じなので、G_OUTを書いて、数字を入れてからコピーして、気をつけながら数字を修正しました。
下のサンプル(右図)のように、文字を書かなければ、右端はそろっています。

出展(修正あり):トランジスタ技術誌2002年9月号 209ページ 図12

ポイント:

  • 信号の立ち上がりは鉛直 → @slant 0
  • 基本信号らしいEFMに対して、MainB, SideBがPWM的に入っているため、EMFの一山あたり4単位時間に設定
  • そのままではやたらと間延びした図になるため、単位時間を縮める → @step 3
  • EFMに入っている「|」は、縦線の記述用であることに注意。

作図の手順(調整も含めて5分未満):
この図はあまり何も考えずに書きました。最初に原図を見たときに、MainB, SideBの幅をどの程度に書こうかな、と考え、EFMの一山の1/4で書けばそれらしく見えるかな、と決め打ちしました。
出展(修正あり):MAXIM社 308ksps ADC MAX121 データシート Figure 8
ポイント:
  • 信号の省略部分を空白「:」で表現
  • CLKINの前後の値がどうでもいいところは「=」で2値の表現
  • MAX121からの出力信号はCSがハイの時は High-Z。ただし、元図が時間遅れなども定義する図であったため、CS→出力に大げさ?な時間遅れあり
  • 入出力タイミングの遅れを表現するために、CLKINの1周期を4単位時間に選定
  • 文字を入れ始める前に、最初にレベルだけ全部書くには複雑な図であるため、早い段階でCLKINに数字は入れてしまいたい。だがそうすると、原稿上で他の信号との時間関係が掴みにくくなる
    → CLKINを文字を入れたもの(勘定用)と入れないもの(原稿用)の2本書いておき、最後にコメントアウトする

作図の手順(調整も含めて5〜10分くらい):
この図では主たる信号がCLKINです。ところが、途中を略した図であるため、感覚が狂いやすく、また、数を数えるのが面倒です。 そのため、早い段階で数字を入れてしまうのが得策です。上述のように以後の作業をやりやすくするため、CLKINの複製をつくりますが、この時、最初からコメントにはせず、出力させるようにしておいたほうが無難です。本当に、数字を書いたCLKINと書かないCLKINが同一であるかを確認しないと、うっかり変な文字をいれてしまうと、あとでずれていることに気づきます。
出力側の基準はSCLKで、CLKが1単位時間遅れたものとして書きました(当然CLKINをコピーしてレベル記号を一文字追加で済ませる)。 これはSDATAの基準になるため、やはり、文字なしも用意しました。
SDATAは微妙な位置に文字が入っている関係上、"_>_"も使って位置調整しています。
(D2のあとの空白は力業の微妙な調整。可能なら" "は使わない方が無難)。 出展:回路設計のために書き起こしたオリジナル
ポイント:
  • 繰り返し部分はとにかくコピーですませる。
  • 設計情報は適当に文字列として書き込む。
  • 必然的に時間軸がずれてくるので、基準信号や手を加える前の信号はコメントで残しておく。
作図の手順:
上記MAXIM社のMAX121とインターフェイスする回路を設計する際に作成したチャートです。 基本クロックを66MHzとして、それを分周してタイミング信号を作り出しています。 MAX121の最高クロック速度が5.5MHzなので12分周とし、12クロックごとのサイクルをマイナーサイクル、12分周したものをメジャーサイクル(16回)として設計しました。
データシートから読み取った、クロック入力とデータが出てくるタイミングのずれを元に、マイナーサイクル内でのサンプリングタイミングを決定します。また、変換開始信号なども、メジャー0の内部のマイナー信号で作りました。 具体的には、メジャーのカウンタをデコードしたものとマイナーのカウンタをデコードしたものを適宜ANDをとるなどして、設計しています(*)。 CONVST, CLKINなどに記載された立ち上がりのところの数字はどのマイナーサイクルで立ち上げるかを考えて書いたものです。
この手のシリアルIF系のICは中間部のタイミングは分かりやすいものの、最初と最後で数え間違うと、ろくでもない結果になるので、あえて簡単にしたmajorの図も作図しました。minorの細かさで全部書くのは、図として不可能なので。

(※)回路はALTERA社のFLEX6Kシリーズ上で実装していて、設計はMAX+plus Baselineを使用しています。これには「DFFE」という便利なプリミティブがあって、愛用しています。Enable付きのDFFなのですが、クロックにはメインのクロックを常に入力し、Enableには信号の遷移条件、CONVSTでいえば Major=0 and (Minor=0 or 6)を入れ、Dには信号の立ち上げ条件(Major=0 and Minor=6)を入れます。こうすると割とすっきりと書けます。