リダクション演算子の活用
リダクション演算子とは(変な色ついちゃうの勘弁)
&hoge[7:0]
|hoge[7:0]
^hoge[7:0]
~hoge[7:0]
である.
バスの各ビットに対してAND,OR,XOR,NOT演算をする.
&hoge[3:0]ならhoge[3]&hoge[2]&hoge[1]&hoge[0]ということである.
バスのビット幅にかかわらず,コンパクトにかつ定義的に書けるため余計なミスをしなくて済む.
以下,使用例である
0以上判定
|hoge[7:0]
よく見かけるのはhoge[7:0]>8'd0とか.
タイプミスしかねない,右辺の0という数字自体に意味はなく,0以外/0ではないことを示すならリダクション演算すべき.
~|hoge[7:0]とすれば0判定になる.便利.
桁あふれ(直前)判定
&hoge[7:0]
よく見かけるのはhoge[7:0]==8'hFFとか.たまにhoge[7:0]==8'b11111111とか.やめて.
なぜそうやって記述ミスを誘発したがるのか.ビット幅が狭ければまだ数えられるが,1が32個も並ぶようなのは絶対にダメ.どうしてもというならアンダースコアをつけて4bit毎に区切るとかしてね.
リダクション演算子を使用する意義としては上の0以上判定と同様.
カウンタ系の記述で大いに有用.オーバーフローを出力するときとか便利.
ビット数偶奇判定
^hoge[7:0]
正直使い所がわからん.面白い使い方がありましたら教えて欲しいです.
ただ,こういう性質があるよ.という言及にとどめておく.ちなみにアサートされたビット数が奇数で1.
#Verilog