Forum: FPGA, VHDL & Co. Binding entity XYZ does not have generic ABC bei Post-Route-Simulation


von Manuel W. (other)


Lesenswert?

Hallo,

ich versuche eine Post-Route Simulation durchzuführen, aber der XILINX 
ISE bringt mir folgende Fehlermeldung innerhalb der Testbench:

ERROR:HDLCompiler:244 - "...\CoridcCore_TB.vhd" Line 56: Binding entity 
cordiccore does not have generic integerbits

Die Verhaltenssimulations läuft problemlos durch.

Hier mal ein Auszug:
1
ENTITY CordicCore_TB IS
2
END CordicCore_TB;
3
 
4
ARCHITECTURE behavior OF CordicCore_TB IS 
5
 
6
    -- Component Declaration for the Unit Under Test (UUT)
7
    
8
    constant CIntegerBits   : integer := 4;  
9
    constant CFractionalBits: integer := 16; 
10
 
11
    COMPONENT CordicCore
12
    
13
    generic(
14
      -- Vorkomma-Bits (ohne Vorzeichen)
15
      IntegerBits     : integer := 3;  
16
      -- Nachkomma-Bits
17
      FractionalBits  : integer := 16
18
    );
19
  
20
  
21
    PORT(
22
         Xi : IN  signed(CIntegerBits + CFractionalBits downto 0);
23
         Yi : IN  signed(CIntegerBits + CFractionalBits downto 0);
24
         Zi : IN  signed(CIntegerBits + CFractionalBits downto 0);
25
         CordicMode : IN  std_logic;
26
         CoordinateMode : IN  std_logic;
27
         Xo : OUT  signed(CIntegerBits + CFractionalBits downto 0);
28
         Yo : OUT  signed(CIntegerBits + CFractionalBits downto 0);
29
         Zo : OUT  signed(CIntegerBits + CFractionalBits downto 0)
30
        );
31
    END COMPONENT;
32
33
   --Inputs
34
   signal Xi : signed(CIntegerBits + CFractionalBits downto 0) := (others => '0');
35
   signal Yi : signed(CIntegerBits + CFractionalBits downto 0) := (others => '0');
36
   signal Zi : signed(CIntegerBits + CFractionalBits downto 0) := (others => '0');
37
   signal CordicMode : std_logic := '0';
38
   signal CoordinateMode : std_logic := '0';
39
40
   --Outputs
41
   signal Xo : signed(CIntegerBits + CFractionalBits downto 0);
42
   signal Yo : signed(CIntegerBits + CFractionalBits downto 0);
43
   signal Zo : signed(CIntegerBits + CFractionalBits downto 0);
44
BEGIN
45
46
   -- Instantiate the Unit Under Test (UUT)
47
   uut: 
48
   CordicCore
49
   generic map (
50
     IntegerBits => CIntegerBits, 
51
     FractionalBits => CFractionalBits,
52
     InputAdjustment => true,
53
     OutputAdjustment => oamHardwareMultiplier)      
54
   PORT MAP (
55
          Xi => Xi,
56
          Yi => Yi,
57
          Zi => Zi,
58
          CordicMode => CordicMode,
59
          CoordinateMode => CoordinateMode,
60
          Xo => Xo,
61
          Yo => Yo,
62
          Zo => Zo
63
        );
64
65
   -- Stimulus process
66
   stim_proc: process
67
   begin  
68
      CordicMode     <= '0';
69
      CoordinateMode <= '1';
70
      Xi <= RealToFixSigned(1.0, CIntegerBits, CFractionalBits);
71
      Yi <= RealToFixSigned(0.0, CIntegerBits, CFractionalBits);
72
      Zi <= RealToFixSigned(0.5, CIntegerBits, CFractionalBits);
73
      
74
      wait for 200 ns;  
75
76
      Zi <= RealToFixSigned(1.5, CIntegerBits, CFractionalBits);
77
      
78
      -- insert stimulus here 
79
80
      wait;
81
   end process;

Das ist eine speziell für das Problem angelegte Testbench. Ich habe mir 
bis jetzt so geholfen, dass ich ein Testbench-Package mit Konstanten 
deklariere und die Generics der Top-Levels-Entity via Kommandozeile 
setze.

Gibt es eine bessere Möglichkeit, um über die Testbench die Generics des 
Top-Levels-Entities für die Verhaltens- und Post-Route-Simulation zu 
setzen?


Grüße Manuel.

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


Lesenswert?

Manuel W. schrieb:
> ich versuche eine Post-Route Simulation durchzuführen
Warum? Wofür?
Das FPGA-Timing überprüft man mit der statischen Timinganalyse, und 
vorher gibt man sinnvolle Constraints an...

von Manuel W. (other)


Lesenswert?

Hallo,

Lothar Miller schrieb:
> Manuel W. schrieb:
>> ich versuche eine Post-Route Simulation durchzuführen
> Warum? Wofür?
> Das FPGA-Timing überprüft man mit der statischen Timinganalyse, und
> vorher gibt man sinnvolle Constraints an...

