我只是写了一个简单的VHDL程序。我将文件另存为.vhd文件。然后我用
ghdl -a test.vhd
然后用
ghdl -e test
最后尝试与
ghdl -r test
发生的事情是,我现在有一个可见的
work-obj93.cf
文件,还有另外两个文件,它们在某种程度上是不可见的,即..
和.
。有人可以告诉我如何在Mac上测试vhdl程序吗?也许与GTKWave结合使用。
最佳答案
正如他们所说的,这是一个很大的要求!
可以从 ghdl.free.fr获得可在Intel处理器上运行的ghdl版本,用于OS X,版本为10.5、10.6、10.7和10.8(可以从 GHDL for Mac OS X下载)。它是mcode版本(例如Windows上的版本),这意味着它不会生成目标代码或VHDL模型的独立可执行文件,从而导致您无法将异物(子程序)绑定(bind)到该模型。
精细的模型仅在运行时存在于内存中,-e精细的命令是多余的,除了工作库.cf文件中的条目外。在ghdl的mcode版本中,-r run命令也会详细说明。您将看到的只是工作目录的work-obj93.cf文件和预分析库的任何.cf文件,默认情况下,这些文件将显示在/usr/local/ghdl/libraries中,该可执行文件位于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 session )上。
您将最终得到当前工作目录中的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 discuss list并发布问题是吸引ghdl专业知识的好方法。 (是的,gna.org的证书已过期或无效)。托尼·贝尔(Tony Bybell)在gtkwave网页上提供了电子邮件联系方式,但由于有薪工作的迫切性,他的工作能力受到限制。
举例说明ghdl和gtkwave的用法。
原始张贴者要求提供一些带有命令行值的实际示例。有一个糟糕的GHDL/GTKWave Tutorial(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执行相同的操作。单击一个。在信号窗口中,选择[3:0],然后点击插入按钮。重复b。
在SST窗口中选择U0,然后在信号窗口中选择cin点击插入按钮,然后单击cout。
在SST窗口中选择s,在信号窗口中选择s [3:0],然后单击插入。
是的,从“教程”中获取两个VHDL文件的源是很痛苦的。我没做
您可能还会注意到在gtkwave显示屏中在60 ns时将“X”分配给Cin,我这样做是为了显示测试台中分配的最后一个值。
我不会说这是一个很好的教程,但是您在这里得到了所需的 yield 。做得更好将是一个更大的要求。
测试平台(carryRipple_tb.vhd)提供了在仿真过程中驱动模型(CarryRipple.vhd)的动力。该模型在上一个信号事件之后退出执行,因此无需将停止时间传递给运行命令(例如--stop-time = 587200ns)。
在YouTube上还有Chad Kersey撰写的GHDL/GTKWave教程,该教程分为五部分。分辨率不是很好,它是以Linux为中心的。第0部分是关于安装这两个工具的信息。在我的示例中,唯一真正的区别是使用ghw波形格式。大多数浏览器将允许您查看下面以完整尺寸拍摄的gtkwave窗口。
添加了
最近有一个答案,显示了一个带触发器的演示,原始VHDL代码中的错误以及三个可能的修复。它使用配置声明来运行各种固定版本。参见how to avoid delay in the output of simple process statement in VHDL。