Warm tip: This article is reproduced from serverfault.com, please click

macos-如何在带有ghdl的Mac上编译并运行VHDL程序?

(macos - How do I compile and run a VHDL program on Mac with ghdl?)

发布于 2013-06-12 15:51:41

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

ghdl -a test.vhd

然后用

ghdl -e test

最后尝试与

ghdl -r test

发生了什么事是我现在有一个work-obj93.cf文件,它是可见的,其他两个文件,即...那些不知何故不可见的。

有人可以告诉我如何在Mac上测试vhdl程序吗?也许与GTKWave结合使用。

Questioner
user2426316
Viewed
11
2017-05-23 20:09:34

正如他们所说的,这是一个很大的要求!

可以从ghdl.free.fr获得适用于OS X的ghdl版本的OS X,该版本可以在Intel处理器上运行,版本分别为10.5、10.6、10.7和10.8 (可以GHDL下载Mac OS X)。它是mcode版本(例如Windows上的版本),这意味着它不会生成目标代码或VHDL模型的独立可执行文件,从而导致你无法将异物(子程序)绑定到该模型。

精细的模型仅在运行时存在于内存中,-e精细的命令是多余的,除了工作库.cf文件中的条目外。在ghdl的mcode版本中,-r run命令也会详细说明。你将看到的只是工作目录的work-obj93.cf文件和预分析库的任何.cf文件,默认情况下,这些文件将显示在/ usr / local / ghdl / libraries中,该可执行文件位于/ 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手册是ghdl.html和ghdl.texi,在其他位置未链接。在ghdl.html中,你可以搜索每次出现的“ Windows”,以找到对mcode版本的引用。出于疏忽,我不认为要修改ghdl手册,以便在Windows出现的任何地方都包括mcode一词,并发布经过修改的手册。

凡出现“ Windows”的地方,应将其读作“ Windows或其他mcode版本”。

在ghdl手册中,请参阅1.3什么是GHDL?(GHDL的Windows™版本不是基于GCC,而是基于内部代码生成器)。另外2.1 hello world程序:

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,该文件描述了库'work'。在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

产量:

你好,世界!

在标准输出(终端窗口中的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,可以使用运行命令选项'--wave = .ghw'调用。请参见ghdl手册4.1仿真选项。如果你选择改用VCD,也请参阅该目录中的vcd选项。

如果你的测试台提供免费的运行时钟,你还应该使用保护计时器来限制运行时间。VHDL仅在没有更多调度信号更新或执行时间已满的情况下才会停止执行。这是“ --stop-time = 587200ns”行的运行命令选项。

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

使用ghw文件格式有两个优点。通过单击文件自动调用gtkwave应用程序是一种。另一个是ghdl将所有信号交易保存到其ghw转储文件中。你始终可以在gtkwave中选择更多以显示更多信息。尽管在大型模型中这可能是一个缺点,但是ghw格式允许任何类型或子类型的枚举文字显示。

加入GHDL讨论列表并发布问题是吸引ghdl专业知识的好方法。(是的,gna.org的证书已过期或无效)。托尼·贝尔(Tony Bybell)在gtkwave网页上提供了电子邮件联系方式,但由于有薪工作的迫切性,他的工作能力受到限制。


举例说明ghdl和gtkwave的用法。

原始张贴者要求提供一些带有命令行值的实际示例。但是,其中的GHDL / GTKWave教程(PDF,234 KB)较差,其中包含示例和使用过的VCD。

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

david_koontz @ Macbook:ghdl -a CarryRipple.vhd

david_koontz @ Macbook:ghdl -a CarryRipple_tb.vhd

david_koontz @ Macbook:ghdl -e结帐Ripple_tb

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

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

david_koontz @ Macbook:打开-gtkwave随身携带Ripple_tb.ghw

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

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

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

是的,从“教程”中获取两个VHDL文件的源是很痛苦的。我没做

你可能还会注意到在gtkwave显示屏中在60 ns时将“ X”分配给Cin,我这样做是为了显示测试台中分配的最后一个值。

我不会说这是一个很好的教程,但是你在这里得到了所需的收益。做得更好将是一个更大的要求。

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

Chad Kersey还在Youtube上发布了GHDL / GTKWave教程,该教程分为五部分分辨率不是很好,它是以Linux为中心的。第0部分是关于安装这两个工具的信息。在我的示例中,唯一真正的区别是使用ghw波形格式。大多数浏览器将允许你查看下面以完整尺寸拍摄的gtkwave窗口。

在此处输入图片说明

添加

最近有一个答案,展示了一个带触发器的演示,原始VHDL代码中的错误以及三个可能的修复。它使用配置声明来运行各种固定版本。了解如何避免在VHDL中的简单流程语句的输出中出现延迟