2013-03-05 56 views
0

我希望能够写这样的代码:预处理程序可以判断SystemVerilog是否已启用?

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

但SystemVerilog的参考手册似乎并没有引用任何此类标准的预定义常数。这看起来像是一个疏忽 - 是否有一种简单的方法来实现我在这里的目标?

+2

你想创建功能等同于2001代码的SV代码吗?为什么不只是创建2001年的代码,并完成它?看起来多余。 – toolic 2013-03-06 01:37:47

+0

同意。引入了关键字说明符,以便遗留代码可以用新标准进行分析,而无需更改标识符名称。 'do'弹出了很多'数据输出'的缩写,但是一旦SystemVerilog出现,这成为了一个关键字,将不再解析。新代码应该简单地避免在任何标准中使用保留字。 – 2013-03-06 23:34:35

回答

4

是的,有编译器指令begin_keywords "version_specifier"end_keywords,其中:从LRM

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

实施例:

`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 

这是覆盖在IEEE 1800至2009年的22.14章。

就我个人而言,我从来没有使用过这些,所以我不知道这些工具如何支持它们。

相关问题