如果进程中的语句数是偶数,则GHDL 0.29 for Windows会挂起

时间:2013-05-10 12:10:14

标签: vhdl ghdl

我正在使用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)一起打包的。

2 个答案:

答案 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.

运行正常

GHDL 0.25 Windows build

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

来自Handy bundle of GHDL 0.25 + GTK Wave

here