我正在尝试执行下面的代码,但我发现value2没有按预期更新。值1的前值保留在value2中。
class a;
logic [31:0] value1,value2;
task a;
for(i=0;i<=width;i=i+1)
begin
@(vif.clk)
value[0]=`vif.si;
value=value<<1;
end
endtask
value2=value1;
endclass
有什么可以替代这个PLZ让我知道。
答案 0 :(得分:1)
您的代码示例尚未完成。我想你是在定义这条线路&#39;值2 =值1; &#39;在一个类体内。这不是一个连续的赋值,因为你可能会从模块中使用它。这只是意味着它将定义一个名为value2的字段(我认为是类型为wire),并将其初始值设置为字段值&#39; value&#39; (我认为你的意思是价值,因为我看不到对value1的引用。)
您想要使用阻止分配这一事实意味着,如果您想存储以前的值&#39; value&#39;在value2中你必须在任务&#39; a&#39;中执行。你不能从其他并行线程中做到这一点,因为你不知道它们被调用的顺序。例如:
task a();
value2 = value; // save value and then proceed to update it
for(i=0;i<=width;i=i+1) begin
@(vif.clk);
value[0]=vif.si;
value=value<<1;
end
endtask