如何使用 Icarus Verilog 在 Verilog 中转换 VHDL 代码?

Posted

技术标签:

【中文标题】如何使用 Icarus Verilog 在 Verilog 中转换 VHDL 代码?【英文标题】:How to convert a VHDL code in Verilog using Icarus Verilog? 【发布时间】:2016-01-06 09:30:09 【问题描述】:

我在 doc 中找不到使用 icarus 将 VHDL 代码转换为 Verilog 的示例。我找到了如何对 VHDL here 进行 verilog。 我试图修改命令以在this code 上进行 VHDL 转换:

$ iverilog -tvlog95 -o button_deb.v button_deb.vhdl 
button_deb.vhdl:3: syntax error
I give up.

但是我遇到了语法错误。我的 VHDL 代码错了吗?还是iverilog命令出错了?

【问题讨论】:

【参考方案1】:

没有 Verilog 目标,因此您无法生成 Verilog 输出,而且 VHDL 编译无论如何仍处于试验阶段。您可以在邮件列表中询问,以确保引擎盖下没有任何可以提供帮助的信息。 VHDL 到 Verilog 的转换只能在相对简单的情况下进行(可综合代码应该没问题),所以无论如何你可能不得不手动进行。

【讨论】:

【参考方案2】:

似乎在此期间已经到了一些支持(主要使用-g2005-sv-g2009-g2012开关)。试试这个:

iverilog -g2012 -tvlog95 -o button_deb.v button_deb.vhd

如果你仔细观察输出,你会发现这样你会在实体接口处丢失两个generic。直接使用vhdlpp 会很有用:

/path/to/vhdlpp button_deb.vhd > button_deb.v

【讨论】:

感谢克劳迪奥,今年我找到了另一种转换方式:ghdl-yosys 插件。 @FabienM:您能否举一个小例子说明您是如何使用 ghdl-yosys 插件进行这种转换的?

以上是关于如何使用 Icarus Verilog 在 Verilog 中转换 VHDL 代码?的主要内容,如果未能解决你的问题,请参考以下文章

Icarus Verilog和GTKwave使用简析

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

在 Icarus Verilog 中调试组合逻辑循环

icarus verilog 中的多维数组端口支持

编译动态内存模块时 Icarus Verilog 崩溃

使用 Icarus Verilog 模拟程序计数器设计时的无限循环