icarus 的 SystemVerilog 支持(iverilog 编译器)
Posted
技术标签:
【中文标题】icarus 的 SystemVerilog 支持(iverilog 编译器)【英文标题】:SystemVerilog support of icarus (iverilog compiler) 【发布时间】:2017-04-24 18:47:24 【问题描述】:我在 Mac 上使用 iverilog
,但在编译一些包含 always_ff
和 always_comb
块的代码时遇到问题。 ModelSim 编译这些代码没有任何问题。是否可以配置iverilog
以支持always_ff
和always_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_comb
、always_latch
和 always_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 编译器)的主要内容,如果未能解决你的问题,请参考以下文章