fpga_feixiang 发表于 2020-7-16 15:55:10

Verilog中的数字

信号值如果为标量,则为一位的0,1,x或z。例如:

a = 1’b0; b = 1’b1;

c = x; d = z;

      对于矢量,通常表示为:’constant, 标量也可以当作size=1的矢量。其中size表示常数的位数,radix为常数的基数。如果没有指定基数,则默认为十进制。Verilog支持的基数有:d(十进制),b(二进制),h(十六进制),o(八进制)。如果定义的位数大于所需要的位数时,通常在前面补0,但是如果最高位是x或z时候,就用x和z来填充。在常量表示中间,可以任意插入下划线,把数字隔开,以方便阅读。可以在基数前面加s(或者S)以表示这是一个有符号数,若未指定一个整数的进制类型,则默认是有符号数,若指定了进制类型,仅当基数前有s,则其为有符号数,否则为无符号数。对于有符号数,如果定义的位数大于所需要的位数时,前面补最高有效位(MSB),如下表中的8’sha9。

下面是一些实例:

数字表示

二进制

注释

reg a = 8'sha9

‘11111111111111111111111110101001

8位有符号数,所以进行MSB位扩展,

reg b = 4'd5

’00000000000000000000000000000101

4位无符号数,高位补0

reg c = 12'h5b_3

‘00000000000000000000010110110011

忽略下划线,12位的无符号数,高位补0

reg d = -8'b101

’11111111111111111111111111111011

负数转为补码表示,MSB位扩展到32位

reg e= 10'o752

‘00000000000000000000000111101010

8进制无符号数,高位补0

reg f = 8'hf

’00000000000000000000000000001111

16进制无符号数,高位补0

reg g = 12'hxa

‘00000000000000000000xxxxxxxx1010

左边补x直到12位,然后高位补0

reg h = -8'sha9

’00000000000000000000000001010111

补码表示负数,扩展MSB位,

reg i = 8'ha9

‘00000000000000000000000010101001

无符号数,高位补0

reg j = -4'sha

’00000000000000000000000000000110

补码表示负数,扩展MSB位。

zxopenhl 发表于 2020-7-19 16:04:16

Verilog中的数字
页: [1]
查看完整版本: Verilog中的数字