Forum: FPGA, VHDL & Co. Probleme mit Warnmeldung


von Michael (Gast)


Angehängte Dateien:

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

von Jörn (Gast)


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

von Michael (Gast)


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

von Ines (Gast)


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

von Michael (Gast)


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

von Ines (Gast)


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

von high_speed (Gast)


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

von FPGA-User (Gast)


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)

von Michael (Gast)


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

von Ines (Gast)


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

von FPGA-User (Gast)


Lesenswert?

@Ines
genau so habe ich das gemeint :-))

von Michael (Gast)


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

von Hagen (Gast)


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

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.