Forum: FPGA, VHDL & Co. Altera & ModelSim


von Peter (Gast)


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;

von Thomas R. (Firma: abaxor engineering) (abaxor)


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

von Duke Scarring (Gast)


Lesenswert?

@Peter:
Vielleicht hilft Dir folgender Artikel beim Verständnis: 
VHDL Testbench

Duke

von Peter (Gast)


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

von berndel (Gast)


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.

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.