Forum: FPGA, VHDL & Co. Einsicht von optimierten Booleschen Formeln.


von LatticeAnfänger (Gast)


Lesenswert?

Angenommen, ich habe eine VHDL-Datei mit einer ganzen Menge
von (kürzeren und längeren) Booleschen Formeln, die aber
nicht optimal geschrieben sind und ich möchte lernen,
wie ich es besser machen kann:
Kann ich den Output nach der Optimierung irgendwo einsehen?
Hersteller/FPGA wäre eigentlich erst einmal egal,
Lattice Diamond hätte ich da, wenn es da so etwas gibt?
Wenn es irgendwas auf Open Source Basis gibt, wäre mir das auch recht.
Oder gibt es da eine andere Möglichkeit, so etwas automatisch
herauszufinden?
(schneller und einfacher als z.B. per Hand eine Werte-Tabelle
aufzustellen oder per Programm durch zu probieren
oder Gesetze der booleschen Algebra anzuwenden?
Ich will aber nicht jede Formel einzeln optimieren,
sondern den Satz an Formeln als Gesamtes.)

Kleines Beispiel (in Realität habe ich mehr und längere Formeln):
1
A1 <= (E1 AND E2) OR (E1 AND NOT(E2));
2
A2 <= NOT A1;

lässt sich auf
1
A1 <= E2;
2
A2 <= NOT(E2);

optimieren. E1 fällt raus, müsste ich also gar nicht mehr
näher betrachten, wenn es sonst nirgendwo vorkommt.

Das gleiche als C-Source (zum Nachweis):
1
main()
2
{
3
  int a, e1, e2;
4
5
  for(e1 = 0; e1 <= 1; e1++)
6
  {
7
    for(e2 = 0; e2 <= 1; e2++)
8
    {
9
      printf("A=%d E1=%d E2=%d\n", (e1 & e2) | (e1 & (1-e2)), e1, e2);
10
    }
11
  }
12
}

und dessen Output:

A=0 E1=0 E2=0
A=0 E1=0 E2=1
A=1 E1=1 E2=0
A=1 E1=1 E2=1

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


Lesenswert?

LatticeAnfänger schrieb:
> Kann ich den Output nach der Optimierung irgendwo einsehen?
Im RTL-Schaltplan.
Sihe den Beitrag "Re: Erste Schritte mit FPGA - ich komme nicht weiter"

LatticeAnfänger schrieb:
> Kleines Beispiel (in Realität habe ich mehr und längere Formeln):
> A1 <= (E1 AND E2) OR (E1 AND NOT(E2));
> A2 <= NOT A1;
> lässt sich auf
> A1 <= E2;
> A2 <= NOT(E2);
> optimieren.
Nicht ganz richtig. Das hier
 A1 <= (E1 AND E2) OR (E1 AND NOT(E2));
lässt sich auf
 A1 <= E1 AND (E2 OR NOT E2);
reduzieren. Und (x or not x) ist immer '1'.
> E1 fällt raus
E2 fällt raus, weil E2 nicht relevant ist.
Egal wie E2 steht, A1 hängt nur von E1 ab...


BTW: versuche Großbuchstaben nur dort zu verwenden, wo sie Sinn machen 
und dem Lesefluss helfen. Ein kleiner Test: WENN MAN ALLES GROSS 
SCHREIBT TUT MAN SICH VIEL SCHWERER BEIM LESEN, als wenn man einfach 
alles klein schreibt...

von LatticeAnfänger (Gast)


Lesenswert?

@Lothar:
Danke erst einmal für deine schnelle und gute Antwort!

"E1 <-> E2":
Der Geist ist willig, der Finger schwach...
Wollte ich so schreiben und habe es dann doch verwurschtelt.
Sieht man auch an der Ausgabe des obigen Programms.

Groß-/Kleinschreibung:
Ok, ich hab mir gerade ein paar Beispiele auf deiner Seite angesehen.
Nehme ich mir vor.

> "Im RTL-Schaltplan"
Gibt es die Ausgabe auch wieder als Text?
Schaltplan ist zwar schön zum ansehen, aber bei vielen Formeln
wird das schnell unübersichtlich.

von Klaus F. (kfalser)


Lesenswert?

LatticeAnfänger schrieb:
> Angenommen, ich habe eine VHDL-Datei mit einer ganzen Menge
> von (kürzeren und längeren) Booleschen Formeln, die aber
> nicht optimal geschrieben sind und ich möchte lernen,
> wie ich es besser machen kann:
Wieso?
Lass das Ganze wie es ist.
Schreib es möglichst lesbar und verständlich, damit ersichtlich ist, was 
Du willst und wie es funktionieren soll.
Die Optimierung soll die Maschine machen, nicht Du.

Außerdem braucht es in einem moderen FPGA keine möglichst kurzen, bzw. 
minimalen boolsche Gleichungen mehr. Die Umsetzung wird immer an die 
Hardware abgepasst, z.B arbeiten FPGAs mit Tabellen. Jede beliebige 
Funktion aus 4,5 oder 6 Signalen (je nach FPGA Typ) ergibt immer eine 
Tabelle und ist somit immer optimal und gleich schnell.
Das Minimieren von boolschen Gleichungen gehört der Vergangenheit an!

> Hersteller/FPGA wäre eigentlich erst einmal egal,
Ist es eben nicht, siehe oben.

von Schnarcho (Gast)


Lesenswert?

>Das Minimieren von boolschen Gleichungen gehört der Vergangenheit an!

Oder wenn man kleine CPLDs nimmt

von Klaus F. (kfalser)


Lesenswert?

Schnarcho schrieb:
>>Das Minimieren von boolschen Gleichungen gehört der Vergangenheit an!
>
> Oder wenn man kleine CPLDs nimmt

Auch dann nicht. CLPDs arbeiten mit Oder-Verknüpfungen von 
Produkttermen, das ergibt andere Strukturen.

Es stimmt zwar, dass man durch das Lesen der boolschen Gleichungen die 
Probleme bei Routen von CPLD-Designs besser versteht und eventuell 
beheben kann.
Das hat aber nichts damit zu tun, ob man die Gleichungen selbst 
"optimal" (was immer das ist) hinschreibt, oder ob der Fitter die 
Gleichungen minimiert. Da geht dann darum, dass man Zwischensignale 
abtaktet, damit die Gleichungen nicht zu komplex werden und ähliches.
Ich bleibe dabei:
Das Minimieren von boolschen Gleichungen gehört der Vergangenheit an!

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


Lesenswert?

Klaus Falser schrieb:
> Ich bleibe dabei:
> Das Minimieren von boolschen Gleichungen gehört der Vergangenheit an!
Ich unterstütze diese Aussage. Der Synthesizer kann das viel besser. Und 
es bringt gar nichts, lokal irgendwas herumzuoptimieren, wenn dann die 
übergeordnete Schaltung oder die Zusammenschaltung mehrerer solcher 
"handoptimierter" Teile ganz was anderes ergibt.

Meine Vorgehensweise:
Ich schreibe meinen Wunsch lesbar hin und wünsche mir noch Taktfrequenz 
und/oder Laufzeit. Wenn das Design dann ohne Fehler durchläuft ist eh' 
alles gut. Wenn nicht, dann sagt mir die Toolchain schon, wo es klemmt.

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.