Forum: FPGA, VHDL & Co. Problem mit counter


von Sebastian J. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

anbei findet ihr einen Programmschnitt für den beim kompilieren
folgende Fehlermeldung bzw. folgende Warnung ausgegeben wird:

<< Found 6Bit incrementor, 'un1_count[27:32]' >>

So richtig kann ich mit dieser Warnung nichts anfangen und hoffe auf
eure Erfahrungen :o)

Sollten mehr Infos meiner seits notwendig sein, einfach anfordern ...

Vielen Dank und Gruß Sebastian!

von Sebastian J. (Gast)


Lesenswert?

... es handelt sich um VHDL Code :o)

von Xenu (Gast)


Lesenswert?

"Found 6Bit incrementor, 'un1_count[27:32]'" ist weder ein Fehler,
noch eine Warnung.

Kann es sein dass Du falsche Zeile reinkopiert hast?

Und was für eine Software benutzt Du überhaupt?

von Sebastian J. (Gast)


Lesenswert?

Ich arbeite mit Libero IDE von Actel. Habe also auch ein Evo-board von
Actel.

Ich bin mir sicher, dass ich keine falsche Zeile hinein kopiert habe.
Da ich noch VHDL Anfänger bin, versuche ich alle Ausgaben nach dem
Kompilieren nachzuvollziehen ... bei o.g. Warnung gelingt mir das
allerdingsnicht.

von FPGA-User (Gast)


Lesenswert?

Hallo Sebastian,

abgesehen von der Meldung, die sich offenbar auf den
Counter bezieht (m.E. kein Problem),
was soll folgender Ausdruck bewirken:

... and busyadc<='0' ???

ich würde für den Counter auch ein Signal verwenden,
keine Variable.

von Sebastian J. (Gast)


Lesenswert?

...das signal kommt von meiner externen hardware. busy adc wird von
einem A/D converter ausgegeben, wenn die digitalen werte nach der
wandlung am ausgang anstehen. diese werte werden in den fpga
geschrieben, wenn der counter den wert 17 hat. busyadc ist nur eine
doppelte absicherung dafür, dass die werte wirklich am ausgang des ADC
anstehen. dieser benötigt für die A/D wandlung 14taktzyklen meines
grundtaktes, daher der counter.

warum wäre es besser auch ein signal für den counter zu verwenden? ich
denke, da ich mich auf meinen externe grundtakt beziehe ist das
taktsignal in verbindung mit der variablen count eine passende lösung.

letzten endes ???: ihr seid der meinung, die warnung kann ignoriert
werden ?

von FPGA-User (Gast)


Lesenswert?

Hallo,

ja ich denke, Du kannst die Meldung erstmal ignorieren.

Zum Thema Signal / Variable :
Wenn Du count als Variable deklarierst und nicht als Signal,
dann ist besondere Vorsicht geboten. Ich verwende deshalb
Variablen nur für Kombinatorik.
Das Problem ist (villeicht weisst Du es ja schon), dass
das Syntheseergebnis bei Variablen von der Reihenfolge abhängen
kann, in der Du Deinen Source-Code schreibst.
Hier ein kleines Beispiel :

         count := count +1; -- hier als erste Zeile
         if count = 0 then
            cnt_zero <= '1';
         else
            cnt_zero <= '0';
         end if;

lifert ein anderes Synthese-Ergebnis als :

         if count = 0 then
            cnt_zero <= '1';
         else
            cnt_zero <= '0';
         end if;
         count := count +1; -- jetzt am Ende hingeschrieben

Wers nicht glaubt, probiere es selbst aus.
In dem Beispiel wirkt es sich nur aufs Timing aus, aber auch
das kann schon lustige Effekte bringen.

Wenn man stattdessen count als Signal deklariert, dann ist es
egal, wo die Zeile
count <= count +1 im Prozess hingeschrieben wird -> immer dasselbe
Ergebnis bei der Synthese !

von Sebastian J. (Gast)


Lesenswert?

...ok, das ist ein überzeugendes argument für die definition von count
als signal.

zur syntax:

count<=count+1;

oder

count:=count+1;

macht das einen unterschied? obere syntax ist zu verwenden wenn count
ein signal und untere, wenn count eine variable?

von FPGA-User (Gast)


Lesenswert?

korrekt, Signalzuweisungen immer mit <= und Variablen mit :=

von Sebastian J. (Gast)


Lesenswert?

...darf denn ein aber signal vom typ integer sein? das erscheint mir
unlogisch?!

von FPGAküchle (Gast)


Lesenswert?

>...darf denn ein aber signal vom typ integer sein? das erscheint mir
unlogisch?!

Ja darf es, man sollte es allerdings auf den nötigen wertebereich
begrenzen.

Also statt
 SIGNAL  fetch_counter_q        : integer;

besser

 SUBTYPE FETCH_COUNTER_TYPE IS integer RANGE 63 DOWNTO 0;
    SIGNAL  fetch_counter_q        : FETCH_COUNTER_TYPE;

Sonst wird ein 32bit counter eingefügt.

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.