FPGA_Jens schrieb:
> Ich habe zwei unterschiedliche Designs mit jeweils einem identischen
> Modul. In diesem Modul treibt ein ODDR-Block einen OBUFDS.
>
> Das eine Design lässt sich wunderbar mit ISE erstellen, beim anderen
> kommt folgender Fehler: OBUFDS_inst is driven by ODDR_inst (Q pin), but
> they are not all in the same level of hierarchy.
>
> Was bedeutet denn nun genau dieses "not all in the same level of
> hierarchy"?
Hierarchy meint erst mal das Schaltungsteile zu Blöcken (meist
Entity/architecture = component) zusammengefasst werden.
Synthese/Implementierung erhält diese Blöcke solange sie nicht
angewiesen werden diese "wegzuwerfen" (flatten netlist:
http://en.wikipedia.org/wiki/Netlist ) . Erhalten meint, das
Optimierungen und Umsetzung an den Grenzen des Blocks enden und somit
alle beim Mapping "erzeugten" FPGA Elemente (z.B. LUT, FF, BRAM-Block)
einen extra Identifier (Namen) erhalten. Probleme entstehen wenn zwei
Hierarchy-Blöcke jeweils einen Teil einer FF-Resource beschreiben, bspw.
bei den IO-Zelle.
In den IO-Zellen sind untrennbar Tri-Statetreiber (IF OE = '0' then Q=
Z), FlipFlop (if rising edge) Eingangs- und Ausgangspad, differentieller
Treiber, meist auch delay-element, etc enthalten. Durch die Blockgrenze
ensteht nun eine Netzliste mit zwei extra Componenten also kaskadierten
IO-Zellen die es nun nicht im FPGA (oder ASIC) gibt.
Also beschreibt man eine IO-Zelle komplett in einem Block bspw. in
TOP-Level file. Nun scheint den Memrory controller eigene IO-Zellen
mitzubringen die mit der IO-Beschreibung im TOP-File kolliediert. KEEP
Hierachy OFF sollte die Netzliste flachklopfen (alle Blöcke wie einen
großen behandeln, was SOFT hier bedeudet ist mir unbekannt.
So weit in aller Schnelle, mehr zu diesem wichtigen Schritt während der
Synthese einer Hochsprachenbeschreibung findest du unter den Stichwort
"flat", "flat netlist", "flat hierarchy". MfG