如何使用ghdl在Mac上编译和运行VHDL程序?

时间:2013-06-12 15:51:42

标签: macos vhdl ghdl

我刚刚写了一个简单的VHDL程序。我将文件保存为.vhd文件。然后我用

编译它
ghdl -a test.vhd

然后使用

构建和执行可执行文件
ghdl -e test

最后尝试用

运行它
ghdl -r test

发生的事情是,我现在有一个可见的work-obj93.cf文件和另外两个文件,即...,它们在某种程度上是不可见的。

有人能说出我在Mac上测试vhdl程序到底有多准确吗?也许与GTKWave结合使用。

4 个答案:

答案 0 :(得分:17)

他们说这是一个很大的问题!

在英特尔处理器上运行的OS X版本为ghdl版本10.5,10.6,10.7和10.8可从 ghdl.free.fr获得(可在 GHDL for Mac OS X下载)。它是mcode版本(就像在Windows上一样),这意味着它不会生成目标代码或VHDL模型的独立可执行文件,结果是你不能将外来对象(子程序)绑定到模型。

详细模型仅在运行时存在于内存中,除了工作库.cf文件中的条目之外,-e elaborate命令是多余的。在mhd版本的ghdl中,-r run命令也详细说明。您将看到的是工作目录的work-obj93.cf文件和预分析库的任何.cf文件,默认情况下这些文件将显示在/ usr / local / ghdl / libraries中,可执行文件ghdl位于/ usr / local / bin链接到/ usr / local / ghdl / translate / ghdldrv / ghdl_mcode,/ usr / local / ghdl是由ghdl_mcode版本编译产生的精简树。

此版本源自svn129(遵循ghdl-0.29版本),并包含i386二进制文件。

ghdl的文档可以在/ usr / local / ghdl / doc /中找到,其中ghdl手册页链接到别处,ghdl.html和ghdl.texi是ghdl手册,没有链接到其他地方。在ghdl.html中,您可以搜索“Windows'找到mcode版本的参考。作为一个疏忽,我没有考虑修改ghdl手册,在Windows出现的地方加入mcode这个词,并发布修改后的手册。

Windows' Windows'它应该被视为' Windows或其他mcode版本'。

在ghdl手册中,参见1.3什么是GHDL?(GHDL的Windows(TM)版本不是基于GCC而是基于内部代码生成器)。另外2.1问候世界计划:

2.1 The hello world program

