Quartus Prime Lite Failed to find INSTANCE

Gast #6303097
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:
1
-- ADC reader: reads data from ADXL345
2

3
library ieee;
4
use ieee.std_logic_1164.all;
5
use ieee.numeric_std.all;
6

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

12
  -- SPI interface
13
  CS_N : out std_logic;   -- connected to chip select of g sensor
14
  SCLK : out std_logic;   -- spi clock
15
  SDIO : inout std_logic; -- spi data (bidirectional)
16
    
17
  -- data output
18
  dataX : out std_logic_vector(12 downto 0);
19
  dataY : out std_logic_vector(12 downto 0);
20
  dataZ : out std_logic_vector(12 downto 0)
21
);
22
end g_reader;
23

24

25
architecture behavior of g_reader is
26
  signal SCLK_counter : integer := 0;     -- starts clock
27
  signal SCLK_1 : std_logic;           -- 1 MHz clock
28
    
29
  constant half_period : time := 10 ns;
30
  
31
begin
32
  
33
  -- SCLK
34
  process(clk_50)
35
  begin
36
    
37
    if (falling_edge(clk_50)) then
38
    
39
      if (SCLK_counter <= 24) then
40
        SCLK_1 <= '0';
41
      else 
42
        SCLK_1 <= '1';
43
      end if;
44
      
45
      if (SCLK_counter >= 49) then
46
        SCLK_counter <= 0;
47
      else
48
        SCLK_counter <= SCLK_counter + 1;
49
      end if;
50
    
51
    end if;
52
    
53
  end process;
54
  
55
  CS_N <= '0';
56
  SCLK <= '0';
57
  dataX <= "0000000000000";
58
  dataY <= "0000000000000";
59
  dataZ <= "0000000000000";
60
  
61
  
62
end behavior;
1
LIBRARY ieee;                                               
2
USE ieee.std_logic_1164.all;
3

4
ENTITY g_reader_vhd_tst IS
5
END g_reader_vhd_tst;
6
ARCHITECTURE g_reader_arch OF g_reader_vhd_tst IS
7
-- constants     
8
constant half_period : time := 10 ns;                                            
9
-- signals              
10
signal clk : std_logic := '0';                                     
11
SIGNAL clk_50 : STD_LOGIC;
12
SIGNAL CS_N : STD_LOGIC;
13
SIGNAL dataX : STD_LOGIC_VECTOR(12 DOWNTO 0);
14
SIGNAL dataY : STD_LOGIC_VECTOR(12 DOWNTO 0);
15
SIGNAL dataZ : STD_LOGIC_VECTOR(12 DOWNTO 0);
16
SIGNAL reset_n : STD_LOGIC;
17
SIGNAL SCLK : STD_LOGIC;
18
SIGNAL SDIO : STD_LOGIC;
19
COMPONENT g_reader
20
  PORT (
21
  clk_50 : IN STD_LOGIC;
22
  CS_N : OUT STD_LOGIC;
23
  dataX : OUT STD_LOGIC_VECTOR(12 DOWNTO 0);
24
  dataY : OUT STD_LOGIC_VECTOR(12 DOWNTO 0);
25
  dataZ : OUT STD_LOGIC_VECTOR(12 DOWNTO 0);
26
  reset_n : IN STD_LOGIC;
27
  SCLK : OUT STD_LOGIC;
28
  SDIO : INOUT STD_LOGIC
29
  );
30
END COMPONENT;
31
BEGIN
32
  i1 : g_reader
33
  PORT MAP (
34
-- list connections between master ports and signals
35
  clk_50 => clk_50,
36
  CS_N => CS_N,
37
  dataX => dataX,
38
  dataY => dataY,
39
  dataZ => dataZ,
40
  reset_n => reset_n,
41
  SCLK => SCLK,
42
  SDIO => SDIO
43
  );
44
init : PROCESS                                               
45
-- variable declarations                                     
46
BEGIN                                                        
47
        -- code that executes only once                      
48
WAIT;                                                       
49
END PROCESS init;    
50
                                       
51
clk_proc : process  
52
begin                            
53
  clk <= not clk after half_period;
54
end process clk_proc;         
55
                                 
56
end g_reader_arch;

Danke im Voraus.

Grüße
Jonas
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #6303153
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:
1
-- list connections between master ports and signals
2
  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:
1
:
2
-- clk_proc : process  
3
-- begin                            
4
clk <= not clk after half_period; -- nebenläufig ganz ohne Prozess geht's auch
5
-- end process clk_proc;    
6
:
Angehängte Dateien:
#6303226
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.
#6303459
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:
>
1
> -- list connections between master ports and signals
2
>   clk_50 => clk,
3
>
> 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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren