Forum: FPGA, VHDL & Co. "Überflüssiges" synthetisieren


von Fire (Gast)


Lesenswert?

Hallo,

ich möchte ein xor Gatter basten, das 4 Eingänge hat. 2 Normale und 2 
mal das invertierte davon.
Das Problem ist nun, dass bei der Synthese die Nets für die negierten 
rausgeschmissen werdenm, weil ja keine zusätzliche Information geliefert 
wird.
Um ein möglichst homogenes Verhalten beim Leistungsverbrauch zu bekommen 
brauche ich aber die invertierten Leitungen.

Ach ja, ich benutze Xilinx ISE 8.02i und das ganze soll vermutlich mal 
auf einen Spartan 3E.

Gruß,
Fire

von Schrotty (Gast)


Lesenswert?

synplify versteht z.B. das Attribut "Synkeep", das einem Signal 
zugeordnet werden kann. Damit wird verhindert, dass dieses Signal 
wegoptimiert wird.

von Fire (Gast)


Lesenswert?

Hi,

erstmal Danke für die Antwort.

Aber leider verwende ich den XST Synthesizer aus der ISE Suite.

Ich hab auch schon mal versucht das attribut KEEP bzw. NOREDUCE zu 
verwenden.
Hatte leider keinerlei Erfolg dabei :/

Ich hab das Attribut zuerst definiert und anschließend dem signal 
(übrigens ein vektor) zugewiesen. XST hat das ganz einfach ignoriert. 
Die Syntax war wohl richtig.

Gruß,
Fire

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Die Syntax war wohl richtig.
Evtl. war sie nicht falsch.
Aber wenn sie richtig gewesen wäre, dann hätte das funktioniert ;-)

Sieh mal in den Beitrag "Re: Selbstlaufende Clock im FPGA"
Und in den Link vom Beitrag "Re: Selbstlaufende Clock im FPGA"
Dort werden Laufzeiten von LUTs zweckentfremdet. Die dürfen auch nicht 
wegoptimiert werden.

von Fire (Gast)


Lesenswert?

Hallo,

also ich verwende das Attribut wie im Beispiel Ringoszi.

Die unterschiedlichen Schreibweisen von true hab ich auch schon 
ausprobiert.

Ich hab auch schon versucht aus den Bitvektoren Einzelbits zu machen. 
Das hat aber auch nichts gebracht :(
Im Synthesereport taucht auch folgende Zeile für jedes betroffene Signal 
auf:
 Set user-defined property "KEEP =  TRUE" for signal <a1>.

Und später im Report taucht dann noch einmal folgendes auf:
INFO:Xst:2386 - HDL ADVISOR - The KEEP property attached to signal a1 
may hinder XST clustering optimizations.

Sieht doch eingentlich nicht so schlecht aus. Trotzdem "killt" er die 
invertierten Signale.

von Jan M. (mueschel)


Lesenswert?

Eigentlich verstehe ich zwar nicht, was du damit genau bezweckst, aber 
wie genau sieht dein Code aus?
Wie schliesst du das invertierte Signal an, einfach "not signal" an 
einem Port? Wie instanziierst du das XOR?

von Frank (Gast)


Lesenswert?

Bei ISE gibt es den schalter "retain hierarchy" oder so ähnlich, versuch 
mal da den Haken rauszunehmen.

Frank

von Fire (Gast)


Lesenswert?

Sorry dass ich mich so lange nicht gemeldet hab.

Also ich überlagere den XOR Operator mit einem Case für 4 inputs (alle 
Fälle werden von Hand ausgefüllt). 2 der inputs sind das Inverse von den 
beiden anderen inputs. Das überladen XOR hat dann auch 2 Outputs, einen 
normalen und den invertierten.
Anschließend instanziere ich einfach über generate nach dem schema:

A(3 downto 0) <= b(1 downto 0) XOR b(3 downto 2);

XST schmeißt dann immer die invertierten signale raus, die sollen aber 
unbedingt drin bleiben, denn es soll ein homogener(er) Stromverbrauch 
beim umladen/umschalten realisiert werden.

Die Einstellungen von XST hab ich auch schon mal durchgesehen aber 
sowohl "KEEP Hierarchie" als auch "Safe implementation" bringen nichts.
Wenn ich die ROM Extraction deaktivier bleiben immerhin die Gatter 
erhalten, die "überflüssigen" Leitungen verschwinden trotzdem.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Also, ich weiß nicht, bei mir gehts:
http://www.lothar-miller.de/s9y/categories/29-Ringoszillator

> A(3 downto 0) <= b(1 downto 0) XOR b(3 downto 2);
Das wird sowieso nicht gehen... Berechnet wird mit 2 Bit breiten 
Vektoren, das Ergebnis ist 4 Bit breit :-/

von Fire (Gast)


Lesenswert?

richtig, hab mich vertippt.
muss natürlich wie folgt lauten

A(1 downto 0) <= b(1 downto 0) XOR b(3 downto 2);

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.