前回、JSONベースのテキストをパースしてタイミングチャートを描いてくれるWaveDrom(ローカル版)を使用してSPIのタイミングチャートを描いてみました。結構お楽にかけました。余勢を駆って?今回はセットアップ、ホールド・タイムなど数字を書き込もうとしてツボにハマってしまいました。思ったように矢印書くのはテクがいる?
※かえらざるMOS回路 投稿順 INDEX
タイミングチャートに数字を書き込みて~
前回のタイミングチャートは以下のようでした。
そのソースを再掲します。
{signal: [ {name: 'cs#', wave: 'hl........h'}, {name: 'sck', wave: 'l.P.......l'}, {name: 'mosi', wave: 'x.22222222x', data: ['b7', 'b6', 'b5', 'b4', 'b3', 'b2', 'b1', 'b0'], phase: 0.5}, {name: 'miso', wave: 'z.22222222z', data: ['b7', 'b6', 'b5', 'b4', 'b3', 'b2', 'b1', 'b0'], phase: 0.5}, ], head: { text: 'SPI mode 0, MSB first', }}
ここまでならスッキリ。また、sckのエッジに対してMOSI、MISOを「ずらす」ためにphaseを使ってます。
今回、sckのエッジに対して例えばMISO(マスタヘの入力信号)のセットアップ、ホールド時間を書き込みたいとかんがえました。ありがちというより、必須なやつね。
矢印の描画のためには準備がいる
矢印があろうとなかろうと、縦、横、斜めに直線やスプライン曲線を引くことが可能です。ただし、そのためにはnodeという場所を示すためのアンカー的なものを配置しないとなりません。例によって、以下のチュートリアルを見ながら試行錯誤してみました。
Hitchhiker’s Guide to the WaveDrom
そこで判明したのが以下の大原則?です。
-
- wave を定義するのに使用した文字とnodeを識別する文字は1対1対応している。waveの波形の変化可能点(実際には信号の値が変わらなくてもよい)にnodeを配置できる
- アルファベット小文字1文字で記すとnode点は文字表示される
- アルファベット大文字1文字で記すとnode点は存在してもタイミングチャートで上は表示されない
- 描いた線分の両端に対して矢印を設定できる
- 描いた線分に対して文字列を付加できる
つまりただ両端に矢印を置いた線分(edge)を1個置きたいと思ってもその両端にはnodeなるものが必要です。通常はノードの場所にa, b, cなどと文字を表示したくないと思うので、A、B、Cなどと大文字で記述することになると思います。
既に存在する信号の変化点にnodeを配置したい場合は、waveと同様な並びで nodeの定義を並置すればよいです。しかし、信号波形の外側に線分を引きたい場合は、別途領域(空の信号的な)を確保して、そこにノード点をちりばめないと線が引けませぬ。
試行錯誤した1例
以下に掲げるのはSCKの立ち上がりエッジに対するセットアップ/ホールド時間の図です。
そのソースが以下に。
{signal: [ { node: '..C.'}, {name: 'sck', wave: 'h010', node: '.AB', period: 1}, { node: '.IJK.'}, {name: 'miso', wave: 'z2.z', data: ['data '], period:1}, { node: '.TUV'}, ], edge: [ 'C-U', 'I-T', 'I<-|->J setup 100ns', 'J<-|->K hold 100ns', 'K-V' ], head: { text: 'PIC16F18855 SCK-MISO setup/hold time (SPI mode=0/3)', }, config: { hscale: 4 } }
今回はスプライン曲線とかまったく使わず、縦、横に線分を置いただけですが、たったこのためだけでも適切な位置に node 記号を配置するのはかなり手がかかりました。最初からインビジブルな大文字で書いてしまうと位置がなんだかわからないので、とりあえず最初は小文字でビジブルなnodeをおいて、必要な線分を引いてから大文字に変更して描きました。
また、波形を描くときに便利なphaseですが、これを使って思ったような直線を引くのは難しくて断念しました。今回はphaseを使わずベタな縦横のタイミングチャートとして描いてます。その方がお楽。
セットアップとホールドを書き込みたかっただけなのだけれども。まあ、描き方は分かった。ホントか?次回はするする描けるか?