2013-03-05 4 views
0

Я хотел бы иметь возможность писать код так:Может ли препроцессор указать, включен ли SystemVerilog?

`ifdef SYSTEMVERILOG_ENABLED 
    .. systemverilog code here. 
`else 
.. verilog-2001 equivalent code here. 
`endif 

Но справочное руководство SystemVerilog, кажется, не ссылаться на любые такие стандарт предопределенных констант. Это похоже на надзор - есть ли простой способ сделать то, что я намереваюсь здесь?

+2

Вы хотите создать код SV, функционально эквивалентный коду 2001 года? Почему бы просто не создать код 2001 года и не сделать с ним? Это кажется излишним. – toolic

+0

Согласовано. Спецификаторы ключевых слов были введены таким образом, чтобы устаревший код мог анализироваться с более новым стандартом без необходимости изменять имена идентификаторов. «do» появилось так много для «данных», но как только SystemVerilog появился, это стало ключевым словом и больше не будет анализировать. Новый код должен просто избегать использования зарезервированных слов в любом из стандартов. –

ответ

4

Да, есть директивы компилятора begin_keywords "version_specifier" и end_keywords, где:

version_specifier ::= 
    1800-2009 
    | 1800-2005 
    | 1364-2005 
    | 1364-2001 
    | 1364-2001-noconfig 
    | 1364-1995 

Пример из LRM:

`begin_keywords "1364-2001" // use IEEE Std 1364-2001 Verilog keywords 
module m2 (...); 
reg [63:0] logic; // OK: "logic" is not a keyword in 1364-2001 
... 
endmodule 
`end_keywords 

Это описано в главе 22.14 из IEEE 1800-2009.

Лично я никогда не использовал их, поэтому я понятия не имею, насколько хорошо их поддерживают.

Смежные вопросы