1. 数值种类
verilog HDl 有 4 种基本的值表示硬件电路的电平逻辑:
- 0:逻辑 0 或假
- 1:逻辑 1 或真
- x/X:未知
- z/Z:高阻
x
表示信号值不确定,此时信号可能是 0,也可能是 1.
z
表示信号处于高阻状态,信号没有驱动时,常常是高阻状态。
2. 整数数值表示方法
数字声明时,合法的基数格式有 4 种:
- 二进制(b/B)
- 八进制(o/O)
- 十进制(d/D)
- 十六进制(h/H)
2.1 数值可指明位宽,也可补指明位宽
2.1.1 指明位宽
8'b1000_0001 /// 8位宽二进制数
8'o201 /// 8位宽八进制数
8'd129 /// 8位宽十进制数
8'h81 /// 8位宽十六进制数
笔记
其中,下划线 _
只是增强代码的可读性,没有实际意义。
2.1.2 不指明位宽
assign cnt = b'1000_0001 ;
assign cnt = o'201 ;
assign cnt = d'129 ;
assign cnt = h'81 ;
笔记
不指明位宽时,常见编译器(vivado 等)默认为 32 bit。
例如:cnt = b’1000_0001 等价于 cnt = 32’b 1000_0001。
2.1.3 负数表示
通常在表示位宽的数字前面加一个 -(减号)
来表示复数。
例如:
-8'b 1000_0001 /// 8 位宽二进制数
-8'o 201 /// 8 位宽八进制数
-8'd 129 /// 8 位宽十进制数
-8'h 81 /// 8 位宽十六进制数
2.2 实数表示方法
实数表示方法主要有两种方式:
例如:
/// 十进制
7
77
-7
-77
/// 科学计数法
1.7e7 /// 大小为17000000
1.7-e7 /// 大小为0.00000017
2.3 字符串表示方法
字符串是由双引号包起来的字符队列。
字符串不能多行书写,即字符串不能包含回车符,也就是说字符串不能换行。
verilog 将字符串当作一些列单字节 ASCII 字符队列。
例如:
/// 存储"hello,world!"的字符串
reg [12*8-1:0] str ;
initial begin
str = "hello,world!";
end
笔记
在表达式和赋值语句中,用作操作的字符被视为由 8 bit 的 ASCII 码表示的无符号整数常量。
例如:上面的 str 位宽就是 12*8。
3. 总结
- 掌握不同进制的数值(包括负数)的表示方法。
- 不指明位宽时,编译器(vivado 等)默认为 32 位宽。