Vivado synth error "subprogram body is not allowed in package declaration"

Gast #7269087
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!
#7269106
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;
Gast #7269118
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.
Gast #7269123
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.
Persönliche Seite #7269519
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.

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