0

我正在为 Windows 使用 GHDL 0.29。

以下程序打印“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;

以下将所有内容打印到“反建制主义”断言:

   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 )。

4

2 回答 2

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 文件不同步,这可能是安装程序创建的时间戳问题。

以下是手动重新分析 GHDL 库的方法,以 VHDL-93 textio 为例:

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;现在我想知道:我从哪里得到安装程序?

ghdl.free.fr 上的“新”GHDL 下载 wiki 页面具有指向您提到的“最新”Windows 安装程序的过时链接。

大卫和我都直接指向隐藏的“旧”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,如前面链接中所述。

于 2013-05-21T02:20:48.667 回答
1

我在 Windows GHDL 0.29.x 版本中看到了类似的问题。

您的示例使用 GHDL 0.25 或修补的 0.29.1 运行正常。

GHDL 0.25 Windows 构建

编辑:注意,以下捆绑安装程序似乎有 VHDL 库时间戳问题

方便的 GHDL 0.25 + GTK Wave 捆绑包,从这里

于 2013-05-18T23:08:44.387 回答