if( )の条件式は1ビットにする
「if( )の条件式は1ビットにする」
if(a)は素直に考えると
aが1(true)ならば成立
だが、文法上は
aが0(ゼロ)でなければ成立 (ただしxやzならば不成立)
というルールである。
aが1ビットならば同じ意味になるが、多ビットならば
aが2、-1でも成立
とやや直観に反する意味になる。したがってif( )の条件式は必ず1ビットにした方がよい。
reg[1:0] a; × if(a) // aを1ビットと勘違いしているのか、意図的なのか曖昧 ○ if(a!=2'd0) // aを多ビットと認識していることが明確でよい reg b; ○ if(b),if(~b) // 1ビット変数のときif(b==1'b1)と書くのはやりすぎ |
とはいえ、当初は1ビットだった変数aを、シフトレジスタ reg[1:0] a; に直したのにif(a)を直し忘れることはよくあるので、リントツールでチェックした方がよい。