Forum: FPGA, VHDL & Co. GHDL und gtkwave Grundlagen


von Carl (Gast)


Lesenswert?

Gerne wird vorgeschlagen, für die Simulation GHDL ( ein VHDL zu exe 
Compiler ) und gtkwave zum Anzeigen der Waveforms zu benutzen.

Hier gibt es ein Video für Windows:

https://www.youtube.com/watch?v=H2GyAIYwZbw

Es wird eine ältere Version 0.33 runter geladen, für die es eine exe 
gibt.  Die aktuelle ist aber 0.36

https://github.com/ghdl/ghdl/releases

Welche Installation ist zu empfehlen?

von Markus F. (mfro)


Lesenswert?

Carl schrieb:
> Welche Installation ist zu empfehlen?

die jeweils neueste. GHDL wird aktiv weiterentwickelt und es vergeht 
kaum eine Woche, in der nicht ein Bug gefixt oder sonst etwas verbessert 
würde.

von Carl (Gast)


Angehängte Dateien:

Lesenswert?

>die jeweils neueste.

Danke für die Antwort. Bei der neuesten scheint der Compiler nicht dabei 
zu sein, so dass er getrennt installiert werden muss.

Ich habe eine Parallelinstallation von mingw in

D:\tools\mingw-w64

Wenn ich mein obiges Batchscript laufen lasse, hat er Probleme beim 
"Elaborieren".

von Markus F. (mfro)


Lesenswert?

Carl schrieb:
> Wenn ich mein obiges Batchscript laufen lasse, hat er Probleme beim
> "Elaborieren".

was hast Du wo runtergeladen?

von Carl (Gast)


Lesenswert?


von Markus F. (mfro)


Lesenswert?

ich hab' meins (das ohne gcc funktioniert) von hier: 
https://github.com/ghdl/ghdl/releases

Die -mcode- Version.

von Ale (Gast)


Lesenswert?

Irgendwie, glaube ich, daß es der "falsche" Kompiler benutzt wird:

Ich hab den Pfad angepasst:
1
set path=c:\tools\ghdl\bin;C:\tools\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;C:\tools\mingw-w64\msys2_64\usr\bin

Und es geht... oder kompiliert oder synthetisiert, oder whatever you 
want to call it:
1
C:\02_Elektronik\204_FPGA_Tests\10_GHDLTest>sim
2
Elaborate phase
3
Run simulation
4
script terminated !
5
6
C:\02_Elektronik\204_FPGA_Tests\10_GHDLTest>

von Carl (Gast)


Angehängte Dateien:

Lesenswert?

Autor: Markus F. (mfro)
>Die -mcode- Version.

Danke, das ist die Lösung.
Damit funktioniert auch die 32bit -mcode Version mit 64 bit mingw.

Jetzt ist noch die Frage, wie man die Batch-Scripte am besten zur 
Automatisierung nutzt.

Für gtkwave muss man die vcd-Files nutzen, also
1
show half_added_tb.vcd

von Markus F. (mfro)


Lesenswert?

Wenn man mehrere VHDL-Quelldateien hat, sind die -a und -e -Optionen zum 
Übersetzen nicht mehr so simpel anzuwenden (weil man die in der 
richtigen Reihenfolge absetzen muß). Dann bieten sich die -i und -m 
-Optionen an, die ghdl zu "selbstständigen" Übersetzen anbietet.

Damit kann man sich auch ein einfaches Makefile bauen:
1
work-obj08.cf: $(TOPLEVEL_FILE) $(FILES)
2
    $(GHDL) -i $(GHDL_OPTS) --std=08 $(TOPLEVEL_FILE) $(FILES)
3
    $(GHDL) -m $(GHDL_OPTS) --std=08 tb

von Ale (Gast)


Lesenswert?

>Danke, das ist die Lösung.

Das ist eine Lösung. Der richtige Kompiler ist noch eine :)

von TriHexagon (Gast)


Lesenswert?

GHDL kann auch Makefile-Vorlagen generieren:
http://ghdl.free.fr/ghdl/Generate-Makefile-command.html

Carl schrieb:
> Für gtkwave muss man die vcd-Files nutzen, also

Nein zum Glück nicht!
siehe http://ghdl.free.fr/site/pmwiki.php?n=Main.WaveViewer
1
Since VCD is Verilog oriented, it is not possible to dump all the VHDL types with VCD. Furthermore, there is no open waveform file format for VHDL. That is the reason why a GHDL waveform format was created.

Nimm das GHDL Format, sonst fehlen dir Signale!

von Carl (Gast)


Lesenswert?

>Nimm das GHDL Format, sonst fehlen dir Signale!
Das obige batch-File erzeugt eine *.vcd File.
https://www.mikrocontroller.net/attachment/412049/runghdl.bat

Wie erzeugt man das GHDL-Format?

von Ale (Gast)


