我正在使用GHDL 0.29 for Windows。
以下程序打印“Hello world!”
use std.textio.all;
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;
以下程序挂起,不会打印任何内容。
use std.textio.all;
entity hello_world is
end hello_world;
architecture behaviour of hello_world is
begin
process
variable l : line;
begin
assert false report "Foo" severity note;
write (l, String'("Hello world!"));
writeline (output, l);
wait;
end process;
end behaviour;
以下程序输出两个断言,然后输出“Hello world!”消息。
use std.textio.all;
entity hello_world is
end hello_world;
architecture behaviour of hello_world is
begin
process
variable l : line;
begin
assert false report "Foo" severity note;
assert false report "bar" severity note;
write (l, String'("Hello world!"));
writeline (output, l);
wait;
end process;
end behaviour;
我尝试增加断言的数量,我发现当我有一个奇数的断言时,模拟会挂起。它们位于何处并不重要。以下是:
assert false report "Foo" severity note;
assert false report "bar" severity note;
assert false report "zoz" severity note;
assert false report "lol" severity note;
assert false report "mok" severity note;
assert false report "antidisestablishmentarianism" severity note;
write (l, String'("Hello world!"));
writeline (output, l);
wait;
assert false report "asd" severity note;
下面列出了所有内容,直到“antidisestablishmentarianism”断言:
assert false report "Foo" severity note;
assert false report "bar" severity note;
assert false report "zoz" severity note;
assert false report "lol" severity note;
assert false report "mok" severity note;
assert false report "antidisestablishmentarianism" severity note;
write (l, String'("Hello world!"));
writeline (output, l);
wait;
assert false report "asd" severity note;
assert false report "gneeek" severity note;
修改
问题更为笼统,似乎与流程中的语句数量有关甚至是奇数。以下打印“Hello world!Hello moon!”反复:
-- 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!"));
write (l, String'("Hello moon!"));
writeline (output, l);
end process;
end behaviour;
虽然以下内容不会打印任何内容并挂起:
-- 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);
end process;
end behaviour;
编辑(这可能会节省一些时间)
在Linux下不会发生上述奇怪的行为。很明显,GHDL的两个版本之一存在严重缺陷,我强烈怀疑它是Windows版本。我将提交错误报告。我仍然对行为不同的原因感兴趣。
编辑(我也尝试使用0.25版本)
对于Windows版本0.25,我收到此错误:
C:\Users\AjejeBrazorf\Documents\Programming\GHDL\Example>ghdl -a 1.vhdl
1.vhdl:1:10: file textio.v93 has changed and must be reanalysed
ghdl.exe是与GTKWave捆绑包(https://stackoverflow.com/a/16629872/415727)一起打包的。
答案 0 :(得分:2)
(很抱歉单独的答案而非评论,我没有Stack Overflow帐户,而且这是我发现作为访客发布的唯一选项)
对于Windows版本0.25,我收到此错误:
C:\ Users \ AjejeBrazorf \ Documents \ Programming \ GHDL \ Example> ghdl -a 1.vhdl 1.vhdl:1:10:文件textio.v93已更改,必须重新分析
编辑:使用库重新分析信息进行更新
我可以运行你的"挂"使用来自ghdl网站的GHDL 0.25链接的示例没有此类库错误。
所以我尝试在另一个XP盒子上安装GHDL + GTK软件包,我看到了和你一样的库错误。
问题是GHDL库时间戳与库std-obj93.cf文件不同步,可能是安装程序创建的时间戳问题。
以下是使用VHDL-93 textio手动重新分析GHDL库的方法:
C:\>cd "\Program Files\FPGALibre\GHDL_GTKWave\lib\v93\std"
C:\Program Files\FPGALibre\GHDL_GTKWave\lib\v93\std>ghdl -a --std=93 --bootstrap --work=std textio.v93
C:\Program Files\FPGALibre\GHDL_GTKWave\lib\v93\std>ghdl -a --std=93 --bootstrap --work=std textio_body.v93
完成这些步骤后,我可以运行“等待”。使用GHDL_0.25 + GTK包的示例:
>ghdl -a hello_world.vhd
>ghdl -r hello_world
hello_world.vhd:11:7:@0ms:(assertion note): Foo
Hello world!
在Windows上新安装的0.29.1上运行正常,谢谢。 有趣的是,我在5月10日安装了GHDL;我现在好吗? 想知道:我从哪里获得安装程序?
" new" ghdl.free.fr上的GHDL下载维基页面有一个过时的链接指向' -latest'您提到的Windows安装程序。
大卫和我都直接指向隐藏的" old" GHDL下载页面。
另见: https://mail.gna.org/public/ghdl-discuss/2011-01/msg00007.html
请注意,我提供的0.25链接在GHDL下载页面上都不可见。
它实际上在0.29.1
上工作正常
请注意,如果您使用已解析的信号执行任何操作,则Windows GHDL 0.29.1也会崩溃。
对于Windows,我建议运行0.25或修补的0.29.1,如前面的链接所述。
答案 1 :(得分:1)
我在Windows GHDL 0.29.x版本中看到了similar problems。
您的示例使用GHDL 0.25或patched 0.29.1.
运行正常编辑:注意,以下捆绑安装程序似乎有VHDL库时间戳问题
来自Handy bundle of GHDL 0.25 + GTK Wave 的