数字进制
在 Verilog 中的数字表示方式,最常用的格式是:<位宽>‘<基数><数值>,如:4’b1011.
<位宽>描述常量所含位数的十进制整数。
<基数>基数:表示数值是多少进制。可以是 b,B,d,D,o,O,h 或者 H,分别表示二进制、十进制、 八进制和十六进制。
<数值>如果基数为b或B,则数值可以为0,1,x,X,z,Z。其中x,X代表不定态,z,Z代表高阻态。对于基数为 d 或者 D 的情况, 数值符可以是任意的十进制数:0 到 9,但是不可以为x,z。
当只有数值未定义位宽时,默认数值位宽为32位。
不定态:if(din == 4’b10x0),该条件等价于 din==4’b1000||din==4’b1010.
位宽问题
加法运算时最终的结果取决于“=”号左边信号的位宽,保存低位,丢弃高位。故使用加法运算时,其结果需要拓展位宽。
减法运算时结果有正负之分需要增加一个符号位,用补码进行运算,正数:保持不变。 负数:符号位保持不变,数值取反加1.
逻辑运算符
操作数多位的逻辑非,只有操作数0时,才为1. 如:assign c = !4’b0111,结果c为0.
逻辑运算符的优先级
逻辑运算符中“&&”和“||”的优先级低于算数运算符;“!”的优先级高于双目逻辑运算符。
按位逻辑运算符
注:在写程序时为明确个运算符之间的优先级多使用括号,多使用逻辑与,逻辑或,少使用逻辑非。
移位运算符
通常使用左移右移代替乘法除法运算。如:实现a*67
条件运算符
s为条件当s==00时,C=D0。以此类推
注:case 语句的缺省项必须写,防止产生锁存器。
三目运算符
if else语句
选择运算符
其语法形式为vect[ a +: b ]或vect[ a -: b ]vect 为变量名字,a 为起始位置,加号或者减号代表着升序或者降序,b代表升序或降序的宽度。
例如:vect[7 +: 3]==vect[7 : 9] vect[9 -: 4]==vect[9 : 6]
当 cnt==0 时,将 din[7:0]赋值给 data[15:8];当 cnt==1 时将 din[7:0]赋值给 data[7:0]。 在设计的时候便可以写成:data[15-8*cnt -: 8] <= din[7 : 0].
拼接运算符
实例
由于非定长常数的长度未知, 不允许连接非定长常数。例如:{Dbus,5} ;/ /不允许连接操作非定长常数。