Problem bei Vivado-SIM - generic

Gast #7618245
Lesenswert?

Wir haben ein Problem mit einer Xilinx Vivado Simulation. Ein generic in einer entity wird nicht akzeptiert / richtig verarbeitet.

Die Komponente und das mapping wurden genutzt, wie im VHO vorgezeichnet. Es synthetisiert durch und compiliert und simuliert wohl auch in Modelsim. Modelsim meldet jedenfalls keinen compile error. Simuliert wird in VHDL.

Das ist der Teil der Komponente:

1
component serializer_pci
2
generic
3
 (-- width of the data for the system
4
  SYS_W       : integer := 1;
5
  -- width of the data for the device
6
  DEV_W       : integer := 4);
7
port
8
 (
9
  -- From the system into the device
10
  data_in_from_pins_p     : in    std_logic_vector(  SYS_W-1 downto 0);         -- PIN INPUT
11
  data_in_from_pins_n     : in    std_logic_vector(  SYS_W-1 downto 0);         -- PIN INPUT
12
  data_in_to_device       : out   std_logic_vector(  DEV_W-1 downto 0);         -- DATA OUTPUT
13
   ....

und das das mapping:

1
pci_input : serializer_pci
2
   port map 
3
   ( 
4
   data_in_from_pins_p  => pci_in_from_pins_p,
5
   data_in_from_pins_n  => pci_in_from_pins_n,
6
   data_in_to_device    => pci_in_to_device,
7
   ....

Die beiden von Xilinx vorgezeichneten Werte SYS_W und DEV_W werden nicht erkannt. Auch wenn die generics gesetzt werden, bleibt der Fehler.

Wenn man probiert, die genrics rauszunehmen und es manuell zu setzen, entstehen Inkompatibilitäten zur Komponente im IP-Verzeichnis.

Wo steckt da der Fehler?

#7618269
Lesenswert?

Welche IP?

Welche Vivado Version?

Wo ist die Komponente definiert (in entity oder package)?

Woran merkst du, dass die generics nicht erkannt werden (Fehlermeldung)?

Wie sieht der Synthesereport aus, gibt es evtl. Warnungen?

A. F. schrieb:

Wenn man probiert, die genrics rauszunehmen und es manuell zu setzen,

Wie meinst du das? Wo nimmst du was raus und wie setzt du die generics?

Gast #7618280
Lesenswert?

Select IO IP, Input Serializer, die Komponenten und das Mapping 1:1 vom *VHO kopiert, Xilinx 2023.2, Behave SIM,

Komponente in VHO des IP verzeichnisses definiert Komponente ausdrücklich als component im file referenziert

Fehlermeldung "pass Though Synthesizer": [VRFC 10-3146] binding entity "serializer_pci" does not have generic "sys_w" [VRFC 10-3146] binding entity "serializer_pci" does not have generic "dev_w"

Mapping mit generics:

Das Problem besteht wie gesagt nur in der Simulation und nur in Vivado.

#7618679
Lesenswert?

Ah Simulation, ich habe Synthese gelesen.

Was passiert, wenn du die IP als Verilog erzeugst und einbindest? Sind die generics in der erzeugten Verilog-IP auch groß geschrieben?

Bei der Fehlermeldung sticht mir erstmal die Kleinschreibung der generics ins Auge. Für VHDL egal, aber evtl. wird das irgendwo intern auf Verilog gemappt? Ist da evtl. eine default Xilinx-lib eingebunden und es versucht doch, die Komponente da her zu nehmen?

#7618817
Lesenswert?

Ist das Post-Mapping-Simulation?

Da gab es einen uralten Bug in XSIM, der m.W. nie richtig gefixt werden wollte. Bin wegen solcher Maetzchen (schon in isim) auf GHDL umgestiegen, da hat man allerdings andere Probleme, die man im Graubereich umschiffen muss. Was aber funktionieren sollte, ist eine 'work' Instanzierung a la

1
inst: entity work.unit generic map (...)

Und die angesprochene Verilog-Problematik von Markus mit case-sensitiv versus case-ignorant ist mir auch schon untergekommen, das schlaegt beim 'late binding' von black- oder auch white-Boxen gerne mal zu, drum: mit obiger Instanzierungsweise vermeidet sich das.

Gast #7622386
Lesenswert?

Leider hat es nichts mit Gross-Schrift zu tun, das hatten die Entwickler schon probiert.

Das direkte Instanziieren wurde auch probiert, führte aber nicht zum Erfolg. Die Komponente wird gefunden, das Meckern über angeblich unbekannte Variablen in generics bleibt.

Mir ist es nicht erklärlich, dass die eine SW das braucht und die andere nicht. Hat da bei Xilinx wieder jemand eine Warning defaultmäßig zum Fehler erhoben? Oder fehlt etwas und wir sehen nur die warning im ModelSim nicht?

Kann es sein, dass diese Variablenwerte irgendwo nochmals zu Beginn des Codes definiert und belegt werden müssen / können / sollen?

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