1

我一直在阅读UVM:驱动程序和程序分配警告的非法组合以及附在答案中的纸张。(请考虑提到的问题中链接的论文)

然而,驱动程序被实现来驱动接口信号而不是时钟块信号上的复位值,不能保证时钟在复位时运行。

那么,如果接口信号被声明为线,我该如何处理这种情况。

例如,考虑链接问题中的代码。一般情况是

@(vif.cb); 
vif.cb.opcode <= value; 

即使在接口中将操作码声明为 net 也是正确的,因为时钟块将负责正确的分配。然而我不能说

@(vif.rst);
vif.cb.opcode <= init_value;

因为我不能保证时钟复位。为了适应这一点,我将不得不改变时钟生成策略。

我也不能说

 vif.opcode <= init_value;

导致其非法使用带有网络类型信号的程序分配

另一种方法是门控信号声明为 net with reset 但我认为我必须在接口中声明临时信号。谁能详细说明如何在重置时实现驱动网?

4

1 回答 1

2

虽然从程序代码分配网络是非法的,但将值强加给它们是合法的。您可以执行以下操作:

@(negedge vif.rst);
force vif.opcode = 0;

奖励:IMO,您不应该将opcode其定义为电线。程序性和连续性驾驶员警告的非法组合是错误的。SV 2012 标准在14.16.2 驱动时钟输出信号中明确指出:

可以使用程序分配来分配与输出时钟变量相关的信号。当相关信号是变量时,程序分配为变量分配一个新值,并且该变量应保持该值,直到发生另一个分配(从驱动器到时钟块输出或另一个程序分配)。

于 2015-01-08T12:39:16.897 回答