*** Предупреждение: WARN_GEN_CFA_UNSUPPORTED: в specman, почему я получаю его и что это значит?

У меня есть этот код:

<' 
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 ответа

Поведение в тестовом сценарии действительно является ошибкой. Предупреждение не должно быть выдано в этом сценарии. Существует исправление для проблемы, которое можно получить от поддержки Cadence.

Для получения общих сведений об ограничениях сверху и, в частности, об этом предупреждении вы можете обратиться к документации Specman (раздел 1.10 в Руководстве пользователя Specman Generation).

Это действительно выглядит странно. Особенно, если вы включите генерацию трассировки. Среди прочего, журнал показывает это:

-> 0 #GEN> решение связанного набора полей № 12 gen-action #3: (в 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

Это может быть ошибка, я уточню у разработчиков.

Во-первых, поле заголовка обозначено как!', которое является полем "не генерировать", удаляя его, и предупреждение исчезнет. Если pkt не был сгенерирован до того, как сгенерирован pkt.header, вы, вероятно, столкнетесь с ошибкой OS11 при попытке получить доступ к нераспределенной области памяти. Во-вторых, строка:

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

Должен, вероятно, находиться внутри самой структуры (либо сsoftили без него).

Я опробовал ваш код после прочтения больше о CFA, и кажется, что в Specman происходит что-то подозрительное. Как сказал Ханнес, это, вероятно, ошибка.

Другие вопросы по тегам