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.
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.
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 ?
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.
Alexander F. schrieb: > Ohne default-Zuweisung wird da aber ein Latch synthetisiert. Genaugenommen sogar 5 Latches ;-)
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
>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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.