1

我有这个代码:

<' 
type type_t:[GOOD,BAD];
    struct packet {
    t:type_t;
    !header:uint(bits:3);  
};
extend sys {
    !pkt:packet;
    keep read_only(pkt.t==GOOD) => pkt.header==6;
    run() is also {
        gen pkt;
        gen pkt.header;
        print pkt;
    };        
  };
'>

当我运行它时,当我尝试生成 pkt.header 时,会收到这个奇怪的警告:

   *** Warning: WARN_GEN_CFA_UNSUPPORTED: 
The following constraint-from-above includes input(s) which cannot be sampled
during the allocation of packet-@1.
        keep read_only(pkt.t == GOOD) => pkt.header == 6    at line 9 in @gen
Enforcing the constraint through later sampling of these inputs is not
supported yet, and therefore it will not be enforced in the following
gen-action.

                at line 12 in @gen
        gen pkt.header;

这个错误信息很奇怪,因为当我发出 'gen pkt.header' 时,pkt 已经生成(分配)了,'t' 也是如此。

如果有人可以向我解释这一点,我将不胜感激。

谢谢,

4

4 回答 4

1

首先,标头字段用' !'表示,这是一个不生成字段,删除它并且警告将消失。如果在生成 pkt.header 之前没有生成 pkt,您可能会因为尝试访问未分配的内存区域而遇到 OS11 错误。二、线路:

keep read_only(pkt.t==GOOD) => pkt.header==6;

应该可能驻留在结构本身内(带有 ' soft' 或没有它)。

于 2014-03-26T19:43:30.007 回答
1

这确实看起来很奇怪。特别是如果您打开跟踪生成。其中,日志显示:

-> 0 #GEN> 解决 gen-action #3 的连接字段集 #12:(在 sys-@1.pkt.header 中)

    pkt.header

-> 0 #GEN> 减少:

    pkt.header -> [6]
    due to constraints:
    keep read_only(pkt.t == GOOD) => pkt.header == 6    at line 10 in @cfa_depr

            **with the input state:**

    read_only(pkt.t == GOOD): TRUE

-> 0 #GEN> 已完成连接字段的解决方案:(在 sys-@1.pkt.header 中)

    pkt.header: 6
    constrained by:
    keep read_only(pkt.t == GOOD) => pkt.header == 6    at line 10 in @cfa_depr

这可能是一个错误,我将与开发人员核实。

于 2014-03-26T19:35:46.440 回答
1

在阅读了有关 CFA 的更多信息后,我尝试了您的代码,并且 Specman 中似乎发生了一些可疑的事情。正如 Hannes 所说,这可能是一个错误。

于 2014-03-26T19:28:08.863 回答
1

测试用例中的行为确实是一个错误。在这种情况下不应发出警告。可以从 Cadence 支持部门获得针对该问题的可用补丁。

有关上述约束的一般详细信息,特别是此警告,您可以考虑 Specman 文档(Specman Generation 用户指南中的第 1.10 节)。

于 2014-04-06T07:57:33.963 回答