Posted at

Verilog HDLでの回路記述で用いる数値表現と演算子 (授業用)

More than 1 year has passed since last update.


数値表現

数値はビット幅と基数を指定して表現する。

基数はb(2進)、o(8進)、d(10進)、h(16進)で指定する。基数の指定が無い場合は10進数とみなされる。

ビット幅を指定しないと32ビットの信号とみなされるため注意すること。(できるだけビット幅は指定すること)

数値表現
ビット幅
基数
2進表現

1'b0
1
2進
0

1'b1
1
2進
1

8'b1010_0111
8
2進
10100111

8'ha7
8
16進
10100111

4'd5
4
10進
0101

4'o7
4
8進
0111


演算子

回路として論理合成可能な主な演算子を示す。


ビット演算

記号
演算
使用例

~
NOT
~x

&
AND
x & y

|
OR
x | y

^
XOR
x ^ y

ビットごとの論理演算を行う。

例えば a = 4'b1011, b = 4'b1100のとき、a & b = 4'b1000となる。


シフト演算

記号
演算
使用例

<<
論理左シフト
data << shift

>>
論理右シフト
data >> shift

左辺の信号を、右辺で指定されたビット数分だけ論理シフトする。

例えば、data = 8'b10110110 のとき、data << 3'd3 = 8'b10110000 となる。


算術演算

記号
演算
使用例

+
加算
x + y

-
減算
x - y

算術演算を行う。

例えば a = 4'b1001, b = 4'b0011 のとき、a + b = 5'b01100 となる。


関係演算

記号
演算
使用例

<
小なり
x < y

<=
小なりイコール
x <= y

>
大なり
x > y

>=
大なりイコール
x >= y

==
一致
x == y

!=
不一致
x != y

左辺と右辺のデータ間で指定された関係が成り立つかを判定する。

結果は1ビットの値を持ち、成立する時は1、不成立のときは0となる。

例えば x = 4'b0111, y = 4'b0101のとき、x > y = 1'b1 となる。


その他

記号
演算
使用例

?:
条件演算
(sel==1'b0) ? x : y

{}
連結演算
{x, y}

条件演算では、最初の信号(?の左側の信号)を条件部として、条件部に1ビットでも1があるときは条件成立として、

2番目の信号(?と:の間)の値を返す。条件が不成立のときは3番目の信号(:の右側)を返す。

例えば、sel = 1'b1, x = 4'b1100, y = 4'b0011 のとき、(sel == 1'b0) ? x : y = 4'b0011 となる。

連結演算は複数の信号を一つに束ねる。

例えば, x = 3'b110, y = 5'b11110のとき、{x, y} = 8'b11011110 となる。