Es geht nicht um die Timing-Analyse an sich, sondern nur, ob neben dem 
Verhaltensmodell auch die synthetisierte Schaltung richtig funktioniert.


Grüße Manuel.

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


Lesenswert?

Manuel W. schrieb:
> ob neben dem
> Verhaltensmodell auch die synthetisierte Schaltung richtig funktioniert.
Ich denke nicht, dass du das damit herausbekommst...

Du kannst da evtl. was beobachten, aber das ist immer noch viel zu 
weit von der realen Schaltung (incl. Leiterplatte und andere Bausteine) 
weg, als dass sich auch nur ansatzweise lohnen würde. Denn deine 
Simulation ist nur so gut wie deine simulierte Umgebung. Und: hast du 
von deiner Leiterplatte Laufzeiten ermittelt und kannst sie in die 
Simulation einbringen?

von Karl (Gast)


Lesenswert?

Manuel W. schrieb:
> Hallo,
>
> Lothar Miller schrieb:
>> Manuel W. schrieb:
>>> ich versuche eine Post-Route Simulation durchzuführen
>> Warum? Wofür?
>> Das FPGA-Timing überprüft man mit der statischen Timinganalyse, und
>> vorher gibt man sinnvolle Constraints an...
>
> Es geht nicht um die Timing-Analyse an sich, sondern nur, ob neben dem
> Verhaltensmodell auch die synthetisierte Schaltung richtig funktioniert.
>
>
> Grüße Manuel.

Ich weiß nicht genau in wiefern das bei FPGA-Implementierungen ala ISE 
oder Quartus möglich ist, aber ich für meinen Teil (ASIC-Entwicklung) 
mache sowas seit längerem über logische Equivalenzvergleiche (Synopsys 
Formality oder Cadence LEC). Das geht verhältnismässig schnell und 
erspart jegliche Arten von Timing-Simulation.

Drei Mal mache ich das ganze:
1. VHDL <=> Unoptimierte Netzliste nach Synthese
2. Unoptimierte Netzliste <=> Optimierte Netzliste
3. Optimierte Netzliste <=> P&R

von Manuel W. (other)


Lesenswert?

Hallo Karl,

Karl schrieb:
> Manuel W. schrieb:
>> Hallo,
>>
>> Lothar Miller schrieb:
>>> Manuel W. schrieb:
>>>> ich versuche eine Post-Route Simulation durchzuführen
>>> Warum? Wofür?
>>> Das FPGA-Timing überprüft man mit der statischen Timinganalyse, und
>>> vorher gibt man sinnvolle Constraints an...
>>
>> Es geht nicht um die Timing-Analyse an sich, sondern nur, ob neben dem
>> Verhaltensmodell auch die synthetisierte Schaltung richtig funktioniert.
>>
>>
>> Grüße Manuel.
>
> Ich weiß nicht genau in wiefern das bei FPGA-Implementierungen ala ISE
> oder Quartus möglich ist, aber ich für meinen Teil (ASIC-Entwicklung)
> mache sowas seit längerem über logische Equivalenzvergleiche (Synopsys
> Formality oder Cadence LEC). Das geht verhältnismässig schnell und
> erspart jegliche Arten von Timing-Simulation.
>
> Drei Mal mache ich das ganze:
> 1. VHDL <=> Unoptimierte Netzliste nach Synthese
> 2. Unoptimierte Netzliste <=> Optimierte Netzliste
> 3. Optimierte Netzliste <=> P&R

das klingt interessant. Ich mache etwas ähnliches von Hand, in dem ich 
innerhalb der Testbenches Dateien generiere und in einer anderen 
Simulation (z.B. Post-Simulation) validiere.

Eine Post-Simulation wird für den FPGA verlangt. Diese wollte ich 
natürlich auch gerne möglichst anpassbar gestalten, um bei Änderungen 
keine Fehler zu machen.

Scheint aber wohl nicht so einfach möglich zu sein :-(.


Grüße Manuel.

von Harry (Gast)


Lesenswert?

Wieso hast du eigentlich bei der Komponenten-Deklaration zwei Generics,
aber bei der Instanziierung 4 Generics?

von Manuel W. (other)


Lesenswert?

Harry schrieb:
> Wieso hast du eigentlich bei der Komponenten-Deklaration zwei Generics,
> aber bei der Instanziierung 4 Generics?

Hey,

Copy + Paste-Teufel ;).

Wollte nicht zuviel VHDL reinschreiben. Real sind es 4 Generics - 
Vor-/Nachkommastellen, Eingangsstufe (an/aus) und Ausgangsstufe (aus, an 
mit Hardware-Multiplizierer, an mit "Konstanten"-Multiplizierer, an mit 
"Lookup-Konstanten"-Multiplizierer).


Grüße Manuel.

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.