入出力仕様の書き方
入出力仕様を書くときの必須項目には次のようなものがある。
◇
(1) 信号の説明
・ 信号名、方向、説明を書く。
・ 信号名は、正論理(High=1(true))か負論理(High=0(false))かわかるように付けた方がよい。
例)
× バスAB切り替えbus_switchという信号名では信号がHighのときAとBのどっちなのかわからない。
〇 バスA選択bus_a_selならばHighのときAが選択されるとわかる。
また、負論理の信号は、信号名だけで識別できるようにサフィックス(_n)を付けた方がよい。こうしておくと、リセット時の出力値は一律に0(false)と決めておけば、ピンごとにリセットの値を書かなくてすむ。差動信号(sig_p,sig_n)は、High:p>n Low:p<nのようにHigh/Lowの定義も明確にしておく。これはタイミングチャートを書くときにも必要。
・ 方向は、入力(I)、出力(O)、双方向(IO)の区別だけでなく、オープンドレイン(OD)、トライステート(OT)も識別した方がよい。外部プルアップが必要か識別するために。
・ 信号名に方向を示すプレフィックス(i_,o_,io_)を付けてもよいが、やりすぎのような気もする。
・ 説明は、レベル信号ならばLow,Highの意味、パルス信号ならばパルスの意味とパルス幅(受信側の1クロック以上必要)を書くとよい。ここで、レベルとパルスは単なる波形の違いではなく、信号の意味の違いである。同じパルス状の波形でも、レベル信号ならばパルス幅に意味がある、すなわちその期間は1(true)という意味になるが、パルス信号ならばパルス幅自身に意味はなく、パルスのエッジのタイミングや回数に意味がある。
信号名 |
方向 |
説明 |
clk |
I |
クロック(100MHz) |
dtype[1:0] |
I |
データタイプ(0:8bit,1:16bit,2:32bit,3:禁止) |
1pps |
I |
1s周期パルス(1clk幅) |
dat[15:0] |
IO |
データ |
intr_n |
OD |
割り込み要求(Low:要求中) |
・ この他に、タイミング情報(出力を変化させるクロック、入力をサンプリングしているクロック、そのクロックに同期しているか非同期か)、ピン属性(プルアップ有無、ドライブ電流)の仕様もここに書くとよい。
・ ピン番号は1ピンに1行を割り当てなければならないので、ピンアサイン表として別の表にした方がよい。
◇
(2) タイミングチャート (timing diagram)
・ 信号どうしの因果関係を波形で描く。
・ 機能を表現するときはクロック単位の粗さで描き、遅延時間などを表現するときは時間単位(ns)で描く。欲張って両方を1つの図に描くとわかりにくくなる。
例)クロック単位のタイミングチャート
例)時間単位のタイミングチャート
◇
(3) パケットフォーマット(フレームフォーマット)
・ データを転送するのに、あるビット列(バイト列)かたまりを定義することがあり、かたまりのどの部分が何を意味するかを書く。
・ データのかたまりは、パケット(小包)とかフレーム(枠組み)と呼ばれる。
例)シリアルデータの場合
0 31 |
32 47 |
48 63 |
|
511 |
header |
data#0 |
data#1 |
... |
crc |
MSB(bit 0) first ←出力順も書く
例)パラレルデータの場合
31 |
0 |
出力順 |
header |
↓ |
|
data#0 |
data#1 |
|
... |
... |
|
data#10 |
data#11 |
|
data type:2の補数。整数部1ビット,小数部14ビット ←データタイプも書く