Forum: FPGA, VHDL & Co. VHDL std_logic Don't Care '-' verwenden


von Matthias (Gast)


Lesenswert?

Hallo,

ich implementiere gerade an einem Interface zu einem Xilinx MIG DDR2 
Design. Dabei gibt es eine Reihe von Situationen, in denen ich nur noch 
Dummy-Daten ans Interface geben muss, um die notwendige Länge für einen 
Burst zu erreichen, die Daten werden aber mit Hilfe der Data Mask 
Signale raus zum Speicherbaustein maskiert.

Ich frage mich jetzt, ob man dabei etwas gewinnt, wenn man an den 
Stellen wo diese Dummy-Daten auftreten ein Don't Care '-' zuweist, da 
dann das Synthesetool mehr Freiheitsgrade zur Optimierung hat. Wenn ich 
nichts zuweise muss das Tool die Schaltung so bauen, dass die FFs keinen 
neuen Wert zugewiesen bekommen, wenn es ein Don't Care sieht sollte da 
was möglich sein (beim Flattening sollten mehr Vereinfachungen der 
Gleichungen möglich sein).

Macht das irgendjemand von euch so oder hat jemand mit so etwas schon 
Probleme gehabt?

LG
Matthias

von berndl (Gast)


Lesenswert?

Hi,

kannst du versuchen, alternative waere, den letzten Wert zu halten. 
Kostet zwar einen Mux, aber eventuell brauchst du den sowieso...

von John K. (juliusk)


Lesenswert?

Hallo Matthias,
bei der Synthese sollte das eigentlich keinen besonderen Unterschied 
machen, da der Platz für die Daten ja ohnehin reserviert werden muss. 
Aber du könntest das natürlich so machen wie du sagst.
Allerdings überlege ich gerade, ob es in dieser Situation nicht 
sinnvoller ist, den Puffer zunächst mit "others => '0' aufzufüllen und 
anschließend an den betroffenen Stellen mit den Daten zu überschreiben. 
Das würde könntest du dann auch mit '0' machen, das '-' hat dann keine 
bessere Wirkung mehr.

Viele Grüße,
Julius

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Xilinx empgiehlt es zumindest Signale die don'T care sind auch als 
solche zusetzen, Nachteile hat man auf jedenfall nicht dadurch, bringt 
manchmal ein paar weniger benötigte Recourcen, da die Synthese sosnt auf 
Zwang versucht den alten Zustand beizubehalten.

von Matthias (Gast)


Lesenswert?

@Läubi: Wenn Xilinx es empfiehlt und ich verwende ihr Synthesetool dann 
gibt das schon ein besseres Gefühl.

@berndl: Das Halten des letzten Werts ist es ja eigentlich, was ich vom 
Synthesetool fordere, wenn ich in einem getakteten Prozess keine 
Zuweisung mache. Die Frage ist, ob Don't Care bessere Ergebnisse bringt.

@Julius Krieg: Nach meinem Verständnis könnte das schlechtere Ergebnisse 
bringen, da ja dann die logischen Gleichungen umfangreicher werden.


Danke jedenfalls für die Antworten.

von sgersten (Gast)


Lesenswert?

Ich finde es schon fast befremdlich, dass Xilinx empfiehlt eine 
explizite Zuweisung von Don't care vorzunehmen. Für das Synthesetool ist 
das zwar kein Problem, aber eine formale Verifikation des 
Syntheseergebnisses wird schwieriger. Der Flächengewinn ist 
typischerweise minimal, deswegen sieht man ja auch oft die Variante, die 
Julius beschreibt. Ein weiterer Punkt hat mich jetzt stutzig gemacht: 
Dummydaten zum Bautein, die maskiert werden. Schon allein aus Gründen 
der Stromaufnahme sollten doch die Leitungen auf konstantem Pegel 
bleiben? Vielleicht kann das Ausgangsflop einfach für diese Takte kein 
Enable bekommen?

von Matthias (Gast)


Lesenswert?

Ich muss zugeben, dass der Stromverbrauch mir egal wäre (das Design wird 
auf maximal einem halben dutzend Boards eingesetzt), eher würden mir 
Dinge wie höhere EMI Belastung wg mehr Schaltvorgängen Sorgen machen.

Auch gibt es ein anderes Problem, die Ausgangsregister sind DDR im 
SAME_EDGE Modus, es kann nun sein, dass die Daten für die steigende 
Flanke noch gültig sind, die für die fallenden aber nicht mehr, das 
Clock Enable gilt aber für beide Eingänge. Abgesehen davon will ich 
nicht unbedingt in den vom MIG erzeugten Code hineingreifen, wenn es 
nicht unbedingt notwendig ist.

Mir geht es auch weniger um den Flächengewinn sondern eher um besseres 
Timing-Verhalten, Don't Care Ausgangszustände sollten nach meinem Gefühl 
dafür Sorgen, dass die logischen Verknüpfungen weniger Variablen 
enthalten (man denke an KV-Diagramme) und die LUT-Strukturen zwischen 
den FFs weniger Ebenen haben müssen, was Routingaufwand und 
Durchlaufzeit verringert und dann vielleicht den Unterschied darstellt, 
ob man ein Design im Grenzbereich noch durch die Timinganalyse bringt 
oder nicht.

LG
Matthias

von SuperWilly (Gast)


Lesenswert?

Hallo,

also wenn Du mich fragst, ob eine Don't Care oder irgendeine Zuweisung 
(z.B. Nullen) an der Stelle hinsichtlich des Timings vorteilhafter ist: 
Das ist Lesen im Kaffeesatz. Wenn das Timing im Grenzbereich liegt, dann 
liegt der Hase woanders im Pfeffer begraben. Solltest Dir mal
die statische Timing-Analyse genau anschauen, um die wirklich kritischen 
Pfade zu identifizieren.
Kannst du denn schon sagen, ob du dich im (von dir definierten) 
Grenzbereich befindest ?


Gruß,
SuperWilly

von Matthias (Gast)


Lesenswert?

Hallo SuperWilly,

an der DDR2 Ecke denke/hoffe ich, dass ich keine Probleme bekommen 
sollte. Es geht mir eher um allgemeine Überlegungen, sozusagen zur 
Entwicklung meines "Coding Styles".

LG
Matthias

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.