www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Problem mit counter


Autor: Sebastian J. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!

Autor: Sebastian J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... es handelt sich um VHDL Code :o)

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Sebastian J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: Sebastian J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
korrekt, Signalzuweisungen immer mit <= und Variablen mit :=

Autor: Sebastian J. (Gast)
Datum:

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

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.