www.mikrocontroller.net

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


Autor: Heinrich H. (Firma: Ich.AG) (hhanff)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

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

Autor: Niklas Gürtler (erlkoenig)
Datum:

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

Autor: Heinrich H. (Firma: Ich.AG) (hhanff)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AsymClockEnableCh1_s <= AsymClockEnable_s when conv_integer(ChannelCounter_s) = 1;
Das ist ein implizites Latch.
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... :-/

Autor: Klaus Falser (Gast)
Datum:

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

Autor: Heinrich H. (Firma: Ich.AG) (hhanff)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gefahr ist mein Geschäft... ich wer'd Morgen nochmal checken...

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielleicht suchst du dieses Template?
signal a_reg, a_next: std_logic;

a_reg <= a_next when rising_edge(clk);

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 :)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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-Geta...
Und nicht immer ist die Beschreibung so kompakt, dass man das gleich 
sieht.

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.