Forum: FPGA, VHDL & Co. VHDL Integer In einer If Abfrage


von Klaus (Gast)


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.

von Schlumpf (Gast)


Lesenswert?

Es heißt eigentlich

process
begin


und nicht

begin
process

von Alexander F. (alexf91)


Lesenswert?

Wenn "delay" ein Signal ist, dann musst du außerdem mit "delay <= 5" 
zuweisen.
Ansonsten musst du die Variable noch zwischen process und begin 
deklarieren.

von Klaus (Gast)


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 ?

von Alexander F. (alexf91)


Lesenswert?

So wie Schlumpf bereits geschrieben hat:
"process begin" anstatt "begin process"

Die if-Abfrage sollte eigentlich passen.
Ohne default-Zuweisung wird da aber ein Latch synthetisiert.

von Schlumpf (Gast)


Lesenswert?

Alexander F. schrieb:
> Ohne default-Zuweisung wird da aber ein Latch synthetisiert.

Genaugenommen sogar 5 Latches ;-)

von Thomas R. (Firma: abaxor engineering) (abaxor)


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

von Leonard Lebewohl (Gast)


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.

von Thomas R. (Firma: abaxor engineering) (abaxor)


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

von Leonard Lebewohl (Gast)


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

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.