見た目を統一する - ネーミング
「reg変数にはサフィックス(_regまたは_r)をつけてFFであることを識別できるようにする」
FF間に大きな組合せ回路があるとクロック周波数が遅くなってしまうので、FFへの代入文の右辺がFF出力なのか組合せ回路出力なのか容易に識別できた方がよい。また非同期クロック間転送では、右辺はFF出力でなければならないのでreg変数とwire変数を識別することは重要である。そこで、FFを示すreg変数にはサフィックス(_regまたは_r)をつける。
× reg valid; // サフィックスなし ○ reg valid_r; // サフィックス(_r)あり ○ wire valid; // wireはサフィックスなし |
すべてのreg変数にサフィックスをつけるのは確かにめんどうではあるが、読みやすさを考えると付ける価値はある。
なお、組合せ回路をalways文で書く方法を使うと出力がreg変数になるが、この方法はFF推定のalways文とまぎらわしいので推奨しない。
◇
「マクロとパラメータは大文字、reg変数とwire変数は小文字にする」
一般論として大文字より小文字の方が読みなれているので主に小文字を使い、使用頻度の低いマクロとパラメータのみ大文字を使うのがよいと思う。トップモジュールの入出力信号を識別するために大文字にするという流儀もあるようだが、内部信号を入出力に出したくなることもあるし、流用してトップモジュールの上にモジュールを設けることもあるので、入出力か内部かの区別はしない方がよいのではないか。
× input RST_N; // 変数に大文字を使っている ○ input rst_n; // 変数に小文字だけ使っている ○ parameter IDLE=4'd0; // parameterに大文字を使っている |
◇
「変数内の区切りはアンダースコアにする」
ソフトウェア言語でよくやるように大文字を使って単語を区切る流儀(camelCase)にすると、memadrとmemAdrのように大文字小文字だけが異なる変数があった場合に本当に別の変数なのかタイプミスなのかわからなくなる。アンダースコアで区切る流儀(snake_case)は、アンダースコアが意味をもつ言語ではまずいが、VerilogHDLでは問題ない。
× reg adrStatusReg; // 大文字で区切っている ○ reg adr_status_r; // アンダースコアで区切っている |
◇
「a,aaa,a001などの意味不明な変数名は使わず、意味のある名称にする」
変数名を考えるのは意外とめんどうなので適当な名前をつけてしまいたくなるが、ここをさぼると後悔する。