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(数字零),很多新手会手滑写错。