Forum: FPGA, VHDL & Co. Problem bei Vivado-SIM - generic


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 A. F. (chefdesigner)


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?

von Markus W. (mwww)


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?

von A. F. (chefdesigner)


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.

von Markus W. (mwww)


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?

von Martin S. (strubi)


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.

von A. F. (chefdesigner)


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?

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.