DC娱乐网

Verilog 不同进制数字表示 完整精解 格式通用模板:  [位宽]'[进

Verilog 不同进制数字表示 完整精解

格式通用模板:
 [位宽]'[进制标识][数值] 

- 位宽:可选,指定二进制位数
-  '  单引号是分隔符,必须写
- 进制标识: b/o/d/h  分别对应二/八/十/十六进制
- 数值:对应进制下的数字

1. 四种进制符号对照表

符号 进制 英文全称 可用字符
b 二进制 binary 0、1
o 八进制 octal 0~7
d 十进制 decimal 0~9
h 十六进制 hex 0~9,a~f / A~F

不写  '进制 ,默认是十进制。

2. 基础写法示例

(1)十进制 d

verilog

10 // 无标记,默认十进制10
5'd10 // 5位位宽,十进制10
8'd255 // 8位,十进制255
 

(2)二进制 b

verilog

4'b1010 // 4位二进制 1010 = 十进制10
8'b11110000 // 8位二进制
 

(3)八进制 o

1位八进制 = 3位二进制

verilog

3'o7 // 3位八进制7 等价 3'b111
9'o123 // 9位,八进制123
 

(4)十六进制 h

1位十六进制 = 4位二进制,最常用总线赋值

verilog

4'ha // 4位十六进制a = 4'b1010 = 10
8'hFF // 8位全1,十进制255
16'hABCD // 16位十六进制数
 

字母大小写不敏感: hff  和  hFF  完全一样。

3. 位宽规则重点

1. 位宽指最终二进制总位数
 8'h1  等价于  8'b00000001 ,高位自动补0。
2. 如果赋值数值二进制位数 > 指定位宽:截断高位,只保留低位
verilog

4'b1111 = 2'hFF; // hFF是8位11111111,截断高4位,剩下低4位1111
 
3. 如果赋值位数 < 位宽,左边高位补0。

4. 不定态x、高阻态z

常用于总线、复位、未初始化信号:

-  x :未知/不定态
-  z :高阻态(浮空)

verilog

4'bxxxx // 4位全部不定态
8'bzzzz_0000 // 高四位高阻,低四位0
4'hz // 十六进制z等价4位高阻
 

5. 数字下划线分隔(Verilog2001支持,提高可读性)

下划线  _  仅视觉分隔,编译器会直接忽略,不影响数值

verilog

32'h1234_5678
26'd50_000_000 // 50MHz计数器最大值,之前分频代码里用过
8'b1111_0000
 

6. 常用等价对照(方便记忆)

十进制 二进制 八进制 十六进制 Verilog写法
10 1010 12 a 4'd10 /4'b1010 /4'ha
255 11111111 377 ff 8'd255 /8'hFF

7. 易错坑点

1. 不能把十进制数字加h/b前缀: 8'dFF  是错误的,d后面只能写0~9数字。
2. 省略位宽时,Verilog会根据系统最小位宽推断,工程里建议永远写上指定位宽,避免位宽不匹配导致隐藏bug。
3. 八进制o不要写成0(数字零),很多新手会手滑写错。