icarus 的 SystemVerilog 支持(iverilog 编译器)

Posted

技术标签:

【中文标题】icarus 的 SystemVerilog 支持(iverilog 编译器)【英文标题】:SystemVerilog support of icarus (iverilog compiler) 【发布时间】:2017-04-24 18:47:24 【问题描述】:

我在 Mac 上使用 iverilog,但在编译一些包含 always_ffalways_comb 块的代码时遇到问题。 ModelSim 编译这些代码没有任何问题。是否可以配置iverilog 以支持always_ffalways_comb 块,或者编译器不支持它们?

【问题讨论】:

有没有其他方法可以在 Mac 上编译 SystemVerilog ?或者我必须坚持使用虚拟机(或本机窗口?) 【参考方案1】:

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 支持。

【讨论】:

【参考方案2】:

always_combalways_latchalways_ff 是 SystemVerilog IEEE Std 1800-2012 中引入的一些关键字。它们不是 Icarus Verilog 编译器支持的 Verilog IEEE Std 1364-2005 的一部分。

我不知道有任何免费的 SystemVerilog 模拟器。但是,您始终可以使用EDA Playground 模拟和综合您的 SystemVerilog 设计。

【讨论】:

免费的SystemVerilog模拟器只支持Windows平台,不支持全语言。 @dave_59:我相信 Windows 和 Linux 都支持 Altera Modelsim Starter Edition。不过不确定 MacOS。 Verilator 是一个开源模拟器,支持 SystemVerilog 的可综合子集:veripool.org/wiki/verilator

以上是关于icarus 的 SystemVerilog 支持(iverilog 编译器)的主要内容,如果未能解决你的问题,请参考以下文章

systemverilog支持a=a*2么

使用自由软件Icarus Verilog Simulator进行仿真

SystemVerilog是否支持向下转型?

vcs怎么编译产生随机激励的systemverilog语句

扩展至 icarus

尝试使用 Icarus 编译 SV 文件的断言失败错误