【问题标题】:Forcing a member of a struct强制结构的成员
【发布时间】:2015-12-15 20:48:57
【问题描述】:

我试图在我的设计中强制使用一些内部节点。我试图强迫的一件事是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 在规范中玩得又快又松?

如果这实际上是非法的,有什么办法可以只强制结构的一部分?

【问题讨论】:

    标签: system-verilog


    【解决方案1】:

    上句中的关键词是singular变量。你试图force 的变量是一个解压的结构,它不是一个单一的变量;它是一个聚合变量。

    如果你把它变成一个打包的结构,你会遇到你引用的那句话后面的句子:“它不应该是变量的位选择或部分选择......”

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

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

    【讨论】:

      猜你喜欢
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 2021-04-13
      • 2014-05-28
      • 1970-01-01
      • 2017-06-11
      相关资源
      最近更新 更多