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
Hi, kannst du versuchen, alternative waere, den letzten Wert zu halten. Kostet zwar einen Mux, aber eventuell brauchst du den sowieso...
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.