Hi, ich muss aus einem 8-Bit Signal (0-255) 3x BCD Code gewinnen. Ich muss jede Stelle auf eine 7-Segment Anzeige ausgeben. Ich hatte in meiner Schaltung einen GAL 26CV12 vorgesehen und habe für diesen das Programm geschrieben. Beim Überprüfen habe ich festgestellt dass die Matrix zu klein ist und ich das Ergebnis der Wahrheitstabelle nicht nach außen bekomme! Die Leiterplatte ist bis auf den GAL schon fertig und bestückt. Könnt ihr mir irgendwie helfen dass nicht alles umsonst war? Datenblatt: http://chdist35.distrelec.com/distrelec/datasheets.nsf/WebAttachments/AF794273C798EFF6C12571B60053C4FB/$File/Serie%20GAL26xx-xx_e.pdf Gruß Camel PS: Im Anhang mein geschriebenes Programm!
Camel du hast das Programm vergessen. welche Versorgung hat den dein GAL 5V oder 3,3V. Und das Gehäuse ist so auch nicht klar und wieviele Pins du davon benutzt. Hilft vielleicht auch eine Adapterplatine. Gruß Andreas PS Kopf hoch das passiert leider immer wieder das das CPLD FPGA hinterher zu voll ist.
Da hilft nur, alles zu Fuß zu optimieren. Die Pinbelegung am GAL hast Du auch schon fesatgelegt? Das dürfte das größte Problem sein. Die Eingänge sind nicht gleihwertig. Ich kenne den 26CV12 nicht, aber den 22V10 und die ähnlichen mit doppelter Flipflopzahl, 20 statt 10, bei gleicher Gatterzahl ( Atmel 7xx weiß nicht mehr genau oder auch GAL6001) habe ich schon benutzt. 8 Bit rein und 12 Bit raus, da ist ja kein Pin mehr übrig, das war schon gewagt.
Zu Fuß heißt, 12 Karnaugh-Diagramme mit je 256 Feldern malen und zusehen, dass max. 8 Produktterme mit 8 Eingängen, 2 mit 10 und 2 mit 12 herauskommen. Das ist reine Fleißarbeit. Welches Programm benutzt Du zur Optimierung? Kennt es genau den GAL-Typ?
@Camel Warum nimmst du so ein Heizkraftwerk? Heute gints schicke CPLDs, die nahezu keinen Strom brauchen, in deinem Fall <1mA. @Andreas Pi Irrtum, es passiert im wesentlichen nur bei mangelnder Erfahrung, mangelnde Kenntnissen und schlechter Planung. So einen kleinen Decoder hätte man vorher schreiben und testen können. So what. Erfahrungswerte. MfG Falk
@ Christoph Denkst du der GAL Compiler ist soo doof dass er nicht die KV-Diagramme optimieren kann? Ausserdem braucht er für ein 8Bit auf 3xBCD nur 10 Ausgänge, denn die obere Stelle kann nur 0,1 oder zwei sein -> zwei Bit. Weiterhin bruacht er für das LSB der niederwertigsten Stelle keine Logik, die kann er 1:1 verbinden (Siehe Datenblatt 74185). MfG Falk
Genau diese Optimierungsmöglichkeiten wird der Compiler nicht kennen. Auch wenn er merkt, dass er 1:1 verbinden kann, wird er das LSB nicht komplett rauswerfen, sondern 2 Pins belegen, ebenso die oberen Bits. Vielleicht sind das genau die Resourcen, die fehlen um alles fitten zu können. Ich würde jedenfalls mal die logischen Gleichungen anschauen, die der Compiler erzeugt hat. Bei dieser Komplexität ist das ja noch überschaubar. Zu Fuß bringt eher noch was bei Statemachines, wenn man merkt, welches Ergebnisbit mit einem der State-Zählflipflops identisch sein kann, sowas kann der Compiler nicht entscheiden.
Na du bist mir vielleicht einer. ;-) Der Compiler arbeitet LOGISCH, aber sicher nicht KREATIV. Wenn der Bastler/Entwickler für sowas IOs vorsieht, wird der Compiler sie kaum rauswerfen können. Er kann nur die recht einfache Schaltgleichung Y0 = X0 hinschreiben. Das sollte dann auffallen. Ausserdem widersprichst du deinem vorhergehend Posting "zu Fuss bringt eher noch was bei Statemachines". Sagte ich doch. MFG Falk
Hi@all, ich melde mich auch mal wieder! Also in der Tat, ich stehe noch am Anfang meiner GAL-Karriere. - GAL26CV12 "fully compatible with 22V10" (siehe Datenblatt) - Die Pinbelegung ist nicht so entscheidend, ich muss dann eben die Leitungen zur Anzeigenplatine vertauschen. - Ich habe mir auch Überlegt alles mit KV-Diagrammen zu optimieren (gibts da n Tool?) aber das ändert ja nichts daran wie viele Produktterme herauskommen (vl. legdiglich an welchem Ausgang) - Ich benutze ISPLever von Lattice da ich genau den GAL (wie aus dem Datenblatt oben) bestellt habe. - keine Erfahrungen mit GALs (nur aus Berufsschule) - Das mit den 10 Ausgängen hab ich mir auch schon überlegt, aber nicht zu Ende gedacht (mangelnde Kenntnis) - Ich habe keine logischen Gleichungen, da ich das Programm mit Wahrheitstabelle und nicht mit Gleichungen geschrieben habe. Meine Lösung: Wenn man ausrechnen könnte wieviele Produktterme ich für den jeweiligen Ausgang brauche, könnte ichs ja so verteilen dass es passt. (wenns nicht reicht den 26CV12C der hat mehr Terme) Hoffe auf alle Fragen eingegangen zu sein, dass die Fehlenden Infos da sind. Danke für eure Hilfe bis hierher! Gruß Camel
@Camel Alles klar, eben halt typische Anfängerfehler. Haben wir alle mal gemacht. Kein Beinbruch. > - GAL26CV12 "fully compatible with 22V10" (siehe Datenblatt) isser auch. > - Die Pinbelegung ist nicht so entscheidend, ich muss dann eben die > Leitungen zur Anzeigenplatine vertauschen. genau > - Ich habe mir auch Überlegt alles mit KV-Diagrammen zu optimieren Als Übungsstunde für KV brauchbar, real aber eher sinnlos. Denn im Normalfall optimiert man nur Gleichungen mit 2 (zwei) Eingangsvariablen per Hand, bei mehr werden die Tabellen und das Verfahren arg kompliziert. Der Compiler kann das wesentlich besser und einfacher. Man muss ihm nur gelegentlich auf die Sprünge helfen. > (gibts da n Tool?) aber das ändert ja nichts daran wie viele Ja, nennt sich Complier, entweder für Abel, Verilog, VHDL und wasweissich. ISP ist dein Freund. > - Ich habe keine logischen Gleichungen, da ich das Programm mit > Wahrheitstabelle und nicht mit Gleichungen geschrieben habe. Genau DAS ist ja der richtige Weg. Du gibts die Wahrheitstabelle ein, der Compiler macht boolsch minimierte Gleichungen draus. Das ist die richtige Anwendung einer HDL (Hardware Description Language). Gib alles ein, lege ein Pinbelgeung fest, compilieren. Dann wird der Compiler irgenwann meckern, zu wenig Produkterme etc. Dann musst du wahrscheinlich ein paar Pins tauschen sowie an den Einstellungen für max. Anzahl Produktterme sowie anderer Parameter drehen. Man kann dem Compiler nämlich sagen, ob die Logik möglichst schnell sein soll (kostet viele Produkterme) oder möglichst ressourcensparend (ist halt langsamer). Dadurch kann man so manches Design noch reinquetschen. Been there, done that. MFG Falk
So ein Compiler gibt als Zwischenergebnis die beiden minimierten Gleichungen aus, einmal normal und einmal mit invertiertem Ausgang. Das entspricht ungefähr den beiden KV-Diagramm-Verfahren für AND oder OR, das eine Mal alle Einsen zusammenfassen, das andere Mal alle Nullen. Ein "Fitter " passt erst anschließend das Ergebnis an die spezielle Hardware an. Er nimmt den Term von beiden, der besser passt. Die minimierten Gleichungen sind als Klartext in einer Textdatei lesbar, das war zumindest bei EasyAbel und Lattice-Synario der Fall, die ich vor etwa 10 Jahren benutzt habe. Beim KV-Diagramm gibt es oft mehrere minimale Möglickeiten, ob der Compiler das auch berücksichtigt, hängt von seinen "Strategie"-Einstellungen ab.
Man kann oft die Pinbelegung von Fitter festlegen lassen, dann findet er eher eine Lösung. Falls das Programm es zuläßt würde ich erst mal keine Vorgaben machen, das kann man hinerher immer noch ausprobieren.
Hallo, habe mich jetzt nochmals damit beschäftigt! Fehlermeldung: Warning 4034: Unable to preserve preassignments - performing second pass without preassignments. Note 4083: Signal 'D2_A' did not fit because it had too many product terms. Note 4083: Signal 'D1_D' did not fit because it had too many product terms. Note 4083: Signal 'D1_C' did not fit because it had too many product terms. Note 4083: Signal 'D1_B' did not fit because it had too many product terms. $DEVICE p26cv12 nofit $PINS 16 D1_A:27 D2_B:22 D2_C:26 D2_D:25 D3_A:24 D3_B:18 D3_C:17 D3_D:16 DIO_08:9 DIO_07:8 DIO_06:6 DIO_05:5 DIO_04:4 DIO_03:3 DIO_02:2 DIO_01:1 $UNASSIGNED 4 D1_B D1_C D1_D D2_A -------------------------------------------------------------- "Pre Fit Equations": P-Terms Fan-in Fan-out Type Name (attributes) --------- ------ ------- ---- ----------------- 1/1 1 1 Pin D1_A 31/29 7 1 Pin D2_A 5/6 6 1 Pin D3_A 34/38 7 1 Pin D1_B 11/13 6 1 Pin D2_B 3/3 5 1 Pin D3_B 34/36 7 1 Pin D1_C 8/9 6 1 Pin D2_C 0/1 0 1 Pin D3_C 25/28 7 1 Pin D1_D 5/8 6 1 Pin D2_D 0/1 0 1 Pin D3_D ========= 157/173 Best P-Term Total: 155 Total Pins: 20 Total Nodes: 0 Average P-Term/Output: 12 Was heisst die Zahl vor /, und was die Zahl danach? MfG Camel PS: Thx, for help again!
Das ist die Anzahl benötigeter Produkterme / Anzahl verfügbarer Produkterme Praktisch sollte die linke Zahl immer kleiner als die Rechte sein, sonst gehts nicht (logo). Und der Compiler ist auch recht schlau und kreativ, er merkt dass für einige Signale wenig Produktterme gebaucht werden und ändert dementsprechend die Pin/Macrozellenbelegung. Und schwupps, schon passt es. Allerdings musst du wohl die Pinbelegung ändern. MfG Falk
Ich denke, das links sind die beiden Minterme nach 0 und 1 zusammengefasst, wie geschrieben. Best total ist 155, also nimmt für 31/29 den rechten und sonst den linken, und kommt so auf 155, zwei weniger als nur mit der linken Spalte (157).
und die vier mit der hohen Zahl kann er nicht fitten, daher UNASSIGNED, der Rest klappt.
Wie Falk schon schrieb, sind D1_A, D3_C und D3_D unnötig, das erste kann man durchreichgen, und die anderen fest auf Null setzen. Damit werden drei wertvolle Ausgänge frei für interne zusätzliche Terme, auf Kosten der doppelten Laufzeit. Falls in der Logik ein Unterausdruck mehrfach gebraucht wird, kann der Fitter diesen Teil als eigenen Produktterm abspalten.
Ich hab auch mal in meinem "Steinbuch/Rupprecht Nachrichtentechnik" nachgesehen, die "0" und "1"-Minimierungen heißen konjunktive und disjunktive Normalform. Na Wikipedia weiß auch das: http://de.wikipedia.org/wiki/Karnaugh-Veitch-Diagramm Maxterm und Minterm steht da noch was ich noch im "Steinbuch" bestätigt fand: die eine Form läßt sich nur mit NANDs, die andere nur mit NORs aufbauen.
Hallo, bin wieder einen Schritt weiter. P-Terms Fan-in Fan-out Type Name (attributes) --------- ------ ------- ---- ----------------- 1/1 1 1 Pin DIO_01 31/29 7 1 Pin D2_A 5/6 6 1 Pin D3_A 1/1 1 1 Pin D1_B 11/13 6 1 Pin D2_B 3/3 5 1 Pin D3_B 34/38 7 1 Pin D1_C 8/9 6 1 Pin D2_C 0/1 0 1 Pin D3_C 34/36 7 1 Pin D1_D 5/8 6 1 Pin D2_D 0/1 0 1 Pin D3_D ========= 133/146 Best P-Term Total: 131 Total Pins: 20 Total Nodes: 0 Average P-Term/Output: 10 Die Zahl der Terme hat sich durch DIO_01 = D1_A ; D3_C = 0 ; D3_D = 0 ; verringert, was könnte ich jetzt noch optimieren? Gruß Camel
Was willst du denn noch optimieren? Passt das Design immer noch nicht in den GAL? MfG Falk
Da sind immer noch 3 Ausgänge, die um die 30 Produktterme haben. Das Maximum beträgt 12 ( für 2 Ausgänge, sonst 10 oder 8). Laß die drei unnötigen Ausgänge einfach weg, sonst passst das nie. Der Fitter muß diese drei als interne Zwischenergebnisse benutzen können, dann passt es mit viel Glück rein.
Hast du alle Pins freigegeben, sodass die Software sich die beste Verteilung aussuchen kann? OK, hab nochmal das Datenblatt gelesen. Pro Macrozelle sind maximal 12! Produktterme verfügbar, und das auch nur bei zwei Macrozellen, die anderen haben nur 8 oder 10! D.H. D2_A, D1_C und D1_D haben VERDAMMT schlechte Karten. Mein Vorschlag. 1.) Die Signale für DIO_01 = D1_A ; D3_C = 0 ; D3_D = 0 KOMPLETT aus dem Design rausschmeissen. Das kann man schlieslich extern problemlos realisieren. 2.) In den Einstellungen des Compilers suchen und irgendwo Eistellungen für Area oder Speed Optimization auf Area setzen. Was für Menus gibt es für Compilereinstellungen? MFG Falk
Wenn alle Stricke reissen, musst du wohl ne kleine Emulatorplatine bauen, z.B. mit XC9536, gibts für 4,10 bei Reichelt. Dort passt es auf jeden Fall rein, hab ich probiert. MfG Falk
@ Christoph "Der Fitter muß diese drei als interne Zwischenergebnisse benutzen können," Hmm, das war auch mein Gedanke. Aber ein nochmaliger genauer Blick ins Datenlatt lässt mich da ein wenig zweifeln. Denn der Feedback von der Macrozelle in die AND Matrix kann nur das FlipFlop oder das Pin als Quelle haben, aber NICHT die Produktterme! Hmmm? MFG Falk
Dann muß eben der Pin zurückgeführt sein, und das Zwischenergebnis erscheint am Ausgang. Damit wird die Verzögerung etwas größer, vor allem wenn man den Ausgang kapazitiv belasten würde.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.