GHDL-YOSYS-PLUGIN error: cannot find "std" library
Closed this issue · 1 comments
Issue 1: Relative Paths in cc-toolchain-linux
When you download and extract cc-toolchain-linux
(tested on Linux; untested on Windows but likely the same), you get examples and tools such as yosys
, p_r
, and openFPGALoader
. Running make synth_vhdl
for examples like Blinky completes without issues. However, using the paths to yosys
(from the extracted folder) in a different directory results in the following error:
warning: ieee library directory '../../bin/yosys/share/ghdl/ieee/v93/' not found
error: cannot find "std" library
This error occurs because the library path is relative, restricting the use of the tools to the cc-toolchain-linux
folder. It should be clarified that if users wish to use yosys
separately, they need to build it from source and set its path in the Makefile accordingly.
Issue 2: ghdl-yosys-plugin
Installation Instructions
Following the GateMate Toolchain Installation Guide for yosys, ghdl, and ghdl-yosys-plugin, it is advisable to use the following commands for make and sudo make install for the ghdl-yosys-plugin to ensure it points to the correct GHDL installation executable. A colleague encountered an issue where sudo make install didn't place the ghdl.so
plugin in /usr/local/share/yosys/plugins/
, and the commands below resolved it:
git clone https://github.com/ghdl/ghdl-yosys-plugin.git
cd ghdl-yosys-plugin
make GHDL=/usr/local/bin/ghdl
sudo make GHDL=/usr/local/bin/ghdl install
Issue 3: Adding -m ghdl
to synth_vhdl
After installing yosys
, ghdl
, and ghdl-yosys-plugin
from source and adding them to your Makefile, running the command make synth_vhdl
results in the following error:
Error: No such command ghdl(type 'help' for a command overview)
This problem is fixed by adding -m ghdl to the synth_vhdl command as follows:
$(YOSYS) -ql log/synth.log -m ghdl -p 'ghdl --warn-no-binding -C --ieee=synopsys $(VHDL_SRC) -e $(TOP); synth_gatemate -top $(TOP) -nomx8 -vlog net/$(TOP)_synth.v'
The -m ghdl
flag ensures that the ghdl-yosys-plugin, which can be seen here, is correctly loaded. Running just yosys
in your terminal and then running ghdl
will give the same error, but running yosys -m ghdl
will recognize the command. For example, running help ghdl
in the yosys
command terminal after yosys -m ghdl
provides the following:
yosys> help ghdl
ghdl [options] unit [arch]
Elaborate the already analyzed unit design and import it
ghdl [options] files... -e [unit]
Analyse files, elaborate unit and import it
If unit is not specified, it is automatically found
Full list of options are described in ghdl documentation.
--std=(93|08)
set the vhdl standard.
-C
allow UTF-8 in comments.
--ieee=synopsys
allow use of ieee.std_logic_arith.
-fpsl
parse PSL in comments.
--top-name=hash
use hash to encode the top entity name
It should be clarified in the Makefile/Toolchain Installation guide that -m ghdl
is required as explained above. Additionally, it is advisable to include a step to test if the ghdl-yosys-plugin
is correctly installed by running the command yosys -m ghdl
as described for added assurance.
A question, out of curiosity, how did you make it work without the -m ghdl
flag in your workspace?
Summary
To use make synth_vhdl
command in your own workspace you need to:
This installation assumes that everything is install in /usr/local/
, if you want to change your yosys installation path for instance you need to use ./configure --prefix=<path/to/yosys/installation/you/want>
Install yosys
git clone https://github.com/YosysHQ/yosys.git
cd yosys
make config-clang
git submodule update --init
make -j$(nproc)
sudo make install
Install ghdl
git clone https://github.com/ghdl/ghdl.git
cd ghdl
./configure --prefix=/usr/local
make -j$(nproc)
sudo make install
Install ghdl-yosys-plugin
git clone https://github.com/ghdl/ghdl-yosys-plugin.git
cd ghdl-yosys-plugin
make GHDL=/usr/local/bin/ghdl -j$(nproc)
sudo make GHDL=/usr/local/bin/ghdl install
Check that in your yosys install directory, in this case usr/local/share/yosys/plugins
there is ghdl.so
Check yosys
, ghdl
, ghdl-yosys-plugin
installation from terminal using which yosys
, which ghdl
and yosys -m ghdl
commands respectively, all independent from another.
Change the synth_vhdl
command
You need to add -m ghdl
to the synth_vhdl
command like this:
$(YOSYS) -ql log/synth.log -m ghdl -p 'ghdl --warn-no-binding -C --ieee=synopsys $(VHDL_SRC) -e $(TOP); synth_gatemate -top $(TOP) -nomx8 -vlog net/$(TOP)_synth.v'
Closing this issue, because it is been resolved. And the issue can be used as documentation on how to resolve the GHDL GateMate problem.