Forum: FPGA, VHDL & Co. Quartus II Optimiert Schaltungsteile weg


von THBO (Gast)


Lesenswert?

Hallo Leute,

Habe ein Problem mit der Quartus 2 Software von Altera. Ich habe hier 
ein altes MAXPLUS2 Projekt auf Quartus 2 bearbeitet, allerdings ist 
Quartus nun der Meinung er müsste mir einen Teil der Schaltung im .BDF 
wegoptimieren, so das die Schaltung dann nicht mehr Funktionsfähig ist. 
Wie kann ich der Software sagen das sie das sein lassen soll ?

MfG THBO

von THBO (Gast)


Angehängte Dateien:

Lesenswert?

Hmmm, also da meine Erklärung wohl zu allgemein gehalten war, kommt hier 
nochmal eine ausführliche Erklärung worum es geht.

Also in dem alsten MAXPLUS Projekt wurde eine Schaltung eingesetzt die 
zum Entprellen eines Quadratur Signals diente. Hierbei ist es 
erforderlich gewesen die beiden Kanäle jeweils zu entprellen, da es 
vorkommen kann das die Geber Elektronik mal 2 Signale hinterinander nur 
auf einem Kanal gibt, dies darf nicht weitergeben werden.

Die Entprellschaltung sah so aus das die Eingänge jeweils einmal direkt 
auf ein XOR GAtter und einem mal Invertiert und dann über eine LCELL auf 
das selbe XOR Gatter gegeben werden. Die Ausgänge der XOR Gatter laufen 
wiederum über eine LCELL auf den Takteingang eines FF. der D Eingang des 
FF kommt vom jeweils anderen Kanal. Diese Schaltung funktionierte im 
MaxPlus Projekt einwandfrei. Unter Quartus ist er der Meinung er könnte 
den Schaltungsteil wegoptimieren.

So jetzt zu der Konkreten Frage: Gibt es eine Möglichkeit das Optimieren 
der Schaltung in Quartus zu unterbinden ? Oder hat jemand eine andere 
Idee wie man das Entprellen hinbekommen kann ??

Als Dateianhang habe ich mal ein Bild des entsprechenden BDF angehängt.

von T.M. (Gast)


Lesenswert?

Naja, ein XOR was das gleiche Signal einmal normal und einmal invertiert 
bekommt, ist natürlich (wenn man die Verzögerungen vernachlässigt) schon 
"optimierungswürdig" im Sinne der Synthese.
Ich kenn mich bloss mit Xilinx aus, da würde ich die Schaltungsteile 
direkt als Primitive instanziieren und in der Constraintdatei dann dafür 
sorgen, dass sie nicht optimiert werden. Das funktioniert da mit der 
Einstellung KEEP oder so ähnlich. Achso, Kombinatorik als Takteingang 
für FFs zu benutzen ist aber auch nicht die feine Art... Vielleicht 
sollte man das Entprellen gleich ganz anders erledigen.

T.M.

von Raini (Gast)


Lesenswert?

Unter Settings -> Analyse&Synthesis -> More Settings ->Remove Redundant 
Logic
kann man noch einige Einstellungen vornehmen. Vllt. hilft das in deinem 
Fall.

von THBO (Gast)


Lesenswert?

Wenn Du einen Tip fürs Entprellen hast, bitte gerne immer her damit, der 
Schaltungsteil ist nicht von mir, Die Firma in der ich Arbeite hatte 
sich diese Schaltung vor Jahren extern entwerfen lassen, jetzt war eine 
änderung geplant und mit Quartus klappt das ganze nun nicht mehr.

Klar das dieser Schaltungsteil Optimierungswürdig ist, allerdings müsste 
es doch eine möglichkeit geben dem Quartus zu sagen "Lass die Finger weg 
vom Optimieren".

Nun, ansonsten immer mal her mit ideen zum Entprellen :-)

MfG THBO

von J. S. (engineer) Benutzerseite


Lesenswert?

Divergente, zeitabhängige Funktionen, wie Du sie hier benutzt, basieren 
auf asynchronen Laufzeiteffekten, die nur auf Registerebene definiert 
werden können. In Asics lässt sich sowas leicht einbauen und im Prinzip 
geht es auch im FPGA - Du musst es nur den Werkzeugen beibringen. Da 
gibt es aber ein Problem mit der Interpretation von Schaltungsdesign und 
Validierung:

Du und Deine Firma müssen sich darauf einigen, wie sie 
Chip-Funktionalität nutzen wollen. Die Synthesewerkzeuge wie XST sind 
darauf ausgelegt, aus abstrakten HDL-Definitionen, welche Verhalten 
beschreiben, eine funktionsfähige Schaltung zu generieren. Dies tun sie 
aber aufgrund der Annahme von synchronen! Schaltungstopologien, bei der 
Laufzeiten und asynchrone Funktionen gezielt eliminiert / misachtet 
werden, so möglich. Daher werden bei lediglicher Beachtung der 
Sollsignalzustände im clk-Zeitpunkt einige Funktionen unterwegs 
wegoptimiert. Das gilt im Bereich FPGA auch für redundante 
Schaltungsfunktionen, die hazzards infolge der Nutzung ungepufferter 
Kombinatorik unterdrücken: Die kriegt man im FPGA meist nicht 
synthetisiert (leider).

Wenn Du solche Dinge eindesignen möchtest, must Du aber auch mal über 
Testfunktionalität und Designsicherheit nachdenken. Ist die Schaltung 
mit der gegebenen Umgebung noch 100% simulier- und damit das Verhalten 
voraussagbar? Kannst Du so die Schaltungsfunktion unter den 
verschiedenen Fallbeispielen noch vollständig untersuchen?  Nicht alles, 
was digital-elektronisch funktionieren müsste, ist in der jeweils 
genutzten Entwicklungslandschaft als valider Entwicklungspfad anzunehmen 
und in manchen Branchen kommt es darauf an, daß man im Falle eines 
Falles korrekt entwickelt hat. Tricks werden da im Nachhinein rasch zu 
Fussangeln!

Quintessenz: Überführe die asychronen und laufzeitabhängigen Pfade 
lieber in zeitlich gerasterte Pfade, die den synchronen Designprinzipien 
unterworfen, durchsimuliert und dann auch leicht und voraussagbar 
synthetisiert werden können.

Aus akademischen Gründen ist es aber interessant, sowas hinzubekommen / 
zu steuern.

von Andi (Gast)


Lesenswert?

Hallo THBO

Da ich mich gerade mit Delays auf Gatterebene im FPGA beschäftige, habe 
ich die Quartus-Hilfe mal etwas genauer studiert, und folgendes 
gefunden:

"The LCELL buffer allocates a logic cell for the project. The LCELL 
buffer produces the true and the complement of a logic function and 
makes both available to all logic in the device. (The output of the 
LCELL buffer must feed through a NOT gate to use the complement of the 
logic function.)
An LCELL buffer always consumes one logic cell. It is not removed from a 
project during logic synthesis."

Also eigentlich sollte nichts wegoptimiert werden. Allerdings befindet 
sich in deinem .BDF der Inverter vor der LCELL, vielleicht verwirrt 
das Quartus. Ich würde den Inverter mal hinter den LCELL-Buffer 
zeichnen.
Ausserdem kann das Optimierungs-Verhalten von Quartus in Bezug auf 
LCELLs beeinflusst werden. Schau doch mal im Projekt-Settings-File 
(.QSF), ob eine der folgenden Optionen gesetzt ist:

set_instance_assignment -name ignore_lcell_buffers on
set_global_assignment -name remove_redundant_logic_cells on

Gruss Andi


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.