FPGA 学习小组
直播中

alexdos

6年用户 804经验值
擅长:可编程逻辑 电源/新能源 嵌入式技术 模拟技术
私信 关注

【FPGA学习】 Verilog HDL 语言的表达式及操作符详细介绍

表达式是 Verilog HDL 语言中进行逻辑运算和表达最基本的元素。表达式由操作符和操作数按照一定的规则组合而成,下面进行详细介绍。
1.操作数
操作数的类型包括:常量、参数、线网、寄存器、存储器单元和函数调用等。
常量的使用规则在 2.8.4 中进行说明,下面是一些实例:
  1. 256,7 //非定长的十进制数
  2. 4'b10_11, 8'h0A // 定长的整型常量
  3. 'b1, 'hFBA // 非定长的整数常量
  4. 90.00006 // 实数型常量
  5. "BOND" // 串常量;每个字符作为 8 位 ASCII 值存储

表达式中的整数值可被解释为有符号数或无符号数。参数类似于常量,并且使用参数声明进行说明。下面是参数说明实例:
  1. parameterLOAD = 4'd12, STORE = 4'd10;

LOAD 和 STORE 为参数的例子,值分别被声明为 12 和 10。
线网在表达式中可以分别按照标量和向量两种方式使用,下面是线网说明实例:
  1. wire [0:3] Prt; //Prt 为 4 位向量线网
  2. wire Bdq; //Bbq 是标量线网

线网中的值被解释为无符号数。例如在连续赋值语句中:
  1. assign Prt = -3;

Prt 被赋于位向量 1101,实际上为十进制的 13,例如在下面的连续赋值中:
  1. assign Prt = 4'HA;

Prt 被赋于位向量 1010,即为十进制的 10。
寄存器也是可以按照标量和向量两种方式使用。寄存器变量使用寄存器声明进行说明,例如:
  1. integer TemA, TemB;
  2. reg [1:5] State;
  3. time Que [ 1:5 ] ;

整型寄存器中的值被解释为有符号的二进制补码数,而 reg 寄存器或时间寄存器中的值被解释为无符号数,实数和实数时间类型寄存器中的值被解释为有符号浮点数。例如下面的寄存器代码:
  1. TemA = -10; //TemA 值为位向量 10110,是 10 的二进制补码
  2. TemA = 'b1011; //TemA 值为十进制数 11
  3. State = -10; //State 值为位向量 10110,即十进制数 22
  4. State = 'b1011; // State 值为位向量 01011,是十进制值 11

在 Verilog HDL 语言中,对于向量形式的线网和寄存器,都可以采用部分选择的方式使用向量中需要的部分。在部分选择中,向量的连续序列被选择,形式如下:
  1. net_or_reg_vector [m***_const_expr:1***_const_expr]//部分选择的语法形式
  2. State [1:4] //寄存器部分选择
  3. Prt [1:3] // 线网部分选择

存储器单元的定义形式如下:
  1. memory [word_address] //定义形式
  2. reg [1:8] Ack, Dram [ 0 : 6 3 ] ;//例子
  3. . . .
  4. Ack = Dram [60]; //存储器的第 6 0 个单元

不允许对存储器变量值部分选择或位选择。例如,
  1. Dram [60] [2] //使用错误
  2. Dram [60] [2:4]//使用错误

在存储器中读取一个位或部分选择一个字的方法如下:将存储器单元赋值给寄存器变量,然后对该寄存器变量采用部分选择或位选择操作。


2.操作符
Verilog HDL语言中的操作符包括:

• 算术操作符 +(加法)、-(减法)、×(乘法)、÷(除法)和%(取模)。
• 关系操作符 >(大于)、<(小于)、≥(大于等于)和≤(小于等于),计算结果为真(1)或者假(0)。
• 相等操作符 ==(逻辑相等)、!=(逻辑不相等)、===(逻辑全等)和!==(非全等)。
• 逻辑操作符 &&(逻辑与)、||(逻辑或)、!(逻辑非)。
• 按位操作符 ~(一元非)、&(二元与)、|(二元或)、^(二元异或)和~^(二元异或非)。
• 移位操作符 <<(左移)、>>(右移)。
• 条件操作符 条件操作符根据条件表达式的值选择表达式。

更多回帖

发帖
×
20
完善资料,
赚取积分