我只是写了一个简单的VHDL程序。我将文件另存为.vhd文件。然后我用
ghdl -a test.vhd
然后用
ghdl -e test
最后尝试与
ghdl -r test
发生了什么事是我现在有一个work-obj93.cf
文件,它是可见的,其他两个文件,即..
和.
那些不知何故不可见的。
有人可以告诉我如何在Mac上测试vhdl程序吗?也许与GTKWave结合使用。
正如他们所说的,这是一个很大的要求!
可以从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中的简单流程语句的输出中出现延迟。
检查表明,gtkwave.app在OS X上还声明了文件扩展名.vcd,用于矢量更改转储波形转储文件。
谢谢!但是您是否可以添加更多示例,说明如何实际运行ghdl程序并使用gtkwave显示波形?我的意思是像一些命令行输入一样,这将非常有用,并且可以帮助我继续前进!
询问,您将收到,尽管我没有输入我发现的示例中的代码,并且很难从PDF中提取代码。请参阅“使用示例详细说明ghdl和gtkwave的使用”中的答案。是的,现在是7摄氏度,正在下雨。而且,对于ghw波形文件和VCD文件,SST窗口中的树将以不同的方式显示。将所有信号插入波形后,请不要忘记写入保存文件。我鼓励阅读gtkwave手册以及进行实验。
嘿,再次感谢!但是,我仍然有问题。让我告诉你我在做什么:
嘿,再次感谢!事情就这样了:首先,我只有一个名为.vhd的文件
my file.vhd
。然后,我运行ghdl -a myfile.vhd
哪个creates a work-obj93.cf
文件。然后我运行ghdl -e myfile
,它什么都不做。最终,我运行了ghdl -r myfile --wave=myfile.ghw
,它创建了一个名为的文件myfile.ghw
。之后,我双击该文件,然后gtkwave打开。问题是,什么都没有出现。在gtkwave的标题中,它只是说GTKWave - [no file loaded]
。