mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Carl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:

Youtube-Video "Getting Started With VHDL on Windows (GHDL & GTKWave)"

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?

Autor: Markus F. (mfro)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Carl (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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".

Autor: Markus F. (mfro)
Datum:

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

was hast Du wo runtergeladen?

Autor: Carl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Markus F. (mfro)
Datum:

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

Die -mcode- Version.

Autor: Ale (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwie, glaube ich, daß es der "falsche" Kompiler benutzt wird:

Ich hab den Pfad angepasst:
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:
C:\02_Elektronik\204_FPGA_Tests\10_GHDLTest>sim
Elaborate phase
Run simulation
script terminated !

C:\02_Elektronik\204_FPGA_Tests\10_GHDLTest>

Autor: Carl (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
show half_added_tb.vcd

Autor: Markus F. (mfro)
Datum:

Bewertung
0 lesenswert
nicht 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:
work-obj08.cf: $(TOPLEVEL_FILE) $(FILES)
    $(GHDL) -i $(GHDL_OPTS) --std=08 $(TOPLEVEL_FILE) $(FILES)
    $(GHDL) -m $(GHDL_OPTS) --std=08 tb

Autor: Ale (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Danke, das ist die Lösung.

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

Autor: TriHexagon (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
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!

Autor: Carl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Ale (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Ale (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Carl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit GHDL 0.36 kann man das Fileformat erzeugen:
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.

Autor: Carl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/

Autor: Carl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Carl (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Der Onlinegenerator erzeugt mir dieses Script.
Ich versuche, eine Sekunde zu Simulieren, aber gtkwave zeigt nur bis 
1ms.
-- Testbench automatically generated online
-- at http://vhdl.lapinoo.net
-- Generation date : 9.5.2019 04:37:36 GMT

library ieee;
use ieee.std_logic_1164.all;

entity tb_counter is
end tb_counter;

architecture tb of tb_counter is

    component counter
        port (cout   : out std_logic_vector (7 downto 0);
              enable : in std_logic;
              clk    : in std_logic;
              reset  : in std_logic);
    end component;

    signal cout   : std_logic_vector (7 downto 0);
    signal enable : std_logic;
    signal clk    : std_logic;
    signal reset  : std_logic;

    constant TbPeriod : time := 1000 ns; -- EDIT Put right period here
    signal TbClock : std_logic := '0';
    signal TbSimEnded : std_logic := '0';

begin

    dut : counter
    port map (cout   => cout,
              enable => enable,
              clk    => clk,
              reset  => reset);

    -- Clock generation
    TbClock <= not TbClock after TbPeriod/2 when TbSimEnded /= '1' else '0';

    -- EDIT: Check that clk is really your main clock signal
    clk <= TbClock;

    stimuli : process
    begin
        -- EDIT Adapt initialization as needed
        enable <= '1';

        -- Reset generation
        -- EDIT: Check that reset is really your reset signal
        reset <= '1';
        wait for 100 ns;
        reset <= '0';
        wait for 100 ns;

        -- EDIT Add stimuli here
        wait for 1000000 * TbPeriod;

        -- Stop the clock and hence terminate the simulation
        TbSimEnded <= '1';
        wait;
    end process;

end tb;

-- Configuration block below is required by some simulators. Usually no need to edit.

configuration cfg_tb_counter of tb_counter is
    for tb
    end for;
end cfg_tb_counter;

Autor: Duke Scarring (Gast)
Datum:

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

Ich bau mir dann gerne so ein Konstrukt:
    function divider_sim_or_syn return natural is
        variable result : natural;
    begin
        result := 50_000_000;
        -- pragma translate_off
        result := 50;
        -- pragma translate_on
        return result;
    end function;

Duke

Autor: Carl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: Burkhard K. (buks)
Datum:

Bewertung
0 lesenswert
nicht 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.

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

Bewertung
0 lesenswert
nicht 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.

Autor: Tobias B. (Firma: www.elpra.de) (ttobsen)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Carl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Tobias B. (Firma: www.elpra.de) (ttobsen)
Datum:

Bewertung
0 lesenswert
nicht 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. ;-)

Autor: Johannes K. (krjdev)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Carl schrieb:
> Mit GHDL 0.36 kann man das Fileformat erzeugen:
>
>
> 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.

Habt Ihr schon mal das File Format GHW versucht?

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

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

Autor: Carl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.