www.mikrocontroller.net

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


Autor: Fire (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schrotty (Gast)
Datum:

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

Autor: Fire (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fire (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Frank (Gast)
Datum:

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

Frank

Autor: Fire (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 :-/

Autor: Fire (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
richtig, hab mich vertippt.
muss natürlich wie folgt lauten

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.