Systemverilog内置了数组求和运算方法(sum()),将数组的所有元素累加起来,返回一个最终值。在使用时要注意数组类型的位宽,通常情况下,如果你将一组单bit的值加起来,Systemverilog会使用足够的精度来确保不丢失任何bit的值。但是数组内置方法sum()使用的是数组类型的位宽,因此,如果你直接使用sum()去算单bit类型的数组,那么最终结果还是单bit,这可能不是你所期望的。解决的办法就是在sum()后面跟上with表达式,在with表达式里进行强制类型转换就可以的。下面举个例子:
module top;
int result1, result2, result3;
bit arr_bit[5] = '{1'b1, 1'b0, 1'b1, 1'b1, 1'b0};
initial begin
result1 = arr_bit[0]+arr_bit[1]+arr_bit[2]+arr_bit[3]+arr_bit[4];
$display("re sult1=%0d", result1);
result2 = arr_bit.sum();
$display("result2=%0d", result2);
result3 = arr_bit.sum() with ( int'(item) );
$display("result3=%0d", result3);
end
endmodule
使用Questasim的仿真结果是:
# run -all
# result1=3
# result2=1
# result3=3
# exit
结果分析:result1的结果是3,因为arr_bit[0],arr_bit[2]和arr_bit[3]的值为1’b1,且result1的类型为int类型,所有Systemverilog会自动扩展右


1286

被折叠的 条评论
为什么被折叠?



