12

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

ghdl -a test.vhd

然后构建和可执行文件

ghdl -e test

最后尝试运行它

ghdl -r test

发生的事情是我现在有一个可见的文件和另外两个文件,work-obj93.cf即不知何故不可见。...

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

4

4 回答 4

22

正如他们所说,这是一个很大的问题!

ghdl.free.fr 提供了适用于 OS X 的 ghdl 版本,该版本在英特尔处理器上运行,适用于10.5、10.6、10.7和 10.8 版本(可在GHDL for Mac OS X下载)。它是 mcode 版本(如在 Windows 上),这意味着它不会生成目标代码或 VHDL 模型的独立可执行文件,因此您无法将外部对象(子程序)绑定到模型。

详细模型仅在运行时存在于内存中,除了工作库 .cf 文件中的条目之外,-e 详细命令是多余的。在 ghdl 的 mcode 版本中,-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 或其他 mcode 版本”。

在 ghdl 手册中,请参阅 1.3 What is GHDL?,(GHDL 的 Windows(TM) 版本不是基于 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 文件。(您可以在 Applications 文件夹中选择一个应用程序,然后选择“Show Package Contents”导航到 doc 目录)。

ghdl 有一种独特的波形格式,称为 ghw,可以使用运行命令选项“--wave=.ghw”调用。请参阅 ghdl 手册 4.1 模拟选项。如果您选择使用 VCD,另请参阅该目录中的 vcd 选项。

如果您的测试台提供自由运行时钟,您还应该使用保护计时器限制运行时间。VHDL 只会在不再有计划的信号更新或执行时间达到最大值时停止执行。这是一个类似于“--stop-time=587200ns”的运行命令选项。

OS X gtkwave.app 对扩展名为 .ghw 和 .gtkw 的两种文件类型敏感,第一种是 ghdl 波形转储文件,第二种是带有 OS X 后缀的 gtkwave 配置文件,允许通过单击 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 波形格式版本的命令行:

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 的 open 命令来完成:

david_koontz@Macbook: open -a gtkwave carryRipple_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 窗口。

在此处输入图像描述

添加

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

于 2013-06-12T23:18:43.087 回答
3

一个新的 Mac OS X gcc 版本的 GHDL

ghdl-updates / Builds / ghdl-0.31 / OSX提供了一个新版本的 ghdl ,这是一个包含 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,它不依赖于 10.6 - 10.8 的 Xcode,并在 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 的,请尝试谷歌搜索。

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

更冒险的人可以在 OS X 上从头开始构建 ghdl,请参阅在 OS X 10.9 上使用 gcc4.8.2 构建 ghdl-0.31 的说明。使用 gcc4.9.1 构建将需要 ghdl-0.32 版本,可从此处找到的 Mercurial 存档。当发布版本 ghdl-0.32 二进制文件时,也可以从 Sourceforge 获得。

Sourceforge 站点ghdl-updates是 ghdl 的作者 Tristan Gingold 进行 ghdl 开发活动的位置。

除了加入ghdl 讨论列表或仔细阅读它的档案之外,您还可以在 ghdl-updates票证页面上提交错误报告,您可以在其中查看打开和关闭的问题。

ghdl的发展前景一片光明。未来的版本预计将在不久的将来关注 IEEE Std 1076-2008 合规性。使用 ghdl 作为 llvm 前端以及替代 ghdl-mcode 的纯解释性版本也在发展。

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

于 2014-02-08T23:22:17.077 回答
0

我不知道这是否与本次讨论完全相关。但是,我很高兴今天能在我的 Mac El Capitan 上安装 GHDL。我从 ghdl.free.fr for mac 下载了最新的 GHDL 版本,一切都安装好了。我确实收到一条消息,说目标文件是一种较新的格式或类似的东西。尽管如此,我的 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。也许这可能对未来的读者有用。

于 2016-01-23T05:46:03.050 回答
0

我在我的 MacOS High Sierra 上使用UMHDL,它就像一个魅力。

将 GHDL 和 GTKWave 绑定到 UMHDL 很棘手,但我明白了。

于 2019-03-18T22:45:17.267 回答