Forum: FPGA, VHDL & Co. VHDL und Modelsim, bit geht -- std_logic nicht


von Stefan G. (stefan8051)


Lesenswert?

Hallo,
ich versuche grade vergebens ein ganz einfaches Programm mit ModelSim
zu simulieren. Xilinx ISE kann das Programm ohne probleme kompilieren.
ModelSim meint das es keine std_logic kennt, ich habe noch ein so
kleines Programm, in dem nur mit bit und integer gearbeitet wird. Das
wird sowohl von ISE als auch Modelsim gefressen.
Hier mal die Fehlermesdungen:

# Model Technology ModelSim XE vcom 5.5e_p1 Compiler 2001.11 Nov 16
2001
# -- Loading package standard
# -- Loading package std_logic_1164
# -- Loading package numeric_std
# -- Compiling entity oszi
# -- Compiling architecture behavioral of oszi
# -- Compiling entity test
# -- Compiling architecture tb1 of test
# ERROR: C:/oszi1.vhd(38): Unknown identifier: std_logic_vector
# ERROR: C:/oszi1.vhd(39): Unknown identifier: std_logic_vector
# ERROR: C:/oszi1.vhd(40): Unknown identifier: std_logic
# ERROR: C:/oszi1.vhd(43): Unknown identifier: std_logic_vector
# ERROR: C:/oszi1.vhd(44): Unknown identifier: std_logic_vector
# ERROR: C:/oszi1.vhd(45): Unknown identifier: std_logic


und hier mal das ganze Programm
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;
--use IEEE.STD_LOGIC_ARITH.ALL;
--use IEEE.STD_LOGIC_UNSIGNED.ALL;

--********************************************************
entity oszi is
  Port (
  outbus:out std_logic_vector(7 downto 0); --Adressbus
  inbus:in std_logic_vector(7 downto 0); --Datenbus
  clk_in:in std_logic       -- Clock Input
   );
end oszi;

--********************************************************
architecture Behavioral of oszi is
begin

process(clk_in)
begin
  if rising_edge(clk_in) then
    outbus <= inbus;
  end if;
end process;

end Behavioral;

--********************************************************
entity test is
end test;

--********************************************************
architecture tb1 of test is

component oszi
port(
  outbus:out std_logic_vector(7 downto 0); --Adressbus
  inbus:in std_logic_vector(7 downto 0); --Datenbus
  clk_in:in std_logic);       -- Clock Input
end component;

signal  toutbus : std_logic_vector(7 downto 0); --Adressbus
signal  tinbus : std_logic_vector(7 downto 0); --Datenbus
signal  tclk_in : std_logic;       -- Clock Input

begin

DUT: oszi port map (toutbus,tinbus,tclk_in);

  STIMULUS: process
   begin
      tclk_in <= '0';
      wait for 1 ps;
      tclk_in <= '1';
      wait for 1 ps;
      -- and so on ...
   end process STIMULUS;

  STIMULUS2: process
   begin
      tinbus <= "00000000";
      wait for 10 ps;
      tinbus <= "11111111";
      wait for 10 ps;
      -- and so on ...
   end process STIMULUS2;

end tb1;

von Stefan G. (stefan8051)


Lesenswert?

mfg
Stefan (vergessen)

von Klaus F. (kfalser)


Lesenswert?

Du hast nach der component declaration irgendwo bei Zeile 35-37 das
"is" vergessen.
Es muß heisen :

component oszi is
port (...
)

Du solltest aber besser für jede Einheiten jeweils eine eigene Dateien
schreiben.

Grüße
Klaus

von Klaus F. (kfalser)


Lesenswert?

Und es muß natürlich
"Es muß heißen : "
heißen. (Trotz Rechtschreibreform !)

Klaus

von Stefan G. (stefan8051)


Lesenswert?

Hallo,
schon mal vielen Dank für Hilfe. Die Fehler das Modelsim die std_logic
nicht kennt sind schon mal weg, nachdem ich in der besagten Zeile 36
ein is eingefügt habe. Es steht dort jetzt also:

component oszi is   --Zeile 36
port(
  outbus:out std_logic_vector(7 downto 0); --Adressbus
  inbus:in std_logic_vector(7 downto 0); --Datenbus
  clk_in:in std_logic);       -- Clock Input
end component;

Jedoch meckert Modelsim diese Zeile 36 jetzt folgendermaßen an:

# Model Technology ModelSim XE vcom 5.5e_p1 Compiler 2001.11 Nov 16
2001
# -- Loading package standard
# -- Loading package std_logic_1164
# -- Loading package numeric_std
# -- Compiling entity oszi
# -- Compiling architecture behavioral of oszi
# -- Compiling entity test
# -- Compiling architecture tb1 of test
# ERROR: C:/oszitest/oszi1.vhd(36): near "is": expecting: END

Ich weis nicht wo da ein end fehlen soll, eventuell bin ich ja
mitlerweile blind und sehe den Wald vor lauter Bäumen nicht mehr.

mfg
Stefan

von Xenu (Gast)


Lesenswert?

Du musst vor der zweiten entity, d.h. vor "entity test is
end test;" nochmal die Bibiliotheken einbinden, also das hier
schreiben:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;

von Stefan G. (stefan8051)


Lesenswert?

Hallo,
jetzt funktioniert es. Ich habe wie Xenu sagte die Bibliotheken vor der
entity test nochmals eingebunden.

Wenn man schreibt

component oszi is   --Zeile 36
port(
  outbus:out std_logic_vector(7 downto 0); --Adressbus
  inbus:in std_logic_vector(7 downto 0); --Datenbus
  clk_in:in std_logic);       -- Clock Input
end component;

bekommt man trotzdem einen Fehler, wie oben beschrieben. Das "is"
darf da nicht stehen. Es muss so heißen:

component oszi   --Zeile 36
port(
  outbus:out std_logic_vector(7 downto 0); --Adressbus
  inbus:in std_logic_vector(7 downto 0); --Datenbus
  clk_in:in std_logic);       -- Clock Input
end component;

Vielen Dank, jetzt kann ich endlich weitermachen :-)

mfg
Stefan

von Xenu (Gast)


Lesenswert?

>Das "is" darf da nicht stehen.

O doch, das darf es schon. Ich habe hier den IEEE-1076-Standard, also
die VHDL-Spezifikation, die 2000er und 2002er-Ausgabe, und da steht
folgendes:

  component_declaration ::=
  component identifier [ is ]
  [ local_generic_clause ]
  [ local_port_clause ]
  end component [ component_simple_name ] ;


Das "is" ist unnötig, aber nicht verboten.
Dein Modelsim irrt.

von FPGAküchle (Gast)


Lesenswert?

#>Das "is" darf da nicht stehen.

#O doch, das darf es schon. Ich habe hier den IEEE-1076-Standard, also
#die VHDL-Spezifikation, die 2000er und 2002er-Ausgabe, und da steht
#folgendes:

Man kann dem modelsim sagen nach welchen standard (VHDL-87 (?) VHDL-93
oder VHDL-2002) es compilieren soll.

IMHO ist das "is" ab -93 drin, vorher nicht. Schau also das die
compileroptionen nicht auf 87
Standard stehen.

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.