为了说明VHDL的大目的,这里是一个评论的VHDL" Hello world"程序

 --  Hello world program.
 use std.textio.all; --  Imports the standard textio package.

 --  Defines a design entity, without any ports.
 entity hello_world is
 end hello_world;

 architecture behaviour of hello_world is
 begin
    process
       variable l : line;
    begin
       write (l, String'("Hello world!"));
       writeline (output, l);
       wait;
    end process;
 end behaviour;

假设此程序包含在文件hello.vhdl中。首先,你必须编译文件;这称为VHDL术语的设计文件分析。

 $ ghdl -a hello.vhdl

此命令创建或更新文件work-obj93.cf,该文件描述了库的“工作”。在GNU / Linux上,此命令生成一个文件hello.o,它是与VHDL程序对应的目标文件。目标文件不是在Windows上创建的。

然后,您必须构建一个可执行文件。

 $ ghdl -e hello_world

'-e'选项意味着精心制作。使用此选项,GHDL创建代码以便详细设计,“hello”实体位于层次结构的顶部。

在GNU / Linux上,结果是一个名为hello的可执行程序,可以运行:

 $ ghdl -r hello_world

或直接:

 $ ./hello_world

在Windows上,未创建任何文件。使用以下命令启动模拟:

 > ghdl -r hello_world

模拟结果显示在屏幕上:

 Hello world!

将hello_world命令的源代码保存到文件hello.vhdl并执行命令:

david_koontz @ Macbook:ghdl -a hello.vhdl

david_koontz @ Macbook:ghdl -e hello_world

david_koontz @ Macbook:ghdl -r hello_world

收率:

Hello world!

标准输出上的

(终端窗口中的TTY会话)。

您最终会在当前工作目录中找到work-obj93.cf库配置文件,而不会有其他输出文件。您还想了解-r run命令的含义(第3.1.3节),在命令行上没有传递可选的辅助单元VHDL默认为最后编译的体系结构。

获取Tony Bybell的 gtkwave gtkwave.app,文档位于/Applications/gtkwave.app/Contents/Resources/doc,包括源.odt文件和PDF文件。 (您可以在“应用程序”文件夹中选择一个应用程序,然后“显示包内容”以导航到doc目录。)

ghdl特有的波形格式称为ghw,可以使用run命令选项' - wave = .ghw'来调用。请参阅ghdl手册4.1模拟选项。如果您选择使用VCD,也请参阅该目录中的vcd选项。

如果您的测试平台提供自由运行时钟,您还应该使用保护计时器限制运行持续时间。 VHDL将仅在其他任何调度信号更新或执行时间最大化时停止执行。这是一个运行命令选项,沿着' - 停止时间= 587200ns'。

OS X gtkwave.app对扩展名为.ghw和.gtkw的两种文件类型敏感,第一个是ghdl波形转储文件,第二个是带有OS X后缀的gtkwave配置文件,允许调用gtkwave单击gtkw文件。在gtkwave中设置波形显示之前,必须保存配置文件。请参阅gtkwave手册。可以单击ghw文件,gtkwave具有一组用于搜索适用的gtkw文件的规则。

使用ghw文件格式有几个好处。通过单击文件自动调用gtkwave应用程序是一个。另一个是ghdl将所有信号事务保存到它的ghw转储文件中。您可以随时在gtkwave中选择更多信息以显示更多信息。虽然这在大型模型中可能是一个缺点,但ghw格式允许任何类型或子类型枚举文字显示。

加入GHDL discuss list并发布问题是吸引ghdl专业知识关注的好方法。 (是的,gna.org的证书已过期或无效)。 Tony Bybell在gtkwave网页上提供了一个电子邮件联系人,但有薪就业的紧急情况限制了他的可用性。


通过示例阐述ghdl和gtkwave的使用。

原始海报要求提供一些命令行值的实例。但是有一个差GHDL/GTKWave Tutorial(PDF,234 KB),其中包含一个示例并使用了VCD。

我将列出GHDL波形格式版本的命令行:

david_koontz @ Macbook:ghdl -a CarryRipple.vhd

david_koontz @ Macbook:ghdl -a CarryRipple_tb.vhd

david_koontz @ Macbook:ghdl -e carryRipple_tb

david_koontz @ Macbook:ghdl -r carryRipple_tb --wave = carryRipple_tb.ghw

调用gtkwave.app可以通过单击生成的carryRipple_tb.ghw或使用OS X的打开命令来完成:

david_koontz @ Macbook:open -a gtkwave carryRipple_tb.ghw

Gtkwave的SST窗口(左上角)将显示顶部,单击+框展开。对显示的carryripple_tb执行相同的操作。点击一个。在信号窗口中选择[3:0]并按下插入按钮。重复b。

在SST窗口中选择U0,然后在信号窗口中选择cin点击插入按钮然后同样为cout。

在SST窗口中选择s,然后在信号窗口中选择s [3:0]并点击插入。

是的,从'教程'获取两个VHDL文件的源代码。很痛苦。我没有做到。

您可能还会注意到' X'在gtkwave显示中以60 ns的Cin,我这样做是为了显示在测试平台中分配的最后一个值。

我不会声称这是一个很好的教程,但是你得到了你在这里支付的费用。做得更好会是一个更大的问题。

测试台(carryRipple_tb.vhd)在模拟过程中提供了驱动模型(CarryRipple.vhd)的刺激。模型在最后一个信号事件之后退出执行,因此不需要将停止时间传递给运行命令(例如--stop-time = 587200ns)。

还有Chad Kersey在Youtube上的五部分GHDL / GTKWave教程。该决议并不是那么好,而且它以Linux为中心。第0部分是关于安装这两个工具。我的例子中唯一真正的区别是使用ghw波形格式。大多数浏览器都允许您以全尺寸查看下面的gtkwave窗口。

enter image description here

<强> 加入

最近的答案显示了使用Toggle Flip Flop的演示,显示了原始VHDL代码中的错误,以及三种可能的修复。它使用配置声明来运行各种固定版本。请参阅how to avoid delay in the output of simple process statement in VHDL

答案 1 :(得分:3)

新的Mac OS X gcc版GHDL

有一个新版本的ghdl可以从ghdl-updates / Builds / ghdl-0.31 / OSX获得,这是一个包含mcode版本的gcc版本。

只知道在OS X 10.9上运行但我认为如果安装了Xcode及其命令行工具,它将运行OS X 10.8 - gcc版本目前依赖于/ usr / bin / as和/ usr / bin / ld ,它是安装OS X 10.9的essentials包的一部分,可通过在OS X 10.8上安装Xcode命令行工具获得。

安装此版本的ghdl后,您可以在终端中

info ghdl

向下滚动到以GHDL开头,返回回车符。向下滚动到hello world程序(回车),全加器(回车)或从设计开始(回车)。第一个是VHDL hello world程序,第二个是带有测试平台的一位加法器。从设计开始,您将获得DLX处理器仿真的下载链接和说明。

我打算开发一个10.6 - 10.9 gcc版本的ghdl,它不依赖Xcode 10.6 - 10.8,并且运行在10.9。它可能是ghdl的0.32版本。

Tony Bybell的gtkwave.app在OS X 10.6 - 10.9上运行,可以从GTKWave SourceForge页面获得它的手册。可以从Sourceforge上的此链接下载最新版本的应用程序 - gtkwave.zip

YouTube上有几个ghdl / gtkwave教程,但没有一个是特定于OS X的,请尝试使用Google搜索。

ghdl拥有自己的gtkwave格式,GHW是VHDL友好的,允许您查看复杂的复合类型。 ghdl-0.33也可能包括对Tony Bybell的FSB格式的支持。

更多冒险者可以在OS X上从头开始构建ghdl,请参阅Instructions for building ghdl-0.31 with gcc4.8.2 on OS X 10.9。使用gcc4.9.1构建将需要从找到的here Mercurial存档中获得ghdl-0.32版本。当发布版本的ghdl-0.32二进制文件也可以从Sourceforge获得。

Sourceforge网站ghdl-updates是ghdl,Tristan Gingold的作者进行ghdl开发活动的地点。

除了加入ghdl discussion list或仔细阅读archives之外,您还可以在ghdl-updates Tickets页面上提交错误报告,您可以在其中查看打开和关闭的问题。

ghdl的发展前景是光明的。预计未来版本将在不久的将来专注于IEEE Std 1076-2008合规性。还有开发使用ghdl作为llvm前端以及纯粹的解释版本来取代ghdl-mcode。

使用ghdl和gtkwave的二进制版本可以将用户与开发人员分开。

答案 2 :(得分:0)

我不知道这是否与此讨论完全相关。但是,我很高兴我今天在我的Mac上安装了GHDL,El Capitan。我从ghdl.free.fr下载了最新的GHDL版本for mac,一切安装好了。我确实收到一条消息,说目标文件是一种较新的格式或类似的东西。不过,我的vhdl代码编译完毕。

我确实在尝试为所述vhdl代码编译测试平台时遇到了问题。当我单独编译它时,我收到了错误消息。当我一起编译它们时,那​​就是

ghdl -a code.vhdl code_tb.vhdl

一切都按照您的预期运作。

ghdl -e code_tb 

工作,所以

ghdl -r code_tb --vcd=code.vcd 

因此可能存在vhdl如何编译的问题。就我而言,与Ubuntu不同,我不得不一起分析code.vhdl和code_tb.vhdl。也许这对未来的读者可能有用。

答案 3 :(得分:0)

我在MacOS High Sierra上使用UMHDL,它的工作原理就像是一种魅力。

虽然很难将GHDL和GTKWave绑定到UMHDL,但是我明白了。