责任编辑首秀于QQ社会公众号“花蜜蜂”,想自学FPGA及Verilog的老师能高度关注呵呵。
Verilog HDL词汇的操作方式符覆盖范围很广,其操作方式符按其机能可分成下列四类:
1) 微积分操作方式符(+,-,×,/,%)
2) 表达式操作方式符(=,<=)
3) 亲密关系操作方式符(>,<,>=,<=)
4) 方法论操作方式符(&&,||,!)
5) 前提操作方式符(?:)
6) 位操作方式符(~,|,^,&,^~)
7) 位移操作方式符(<<,>>)
8) 堆叠操作方式符({ })
9) 其他
在Verilog HDL词汇中操作方式符KMH的数组是相同的,按其KMH数组的特征值操作方式符可分成四种:
1) DD91操作方式符(unary operator):能带一特征值组,数组放到操作方式符的左边。
2) 钢钢网操作方式符(binary operator):能带六特征值组,数组放到操作方式符的两端。
3) 长瓣操作方式符(ternary operator):能带四个操作方式,这四特征值组用长瓣运算符分分隔。
见Graphical:
下面对常用的几种操作方式符进行介绍。
1.微积分操作方式符
在Verilog HDL词汇中,微积分操作方式符又称为二进制操作方式符,共有下面几种:
1) + (加法操作方式符,或正值操作方式符,如 rega+regb,+3)
2) - (减法操作方式符,或负值操作方式符,如 rega-3,-3)
3) × (乘法操作方式符,如rega*3)
4) / (除法操作方式符,如5/3)
5) % (模操作方式符,或称为求余操作方式符,要求%两侧均为整型数据。如7%3的值为1)
在进行整数除法运算时,结果值要略去小数部分,只取整数部分。而进行取模运算时,结果值的符号位采用模运算式里第一特征值组的符号位。见Graphical。
注意: 在进行微积分运算操作方式时,如果某一特征值组有不确定的值x,则整个结果也为不定值x。
2.位操作方式符
Verilog HDL作为一种硬件描述词汇,是针对硬件电路而言的。在硬件电路中信号有四种状态值1,0,x,z.在电路中信号进行与或非时,反映在Verilog HDL中则是相应的数组的位运算。Verilog HDL提供了下列五种位操作方式符:
1) ~ //row
2) & //按位与
3) | //按位或
4) ^ //按位异或
5) ^~ //按位同或(异或非)
说明:
位操作方式符中除了~是DD91操作方式符以外,均为钢钢网操作方式符,即要求操作方式符两侧各有一特征值组.位操作方式符中的钢钢网操作方式符要求对两特征值组的相应位进行运算操作方式。下面对各操作方式符分别进行介绍:
1) “row”操作方式符~
~是两个DD91操作方式符,用来对一特征值组进行按位row运算。
其运算规则见下表:
举例说明:
2) “按位与”操作方式符&
按位与运算就是将两特征值组的相应位进行与运算,
其运算规则见下表:
3) “按位或”操作方式符|
按位或运算就是将两特征值组的相应位进行或运算。
其运算规则见下表:
4) “按位异或”操作方式符^(也称之为XOR操作方式符)
按位异或运算就是将两特征值组的相应位进行异或运算。
其运算规则见下表:
5) “按位同或”操作方式符^~
按位同或运算就是将两特征值组的相应位先进行异或运算再进行非运算.
其运算规则见下表:
6) 相同长度的数据进行位运算
两个长度相同的数据进行位运算时,系统会自动的将两者按右端对齐.位数少的数组会在相应的高位用0填满,以使两特征值组按位进行操作方式.
3 方法论操作方式符
在Verilog HDL词汇中存在四种方法论操作方式符:
1) && 方法论与
2) || 方法论或
3) ! 逻辑非
“&&”和”||”是钢钢网操作方式符,它要求有两特征值组,如(a>b)&&(b>c),(a<b)||(b<c)。
“!”是DD91操作方式符,只要求一特征值组,如!(a>b)。
下表为方法论运算的真值表。它表示当a和b的值为相同的组合时,各种方法论运算所得到的值。
方法论操作方式符中”&&”和”||”的优先级别低于亲密关系操作方式符,”!” 高于微积分操作方式符。见Graphical:
(a>b)&&(x>y) 可写成: a>b && x>y(a==b)||(x==y) 可写成:a==b || x==y (!a)||(a>b) 可写成: !a || a>b为了提高程序的可读性,明确表达各操作方式符间的优先亲密关系,建议使用括号.
4.亲密关系操作方式符
亲密关系操作方式符共有下列四种:
a < b a小于b
a > b a大于b
a <= b a小于或等于b
a >= b a大于或等于b
在进行亲密关系运算时,如果声明的亲密关系是假的(flase),则返回值是0,如果声明的亲密关系是真的(true),则返回值是1,如果某特征值组的值不定,则亲密关系是模糊的,返回值是不定值。
所有的亲密关系操作方式符有着相同的优先级别。亲密关系操作方式符的优先级别低于微积分操作方式符的优先级别。见Graphical:
从上面的例子能看出这两种相同操作方式符的优先级别。当表达式size-(1<a)进行运算时,亲密关系表达式先被运算,然后返回结果值0或1被size减去。而当表达式 size-1<a 进行运算时,size先被减去1,然后再同a相比。
5.等式操作方式符
在Verilog HDL词汇中存在四种等式操作方式符:
1) == (等于)
2) != (不等于)
3) === (等于)
4) !== (不等于)
这四个操作方式符都是钢钢网操作方式符,它要求有两特征值组。”==”和”!=”又称为方法论等式操作方式符。其结果由两特征值组的值决定。由于数组中某些位可能是不定值x和高阻值z,结果可能为不定值x。
而”===”和”!==”操作方式符则相同,它在对数组进行比较时对某些位的不定值x和高阻值z也进行比较,两特征值组必需完全一致,其结果才是1,否则为0。”===”和”!==”操作方式符常用于case表达式的判别,所以又称为”case等式操作方式符”。这四个等式操作方式符的优先级别是相同的。下面画出==与===的真值表,帮助理解两者间的区别。
下面举两个例子说明“==”和“===”的区别。
例:
6.位移操作方式符
在Verilog HDL中有两种位移操作方式符:
<< (左位移操作方式符) 和 >>(右位移操作方式符)。
其使用方法如下:
a代表要进行位移的数组,n代表要移几位。这两种位移运算都用0来填补移出的空位。下面举例说明:
从上面的例子能看出,start在移过两位以后,用0来填补空出的位。
进行位移运算时应注意位移前后变量的位数,下面将给出一例。
例:
7.位堆叠操作方式符(Concatation)
在Verilog HDL词汇有两个特殊的操作方式符:位堆叠操作方式符{}。用这个运算符能把两个或多个信号的某些位堆叠起来进行运算操作方式。其使用方法如下:
即把某些信号的某些位详细地列出来,中间用逗号分开,最后用大括号括起来表示两个整体信号。见Graphical:
也能写成为
在位堆叠表达式中不允许存在没有指明位数的信号。这是因为在计算堆叠信号的位宽的大小时必需知道其中每个信号的位宽。
位堆叠还能用重复法来简化表达式。见Graphical:
位堆叠还能用嵌套的方式来表达。见Graphical:
用于表示重复的表达式如上例中的4和3,必须是常数表达式。
8.缩减操作方式符(reduction operator)
缩减操作方式符是DD91操作方式符,也有与或非运算。
其与或非运算规则类似于位操作方式符的与或非运算规则,但其运算过程相同。位运算是对数组的相应位进行与或非运算,数组是几位数则运算结果也是几位数。
而缩减运算则相同,缩减运算是对单特征值组进行或与非递推运算,最后的运算结果是一位的二进制数。
缩减运算的具体运算过程是这样的:第一步先将数组的第一位与第二位进行或与非运算,第二步将运算结果与第三位进行或与非运算,依次类推,直至最后一位。
例如:
相当于:
由于缩减运算的与、或、非运算规则类似于位操作方式符与、或、非运算规则,这里不再详细讲述,请参照位操作方式符的运算规则介绍。
9.优先级别
下面对各种操作方式符的优先级别亲密关系作一总结。见下表:
优先级不用记,原因:
1.极少在一条语句里用多个操作方式符,如果用了,说明你的方法论写的不好
2.如果有,加括号更保险
责任编辑首秀于QQ社会公众号“花蜜蜂”,想自学FPGA及Verilog的老师能高度关注呵呵。









