Forum: FPGA, VHDL & Co. argumente übergeben


von Bernhard F. (zoidberg)


Lesenswert?

Hallo,

ich hab ein kleines problem mit concurrent Procedures.

ich hab in einem package zwei procedures.die eine ist überladen mit der 
anderen.

die deklarationen sehen so aus

procedure A (
    signal   in      : in  std_logic;
    signal   ctrl       : in  std_logic_vector(2 downto 0);
    signal   out     : out std_logic);

procedure A (
    signal   in     : in  std_logic_vector;
    signal   ctrl       : in  std_logic_vector(2 downto 0);
    signal   out     : out std_logic_vector;
    constant   vector : in  integer range 0 to 31);

jetzt füge ich gleich am begin der Architecture den procedure call 
ein..daher wird das ganze ja eine concurrent procedure (also ein ganz 
normaler process)

bei procedure A geht das auch problemlos!
wenn ich aber jetzt B verwenden will... um das ganze generisch zu machen 
habe ich folgendes problem.

im body der überladenen procedure A mache ich einfach folgendes.

 A(in => in(vector), ctrl  => ctrl, out => out(vector));

was eigentlich eine ganz simple signal zuweisen wäre...

als fehler bekomme ich von modelsim

Actual (indexed name) for formal "out" is not a static signal name.
genau so bei "in"

der witz an der Sache ist das wenn ich das Bit des Vector hard-code 
gehts (eh klar)
hab auch schon mit signal oder variable versucht.
komme aber auf kein ergebniss.

hüfe :)

von Jan M. (mueschel)


Lesenswert?

in und out sind reservierte Woerter in VHDL und duerfen deswegen nicht 
als Signalnamen verwendet werden.

Ausserdem muessen Portzuweisungen bei der Synthese fest liegen und 
duerfen nicht von irgendeinem veraenderlichen Signal (vector) abhaengen. 
Du musst daher noch zusaetzlich fuer jedes Signal einen Multiplexer 
beschreiben.

von Bernhard F. (zoidberg)


Lesenswert?

das mit in,out war jetzt ein fehler.. das hab ich nur schnell getippt. 
die heissen sowieso anders.. war nur zur veranschaulichung.

es ist doch aber möglich das so zu machen. hab das auch in vielen 
bespielen zu generizität gesehen.
bei der synthese baut er das dann automatisch um un die entsprechende 
vector-größe

es macht ja keinen sinn für die vector-größen von 0 bis XXX alle 
procedures neu zu deklarieren. in den standard libs von VHDL wird das ja 
auch so gehandhabt dass nur der typ angegeben wird und keine größe.

von Jan M. (mueschel)


Lesenswert?

Bernhard Fuchs wrote:
> es ist doch aber möglich das so zu machen. hab das auch in vielen
> bespielen zu generizität gesehen.
> bei der synthese baut er das dann automatisch um un die entsprechende
> vector-größe

Vektorgroesse ja - nicht aber Auswahl eines bestimmten Signals, sofern 
das nicht schon bei der Synthese fest steht - Die Groesse eines Vektors 
muss ja auch schon vorher bekannt sein und kann nicht erst im laufenden 
Design festgelegt werden.

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.