Forum: FPGA, VHDL & Co. Flag auf falling_edge


von late_at_night (Gast)


Lesenswert?

Hallo zusammen,

es ist vielleicht schon spät und ich stehe etwas auf dem Schlauch (plus 
ich habe noch nicht all zu viel Erfahrung mit VHDL), aber ein scheinbar 
einfaches Problem bekomme ich nicht in den Griff.

Ich möchte einen Wert erst dann zuweisen, wenn das erste mal ein 
Flankenwechsel eines Steuersignals von '1' auf '0' statt gefunden hat.

Mal startete das Steuersignals auf '1', mal auf '0'. Mir ist es 
eigentlich egal, da ich bei Steuersignals = '1' erst etwas machen 
möchte, wenn vorher mindestens ein Flaneknwechsel von '1' auf '0' 
erkannt wurde.

Meine Idee daher:

signal flag : std_logic:='0';

if falling_edge(CS) then
 flag <='1';
end if;


if CS = '1' then
 if ... and flag= '1' then ...
 ...


Das Problem: nervende Warnungen, die ich gerne beseitigen möchte:

    WARNING:Xst:2404 -  FFs/Latches <_i000005<0:0>> (without init value) 
have a constant value of 1 in block <FPGA>.
WARNING:Xst:1426 - The value init of the FF/Latch flag hinder the 
constant cleaning in the block FPGA.
   You should achieve better results by setting this init to 1.
WARNING:Xst:1426 - The value init of the FF/Latch flag hinder the 
constant cleaning in the block FPGA.
   You should achieve better results by setting this init to 1.



Hat jemand eine Idee? Vielen Dank!

von Marius S. (lupin) Benutzerseite


Lesenswert?

Wo wird denn "flag" zurück gesetzt?

Ich würde den Wert z.B. "berechnen" wenn CS high ist. Über ein weiteres 
Signal latcht du den wert so lange bis eine fallende Flanke an CS 
anliegt.

Wenn die "Berechnung" des Wertes rein kombinatorisch ist kann es auch 
außerhalb des Prozesses beschrieben werden.
Falls nicht musst du die Sensitivity-List des Prozesses um die Eingänge 
erweitern (also z.B. um "CS" und "eingang").

So in der Art etwa:

signal wert : std_logic;

if falling_edge(CS) then
 ausgang <= wert;
end if;

if CS = '1' then
 wert <= eingang AND '1';
else
 wert <= '0';
end if;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Marius S. schrieb:
> Falls nicht musst du die Sensitivity-List des Prozesses um die Eingänge
> erweitern (also z.B. um "CS" und "eingang").
Da ist doch weit&breit kein Prozess zu sehen...
> So in der Art etwa:
Das ist ein Flipflop und ein Latch.

late_at_night schrieb:
> Ich möchte einen Wert erst dann zuweisen, wenn das erste mal ein
> Flankenwechsel eines Steuersignals von '1' auf '0' statt gefunden hat.
Was ist dein eigentliches Problem? Welche Taktfrequenz hast du? Wie oft 
und wie lange kommt der CS? Was wird mit diesem CS gemacht?

> if falling_edge(CS) then
Das sieht schon mal sehr verdächtig aus: warum ist CS ein Takt?
Für Anfänger gilt zum Thema Takt (analog zum Highlander):
es kann nur Einen geben!
Sobald 2 Takte auftauchen ist idR. irgendwas suspekt...

late_at_night schrieb:
> Meine Idee daher:
Ich würde es erst mal so probieren, wie es allgemein in einem synchronen 
Design üblich ist:  Einsynchronisieren und Flankenerkennung
(das waren jetzt Suchbegriffe das Forum hier oder für Google)

von late_at_night (Gast)


Lesenswert?

Es hat wunderbar funktioniert. Vielen Dank!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

late_at_night schrieb:
> Es hat wunderbar funktioniert.
Was? Die Sache mit dem Latch?

von Marius S. (lupin) Benutzerseite


Lesenswert?

Lothar Miller schrieb:
> Das ist ein Flipflop und ein Latch.

Was late_at_night beschrieben hat hörte sich auch genau wie ein Latch 
an:

late_at_night schrieb:
> Ich möchte einen Wert erst dann zuweisen, wenn das erste mal ein
> Flankenwechsel eines Steuersignals von '1' auf '0' statt gefunden hat.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Marius S. schrieb:
>> Das ist ein Flipflop und ein Latch.
> Was late_at_night beschrieben hat hörte sich auch genau wie ein Latch
> an:
Könnte sein, dass sie/er sich nicht im Klaren ist, was das für ein FPGA 
bedeutet.
Denn late_at_night schrieb:
> ich habe noch nicht all zu viel Erfahrung mit VHDL
Und das heißt für mich auch: ich habe nicht viel Erfahrung mit 
FPGAs/CPLDs. Da kann man sich schon mal ein Latch einfangen. Und weils 
so schön geklappt hat, so ein Latch das nächste Mal kombinatorich 
ansteuern. Und wehe, wenn dann ein Glitch kommt...

Kurz gesagt: diese Designstrategie schreit ganz laut "Ich bin Murks!"

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.