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


von Jonas (Gast)


Angehängte Dateien:

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

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
:

: Bearbeitet durch Moderator
von Jonas B. (holocron)


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:

Lesenswert?

So sieht das bei mir aus. Ok ist ausgegraut.

von Markus F. (mfro)


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.

von Jonas B. (holocron)


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. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von Jonas B. (holocron)


Lesenswert?

Hallo,
sorry für die späte Antwort, hatte zu viel um die Ohren.

Verstehe, vielen Dank für die Hilfe (es hat alles geklappt).

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.