目录
参考《Verilog 编程艺术》魏家明著
表达式
表达式是用操作符(operator)把操作数(operand)组合起来,并按照操作符的语义计算出结果。
操作符
操作符优先级
单目操作符优先级最高;
表格中行间的操作符优先级按降序排列
表格中行内的操作符具有相同的优先级
可以用括号调整操作符的顺序。
整数
整数可以在表达式中使用:
An unsized, unbased integer (12)
An unsized, based integer ('d12, 'sd12)
A sized, based integer (16'd12, 16'sd12)
在表达式中,对于用不同方式表达的整数有不同的解释
1。An unsized, unbased integer 被当作符号数
2。An unsized, based integer 被当作符号数
3。A sized,signed,based integer 被当作符号数
4。An unsized,unsigned,based integer 被当作无符号数
5。A sized,unsigned,based,integer 被当作无符号数
例如:有两种方式执行“minus 12 divided by 3”注意-12和-'d12具有同样的2的补码位。但是-'d12在表达式中失去了作为符号负数的特性。
integer intA;
intA = -12 / 3; // result is -4
intA = -'d12 / 3; // result is 1431655761
intA = -'sd12 / 3; // result is -4
intA = -4'sd12 / 3; // result is 1;-4'sd12 is the negative of the 4-bit quantity 1100,
// which is -4, -(-4) = 4。
// 属于上边第3种情况,属于符号数,1100第一位被当作负号解释,故其值表示(-4)
算数操作符
+,-,*,/,%,**
1.“/”是除法运算,在做整数除时向零方向舍去小数部分
2.“**”是指数运算
3.“%”取模运算,只可用于整数运算,而其他操作符既可用于整数也可用于实数
例如:在生成时钟的时候,必须选择合适的timescale和precision。当时用 PERIOD/2 计算延时时,必须保证小数不会被舍弃,实际上应该使用 PERIOD/2.0
prameter PERIOD = 15;
initial begin clk <= 0; forever #(PERIOD/2) clk = ~clk; end // Not correct
initial begin clk <= 0; forever #(PERIOD/2.0) clk = ~clk; end // Correct