入出力仕様の書き方

[] [] []


入出力仕様を書くときの必須項目には次のようなものがある。

(1) 信号の説明

・信号名、方向、説明を書く。

・信号名は、正論理(High=1(true))か負論理(High=0(false))かわかるように付けた方がよい。

 例) ×バスAB切り替えbus_switchという信号名では信号がHighのときABのどっちなのかわからない。

   バス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 type2の補数。整数部1ビット,小数部14ビット ←データタイプも書く


[] [] []