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
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
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.
@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.
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?
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
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
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