VHDL Integer In einer If Abfrage

Gast #3359367
Lesenswert?

Hey, ich möchte innerhalt eines Prozesses eine if Abfrage mit einer 
Integer Variable (alternativ eines Integer Generic) machen.
Das ganze sieht atm so aus:

begin
  process
    if g_precision = 64 then
        delay    := 5;
    end if;
...

Nun sagt mir der Compiler folgendes : Syntax error near "if". Wie genau 
muss das aussehen, wenn die bedingung für das if eine Integer-Variable 
ist ? '64' und "64" funktionieren ebenso wenig :(

g_precision ist aktuell ein generic :
   generic (
        g_precision         : integer       := 32
    );
allerdings wenn ich daraus eine variable mache, z.B.
variable g_precision: Integer range 0 to 65 := 32;
funktioniert es genausowenig.

Kann mir jemand fix die korrekte Syntax geben ? Vielen dank schonmal.
Gast #3359407
Lesenswert?

delay ist eine Variable. Die ist auch dazwischen deklariert :) Ich hab 
das blos hier rausgenommen, weil dort noch tausend andere Sachen 
deklariert sind, die an der Stelle nur sinnlos Quelltext wären, weil sie 
mit dem Problem nichts zu tun haben.
variable delay: Integer range 0 to 30 := 14;
<-- so stehts noch drin
Aber das ändert ja am Problem nichts : wie mach ich die IF Abfrage einer 
Integer ?
Gast #3360181
Lesenswert?

>Schlumpf schrieb:
>> Alexander F. schrieb:
>>> Ohne default-Zuweisung wird da aber ein Latch synthetisiert.
>>
>> Genaugenommen sogar 5 Latches ;-)

>Ich hoffe nicht, denn


>> g_precision ist aktuell ein generic :
>>    generic (
>>         g_precision         : integer       := 32
>>     );

>das muss der Compiler erkennen und delay entsprechen initialisieren.

>Tom



Nein das ist keine Initilisierung sondern eine default-Zuweisung.
G-precision nimmt diesen wert an, wenn es nicht in einer generic map 
steht.

Mit dem Power Up Wert eines FF hat das wenig zu tun, und lathces baut 
nicht der compiler sondern das synthesetool. Und das ist 
architekturabhängig.
(Firma: abaxor engineering) #3360188
Lesenswert?

Leonard Lebewohl schrieb:
>>Schlumpf schrieb:
>>> Alexander F. schrieb:
>>>> Ohne default-Zuweisung wird da aber ein Latch synthetisiert.
>>>
>>> Genaugenommen sogar 5 Latches ;-)
>
>>Ich hoffe nicht, denn
>
>
>>> g_precision ist aktuell ein generic :
>>>    generic (
>>>         g_precision         : integer       := 32
>>>     );
>
>>das muss der Compiler erkennen und delay entsprechen initialisieren.
>
>>Tom
>
>
>
> Nein das ist keine Initilisierung sondern eine default-Zuweisung.
> G-precision nimmt diesen wert an, wenn es nicht in einer generic map
> steht.
>
> Mit dem Power Up Wert eines FF hat das wenig zu tun, und lathces baut
> nicht der compiler sondern das synthesetool. Und das ist
> architekturabhängig.

Ich habe nicht gesagt, dass sich bei dem Generic um eine Initialisierung 
handelt, sondern das delay initialisert wird. Du musst schon genau lesen 
und verstehen. Da g_precision ein Generic ist, wird die Bedingung

if g_precision = 64 then

immer oder nie wahr sein. Weil eben g_precision ein Generic ist, besteht 
auch keine Notwendigkeit Latche einzubauen.

Tom
Gast #3360230
Lesenswert?

Also bei
    if g_precision = 64 then
        delay    := 5;
    end if;

wird nur in einem Fall (42) delay zugewiesen. Und das ist auch keine 
Initialisierung, denn diese wird bei der deklaration gesetzt.

bspw:
variable v_gh integer := 42;

Schau doch mal in synthese style guide nach wie Latches vermieden 
werden.

MfG

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