mikrocontroller.net

Forum: FPGA, VHDL & Co. Altera & ModelSim


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe hier die web.versionen von Quartus und ModelSim.

Ich komme mit Quartus super klar(so gut wie man damit als anfänger klar 
kommen kann).

Ich würde jedoch gerne mit ModelSim mein Sorce "simulieren".... den VHDL 
Source bekomme ich da rein aber ich habe keine ahnung wie ich mit den 
Testsignalen umgehen soll.

könnte mir jemand anhand dieses Beispiel sources sagen wie ich dass 
ganze von Quartus nach ModelSim "richtig" simuliert bekomme...

Vielen Dank

--- CODE ---
entity MUX4X1 is
port(
S: in bit_vector(1 downto 0);
E: in bit_vector(3 downto 0);
Y: out bit);
end MUX4X1;

architecture VERHALTEN of MUX4X1 is
begin
with S select -- Auswahlsignal
Y <= E(0) when "00",
E(1) when "01",
E(2) when "10",
E(3) when "11";
end VERHALTEN;

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

man kann in Modelsim die Signale per Skript ansteuern. Meistens wird in 
VHDL ein Testbench geschrieben. Da ist man flexibler und muss nicht noch 
eine Skript-Sprache lernen.

Geunsätzlich solltest du nicht den bit_vektor verwenden, da der keine 
Kollisionen und nicht initialisierten Signale kennt.

Ich habe ein Beispiel für deinen Muxer geschrieben.

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity a0_MUX4X1 is

end entity a0_MUX4X1;

architecture behav of a0_MUX4X1 is
    signal S_slv : std_logic_vector(1 downto 0);
    signal E_slv : std_logic_vector(3 downto 0);
    signal Y     : std_logic;

    signal S : unsigned (S_slv'range) := (others => '0');
    signal E : unsigned(E_slv'range)  := (others => '0');


begin  -- architecture behav

    MUX4X1_2 : entity work.MUX4X1
        port map (
            S => S_slv,
            E => E_slv,
            Y => Y);

    S_slv <= std_logic_vector (s);
    E_slv <= std_logic_vector (e);

    p_tb : process is
    begin  -- process p_tb
        while e /= 2**e'length - 1 loop
            wait for 10 ns;
            e <= e + 1;
        end loop;
        s <= s + 1;
    end process p_tb;
end architecture behav;


Bei Kompilieren deines Muxers hat sich Modelsim beschwert, darum habe 
ich den Code geändert.


-- Compiling architecture verhalten of mux4x1
** Error: ../../threinem/work/mux4x1.vhdl(13): Selected signal 
assignment covers only 4 out of 81 cases.
** Error: ../../threinem/work/mux4x1.vhdl(18): VHDL Compiler exiting

Compilation exited abnormally with code 2 at Fri Jan 30 08:41:21


library ieee;
use ieee.std_logic_1164.all;

entity MUX4X1 is
    port(
        S : in  std_logic_vector(1 downto 0);
        E : in  std_logic_vector(3 downto 0);
        Y : out std_logic);
end MUX4X1;

architecture VERHALTEN of MUX4X1 is
begin

Y <= E(0) when s = "00" else
     E(1) when s = "01" else
     E(2) when s = "10" else
     E(3) when s = "11";
end VERHALTEN;

Ich habe es nur kompiliert und nicht simuliert.

Tom

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter:
Vielleicht hilft Dir folgender Artikel beim Verständnis: 
VHDL Testbench

Duke

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo  Thomas , hallo Duke,

erstmal vielen Dank.

@Thomas...

ich habe mit der FPGA programmierung gerade angefangen und verstehe die 
Syntax welche dur für das Testbench verwendetst noch nicht komplett.
Dies wird jedoch noch kommen (hoffe ich zumindest).

Aber es existiert immer noch die folgende Frage :

Wenn ich modelSim (6.3g_p1 ALTERA Edition) starte... im Workspace die 
Datei demo.vhd mit folgendem inhalt habe:

library ieee;
use ieee.std_logic_1164.all;

entity MUX4X1 is
    port(
        S : in  std_logic_vector(1 downto 0);
        E : in  std_logic_vector(3 downto 0);
        Y : out std_logic);
end MUX4X1;

architecture VERHALTEN of MUX4X1 is
begin

Y <= E(0) when s = "00" else
     E(1) when s = "01" else
     E(2) when s = "10" else
     E(3) when s = "11";
end VERHALTEN;


Diese Compiliert habe, wie muss ich das Testbench dort in mein Projekt 
einpflegen(neues file hinzufügen) damit ich das Verhalten des Programms 
in Waves sehen kann?

Gibt es irgendwo im Web einfaches Tutorial ?

Gruß

Peter

Autor: berndel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
na, du must deinen Mux in der Testbench instantiieren wie oben im 
Beispiel gezeigt. Dann simulierst du die Testbench, nicht den Mux. Im 
Klartext: Du hast 2 VHDL Dateien.

Und wenn du's gleich richtig lernen willst, dann solltest du in der 
Testbench auch gleich mit 'assert ...' die Ergebnisse auf Richtigkeit 
pruefen.

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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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