1

我正在使用 GHDL 模拟器,但我无法弄清楚如何使用非 IEEE 包,如std_logic_textio(显然来自 Synopsys),对各种解析很有用(在我的情况下是线程)。

我已经仔细编译了我的代码,并带有一个选项来表明我的 ieee 是 Synopsys 版本。

ghdl -a --ieee=synopsys system_tb.vhd

但是,我仍然收到一个错误:

system_tb.vhd:25:10:error: unit "std_logic_textio" not found in library "ieee"
system_tb.vhd:25:10:error:  (use --ieee=synopsys or --std=08 for this non-standard synopsys package)

我在这里使用的 GHDL 版本:

GHDL 0.35-dev (2017-03-01-221-gf170a6e) [Dunoon edition]
 Compiled with GNAT Version: 4.9.3
 mcode code generator

如何正确编译我的代码?

更新:这里有一些关于我的 GHDL 安装的信息,来自 github 档案:

  • linux mint 18.2 索尼娅
  • which ghdl返回 /usr/local/bin/ghdl
  • locate std_logic_textio返回
  • /usr/local/lib/ghdl/src/ieee2008/std_logic_textio.vhdl
  • /usr/local/lib/ghdl/src/synopsys/std_logic_textio.vhdl

更新:我还用 llvm 后端重新编译了 GHDL,得到了相同的结果。

4

2 回答 2

1

我终于解决了这个问题:我用 LLVM 后端从源代码重新编译了 GHDL。然后问题就更清楚地出现了:显然,我真正的问题是在细化期间,而不是分析......出现在我终端上的消息指的是细化阶段。我通过在细化阶段添加 -e 选项解决了该错误。

我们还需要在细化过程中传递 ieee 选项(在分析过程中需要时)

关于 mcode 版本,我无法解释报告的行为。

于 2018-03-23T21:16:35.633 回答
0

做什么which ghdllocate std_logic_textio报告(如果您正在运行 Linux)?

which ghdl
/opt/ghdl/mcode/bin/ghdl

locate std_logic_textio
/opt/ghdl/mcode/lib/ghdl/src/ieee2008/std_logic_textio.vhdl
/opt/ghdl/mcode/lib/ghdl/src/synopsys/std_logic_textio.vhdl

这告诉我相关的库源相对于 ghdl 可执行文件位于正确的位置。据我所知,mcode ghdl(它是一个 JIT 编译器)不会像 gcc 和 llvm 版本那样构建已编译的 .o 文件。

所以我猜当你安装 ghdl 时有些东西误入歧途,而 std_logic_textio.vhdl 源要么在错误的位置,要么完全丢失。

使用这些对象的路径、您的操作系统以及您如何安装 ghdl(来自github?)更新问题,我们将看看我们是否可以更进一步。

于 2018-03-23T17:16:57.857 回答