内部信号は正論理にする
「内部信号は正論理にする、もし負論理を使うときは変数にサフィックス(_n)をつけて識別できるようにする」
正論理/負論理(Active High/Active Lowともいう)とは、信号の電圧レベルHigh/Lowと意味1(true)/0(false)との対応のことである。
ちなみに信号を1に駆動することをアサートする(assert)、0に駆動することをネゲートする(negate)またはデアサートする(deassert)という。
電圧レベル |
正論理 Active High |
負論理 Active Low |
High |
1(true) |
0(false) |
Low |
0(false) |
1(true) |
正論理か負論理かは信号名の付け方に依存することに注意。
例)動作中のときHigh、エラーのときLowになる信号に対して、信号名errorは負論理、信号名runは正論理
入出力ピンの信号は電気的な理由から負論理にすることがあるが、FPGAの内部信号はわざわざ負論理を使う理由はないので、値が1のときに信号名どおりの意味になる正論理にした方がわかりやすい。
× if(~error_n)// error_nは負論理 ○ if(error) // errorは正論理 |
例外としてFPGA内では回路的に正論理か負論理かが決まっている信号がある。
例1) FFのリセット端子 (→FFのリセット)
例2) トライステート出力バッファのOE端子 (→IOブロックへのレジスタパッキング)
◇
「正論理でも負論理でもないような信号名はつけない方がよい」
例) バスA/B切り替えbus_switchという信号名では、信号がHighのときAなのかBなのかわからない。バスA選択bus_a_selにすれば、1(true)のときバスAとわかる。
◇
「マスクよりイネーブルの方がよい」
何か信号をゼロ(無効)にしておく信号をマスクと呼ぶことがあるが、定義がまぎらわしいのでイネーブルと呼んだ方がよい。
例)割り込みマスク
通常はmask=1のとき信号がでて、mask=0のときは0(割り込みが出ない)、すなわちintr & maskである。しかしこれだとmask=0のときマスクすることになるので、mask=1のときマスクする intr & ~maskと定義することもある。そこで、イネーブルのとき割り込みが出る intr & enableとすれば正論理になって誤解がない。