2015-01-03 30 views
1

我一直在阅读UVM: illegal combination of driver and procedural assignment warning和附在答案中的纸张。 如何在复位时初始化时钟块信号

但是,驱动程序被用来驱动接口信号而不是时钟信号的复位值,所以时钟不能保证在复位时运行。

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

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

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

这是正确的,即使操作码声明接口事业时钟拦网会照顾分配正确的。但我不能说

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

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

无论是我可以说

vif.opcode <= init_value; 

导致其非法使用与网式信号

程序分配

另一种方法是门控宣布为网带复位信号,但我认为,我将有在界面中声明临时信号。任何人都可以详细说明如何在重置时实现驱动网络?

+0

恐怕你必须在这里更具体。显示导致您问题的代码。 –

+0

我希望现在的问题能够正确阐述,请告知我是否应该添加更多详细信息,谢谢 – wisemonkey

回答

2

虽然从程序代码中分配网络是非法的,但强制值到它们是合法的。你可以做到以下几点:

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

奖励:IMO你不应该有opcode定义为线。程序性和连续性驾驶员警告的非法组合是错误的。

有可能使用一种过程分配以分配给具有输出clockvar相关联的信号:SV 2012标准在14.16.2驱动时钟输出信号明确指出。当关联信号为变量时,程序性分配将为变量分配一个新值,变量应保持该值直到发生另一次分配(从驱动器到时钟块输出 或其他程序分配)。

+0

,所以我们基本上都在等待工具来更新和适应SV 2012标准。现在我将相应地在接口网络上使用强制,并尝试使用逻辑信号创建另一个分支,以便我们拥有正确的功能。谢谢 – wisemonkey

+0

@wisemonkey其实,我用'logic'试过了它,它没有任何警告。您链接的问题中的警告必须来自其他地方(设置与时钟块和连续赋值不完全相同)。 –

+0

@wisemonkey但w.r.t.等待适应标准,这是真的。我不认为有任何工具已经实现了它的100%。 –