1.操作数:常数、参数、线网、变量、位选、部分位选、
存储器和数组元素、函数调用
常数:
用基数或不用基数表示的整数,其负值的处理方式是各不相同的。
不用基数表示的负整数值被当作有符号数处理;用基数表示的负数值被当作
无符号数。
参数:
类似于常量使用参数声明语句加以说明。
线网:
标量线网(1位)和向量线网(多位)
例:wire [0:3] gpio_port;//gpio_port是一个4位的向量线网
wire intr;// intr是标量线网
在线网的声明语句中若没有关键词signed,则线网中的值被解释为无符号的数。
变量:
整型变量的值被解释为有符号的二进制补码数;
时间变量中的值被解释为无符号数;
reg变量声明语句中包含signed则变量值被解释为有符号数,否则为无符号数;
实型与实型时间变量中的值被解释为有符号浮点数。
位选:指从一个向量中抽取指定的位
格式:net_or_reg_vector[bit_select_expr]
例:mis_state[1] && mis_state[4]//变量的位选
若表达式索引的位为x、z或越界,则位选值为x。
部分位选:指在向量中选取相邻的若干位
格式:net_or_reg_vector[msb_const_expr : lsb_const_expr]
例:integer mark;
reg[0:15] inst_code;
inst_code[mark + : 2] //选择mark、mark+1 两位
存储器和数组元素:
存储器元素:指从某个存储器中选取一个字
数组元素:选择数组中的一个字
函数调用:
2、操作符(9类)
算术操作符:+、-、×、/、%(取模)、**(幂运算)
算术操作符中任意操作数中只要有一位为x或z,则整个运算结果为x。
算术表达式运算结果的位宽由最大操作数的位宽决定;在赋值语句下,算术
运算结果的位宽也由赋值等号左端目标变量的位宽决定。表达式中的所有中间
结果应取最大操作数的位宽。
只要有一个操作数是无符号的,那么在开始任何操作前,所有其他的操作数都
被转换成了无符号数;为了进行有符号的运算,在一个表达式中的所有操作数
必须都是有符号数。
关系操作符:>、<、>=、<=
若操作数中有一位为x或z,则结果为x。
若表达式中一个操作数是无符号的,则该表达式的其余操作数均被当作无符号数
处理
相等操作符:==、!=、===(全等)、!==(非全等)
全等和非全等:把x和z当作数值严格按照字符去比较
逻辑操作符:&&、||、!
按位操作符:~、&、|、^、~^、^~
缩减操作符:&(缩减与)、~&(缩减与非)、|(缩减或)、~|(缩减或非)
^(缩减异或)、~^(缩减同或)
缩减异或操作符可以被用来确定向量中是否存在任何为x的位
移位操作符:<<、>>、<<<(算术左移)、>>>(算术右移)
条件操作符:
拼接和复制操作符:
文章评论(0条评论)
登录后参与讨论