実例と書き方

[| ]  最終更新: 2011/02/10 19:46:49

原稿の作り方

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

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

例:

Clock   _~_~_~_~_~_~
Clock   _~_~_~_~_~_~

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


原稿を書く際の手順

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

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


実  例

比較的単純な例

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

ポイント:



$B869F%U%!%$%k(B
(tragi_1.tc, 363 bytes, modified 2003/08/17)
# From Transistor Gijutsu 2002/9 P140 Fig 1-2

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

$B869F%U%!%$%k(B
(tragi_1_1.tc, 269 bytes, modified 2003/08/17)

Clk 	_~_~_~_~_~_~_~_~_~_~_~_~_~_~_~
Sync    _~~__________~~__________~~___
G_Out	=X=X=X=X=X=X=X=X=X=X=X=X=X=X=X
G_LD	_~~__________~~__________~~___
NG_D_FF	___~~__________~~__________~~_
NG_LD	_~~~~________~~~~________~~~~_
NG_Out	=X=X=X=X=X=X=X=X=X=X=X=X=X=X=X

比較的単純な例

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

ポイント:



$B869F%U%!%$%k(B
(tragi_2.tc, 169 bytes, modified 2003/08/17)
# From Transistor Gijutsu 2002/9 P209 Fig12
@slant 0
@step 3
EFM	~~|____|~~~~|________|~~~~|____
MainB	~~______~~___________~____
SideB	~~_____~~~__________~~____
作図の手順(調整も含めて5分未満):
この図はあまり何も考えずに書きました。最初に原図を見たときに、MainB, SideBの幅をどの程度に書こうかな、と考え、EFMの一山の1/4で書けばそれらしく見えるかな、と決め打ちしました。

少し複雑な例

作図サンプル 出展(修正あり):MAXIM社 308ksps ADC MAX121 データシート Figure 8
ポイント:



$B869F%U%!%$%k(B
(max121_f8.tc, 557 bytes, modified 2003/08/17)
# MAXIM MAX121 ADC Datasheet Figure 8 (Mode 2)
@slant 0.4
@step 8
CS	~~|__________::___________________~~~~
CLKIN	===__|~~__~1~_::_~13~__|~14~__~15~__~16~__~17~__==
#CLKIN	===__~~__~~_::_~~__~~__~~__~~__~~__==
SFRM	---~~~~~~~__::__________________~~---
FSTRT	---___~~~~__::_____________________--
SCLK	---~__~~__~1~_::_~13~__~14~__~15~__~16~__~17~---
#SCLK	---~__~~__~~_::_~~__~~__~~__~~__~~---
#SDATA	---_______===::=X===X===__________---
SDATA	---_______=MSB==::="_>_D2  "X=D1==X=LSB==__________---
T/H 	___~~~~~~~~~~::~~~~__________________
作図の手順(調整も含めて5〜10分くらい):
この図では主たる信号がCLKINです。ところが、途中を略した図であるため、感覚が狂いやすく、また、数を数えるのが面倒です。 そのため、早い段階で数字を入れてしまうのが得策です。上述のように以後の作業をやりやすくするため、CLKINの複製をつくりますが、この時、最初からコメントにはせず、出力させるようにしておいたほうが無難です。本当に、数字を書いたCLKINと書かないCLKINが同一であるかを確認しないと、うっかり変な文字をいれてしまうと、あとでずれていることに気づきます。
出力側の基準はSCLKで、CLKが1単位時間遅れたものとして書きました(当然CLKINをコピーしてレベル記号を一文字追加で済ませる)。 これはSDATAの基準になるため、やはり、文字なしも用意しました。
SDATAは微妙な位置に文字が入っている関係上、"_>_"も使って位置調整しています。
(D2のあとの空白は力業の微妙な調整。可能なら" "は使わない方が無難)。

少し複雑な例

作図サンプル 作図サンプル 出展:回路設計のために書き起こしたオリジナル
ポイント:

$B869F%U%!%$%k(B
(max121_major.tc, 690 bytes, modified 2003/08/17)
# MAX121 control circuits timing (major)
@step 6

Start	___~==============================================================______
Major	==15==X=0==X=1==X=2==X=3==X=4==X=5==X=6==X=7==X=8==X=9==X=10==X=11==X=12==X=13==X=14==X=15======
ConvST	~~~~__~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CLKIN	______~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~____
SCLK	_______~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~__~~___
SDATA	_______Dummy____==13==X=12==X=11==X=10==X=9==X=8==X=7==X=6==X=5==X=4==X=3==X=2==X=1==X=0==_____
Sample	:::::|O::::|O::::|O::::|O::::|O::::|O::::|O::::|O::::|O::::|O::::|O::::|O::::|O::::|O::::|O::::|O::::
$B869F%U%!%$%k(B
(max121_minor.tc, 1,040 bytes, modified 2003/08/17)
# MAX121 control circuits timing (minor)
@step 6

Clock66M 	~_~_~_~_|~_~_~_~_~_~_~_~_~_~_~_~_|~_~_~_~_~_~_~_~_~_~_~_~_|~_~_~_~_~_~_~_~_~_~_~_
#CLKIN 	______~~~~~~~~~~~~____________~~~~~~~~~~~~____________~~~~~~~~~~~~______
Start	______~~======================================================================
Minor	=B=======X0=X1=X2=X3=X4=X5=X6=X7=X8=X9=XA=XB=X0=X1=X2=X3=X4=X5=X6=X7=X8=X9=XA=XB=X0=X1=X2=X3=X4=X5=X6=X7=X8=X9=XA=
Major	=15=======X===========0============X===========1============X===========2==========
ConvST	~~~~~~~~~0~_1__________6_~7~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ConvST - CLKIN  MIN50ns
CLKIN 	_________________4_~5~~~~~~~~~~A~_B___________~~~~~~~~~~~~____________~~~~~~~~~~~~
# CLKIN - SCLK MAX80ns
SCLK 	____________________________~~~~~~0~~~~~~____________~~~~~~1~~~~~~____________~~
SDATA   __________________________Dummy__________________________============MSB============X=
SAMPLE  ________________~4~O______________________~4~O______________________~4~O____________
作図の手順:
上記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)を入れます。こうすると割とすっきりと書けます。



熊谷正朗 [→連絡]
東北学院大学 工学部 機械知能工学科 RDE
[| ]