Lesenswert?

https://ghdl.readthedocs.io/en/latest/using/Simulation.html

guck für "--wave"

Meine Version von GTKWave (3.3.82) von 2017 kann diese Dateien nicht 
lesen. Zeit eine neue Version zu finden...

von Ale (Gast)


Lesenswert?

Ich kann mit GTKWave 3.3.100 auch nichts auf machen, mine GHDL Version 
ist 0.35. Ich werde mit eine neuere Version probieren müssen.

von Carl (Gast)


Lesenswert?

Mit GHDL 0.36 kann man das Fileformat erzeugen:
1
ghdl -r --ieee=synopsys --std=08 %ghdlFileName% --vcd=%ghdlFileName%.vcd --wave=waveData.waf --stop-time=1ms

Meine gtkwave-Version ist 3.3.100 und ich kann "waveData.waf" auch nicht 
darstellen. Vielleich braucht man eine bestimmte File-Endung.

von Carl (Gast)


Lesenswert?

Gerade habe ich ein Tool entdeckt, mit dem man Online-Testbenches 
erzeugen kann, in dem man einfach den VHDL-Code rein postet:

https://vhdl.lapinoo.net/testbench/

von Carl (Gast)


Lesenswert?

Wie geht man eigentlich am besten vor, wenn man z.B. einen Zähler der 1 
Sekunde zählen soll mit 50MHz SysClk zählen soll, simulieren möchte?
Die Simulation dürfte ja ewig dauern.

von Carl (Gast)


Angehängte Dateien:

Lesenswert?

Der Onlinegenerator erzeugt mir dieses Script.
Ich versuche, eine Sekunde zu Simulieren, aber gtkwave zeigt nur bis 
1ms.
1
-- Testbench automatically generated online
2
-- at http://vhdl.lapinoo.net
3
-- Generation date : 9.5.2019 04:37:36 GMT
4
5
library ieee;
6
use ieee.std_logic_1164.all;
7
8
entity tb_counter is
9
end tb_counter;
10
11
architecture tb of tb_counter is
12
13
    component counter
14
        port (cout   : out std_logic_vector (7 downto 0);
15
              enable : in std_logic;
16
              clk    : in std_logic;
17
              reset  : in std_logic);
18
    end component;
19
20
    signal cout   : std_logic_vector (7 downto 0);
21
    signal enable : std_logic;
22
    signal clk    : std_logic;
23
    signal reset  : std_logic;
24
25
    constant TbPeriod : time := 1000 ns; -- EDIT Put right period here
26
    signal TbClock : std_logic := '0';
27
    signal TbSimEnded : std_logic := '0';
28
29
begin
30
31
    dut : counter
32
    port map (cout   => cout,
33
              enable => enable,
34
              clk    => clk,
35
              reset  => reset);
36
37
    -- Clock generation
38
    TbClock <= not TbClock after TbPeriod/2 when TbSimEnded /= '1' else '0';
39
40
    -- EDIT: Check that clk is really your main clock signal
41
    clk <= TbClock;
42
43
    stimuli : process
44
    begin
45
        -- EDIT Adapt initialization as needed
46
        enable <= '1';
47
48
        -- Reset generation
49
        -- EDIT: Check that reset is really your reset signal
50
        reset <= '1';
51
        wait for 100 ns;
52
        reset <= '0';
53
        wait for 100 ns;
54
55
        -- EDIT Add stimuli here
56
        wait for 1000000 * TbPeriod;
57
58
        -- Stop the clock and hence terminate the simulation
59
        TbSimEnded <= '1';
60
        wait;
61
    end process;
62
63
end tb;
64
65
-- Configuration block below is required by some simulators. Usually no need to edit.
66
67
configuration cfg_tb_counter of tb_counter is
68
    for tb
69
    end for;
70
end cfg_tb_counter;

von Duke Scarring (Gast)


Lesenswert?

Carl schrieb:
> Die Simulation dürfte ja ewig dauern.
Ja, dauert sie.

Ich bau mir dann gerne so ein Konstrukt:
1
    function divider_sim_or_syn return natural is
2
        variable result : natural;
3
    begin
4
        result := 50_000_000;
5
        -- pragma translate_off
6
        result := 50;
7
        -- pragma translate_on
8
        return result;
9
    end function;

Duke

von Carl (Gast)


Lesenswert?

Danke für das Beispiel. "Pragma" habe ich in VHDL noch nicht benutzt.

Wie geht man eigentlich vor, wenn einen DSP-Block auf einem Xilinx FPGA 
nutzt und diesen aber nun in GHDL einbinden will?

von Mike (Gast)


Lesenswert?

Carl schrieb:
> Wie geht man eigentlich vor, wenn einen DSP-Block auf einem Xilinx FPGA
> nutzt und diesen aber nun in GHDL einbinden will?

