强制结构的成员

时间:2015-12-15 20:48:57

标签: system-verilog

我想在我的设计中强制使用一些内部节点。我试图强迫的一件事是struct的成员。

当我尝试这样做时:

module struct_force;

   struct {
      logic a;
      logic b;
      logic c;} d;

   initial begin
      force d.a  = 1;
      $display(d);
   end
endmodule

Incisive给我一个错误:

  

非法使用位选择,部分选择,成员选择或mda元素[9.3.1(IEEE)]

但VCS似乎对它感到满意:See EDA playground example

从IEEE-1800我看到这与force

有关
  

作业的左侧可以是单数的引用   变量,网络,矢量网的常数位选择,常数   部分选择矢量网,或这些的连接。

我无法解析那句话以找出谁错了:Incisive阻止我做我应该做的事情,还是VCS在规范中快速松散?

如果这实际上是非法的,那么强迫结构的一部分有什么用呢?

1 个答案:

答案 0 :(得分:1)

上述句子中的关键词是单数变量。您尝试force的变量是一个解包结构,它不是一个单数变量;它是一个聚合变量。

如果你把它变成一个打包的结构,你会遇到你所引用的句子之后的句子:"它不应该是变量的位选择或部分选择......&# 34;

网络被有效地分解为单个标量位,其值是该网络驱动程序的分辨率函数。 force成为该网络的另一个驱动因素。

将此作为LRM的增强添加并非不可能,但是工具必须将变量分解为单个位 - 对该变量的每个常规赋值都必须逐位完成检查其中一个位是否处于强制状态。