0

我即将为我的学生测试 GHDL 和 Yosys 作为 EDA 专有设计流程的替代品。我的观点是关于 VHDL 综合。

我全新安装了几个工具:trellis (ECP5)、yosys、nexpnr、fujprog (ulx3s)。

GHDL 也安装了更长的时间,但它应该也包括综合(--synth 选项有效)。

ghdl -v 
GHDL 1.0-dev (v0.37.0-208-g2c66a8bd) [Dunoon edition]
Compiled with GNAT Version: Community 2019 (20190517-83)
llvm code generator

看来我也需要ghdl-yosys-plugin。但是,安装对我不起作用。

我收到一堆错误消息:

make GHDL=/opt/ghdl/bin/ghdl
yosys-config --exec --cxx -c --cxxflags -o ghdl.o src/ghdl.cc -fPIC -DYOSYS_ENABLE_GHDL -I/opt/ghdl/include -O
src/ghdl.cc:361:2: error: unknown type name 'Attribute'
        Attribute attr = get_first_attribute (inst);
        ^
src/ghdl.cc:361:19: error: use of undeclared identifier 'get_first_attribute'
        Attribute attr = get_first_attribute (inst);
                         ^
src/ghdl.cc:379:7: error: use of undeclared identifier 'Id_Posedge'; did you mean 'Id_Edge'?
        case Id_Posedge:
             ^~~~~~~~~~
             Id_Edge

ETC

我错过了一些东西。有人可以帮忙吗?

在此先感谢 JCLL

4

2 回答 2

1

正如我所怀疑的(尽管版本控制似乎正确),全新安装的 GHDL 解决了这个问题。

于 2020-12-04T08:44:30.470 回答
0

我做了一些调查:ghdl 已经进行了一些重组,以符合 FHS 的要求。例如这个提交https://github.com/ghdl/ghdl/commit/66cd5e0aa897b947533d269535fde4c0852472c2和进一步的提交显示了一些重命名,以确保符合 FHS 约定。以前安装为 /usr/local/include/ghdhsynth.h 的文件现在位于 /usr/local/include/ghdl

但是,因为这里涉及到两个完全独立的软件(ghdl 和 yosys-ghdl-plugin),所以您必须 (a) 使它们保持同步并且 (b) 确保手动清除先前安装的 ghdl 标头但是

手动删除 /usr/local/include 中已安装的文件并重新安装可能无济于事,如果您在一个而不是另一个上跨越从稳定版本到开发人员版本的提交阈值,因为旧版本的 yosys-ghdl-plugin也不是FHS符合约定。或者,如果您没有完全正确地理解它们(我必须检查 ghdl 和 ghdl-yosys-plugin 的 git log 提交时间戳才能获得匹配),您会得到大致的想法

如果您真的想使用不匹配的 ghdl 和 ghdl-yosys-plugin 版本(此处为 YMMV),那么有一些解决方案:

  1. 手动将 /usr/local/include/ghdl 中的文件复制到 /usr/local/include 中。这是一个非常可怕的 hack,每次重新安装 ghdl 时都需要重复。

  2. 修改 yosys-ghdl-plugin Makefile 以在 CFLAGS 或 ALL_CFLAGS 中包含“-I/usr/local/include/ghdl”

  3. 在 ghdl/synth.h 和任何你看到 ghdl/synth.h 的地方用“synth.h”替换它,同样用 synth_gates.h。

请记住,所有这些都非常糟糕,完全不能保证工作,而且你最好确保正在使用的版本正确同步。

来自 yosys latest master 的一些东西被删除,这也无济于事,yosys-ghdl-plugin 依赖于这些东西来编译!在撰写本文时,我发现标签 yosys-1.13、ghdl-plugin commit c9b05e481423c 和 ghdl commit 263c843ed49 将编译并工作。但是,如果我更新到最新的 ghdl master (0e46300) 微瓦无法构建,所以我现在坚持使用 263c843。

然而,YMMV 希望能给您一些见解,而不是将这些复杂且非常有用的相互关联的软件视为不透明的黑匣子。

于 2022-01-23T01:51:08.923 回答