Du müsstest die Xilinx Libraries für GHDL kompilieren:

https://github.com/ghdl/ghdl/tree/master/libraries/vendors

gibt auch einen älteren Thread in diesem Forum:

Beitrag "Xilinx unisim library und ghdl, DCM tut nicht"

von Burkhard K. (buks)


Lesenswert?

Carl schrieb:
> Danke für das Beispiel. "Pragma" habe ich in VHDL noch nicht benutzt.

Es geht auch ohne #pragma: Z.B. mittels Generic Parameter (mit 
Default-Wert), der von der Testbench auf einen einen entsprechend 
kleineren Wert (z.B. Faktor 1000) "gemapped" wird.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Ich hatte mich hier auch mal ausprobiert.
Ds hatte ich auch sehr ausführlich dokumentiert. Ob alles im neueren 
Vivado enthalten ist, kann ich nicht sagen.

http://www.dossmatik.de/ghdl/ghdl_unisim.pdf

VHDL hat die Operation *. Xilinx setzt Multiplikation in einem DSP Block 
um.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

René D. schrieb:
> Xilinx setzt Multiplikation in einem DSP Block
> um.

Jein, kommt ganz darauf an. Haengt ganz davon ab, wie breit die Faktoren 
sind, wieviele DSP Slices fuer andere und kritischere Operationen 
benoetigt werden und den Synthese Settings.

Am einfachsten ist es immer, einfach mal Minimalbeispiele durchzumachen 
und sich das Synthese Ergebnis anzuschauen. Dann bekommt man ganz gut 
ein Gefuehl davor.

von Carl (Gast)


Lesenswert?

Wie ist eigentlich GHDL zu Modelsim von Mentorgraphics zu bewerten?

Ich habe jetzt nur GHDL benutzt und nach meinem Eindruck ist es rasend 
schnell. Hätte man mit Modelsim irgendwelche sonstigen Vorteile?

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Carl schrieb:
> Wie ist eigentlich GHDL zu Modelsim von Mentorgraphics zu bewerten?
>
> Ich habe jetzt nur GHDL benutzt und nach meinem Eindruck ist es rasend
> schnell. Hätte man mit Modelsim irgendwelche sonstigen Vorteile?

Modelsim beinhaltet deutlich mehr Features, je nachdem welche Lizenz mit 
welchen Optionen du erwirbst. Da kommt GHDL natuerlich nicht ansatzweise 
ran.

Hier ist mal eine alte Auflistung:

http://en.wedasoft.at/files/uploads/we_products/4/de_modelsim_comparisonfinal_pdf

Die SE Version gibt es in dem Sinne nicht mehr, das laeuft jetzt unter 
Questa Series und ist dort wieder unterteilt in Questa Core, Questa 
Prime und Questa Ultra:

http://www.ednc.com/wp/wp-content/uploads/2015/08/QuestaCompare-April2014.pdf

Aber ich gebe dir auf jedenfall recht. GHDL ist ein tolles Stueck 
Software, ich verwende das meistens in Kombination mit VUnit und dann in 
einem Docker Container. Vom Funktionsumfang kann es aber den 
kommerziellen Loesungen nicht das Wasser reichen. Allerdings auch im 
Preis, wenn du mal anfragst was die Mentor Produkte kosten, dann hauts 
einen erstmal vom Stuhl. ;-)

von Johannes K. (krjdev)


Lesenswert?

Carl schrieb:
> Mit GHDL 0.36 kann man das Fileformat erzeugen:
>
>
1
> ghdl -r --ieee=synopsys --std=08 %ghdlFileName% --vcd=%ghdlFileName%.vcd 
2
> --wave=waveData.waf --stop-time=1ms
3
>
>
> Meine gtkwave-Version ist 3.3.100 und ich kann "waveData.waf" auch nicht
> darstellen. Vielleich braucht man eine bestimmte File-Endung.

Habt Ihr schon mal das File Format GHW versucht?

Auszug der Manpage (Linux) von GTKwave:
1
GHW is the native VHDL  format  generated  by GHDL

Die unterstützten File Formate:
1
gtkwave - Visualization tool for VCD, LXT, LXT2, VZT, FST, and GHW files

von Carl (Gast)


Lesenswert?

>Habt Ihr schon mal das File Format GHW versucht?

Ich hab's grad mal ausprobiert:
Mann muss bei GHDL die option

--wave=testTaden.ghw

verwenden, um das File zu erzeugen. Es ist nur 1/4 so groß wie das 
vcd-File und kann mit GTKWave betrachtet werden.

von Carl (Gast)


Lesenswert?

René D. (Firma: www.dossmatik.de) (dose)
>Ich hatte mich hier auch mal ausprobiert.
>Ds hatte ich auch sehr ausführlich dokumentiert.

Sehr übersichtlich. Danke.

http://www.dossmatik.de/vhdl.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.