我iverilog
在 Mac 上使用,我在编译一些包含always_ff
和always_comb
块的代码时遇到问题。ModelSim 编译这些代码没有任何问题。是否可以配置iverilog
为支持always_ff
和always_comb
阻止,或者编译器不支持它们?
2 回答
AndresM 的回答并不完全准确。Icarus verilog 默认为 IEEE Std 1364-2005,它是更好支持的标准,但可以通过-g
开关进行更改。来自man iverilog
:
-g1995|-g2001|-g2001-noconfig|-g2005|-g2005-sv|-g2009|-g2012
选择编译器支持的 Verilog 语言生成。这在 IEEE1364-1995、IEEE1364-2001、IEEE1364-2005、IEEE1800-2005、IEEE1800-2009 或 IEEE1800-2012 之间进行选择。Icarus Verilog 当前默认使用 IEEE1364-2005 生成的语言。此标志用于将语言限制为一组关键字/功能,这允许模拟可能使用较新关键字的旧 Verilog 代码并与其他工具兼容。当前不支持大部分 IEEE1800 代功能。IEEE1800 代确实解析了所有关键字,因此它们可用于验证符合 IEEE1364 的 Verilog 代码是否不使用任何新的 IEEE1800 关键字。
事实上,当尝试在端口中使用未打包的数组时,它会告诉您:
错误:端口不能是解包数组。尝试启用 SystemVerilog 支持。
always_comb
,always_latch
并且是 SystemVerilog IEEE Std 1800-2012always_ff
中引入的一些关键字。它们不是 Icarus Verilog 编译器支持的 Verilog IEEE Std 1364-2005 的一部分。
我不知道有任何免费的 SystemVerilog 模拟器。但是,您始终可以使用EDA Playground模拟和综合您的 SystemVerilog 设计。