Forum: FPGA, VHDL & Co. Quartus Prime Lite Failed to find INSTANCE


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.
von Jonas (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hey,
eine Freundin und ich verzweifeln seit einigen Stunden an einer 
Fehlermeldung von Quartus Prime Lite:

Error (suppressible): (vsim-SDF-3250) 
Counter_6_1200mv_85c_vhd_slow.sdo(0): Failed to find INSTANCE '/i1'.

Error (suppressible): (vsim-SDF-3894) : Errors occured in reading and 
resolving instances from compiled SDF file(s).

Error (suppressible): (vsim-SDF-3250) 
Counter_6_1200mv_85c_vhd_slow.sdo(0): Failed to find INSTANCE '/i1'

Aber wir haben keine Ahnung woran das liegen könnte. Das *.bdf ist 
bereits die top entity, das ändert nichts am Bug. Gibt es vielleicht im 
Code ein Problem? Der Compiler läuft durch.

Der Code:
-- ADC reader: reads data from ADXL345

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

entity g_reader is port (
  clk_50: in std_logic;  -- 50 MHz clock
  
  reset_n : in std_logic; -- reset signal (active low)

  -- SPI interface
  CS_N : out std_logic;   -- connected to chip select of g sensor
  SCLK : out std_logic;   -- spi clock
  SDIO : inout std_logic; -- spi data (bidirectional)
    
  -- data output
  dataX : out std_logic_vector(12 downto 0);
  dataY : out std_logic_vector(12 downto 0);
  dataZ : out std_logic_vector(12 downto 0)
);
end g_reader;


architecture behavior of g_reader is
  signal SCLK_counter : integer := 0;     -- starts clock
  signal SCLK_1 : std_logic;           -- 1 MHz clock
    
  constant half_period : time := 10 ns;
  
begin
  
  -- SCLK
  process(clk_50)
  begin
    
    if (falling_edge(clk_50)) then
    
      if (SCLK_counter <= 24) then
        SCLK_1 <= '0';
      else 
        SCLK_1 <= '1';
      end if;
      
      if (SCLK_counter >= 49) then
        SCLK_counter <= 0;
      else
        SCLK_counter <= SCLK_counter + 1;
      end if;
    
    end if;
    
  end process;
  
  CS_N <= '0';
  SCLK <= '0';
  dataX <= "0000000000000";
  dataY <= "0000000000000";
  dataZ <= "0000000000000";
  
  
end behavior;


LIBRARY ieee;                                               
USE ieee.std_logic_1164.all;

ENTITY g_reader_vhd_tst IS
END g_reader_vhd_tst;
ARCHITECTURE g_reader_arch OF g_reader_vhd_tst IS
-- constants     
constant half_period : time := 10 ns;                                            
-- signals              
signal clk : std_logic := '0';                                     
SIGNAL clk_50 : STD_LOGIC;
SIGNAL CS_N : STD_LOGIC;
SIGNAL dataX : STD_LOGIC_VECTOR(12 DOWNTO 0);
SIGNAL dataY : STD_LOGIC_VECTOR(12 DOWNTO 0);
SIGNAL dataZ : STD_LOGIC_VECTOR(12 DOWNTO 0);
SIGNAL reset_n : STD_LOGIC;
SIGNAL SCLK : STD_LOGIC;
SIGNAL SDIO : STD_LOGIC;
COMPONENT g_reader
  PORT (
  clk_50 : IN STD_LOGIC;
  CS_N : OUT STD_LOGIC;
  dataX : OUT STD_LOGIC_VECTOR(12 DOWNTO 0);
  dataY : OUT STD_LOGIC_VECTOR(12 DOWNTO 0);
  dataZ : OUT STD_LOGIC_VECTOR(12 DOWNTO 0);
  reset_n : IN STD_LOGIC;
  SCLK : OUT STD_LOGIC;
  SDIO : INOUT STD_LOGIC
  );
END COMPONENT;
BEGIN
  i1 : g_reader
  PORT MAP (
-- list connections between master ports and signals
  clk_50 => clk_50,
  CS_N => CS_N,
  dataX => dataX,
  dataY => dataY,
  dataZ => dataZ,
  reset_n => reset_n,
  SCLK => SCLK,
  SDIO => SDIO
  );
init : PROCESS                                               
-- variable declarations                                     
BEGIN                                                        
        -- code that executes only once                      
WAIT;                                                       
END PROCESS init;    
                                       
clk_proc : process  
begin                            
  clk <= not clk after half_period;
end process clk_proc;         
                                 
end g_reader_arch;


Danke im Voraus.

Grüße
Jonas

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Jonas schrieb:
> Aber wir haben keine Ahnung woran das liegen könnte.
Im angehängten Code sollte zwar der clk dem clk_50 zugewiesen werden:
-- list connections between master ports and signals
  clk_50 => clk,
aber generell brauche ich zum Simulieren ausser den beiden Dateien keine 
wie auch immer geartete bdf Datei. Das Problem dürfte also vorrangig 
nicht im Code, sondern in der Projektverwaltung liegen.

BTW:
Du brauchst da keinen Prozess:
:
-- clk_proc : process  
-- begin                            
clk <= not clk after half_period; -- nebenläufig ganz ohne Prozess geht's auch
-- end process clk_proc;    
:

: Bearbeitet durch Moderator
von Jonas B. (holocron)


Bewertung
0 lesenswert
nicht lesenswert
Hey,
danke für die Antwort. Ich konnte das Problem jetzt halbwegs ausfindig 
machen, gemäß dieser Anleitung hier:
https://www.intel.com/content/www/us/en/programmable/support/support-resources/knowledge-base/solutions/rd05152000_7434.html

Allerdings steht da ich muss die SDF Files auswählen, aber im Ordner 
sind mehrere? Wenn ichs dann ausgewählt habe, kann ich auch irgendwie 
nicht "Ok" drüken.

von Jonas B. (holocron)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So sieht das bei mir aus. Ok ist ausgegraut.

von Markus F. (mfro)


Bewertung
0 lesenswert
nicht lesenswert
Lothar M. schrieb:
> Jonas schrieb:
>> Aber wir haben keine Ahnung woran das liegen könnte.
> Im angehängten Code sollte zwar der clk dem clk_50 zugewiesen werden:
>
> -- list connections between master ports and signals
>   clk_50 => clk,
> 
> aber generell brauche ich zum Simulieren ausser den beiden Dateien keine
> wie auch immer geartete bdf Datei. Das Problem dürfte also vorrangig
> nicht im Code, sondern in der Projektverwaltung liegen.
>
das ist wahrscheinlich tatsächlich der Grund, aber das hilft ihm jetzt 
nicht viel, Lothar.

Tatsächlich ist es so, dass Quartus (bzw. das dazugehörige ModelSim) in 
der Lite Edition keine (echte) mixed mode simulation unterstützt. 
Stattdessen wird aus der Netzliste "rückwärts" wieder eine (.vho) 
VHDL-Datei (die mit den ursprünglichen Quellen naturgemäss herzlich 
wenig zu tun hat) erzeugt, die ModelSim dann simulieren kann.

Meiner Meinung nach ist der Nutzen einer solchen Simulation für die 
Verifikation reichlich gering (weil man bei Fehlern schon ein gewisses 
Abstraktionsvermögen haben muss, um die anschliessend in den 
eigentlichen Quellen "reparieren" zu können).

Der eigentliche Grund für das Problem ist also in der (m.E. unnötigen) 
Realisierung des Toplevels als grafische .bsf Datei zu suchen. Warum 
wurde das so gemacht? Das Modell ist doch - so zumindest mein Eindruck - 
so simpel, dass das Toplevel problemlos in ein paar Zeilen 
hingeschrieben wäre?

Dann könnte ModelSim nämlich den "tatsächlichen" VHDL Code simulieren 
und  "plötzlich" würden auch Fehlermeldungen wieder Sinn ergeben.

von Jonas B. (holocron)


Bewertung
0 lesenswert
nicht lesenswert
Hey,
danke für die Antworten.

Markus F. schrieb:
> Dann könnte ModelSim nämlich den "tatsächlichen" VHDL Code simulieren
> und  "plötzlich" würden auch Fehlermeldungen wieder Sinn ergeben.
Ach so, könnte man also die testbench als top level nehmen? Weil dann 
sind alle Fehler weg :D

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Jonas B. schrieb:
> testbench als top level nehmen?
Für eine Simulation ist die Testbench der Toplevel.
Für die Synthese ist eine Testbench als Toplevel sinnlos, weil eine TB 
ja keine Ports hat und somit alles wegoptimiert wird.

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.