Hello, I see that GHDL is a supported simulator for UVVM, but does anyone have a step-by-step tutorial how to compile and simulate using GHDL?
Hi,
Yes, UVVM can run with GHDL, but GHDL has to update their compile scripts to support UVVM from release v2019.09.02. From that release most of the VVCs has a Bitvis VIP Scoreboard dependency, i.e. the Scoreboard VIP has to be compiled prior to other VIP src files - see the compile order in VVC quick references, last page. So you can either run GHDL with an earlier release of UVVM or modify the compile order of the UVVM modules in the compile-uvvm.sh/ps1 file.
There have been a while since I used GHDL, but I think the syntax is something like:
DUT files
ghdl -a -frelaxed-rules --std=08 --work=lib ā¦/src/src_file
⦠and other DUT filesā¦
UVVM Utility, VVC Framework, VIPs
ghdl -a -frelaxed-rules --std=08 --work=uvvm_util ā¦/UVVM/uvvm_util/src/types_pkg.vhd
ghdl -a -frelaxed-rules --std=08 --work=uvvm_util ā¦/UVVM/uvvm_util/src/adaptations_pkg.vhd
⦠and the other filesā¦
Compile TB
ghdl -a -frelaxed-rules --std=08 --work=TB lib ā¦/tb/TB_file
Simulate
ghdl -e -frelaxed-rules --std=08 --work=TB lib TB_entity
ghdl -r -frelaxed-rules --std=08 --work=TB lib TB_entity
Br,
Marius
Thanks for your reply, Marius. Iāll try it over the weekendš
Hi,
I want to start using GHDL with UVVM. I have problems on compiling uvvm_util on Windows. I tried to run compile.sh in git bash for UVVM_Light-master in scripts folder but couldnt succeed.
I tried using ghdl commands by obeying the orders in compile_order.txt. In windows console, I run these scripts inside src_util folder:
ghdl -a -frelaxed-rules --std=08 -Wno-hide -Wno-shared --work=uvvm_util types_pkg.vhd
ghdl -a -frelaxed-rules --std=08 -Wno-hide -Wno-shared --work=uvvm_util adaptations_pkg.vhd
ā¦
ghdl -a -frelaxed-rules --std=08 -Wno-hide -Wno-shared --work=uvvm_util uvvm_util_context.vhd
Then redirect the consolde to the folder where my testbench code is there. I tried running testbench code, in which there are lines:
library uvvm_util;
context uvvm_util.uvvm_util_context;
However GHDL gives error such as:
tb_half_adder.vhd:5:9: cannot find resource library āuvvm_utilā
tb_half_adder.vhd:6:19: unit āuvvm_util_contextā not found in library āuvvm_utilā
tb_half_adder.vhd:11:28: entity ātb_half_adderā was not analyzed
so I assume uvvm_util library compilation is not completed successfully. Maybe I miss a simple point. Any help would be appreciated.
Regards,
Burak
I also tried source compile.sh, it gives no error in git bash. I tried running my testbench on git bash but still got the same error ācannot find resource library uvvm_utilā
well for some reason i forgot to add std.env to testbench
library STD;
use std.env.all;
maybe it cause the problem, i will try at home if it is the problem
regards
Burak
Hi,
Did you solve the problem?
Br,
Marius
i quit using ghdl and download free version of intelās modelsim 19.1. i had no problem in modelsim, even posted about how to use UVVM in modelsim in my personal webpage:
Regards,
Burak
20 Ara 2021 Pzt 23:41 tarihinde Marius via UVVM <uvvm@discoursemail.com> Åunu yazdı:
Hi mate.
Iām new on UVVM, Iāve read the its user guide and getting started document but iām not able to compile the code below using UVVM. I really appreciate your help, Iām on windows and Iāve already installed GHDL 3.0.
library IEEE;
use IEEE.std_logic_1164.all;
library uvvm_util;
context uvvm_util.uvvm_util_context;
library uvvm_vvc_framework;
use uvvm_vvc_framework.ti_vvc_framework_support_pkg.all;
library bitvis_vip_sbi;
context bitvis_vip_sbi.vvc_context;
entity uvvm_tb is
end entity uvvm_tb;
architecture func of uvvm_tb is
begin
p_main : process
begin
log(āStarting simulations.ā);
std.env.stop;
wait;
end process p_main;
end func;
Hi, I have tested your code using HDLRegression with GHDL simulator without any issues
py test.py -s ghdl
====================================================================================================================================================================
HDLRegression version 0.43.3
See /doc/hdlregression.pdf for documentation.
====================================================================================================================================================================
Scanning files...
Building test suite structure...
Compiling library: uvvm_util - OK -
Compiling library: uvvm_vvc_framework - OK -
Compiling library: bitvis_vip_scoreboard - OK -
Compiling library: bitvis_vip_sbi - OK -
Compiling library: test_lib - OK -
Starting simulations...
Running 1 out of 1 test(s) using 1 thread(s).
Running: test_lib.uvvm_tb.func (test_id: 1)
Result: PASS (0h:0m:0s).
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Simulation run time: 0h:0m:0s.
SIMULATION SUCCESS: 1 passing test(s).
I am running GHDL version
GHDL 3.0.0 (2.0.0.r1417.g7de967c51) [Dunoon edition]
Compiled with GNAT Version: Community 2019 (20190517-83)
mcode code generator
Can you share the transcript/error message?
Br,
Marius
Hi,
I was curious to see if the latest version of UVVM would work with GHDL on an M4 Macbook. I know, utter madness, but GHDL does actually run well on this machine. Unfortunately it seems UVVM doesnāt, when using the ghdl_compile_all_and_simulate.sh script in the bitvis_uart demo the compilation runs fine but elaboration fails with a bunch of messages like
Undefined symbols for architecture arm64:
ā_bitvis_vip_sbi__td_cmd_queue_pkg__ELABORATEDā, referenced from:
_bitvis_vip_sbi__sbi_vvc__PKG_ELAB in sbi_vvc.o
_bitvis_vip_sbi__sbi_vvc__ARCH__behave__DECL_ELAB in sbi_vvc.o
ā_bitvis_vip_sbi__td_cmd_queue_pkg__ELAB_BODYā, referenced from:
_bitvis_vip_sbi__sbi_vvc__PKG_ELAB in sbi_vvc.o
_bitvis_vip_sbi__sbi_vvc__ARCH__behave__DECL_ELAB in sbi_vvc.o
Calling ghdl āversion gives me
GHDL 6.0.0 (6.0.0.r0.ge589c698c) [Dunoon edition]
Compiled with GNAT Version: 14.2.0
llvm 22.1.0 code generator
and I am using the UVVM-2026.03.20 version of UVVM.
Iām probably completely insane to expect this to work but maybe there is a simple explanation.
Just as a datapoint the bitvis_irqc example works fine