組み込み機器・ハードウェアの設計開発から装置製作まで社内一貫対応!

組み込み機器・ハードウェア設計製作.com
組み込み機器・ハードウェア設計製作.com

produced by株式会社アイディアイ

設計のポイント

verilog記述のポイント:演算子の優先順位は括弧で明示する

設計内容分類FPGA

実現したい仕様・課題

Verilogの演算子には優先順位が定められていますが、ビット演算・論理演算・比較・シフト・三項演算子が混在する式では、優先順位の思い違いによって意図と異なる評価順になり、発見しにくい論理バグを生みます。式の意図を誤解の余地なく表現したいというのが課題です。

設計のポイント

複数種類の演算子を含む式では、評価順を括弧で明示することを原則とします。特に間違いやすいのは、(1) ビットAND/OR(&, |)と比較演算(==, <)の組み合わせ — a & b == c は a & (b == c) と解釈され、意図した (a & b) == c とは異なります。(2) シフトと加減算 — a + b << 1 は (a + b) << 1 ではなく評価順に注意が必要です。(3) 三項演算子の入れ子 — 括弧なしで連ねると条件の対応関係が読み取れなくなります。(4) 論理否定(!)とビット反転(~)、論理AND(&&)とビットAND(&)の取り違え — 多ビット信号に!を適用すると「全ビットが0か」の判定になり、~とは意味が異なります。括弧を付けることによる合成結果への悪影響はなく(合成ツールは論理を最適化します)、可読性とレビュー効率が向上するだけです。また、リダクション演算子(&a, |a, ^a:多ビット信号の全ビットに対するAND/OR/XOR)は簡潔で有用ですが、二項演算と紛らわしい文脈では括弧で範囲を明確にします。「書いた本人以外が読んでも一意に解釈できる式」を基準にすることが、チーム開発での品質を支えます。

【コード例】
// △ 意図が曖昧: a & b == c は a & (b == c) と解釈される
wire ng = a & b == c;
// ○ 括弧で意図を明示
wire ok = (a & b) == c;
// リダクション演算も範囲を明確に
wire all_set = &data[7:0]; // 全ビットが1か
wire any_set = |data[7:0]; // いずれかのビットが1か

verilog記述のポイント:演算子の優先順位は括弧で明示する | 組み込み機器・ハードウェア設計製作.com

補足情報

当事例のような、FPGA設計に関するポイントをまとめた冊子の無料DLが可能です。
是非以下よりご確認ください。

FPGA設計のポイント

>>ダウンロードはこちら!

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

組み込み機器・ハードウェア 設計製作.comを運営する株式会社アイディアイは、組み込み機器・ハードウェアの設計開発代行サービスを提供しています。
試験装置や制御機器、組み込みボードなど、設計・開発委託先をお探しの皆様、お気軽に当社に御相談ください。

技術資料のダウンロードはこちらから 技術資料ダウンロ―ド メールフォームでのお問い合わせはこちらから ご相談お問合せ