目录
1. 常量是 Verilog 中不变的数值,Verilog 中的常量有三种类型
8.3.3、常量
1. 常量是 Verilog 中不变的数值,Verilog 中的常量有三种类型
(1) 整数型; (2) 实数型; (3) 字符串型。
3. 整数型常量也可以采用基数表示法表示,
例如: (1) 8’hab 表示 8bit 的十六进制数,换算成二进制是 1010_1011;
(2) 8’d171 表示 8bit 的十进制数,换算成二进制是 1010_1011;
(3) 8’o253 表示 8bit 的八进制数,换算成二进制是 1010_1011;
(4) 8’b1010_1011 表示 8bit 的二进制数,二进制就是 1010_1011。
4. 基数表示法的基本格式
(1) [换算为二进制后位宽的总长度][’][数值进制符号][与数值进制符号对应的数值] 其中[位宽的总长度]可有可无,[数值进制符号]中如果是[h]则表示十六进制,如果 是[o]则表示八进制,如果是[b]则表示二进制,如果[d]则表示十进制。当[换算为 二进制后位宽的总长度]比[与数值进制符号对应的数值]的实际位数多,则自动在 [与数值进制符号对应的数值]的左边补足 0,如果位数少,则自动截断[与数值进 制符号对应的数值]左边超出的位数。
(2) 如果将数字写成“’haa”,那么这个十六进制数的[换算为二进制后位宽的总长 度]就取决于[与数值进制符号对应的数值]的长度。
(3) 在基数表示法中如果遇到 x,则在十六进制数中表示 4 个 x,在八进制中表示 3 个 x。
(4) 另外,数字中的下划线没有任何意义,但是可以很好的增强可读性,推荐每 4 个 bit 后加一个下划线,例如:4’b11011011 和 4’b1101_1011 表示的是一样的 值,但是后面的看上去更容易识别。
8.3.4 变量
1. 线网型:表示电路间的物理连接;
2. 寄存器型:Verilog 中一个抽象的数据存储单元。 线网型和寄存器类型具体又包含很多种变量,线网型变量最常用的变量就是 wire,而 寄存器型最常用的变量是 reg。wire 可以看成直接的连接,在可综合的逻辑中会被映射成一 根真实的物理连线;而 reg 具有对某一个时间点状态进行保持的功能,如果在可综合的时 序逻辑中表达,会被映射成一个真实的的物理寄存器,而在 Verilog 仿真器中,寄存器类型 的变量通常要占据一个仿真内存空间。
因此在设计逻辑的时候要明确定义每个信号是 wire 还是 reg 属性。凡是在 always 或 initial 语句中被赋值的变量(赋值号左边的变量),不论表达的是组合逻辑还是时序逻辑, 都一定是 reg 型变量;凡是在 assign 语句中被赋值的变量,一定是 wire 型变量。
testbench中待测试RTL模块的输入永远是reg型
testbench中待测试RTL模块的输出永远是wire型
8.3.6 赋值语句
赋值语句的赋值方式有两种,分别为“<=”(非阻塞赋值,只能用于书序语句中)和“=”(阻塞赋值,顺序执行)。
a=1;b=2;c=3
begin
a=b;
c=a;
end
输出结果a=2;b=2;c=2;
a=1;b=2;c=3
begin
a<=b;
c<=a;
end
输出结果a=2;b=2;c=1;
8.3.12 优先级
总的优先级关系为:归约运算符 > 算数运算符 > 移位运算符 > 关系运算符 > “= =” 和“!=”> 按位运算符 > “&&”和“||”> 条件运算符,总的来说是一元运算符 > 二元运 算符 > 三元运算符。
8.3.13 位拼接运算符
位拼接运算符由一对花括号加逗号组成“{ , }”,拼接的不同数据之间用“,”隔 开。位拼接运算符的作用主要有两种,一种是将位宽较短的数据拼接成一个位宽长的数 据;另一种是可以通过位拼接实现移位的效果。
8.3.16 Verilog 语言中的系统任务和系统函数
`timescale 1ns/1ns //时间尺度预编译指令 时间单位/时间精度
时间单位和时间精度由值 1、10、和 100 以及单位 s、ms、us、ns、ps 和 fs 组成。
时间单位:定义仿真过程所有与时间相关量的单位。
仿真中使用“#数字”表示延时相应时间单位的时间,例#10 表示延时 10 个单位的时间, 即 10ns。
时间精度:决定时间相关量的精度及仿真显示的最小刻度。
`timescale 1ns/10ps 精度 0.01,#10.11 表示延时10.11ns也就是延时 10110ps。
下面这种写法就是错误的,因为时间单位不能比时间精度小。
`timescale 100ps/1ns