Forum: FPGA, VHDL & Co. Vivado synth error "subprogram body is not allowed in package declaration"


von dfIas (Gast)


Lesenswert?

Moin zusammen!
Ich versuche gerade, VHDL-Sourcecode, der auf der ISE Design Suite 14.7 
anstandslos läuft, auf Vivado 2022.1 anzupassen. Die Synthese meckert 
dort über folgendes:
[Synth 8-4665] subprogram body is not allowed in package declaration
In dem Package steht:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.all;
3
use IEEE.NUMERIC_STD.all;
4
5
package reg_package is
6
  -- type.major.minor.build (8.8.8.8)
7
  constant VERSION_INFO  : std_logic_vector (31 downto 0) := x"07010b01";
8
9
  [...]
10
11
  function fRand (d1 : std_logic_vector) return std_logic_vector is
12
  begin
13
    return '0' & d1 (29 downto 0) & (d1 (30) xnor d1 (27));
14
  end fRand;
15
end reg_package;
Ich finde unter Vivado leider keine Einstellungen für den Synthesizer, 
wie bspw. unter ISE. Unter Project/Settings gibt es nur ein paar 
rudimentäre Dinge wie Fanout, wie viel BRAM etc.
Wo lässt sich unter Vivado denn hier was verstellen, z. B. den "VHDL 
Source Analysis Standard"? Unter ISE wird aber sowohl mit VHDL-93, als 
auch mit VHDL-200X nichts moniert. Vermutlich ist eine andere Option 
nötig?
Danke vorab für Hinweise!

von Pat A. (patamat)


Lesenswert?

Die Implementierung der Funktion in den Package-Body verschieben, dann 
funktioniert es überall:
1
package reg_package is
2
  -- type.major.minor.build (8.8.8.8)
3
  constant VERSION_INFO  : std_logic_vector (31 downto 0) := x"07010b01";
4
5
  [...]
6
7
  function fRand (d1 : std_logic_vector) return std_logic_vector;
8
9
end package reg_package;
10
11
12
package body reg_package is
13
14
  function fRand (d1 : std_logic_vector) return std_logic_vector is
15
  begin
16
    return '0' & d1 (29 downto 0) & (d1 (30) xnor d1 (27));
17
  end fRand;
18
19
end package body reg_package;

: Bearbeitet durch User
von dfIas (Gast)


Lesenswert?

Ja, so geht's - besten Dank!

PS: Dann lässt ISE etwas zu, dass eigentlich nicht erlaubt ist?

von Abgesang (Gast)


Lesenswert?

Tcl commando read_vhdl erlaubt eine Umschaltung auf VHDL2008

https://docs.xilinx.com/r/en-US/ug835-vivado-tcl-commands/read_vhdl

Bei der Clickkacki-oberfläche mal im Filebrowser unter properties o.ä. 
nach VHDL-Varainten suchen. Eventuell gibt es da auch eine extra Datei 
wo alle sourcedateien genannt werden mit eine Spalte in der die 
Sprachvariante steht.

Falls der VHDL-Code nicht handgeschrieben sondern generiert ist mal beim 
Generator nach der passenden Option suchen, ggf das ganze als verilog 
rausschreiben lassen.

von dfIas (Gast)


Lesenswert?

Pat A. schrieb:
> Die Implementierung der Funktion in den Package-Body verschieben, dann
> funktioniert es überall:
Sorry, ich war eben etwas zu schnell. Das File mit dem Package wird zwar 
jetzt verdaut, jedoch gilt die Funktion "fRand" dort, wo sie aufgerufen 
wird, als nicht deklariert.

von dfIas (Gast)


Lesenswert?

Abgesang schrieb:
> Tcl commando read_vhdl erlaubt eine Umschaltung auf VHDL2008
Man kann jede einzelne Sourcedatei einem Typ zuordnen. Standen auf 
"VHDL" und ich versuche das mal mit "VHDL-2008" ... ändert aber leider 
nichts. :(

von Pat A. (patamat)


Lesenswert?

dfIas schrieb:
> jedoch gilt die Funktion "fRand" dort, wo sie aufgerufen
> wird, als nicht deklariert.

Hast Du die Funktion auch im Package (nicht im Body) deklariert und auch 
das Package eingebunden?

von dfIas (Gast)


Lesenswert?

Pat A. schrieb:
> Hast Du die Funktion auch im Package (nicht im Body) deklariert und auch
> das Package eingebunden?
Oh, in der Tat. Hatte zuviel rausgeschmissen. Jetzt geht's wirklich! :)

von J. S. (engineer) Benutzerseite


Lesenswert?

dfIas schrieb:
> o lässt sich unter Vivado denn hier was verstellen, z. B. den "VHDL
> Source Analysis Standard"? Unter ISE wird aber sowohl mit VHDL-93, als
> auch mit VHDL-200X nichts moniert.

Abgesehen von dem Problem oben, lassen sich die Sourcen einzeln 
markieren: Dazu die Sourcec anklicken und unten bei "Eigenschaften im 
Fester", wo die Zuordnung zu dem Set (Synthese / Simulation) erfolgt, 
die VHDL-Version einstellen. Im oberen Window der Sourcen, wo "LIB" 
steht, tauchen die dann entsprechend auf.

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.