www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Probleme mit Warnmeldung


Autor: Michael (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi @ all

Ich habe ein VHDL-Programm geschrieben. Die Simulation war sehr
erfolgreich und ein Fehler wurde bei der Synthese auch nicht entdeckt.
Jedoch kommen beim Routen Warnmeldungen die mich beunruhigen.

WARNING:Par:276 - The signal AD_Converter_Modul/add_10/cout has no
load
WARNING:Par:276 - The signal Create_Bit_Stream_Modul/add_197/cout has
no load
WARNING:Par:276 - The signal Create_Bit_Stream_Modul/add_89/cout has no
load
WARNING:Par:276 - The signal Create_Bit_Stream_Modul/add_232/cout has
no load

Das Problem ist, das die Signale andersheißen und ich somit nicht  weiß
wo die Fehler liegen.

Kann mir jemand einen Tip geben?

Grüsse

Michael

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit was für einem Programm hast du synthetisiert? Ich bekomme noch
diverve Fehlermeldungen, wenn ich die Datei durch die ISE laufen lassen
will...

Gruß Jörn

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Projekt ist mit Protel DXP 2004 erstellt worden. Dies ist auch nur ein
Teil des Programms.

Konnte den Fehler selber beheben. Durch das neue Service Pack 4 ist ein
neuer Synthesizer "Altium Synthesizer" hinzugekommen. Mit diesem
werden die Warnungen angezeit. Benutze ich jedoch den Alten Synthesizer
"DXP Synthesizer" dann werden die Warnungen nicht mehr angezeigt.
Vielleicht ist es ja noch ein Bug der behoben werden muss.

Grüsse

Michael

Autor: Ines (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael,

also einen groben Fehler habe ich schon in Deinem Code gesehen, aber
ich weiß nicht, ob der irgendwas mit den Fehlermeldungen zu tun hat.

Bei einem "ge-clock-ten" Prozess, erkennbar an:
  ... elsif(CLK'event and CLK = '1')then ...
, steht in der sensitivity list nur Clock und die Reset-Bedingung, also
z.B. bei Deinem 2. Prozess:
  process (CLR,CLK)
und NICHT
  process (CLR,CLK,GATE,S_RESET,S_ONE_TIME,S_RESET_CONFIG)

Gruß
Ines

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube nicht das dies richtig ist. In dieser Liste müssen alle
Eingänge und Signale, die an den Prozess übergeben werden aufgelistet
sein. Ansonsten funktioniert dies nicht.

Wo hast Du denn eigentlich diese Information her?

Grüsse Michael

Autor: Ines (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich programmiere halt schon eine Weile in VHDL. Es ist so, in der
sensitivity list müssen sie Signale aufgelistet werden, bei deren
Änderung der Prozess abgearbeitet werden soll. Und wann willst Du
arbeiten? Bei Clear oder bei einer steigenden Clock-Flanke unabhängig
davon, was die anderen Signale tun.

Ines

Autor: high_speed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael

In der „sensitivity list“ brauchen nur die Signale / Eingänge
aufgelistet werden, die in dem Prozess ein Ereignis auslösen.
Es können auch alle Signale aufgelistet werden, dass ist im übrigen
aber nicht gerade sinnvoll, da bei jeder Änderung eines dieser Signale
der Prozess im Simulator abgearbeitet wird.

Für die Synthese hat diese Liste keine Bedeutung, da das
Synthesewerkzeug aus der Beschreibung die spätere logische Verknüpfung
bilden muss.

MfG
Holger

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nur ein gut gemeinter Rat:

Du hast in Deinem Design 3 Signale, die asynchrone
Set / Reset Aktionen durchführen:

CLR
RESET_ADC_A
GATE

Diese werden immer wieder in anderen Kombinationen
abgefragt, teilweise auch auf unterschiedliche Pegel.
Ich weiss nicht wo die Signale herkommen und wie
schnell das Timing ist, aber sowas kann durchaus
zu Fehlern führen, an denen man wochenlang rumsucht.

Idealerweise sollte max. 1 asynchroner Reset vorhanden
sein, der dann entweder IMMER auf 1 oder IMMER auf 0
abgefragt wird (was anderes ergibt auch wenig Sinn)

Vielleicht kannst Du das Rücksetzen der Register in den
vielen Prozessen synchron machen, das könnte mögl. viel
Ärger ersparen
(in einer funktionalen Simulation sieht man die Probleme nicht)

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst einmal vielen Dank für die Tips. Habe wieder etwas dazu gelernt.
:-)

Zu den asynchronen Resets: Bei mir muss die Logik an unterschiedlichen
Stellen zurückgesetzt werden. Deshalb benutze ich 3 Resets. Diese
werden nicht asynchrone ausgeführt, sondern werden von einem  anderen
Prozess, den ich nicht mit angegeben habe, synchrone erzeugt. Ich
dachte das dies einfacher ist.

Grüsse

Michael

Autor: Ines (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael,

also meiner Meinung nach wäre es wie folgt schöner (am Beispiel Deines
1. Prozesses):

  process (CLR,CLK)
  begin
    if(CLR = '1' or Gate = '0')then
      S_ONE_TIME <= '0';
    elsif(CLK'event and CLK = '1')then
      if(Gate = '0')then
        S_ONE_TIME <= '0';
      else
        if(S_REGB(17) = '1')then
          S_ONE_TIME <= '1';
        end if;
      end if;
    end if;
  end process;

Wobei CLR ein asynchroner Reset wäre und Gate ein synchroner, den Du
aber nicht schon vorher mit einem anderen Prozess erzeugst.

Ines

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Ines
genau so habe ich das gemeint :-))

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FPGA User vielleicht hast Du ein Headset dann kann man sich über Skype
oder ICQ besser unterhalten.

Ich werde mal einen Account einrichten und es wäre super geil wenn wir
dann mal eine Konferenzschaltung aufmachen könnten. :-)

Grüsse Michael

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
process (CLR,CLK)
  begin
    if(CLR = '1' or Gate = '0')then
      S_ONE_TIME <= '0';
    elsif(CLK'event and CLK = '1')then
      if(Gate = '0')then
        S_ONE_TIME <= '0';
      else
        if(S_REGB(17) = '1')then
          S_ONE_TIME <= '1';
        end if;
      end if;
    end if;
  end process;

Das lässt sich vereinfachen, da im synchronen Clock Bereich Gate
niemals == '0' sein kann:

  process (CLR,CLK)
  begin
    if(CLR = '1' or Gate = '0')then
      S_ONE_TIME <= '0';
    elsif(CLK'event and CLK = '1')then
      if(S_REGB(17) = '1')then
        S_ONE_TIME <= '1';
      else
        S_ONE_TIME <= '0';
      end if;
    end if;
  end process;

Bei der if Abfrage S_REGB(17) implementiere ich nach Möglichkeit immer
beide If Zweige, sprich den If Part und auch else Part.
Diese If Abfrage kann eventl. vereinfacht werden:

  S_ONE_TIME <= S_REGB(17);

Allerdings wird dies zu einem anderen Fitting führen und je nach dem
entweder besser oder schlechter im Resoucenverbrauch sein und sich
ebenfalls das Gesatmtiming verändern.

gruß hagen

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.