您的位置:首页 > 其它

求解决!!!SystemVerilog于ModelSim在编译和执行

2015-10-10 20:27 253 查看
我们正在学习SV流程,样品执行书。。

功能:函数返回数组。

Code1:

/*书上提供的样例。存在错误,不可执行

function void init(ref int f[5], int start);//主要是函数定义时没有声明automatic属性

foreach(f)

f = i + start;

endfunction

initial begin

int fa[5];

fa = init(fa,5);

foreach(fa)

$display("fa[%0d] = %0d", i, fa);

end

*/

#-----------------------------------------------------------------------------------

Code2:

//下面这段代码在modelsim下可成功执行。

(在定义function时加上了automatic)

module enum_name;

int fa[5];

initial begin

// fa = init(fa, 5);

init(fa, 5);

foreach(fa)

$display("fa[%0d] = %0d", i, fa);

end

function automatic void init(ref int f[5], input int start);

foreach(f)//初始化数组

f = i + start;

endfunction

endmodule

#-----------------------------------------------------------------------------------

Question:

在LRM中第16章,解说program结果时有例如以下结构:

Code3:

module test(...)

int shared;
// variable shared by programs p1 and p1

program p1;

...

endprogram

program p2;

...

endprogram //
p1 and p2 are implicitly instantiated once in module test

endmodule

想问一下,Code2中的function怎么能够包在program...endprogram里面,形成Code3形式的代码结构。

当中,Code4是我尝试改的,但在ModelSim中编译能够通过,但执行时报错。

Code4:

module enum_name;

int fa[5];

initial begin

// fa = init(fa, 5);

test.init(fa, 5); //相应报错信息中提示的第61行内容

foreach(fa)

$display("fa[%0d] = %0d", i, fa);

end

//------------------------------------------------------------;

program automatic test;

function automatic void init(ref int f[5], input int start);

foreach(f)//初始化数组

f = i + start;

endfunction

endprogram

endmodule

执行时报错内容:

# Compile of enum_name.sv was successful with warnings.

vsim -gui work.enum_name

# vsim -gui work.enum_name

# Loading sv_std.std

# Loading work.enum_name

# ** Error: (vsim-3927) D:/ModelSim/SysVerilog/enum/enum_name.sv(61) Accessing program item '/enum_name/test/init' from a non-program design unit enum_name is illegal.

#

# Region: /enum_name

# ** Error: (vsim-3927) D:/ModelSim/SysVerilog/enum/enum_name.sv(61) Accessing program item '/enum_name/test/init' from a non-program design unit enum_name is illegal.

#

# Region: /enum_name

# ** Error: (vsim-3927) D:/ModelSim/SysVerilog/enum/enum_name.sv(61) Accessing program item '/enum_name/test/init' from a non-program design unit enum_name is illegal.

#

# Region: /enum_name

# Error loading design
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: