在sv中阻止对任务内部逻辑的赋值

时间:2014-03-17 13:35:51

标签: verilog system-verilog

我正在尝试执行下面的代码,但我发现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让我知道。

1 个答案:

答案 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