Vhdl GHDL中Synopsys的IEEE:作为选项传递,但未正确考虑

Vhdl GHDL中Synopsys的IEEE:作为选项传递,但未正确考虑,vhdl,ghdl,Vhdl,Ghdl,我使用的是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

我使用的是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 Sonya
  • 哪个ghdl
    返回
    /usr/local/bin/ghdl
  • 定位标准逻辑文本输入
    返回
  • /usr/local/lib/ghdl/src/ieee2008/std_logic_textio.vhdl
  • /usr/local/lib/ghdl/src/synopsys/std_logic_textio.vhdl

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

你怎么做
哪个GHDL
找到std\u logic\u textio
报告(如果你运行的是Linux)

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

所以我猜当你安装ghdl时,有些东西出了问题,std_logic_textio.vhdl源要么在错误的位置,要么完全丢失了


用这些对象和操作系统的路径更新问题,以及如何安装ghdl(从?),我们将看看是否可以进一步了解。

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

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


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

Commit f170a6e与ghdl不匹配(注意Commit f170a6e之后有一个)。在未指定平台或未提供标准文本的情况下,似乎未对std_logic_textio进行分析(mcode版本)。MCVe(
库ieee;使用ieee.std\u logic\u textio.all;实体系统\u tb是最终实体;
)应无错误地进行分析(ghdl-a--ieee=synopsys)。相同的相对路径。。。应该没问题。Dave的(oops,user1155120)MCVE是否也以同样的方式失败?我现在怀疑问题来自“0.35-DEV”,它不是“release”版本。我只是在安装github release.LLVM后端后再试一次。
locate
命令应为每个VHDL语言版本查找匹配的.o文件。(同样,MCVE是否也以同样的方式失败?如果不是,请仔细检查您的库/使用子句。最小化您的VHDL文件并添加到问题中)我刚刚使用了0.35最新版本,使用LLVM后端编译。正确安装。同样的错误。奇怪,是大卫,不是戴夫。ghdl的llvm和gcc版本需要-e--ieee=synopys参数,但不需要-r参数。我认为Tristan添加了--elab run命令以避免混淆。如果您使用makefile,那么各个命令都很有用,您可以定义命令行参数(我不喜欢ghdl的--gen makefile生成的makefile)。哦,如果您使用VHDL-2008,就不再需要std_logic_textio,因为这些过程都在std_logic_1164中。std_logic_textio的VHDL-2008版本与std_logic_1164中的版本有别名。您的问题不准确,您的答案也不权威。您报告的ghdl版本正确吗?mcode版本不需要-e复杂命令(不生成任何内容),并且需要与run命令(-r)一起传递synopsys(--ieee=synopsys)-这是一个即时机器代码生成器。请参见,在页面上搜索mcode。如果你在mcode中使用-e,它确实需要synopsys。@user1155120:好吧,我正在尽力询问这个奇怪的行为。是的,我问题中的版本是正确的。此外,没有语法错误或其他什么。我唯一的错误(可能是)是在拥有一个新的ghdl、从源代码重新编译并以LLVM为目标之后,回答了我自己的问题。这是必要的。关于mcode,我没有任何解释。您显示了分析命令和一个错误,然后生成一个答案,该问题实际上发生在后面的细化过程中。没有正确的问题陈述,其他人无法回答。如果没有阅读您的答案,Stackoverflow阅读器无法找到实际问题。回答你自己的问题没有错。如果没有一个清晰的问题陈述,这不是一个有用的问题,同时也表明缺乏研究。我同意。我能做什么?除此之外,还有一个更具哲理的问题:当我向SO请求帮助时,我只能在键盘和大脑之间“表面上”报告我的问题。误差有时在这两端之间。
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