Forum: FPGA, VHDL & Co. Zuweisung im Concurrent Statement


von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

Hallo!

Ich verzweifele gerade über einem Design.
Mir stellt sich die Frage was bei folgender Concurrent Anweisung 
passiert, wenn in folgendem Schnipsel Code
1
AsymClockEnableCh1_s <= AsymClockEnable_s when conv_integer(ChannelCounter_s) = 1;
2
AsymClockEnableCh2_s <= AsymClockEnable_s when conv_integer(ChannelCounter_s) = 2;

der ChannelCounter_s z.B. den Wert 3 erreicht hat.
Behalten dann die Signale AsymClockEnableCh1_sund AsymClockEnableCh2_s 
Ihren Wert?



Gruß,

H

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

ja.
Edit: Oh, ich glaub ich muss mich korrigieren... Offenbar sucht sich das 
Synthesetool - in meinem Fall XST - aus, welchen Zustand 
AsymClockEnableCh1/2_s dann hat. Es gibt auch im Log eine Information 
aus, dass AsymClockEnableCh1/2_s immer den gleich Wert wie 
AsymClockEnable_s haben, daher keine FlipFlop erzeugt wird und das durch 
Logik ersetzt wird.
Falls du das Speichern/Beibehalten des Signals beabsichtigst, es geht 
so:
AsymClockEnableCh1_s <= AsymClockEnable_s when 
conv_integer(ChannelCounter_s) = 1 else AsymClockEnableCh1_s;
Das ist aber nicht so gut, denn das ist ein Latch. Speichern macht man 
immer taktsynchron und bei einer Taktflanke. (if foo'event and foo = '1' 
...

von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

Bei mir erzeugt ISE schon so Latches:
WARNING:Xst:737 - Found 1-bit latch for signal <AsymClockEnableCh1_s>. 
Latches may be generated from incomplete case or if statements. We do 
not recommend the use of latches in FPGA/CPLD designs, as they may lead 
to timing problems.
WARNING:Xst:737 - Found 1-bit latch for signal <AsymClockEnableCh2_s>. 
Latches may be generated from incomplete case or if statements. We do 
not recommend the use of latches in FPGA/CPLD designs, as they may lead 
to timing problems.

Ich wer's in nen Prozess packen...

Vielen Dank!

Gruß,

h

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


Lesenswert?

1
AsymClockEnableCh1_s <= AsymClockEnable_s when conv_integer(ChannelCounter_s) = 1;
Das ist ein implizites Latch.
1
AsymClockEnableCh1_s <= AsymClockEnable_s when conv_integer(ChannelCounter_s) = 1 else AsymClockEnableCh1_s;
Das ist ein explizites Latch.

Beide Beschreibungen machen genau das selbe.

> Ich wer's in nen Prozess packen...
Das wird nichts ändern.
Für Kombinatorik ist ein Prozess ist nur eine andere Schreibweise mit 
anderen Syntaxelementen (z.B. if statt when).

> Bei mir erzeugt ISE schon so Latches: ...
Ich hoffe, du weisst was du tust... :-/

von Klaus Falser (Gast)


Lesenswert?

Vielleicht hilft Dir folgendes :

AsymClockEnableCh1_s <= AsymClockEnable_s when 
conv_integer(ChannelCounter_s) = 1 else '0';

Das erzeugt kein Latch, weil zu jedem Zeitpunkt genau definiert ist, wie 
AsymClockEnableCh1_s sein soll und macht möglicherweise das, was Du 
wolltest.

von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

Gefahr ist mein Geschäft... ich wer'd Morgen nochmal checken...

von Daniel (Gast)


Lesenswert?

vielleicht suchst du dieses Template?
1
signal a_reg, a_next: std_logic;
2
3
a_reg <= a_next when rising_edge(clk);
4
5
a_next <= '1' when x = 2 else a_reg;

Ich glaub im synchr. Design gibt es keinen sinnvollen
Einsatz für die Latches!? Experten bitte korrigieren falls falsch :)

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


Lesenswert?

> Ich glaub im synchr. Design gibt es keinen sinnvollen
> Einsatz für die Latches!?
Bestenfalls noch an den Schnittstellen zur Aussenwelt, z.B. bei einem 
asynchronen uC-Interface.

Allerdings sind die FFs in den Xilinx-Slices durchaus als Latch 
konfigurierbar. So ein Bauteil ist also generisch vorhanden und wird 
nicht mit Gatterfunktionen nachgebildet.
Die Gefahr ist eher, dass so ein Latch ungewollt entsteht, und sich das 
Design in der Simulation (z.B. wegen einer unvollständigen 
Sensitivity-List) anders verhält als in der Zielhardware. Hier ein 
kleines Beispiel: 
http://www.lothar-miller.de/s9y/categories/34-Getakteter-Prozess
Und nicht immer ist die Beschreibung so kompakt, dass man das gleich 
sieht.

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.