算术表达式结果的长度由长的操作数决定。在赋值语句下,算术操作结果的长度由操作符左端目标长度决定。考虑如下实例:
reg [0:3] Arc, Bar, Crt;
reg [0:5] Frx;
. . .
Arc = Bar + Crt;
Frx = Bar + Crt;
个加的结果长度由Bar,Crt和Arc长度决定,长度为4位。第二个加法操作的长度同样由Frx的长度决定(Frx、Bat和Crt中的长长度),长度为6位。在个赋值中,加法操作的溢出部分被丢弃;而在第二个赋值中,任何溢出的位存储在结果位Frx[1]中。
在较大的表达式中,中间结果的长度如何确定?在Verilog HDL中定义了如下规则:表达式中的所有中间结果应取操作数的长度(赋值时,此规则也包括左端目标)。考虑另一个实例:
wire [4:1] Box, Drt;
wire [1:5] Cfg;
wire [1:6] Peg;
wire [1:8] Adt;
. . .
assign Adt = (Box + Cfg) + (Drt + Peg);
表达式左端的操作数长为6,但是将左端包含在内时,长度为8。所以所有的加操作使用8位进行。例如:Box和Cfg相加的结果长度为8位。