所有
我想使用任务来更改本地范围变量的内容。
这里的代码片段无法正常工作:
module dummy;
int test = 100; //global scope var, I don't want to change this one
task assignTest;
test =123; //should change the content of local scope var named test
endtask // forceV
initial
begin
begin
int test; //I want to affect this variable
assignTest;
$display(">>local test=%d", test);
end
$display(">>global test=%d", test);
end
这是我得到的结果:
>>local test= 0
>>global test= 123
所以我得出结论,该任务对我所希望的局部变量没有影响。 有关如何实现这一点的任何想法?
非常感谢!
答案 0 :(得分:2)
有几种方法:
使用连接通过端口,因此调用assignTest
变为assignTest(test)
。有三种方法可以定义assignTest
:
task assignTest(output int test);
task assignTest(inout int test);
task automatic assignTest(ref int test);
将范围硬编码为任务中的本地test
。这需要命名您的范围。例如:
int test = 100;
task assignTest;
init_scope.local_scope.test = 123;
endtask // forceV
initial begin : init_scope
begin : local_scope
int test;
assignTest;
$display(">>local test=%d", test);
end
$display(">>global test=%d", test);
end
工作示例here
我推荐使用端口选项,因为它们非常灵活且可重复使用。三种样式中的哪一种取决于设计/实施要求。