1.自动存储
在System Verilog中,模块(module)和 program块中的子程序缺省情况下任然使用静态存储。如果要使用自动存储,则必须在程序语句中加入automatic关键词。
如:
program automatic test;
…
endprogram
module automatic test;
…
endmodule
2.变量的初始化
program initialization;
task check_bus;
repeat(5) @(posedge clock);
if(bus_cmd == 'READ)begin
//何时对local_addr赋初值?
logic [7:0] local_addr = addr << 2;//有漏洞
$display("Local Addr = %h",local_addr);
end
endtask
endprogram
logic [7:0] local_addr = addr << 2;
变量local_addr 是静态分配的,所以实际上在仿真的一开始它就有了初值,而不是等到进入begin…end块中才进行初始化。同样的,解决方法是把程序块声明为automatic。或者将声明和初始化拆开:
logic [7:0] local_addr;
local_addr= addr << 2;