Hallo, ich habe in Zusammenhang mit einem Bussystem eine rel. einfache Adresslogik umzusetzen und bekam den Tip, es doch mit GAL16V8, bzw. M4A5 von Lattice zu versuchen. Nach den üblichen Anfangsschwierigkeiten habe ich meine Logik mit einem M4A5 hinbekommen. Da das Teil jedoch rel. häufig eingesetzt wird, suchte ich nach einem Weg, es noch auf einem günstigeren Chip umsetzen zu können. Leider stellte sich heraus, dass die GALxx von Lattice zu klein sind, ich brauche nämlich 18 Ein- und 6 Ausgänge. Dann entdeckte ich den EPM3032 von Altera, der genügend Pins zu haben scheint und preislich eher akzeptabel wäre. Also lud ich mir die (1Gb) Webedition von Altera runter, nur um dann festzustellen, dass anscheinend kein grafischer Editor für die Logik dabei ist. Fragen: - gibt es die Möglichkeit, von dem, in Lattice-SW erstellten, Schematic eine Datei zu generieren, die die Altera Software verarbeiten kann? Die Sprachen (Abel, bzw. VHDL unterstützen scheinbar alle, aber das Schematic scheint binär zu sein) - gibt es (alternativ) freie Software, die mit Chips verschiedener Hersteller zusammenspielt? Bin für jeden Dip tankbar (auch für Links zum Selbststudium). Gruß Santi
Hm, was in so einen kleinen Chip passt, scheint nicht sehr komplex zu sein. Schreib es am besten gleich in VHDL. Da lernst du noch was dabei.
Altera hat beim Max II plus, einen grafischen Editor dabei. Aber bei mir kackt das Teil oft ab, wenn ich copy and paste mache. Für Adressumsetzung ist doch aber VHDL wesentlichh einfacher, oder? Also mir würde es in VHDL einfacher fallen, als da was zusammenzuklicken (ausserden ist es auch portabler ;) )
Software, die verschiedene Hersteller unterstützt gibts sicher, aber das dürfte dan von Firmen wie Mentor (oder so) stammen, und sicher nicht ganz in deinem Budget liegen.
@Santiago m. H.: Eventuell kannst Du Dir von ISP-Lever generisches VHDL aus Deinem Schematic erzeugen lassen (ggf. als Simulationsmodell). Das sollte dann in anderen Synthesizern zu verarbeiten sein. Altium Designer hat einen brauchbaren Schematic-Editor, der m.W. mit allen gängigen PLDs zusammenspielt. Der ist aber auch nicht frei und für privat immer noch viel zu teuer, auch wenn er nicht ganz so viel kosten dürfte wie Mentor. Bei Xilinx ist der Schematic-Editor so schlecht (speichert aber als ASCII), das man lieber gleich VHDL oder Verilog lernt. Duke
Hallo, danke für Eure Unterstützung! > Altera hat beim Max II plus, einen grafischen Editor dabei. Aber bei mir > kackt das Teil oft ab, wenn ich copy and paste mache. OK, vielleicht nochmal installieren. Ich wurde am Anfang gefragt, ob ich die Oberfläche vom Max II haben wolle und die hatte ich verneint. > Für Adressumsetzung ist doch aber VHDL wesentlichh einfacher, oder? Also > mir würde es in VHDL einfacher fallen, als da was zusammenzuklicken Das mag wohl stimmen. Ich bin nur aus einem anderen Weg gekommen. Ursprünglich hatte ich in eagle das Leitungshandling mit 15 Bausteinen aus der 74er Reihe gepinselt - hatte die Logik also schon, als ich den Tip mit den PLDs bekam (ich kannte bis dahin noch keine PLDs). So lag es also nahe, die Logik erstmal 1:1 zu übernehmen. Erst als der erste Test durch war und ich nach erhältlichen Chips und deren Preisen suchte, kam ich dazu, über Optimierungen nachzudenken. Jetzt ist es einfach so, dass ich die investierte Zeit ungern völlig abschreiben würde. Mit VHDL händisch schreiben müsste ich wieder bei Null anfangen. Kostenpflichtige SW kommt nicht in Frage, dann kann ich eher die 4A5er Chips von Lattice nehmen. Da die Variante zu funktionieren scheint, sollte die Optimierung nicht zu resourcenaufwändig sein (wobei in diesem Falle meine Zeit mit als Resource zählt). Bei einem Lattice-Model habe ich eine vhd-Datei gefunden. Wie sieht das denn mit den Bibliotheken aus? Schätze die werden lattice-spezifisch sein?!? Also die Datei geht so los:
1 | LIBRARY vanmacro; |
2 | USE vanmacro.components.ALL; |
3 | LIBRARY ieee; |
4 | LIBRARY generics; |
5 | USE ieee.std_logic_1164.ALL; |
6 | USE ieee.numeric_std.ALL; |
7 | USE generics.components.ALL; |
Gruß Santi
> ... eine rel. einfache Adresslogik ...
Im Zweifel könntest du den Schematic auch in der Altera-Software
abzeichnen. Ist zwar ein einmaliger Aufwand, könnte aber trotzdem
letztendlich günstiger sein.
Hallo, > Im Zweifel könntest du den Schematic auch in der Altera-Software > abzeichnen. Öhm, aus dem Grunde habe ich doch den Thread hier geschrieben. Kennst Du die kostenlose Variante von Altera? Gibt es dort auch was zum Zeichnen? - Wenn ja, wie finde ich da hin? Ich habe leider noch nix zum Zeichnen gefunden. Gruß Santi
File->New->Design Files->Block Diagram/Schematic File Bleibe bei QuartusII und vergiss das alte MAX II plus wieder. Cheers, Roger
Hallo Roger, Danke Dir für den Hinweis! Das war der Durchbruch :) - und es hat wunderbar geklappt. Auch wenn das Alterateil nicht ohne Macken ist, gefällt es mir doch viel besser, als die Lattice-Variante! Nachdem ich mich schon fast an die kryptische Bedienung bei Lattice gewöhnt hatte, war ich verblüfft, die Funktionen nicht bei Altera zu finden. Bis ich merkte, dass es ja auch intuitiver geht (auch wenn es kein Vergleich zu eagle ist. Letzteres ist mal wirklich ein proggy von einem Praktiker) ;) Das Schema wurde fehlerfrei übersetzt und die Pinbelegung hat auch gut geklappt, dann kann ich den Lötkolben ja anschmeißen :) Nochmals Danke an alle, die mir geholfen haben. Gruß Santi
> Öhm, aus dem Grunde habe ich doch den Thread hier geschrieben.
Oh... okay, dachte es geht darum den Aufwand beim Abzeichnen einzusparen
:/
Hallo, >> Öhm, aus dem Grunde habe ich doch den Thread hier geschrieben. > Oh... okay, dachte es geht darum den Aufwand beim Abzeichnen einzusparen > :/ Erst in zweiter Lesung. Wie man unschwer an meinem Nick erkennen kann, bin ich GUI-Fetischist - nur habe ich den Schema-Editor nicht (im Menü) gefunden (siehe erster Beitrag). Da ich aber erst anfange, mich mit den Kartoffelscheibchen zu beschäftigen, pinsle ich den Plan gerne nochmal - so kann man sich schließlich am besten mit der SW anfreunden. Auf den ersten Blick ist die Anwendung so überladen, dass man fast erschlagen wird. Erst auf den zweiten Blick wird es sinnvoll und ergibt ein stimmiges Bild. - Eins fehlt mir aber noch: Die "primitives" und "megafunctions" sind sehr schön über die Hilfefunktion erklärt. Leider fand ich keine Hilfe zu den "maxplus2"-Elementen. Gut, für die 74er Teile kann ich mir ein Datenblatt suchen, aber wo finde ich erklärt, was sich hinter den anderen (teilweise kryptischen) Bezeichnern verbirgt, bzw. wie das Teil sich verhält? Gibt es irgendeine detailierte Hilfe analog zu den "megafunctions"? Gruß Santi
Santiago m. H. wrote: > Die "primitives" und "megafunctions" sind sehr schön über die > Hilfefunktion erklärt. Leider fand ich keine Hilfe zu den > "maxplus2"-Elementen. Der maxplus2 Haufen - speziell die 74er Teile - ist nur zur Kompatibilitaet mit alten Designs. Konzentriere dich soweits geht auf die megafunctions. Die sind aktuell und lassen sich parametrieren. Cheers, Roger
Hallo Roger, die megafunctions sind wirklich eine feine Sache - könnt ich mich glatt dran gewöhnen :) Jetzt habe ich versuchsweise einen Protokollumsetzer von seriell auf parallel gemacht und bekomme "combinational loop" Warnungen für alle Pins des Latches, welches ich mir über die megafunction erstellt habe.
1 | Info: Started post-fitting delay annotation |
2 | Info: Delay annotation completed successfully |
3 | Warning: Timing Analysis does not support the analysis of latches as synchronous elements for the currently selected device family |
4 | Warning: Found combinational loop of 1 nodes |
5 | Warning: Node "BLatch:inst17|lpm_latch:lpm_latch_component|latches[7]~143" |
Wenn ich auf die Warnung klicke, öffnet sich der Editor mit dem Code der megafunction "lpm_latch" - aber da bin ich aufgeschmissen. Die Warnungen kommen doch bestimmt nicht ohne Grund - was soll ich machen? Dann habe ich den Pin für den seriellen Takt 'SCK' genannt und bekomme folgende Warnung:
1 | Warning: Found pins functioning as undefined clocks and/or memory enables |
2 | Info: Assuming node "SCK" is an undefined clock |
Ich habe nix gefunden, um dem Pin eine erweiterte Einstellung zu verpassen. Für weitere Nachhilfe wäre ich sehr dankbar. Gruß Santi
Naja, ohne den Schaltplan kann man nicht sagen, wo der Fehler liegt. Aber so eine Loop ist, wenn man den Ausgang nur über kombinatorische Logik auf den Eingang zurück führt.
Hallo Christian, das ist ja der Punkt - ich habe garkeinen Loop gemacht (zumindest nicht wissentlich). Bei der Umsetzung gibt es ein Schieberegister, ein Latch und einen Zähler, das war's schon. Also die Ausgänge der Schieberegister führen (natürlich) über das Latch zu den Ausgangspins und ein Zählerausgang wird für den Trigger des Latches genommen. Also es sind schon Ausgänge mit Eingängen verbunden - aber nicht im (zumindest nach meinem Verständnis) Loop. Gruß Santi
Hm, zeig doch mal den Schaltplan. Das im Anhang wäre z.B. eine solche kombitional feddback loop.
Der "combinational loop" kommt daher weil du ein transparentes latch verwendest. Dieses fuehrt zum Speichern den Ausgang auf den Eingang zurueck, hat also einen impliziten loop. Ob das in deinem Fall aktzeptabel ist kommt auf die Anwendung an. Wenn moeglich lpm_ff anstelle lpm_latch verwenden. Die Clocks in deinem Design solltest du spezifizieren, das hilft dem Fitter, und der Timing Analyzer sagt dir dann ob es laufen wird. Daher die Warning. Cheers, Roger
Hallo Roger, anscheinend kennst Du Dich nicht nur gut mit Altera aus, sondern hast auch noch meinen Beitrag gelesen und verstanden. Ich danke Dir! > ... hat also einen impliziten loop. Das hatte ich auch vermutet, wußte aber keine Abhilfe. > Ob das in deinem Fall aktzeptabel ist kommt auf die Anwendung an. Wenn > moeglich lpm_ff anstelle lpm_latch verwenden. OK, ich wußte garnicht, dass es eine Alternative gibt. Ohne PLD hätte ich nen 595er genommen und weil bei den 74er Steinchen die Haltefunktion üblicherweise Latch heißt, habe ich genau danach auch in Altera gesucht. Schätze das ist wie beim Erlernen einer Fremdsprache. Solange man Synonyme nur mit Hilfe eines Lexikons findet, beherrscht man die Sprache nicht wirklich. > Die Clocks in deinem Design solltest du spezifizieren nochmal auf die Suche gehen. Vielleicht finde ich ja die Stelle, wo man das tun kann. Das lpm_ff werde ich mir anschauen. Wäre doch gelacht, wenn so ne einfache Aufgabe nicht zu knacken wäre ;) Danke für Deine Unterstützung. Gruß Santi
> OK, ich wußte garnicht, dass es eine Alternative gibt. Ohne PLD hätte > ich nen 595er genommen und weil bei den 74er Steinchen die Haltefunktion > üblicherweise Latch heißt, habe ich genau danach auch in Altera gesucht. Stimmt beides. Latches sind Pegelgesteuert, d.h. sie übernehmen neue Werte, solange der Pegel 1 ist (oder 0 bei active-low). FFs sind Flankengesteuert, d.h. sie übernehmen den neuen Wert nur beim Wechsel 0->1 (oder 1->0 bei active-low). Beim Latch gibt es in deinem Beispiel einen Loop, solange der Pegel aktiv ist, d.h. das Latch übernimmt ständig neue Werte, die es selbst produziert, was dann wieder zu einem neuen Wert führt usw. Wenn dabei immer wieder dasselbe Ergebnis produziert wird, ist das okay. Falls aber nicht (z.B. Schleife mit einem einzigen Inverter), dann flippert der Latch-Wert ständig hin und her (mit einer dir nicht genau bekannten Frequenz), und merkt sich später, wenn der Steuerpegel inaktiv wird, den Wert der dann gerade zufällig anliegt - wenn du Glück hast und das Latch nicht in einen Metastabilen Zustand wechselt. Das solltest du also vermeiden. Bei FFs ist die Sache einfach: Es wird zu dem einen Festen Zeitpunkt, wo die Flanke kommt, der neue Wert übernommen, davor und danach nicht, also kann es keine asynchrone Schleife geben.
Hallo, jetzt stelle ich doch mal ein Bild rein. Ein ff statt einem latch zu nehmen hat wunderbar geklappt. Die Warnungen sind weg :) Das einzige, was ich fand, um einen Takt eingeben zu können ist der Clocklock-Baustein. Der scheint jedoch bei den kleine Baureihen nicht unterstützt zu werden. Also kann ich den auch wieder rausnehmen. 1. Wo kann ich sonst einen Parameter definieren? Bei den Eigenschaften von ClockLock hat es ihm anscheinend nicht gefallen. 2. Kann/muss ich dann die Warnungen akzeptieren, im Wissen darauf, dass der Chip auf jeden Fall schnell genug ist? 3. Die nicht verwendeten Ausgänge scheinen der Anwendung nicht zu gefallen. Legt man die besser an ein Bauteil (welches?), oder ist es ok, nicht verwendete Ausgänge offen zu lassen? Gruß Santi
Hallo Morin,
> Latches sind Pegelgesteuert
Danke für den wertvollen Hinweis. Das erklärt natürlich alles.
Ich wußte nicht, dass Latches pegelgesteuert sind. Dann muss ich mein
Verständnis gehörig umkrempeln. Grmpf...
Wunderbar - wieder was dazu gelernt :)
Gruß Santi
Santiago m. H. wrote: > OK, ich wußte garnicht, dass es eine Alternative gibt. Ohne PLD hätte > ich nen 595er genommen und weil bei den 74er Steinchen die Haltefunktion > üblicherweise Latch heißt, habe ich genau danach auch in Altera gesucht. Hier nicht, beim 595 nennt sich das Register, nun kann man philosophieren ob Register grundsaetzlich flankengesteuert sind, beim 595 ist es so. > Das lpm_ff werde ich mir anschauen. Wäre doch gelacht, wenn so ne > einfache Aufgabe nicht zu knacken wäre ;) Im wesentlich ein parametrierbares Flipflop. Zusammen mit dem lpm_shiftreg kannst du die Funktionalitaet eines 74595 nachbilden. Mit dem feinen Unterschied dass du die Breite deines Registers frei bestimmen kannst, vorausgesetzt es passt in deinen Baustein. Cheers, Roger
Santiago m. H. wrote: > jetzt stelle ich doch mal ein Bild rein. > Ein ff statt einem latch zu nehmen hat wunderbar geklappt. Die Warnungen > sind weg :) yep, bloss ein counter output als clock zu verwenden ist ein no-no. Besser fuer die Register den selben clock und clock-enables verwenden. Siehe Taktung FPGA/CPLD > Das einzige, was ich fand, um einen Takt eingeben zu können ist der > Clocklock-Baustein. Der scheint jedoch bei den kleine Baureihen nicht > unterstützt zu werden. Also kann ich den auch wieder rausnehmen. Clocklock klingt nach PLL der aelteren FPGAs, passt wohl kaum zu deinem Baustein. Du kannst die clocks in den Project-Steiings->Timing Analysis->Classic Timing Analyzer->Individual Clocks eintragen. > 3. Die nicht verwendeten Ausgänge scheinen der Anwendung nicht zu > gefallen. Legt man die besser an ein Bauteil (welches?), oder ist es ok, > nicht verwendete Ausgänge offen zu lassen? Project-Steiings->Device->Device and Pin options->Unused Pins da kannst du definieren was mit unbenutzten I/Os geschehen soll. "As input tri-stated" dann musst du die unbenutzten pins auf einen definierten Pegel legen, bei allen anderen Einstellungen kannst du die unbeschaltet lassen. Cheers, Roger
Hallo Roger, danke für Deine Unterstützung. > nun kann man philosophieren ob Register grundsaetzlich flankengesteuert sind Hm, also ich hatte Latches als flankengesteuert verstanden. Einen pegelgesteuerter Latch würde ich eher mit den analogen Switches ala 4051/4053 vergleichen. Aber sei's drum. Philosophieren muss nüchtern nicht sein :) > ein counter output als clock zu verwenden ist ein no-no. Verstehe ich das richtig: nicht die Verwendung des Zählers ist der Fehler, sondern das Fehlen eines FF als Puffer? Gruß Santi
Santiago m. H. wrote: > Verstehe ich das richtig: nicht die Verwendung des Zählers ist der > Fehler, sondern das Fehlen eines FF als Puffer? Zaehler ist natuerlich okay. FF als Register hast du auch schon. Nur sollten die auch von SCK getaktet werden, wie der Zaehler. Mittels eines clock enables (den gibts bei lpm_ff) steuerst du nun in welchem cycle die Daten uebernommen werden. Dieses enable kannst du aus dem Zaehler Ausgang ableiten. Cheers, Roger
Hallo Roger, habe es mal kurz umgestellt. Die Warnungen bezüglich der nicht verwendeten Ausgänge von Schieberegister und Zähler bekomme ich nicht weg - egal mit welcher Einstellung bei Device/unused pins. Dann habe ich entdeckt, dass Pin 37 wohl als globaler Takteingang vorgesehen ist. Habe also die Pinbelegung angepasst. Durch die nicht verwendeten Ausgänge kann er die Durchlaufzeiten nicht mehr bestimmen und dann wird das Ergebnis bei Eingabe einer gewünschten Frequenz (auch wenn die noch so gemütlich ist) nur noch schlimmer. Schätze die Einstellungen werden erst bei FPGAs wirklich unterstützt. Ist die jetzige Variante so OK? Gruß Santi
Nee, du benutzt ja immer noch FF-Ausgänge als Clock (Byte Latch, inst 5). Gruß Ralf
Santiago m. H. wrote: > habe es mal kurz umgestellt. > Ist die jetzige Variante so OK? noch nicht ganz, ByteLatch sollte auch wie das dffc via clock enable gesteuert werden. > Dann habe ich entdeckt, dass Pin 37 wohl als globaler Takteingang > vorgesehen ist. Habe also die Pinbelegung angepasst. Durch die nicht > verwendeten Ausgänge kann er die Durchlaufzeiten nicht mehr bestimmen > und dann wird das Ergebnis bei Eingabe einer gewünschten Frequenz (auch > wenn die noch so gemütlich ist) nur noch schlimmer. korrigier zuerst das design, falls du dann immer noch Timing Fehler bekommst, dann nimm die Pin zuweisungen weg und lass den Fitter das Pin assignment machen. Ist ein kleines CPLD da hast du nicht unendlich viel Freiheitsgrade. > Schätze die Einstellungen werden erst bei FPGAs wirklich unterstützt. Timing? Geht natuerlich auch bei CPLDs Cheers, Roger
Hallo, Scheint als hätte ich den Artikel Taktung FPGA/CPLD nicht richtig verstanden. In der Grafik sind doch 3 verschiedene Taktarten aufgeführt und der letzte (Clock Enable) wird empfohlen. dffc in meinem Plan entspricht doch dem FF2 aus dem Artikel - ich bin davon ausgegangen, dass der Ausgang von FF2 der zu verwendende (empfohlene) langsame Takt wäre. Das scheint nicht der Fall zu sein. Also könnte FF2 ein beliebiges Gatter sein, welches auf die gezeigte Art und Weise anzusteuern ist? Ist die jetzige Variante besser? Gruß Santi
Santiago m. H. wrote: > doch dem FF2 aus dem Artikel - ich bin davon ausgegangen, dass der > Ausgang von FF2 der zu verwendende (empfohlene) langsame Takt wäre. Nein, die Idee ist das ja alles mit dem 'schnellen" Takt laeuft. > Das scheint nicht der Fall zu sein. Also könnte FF2 ein beliebiges > Gatter sein, welches auf die gezeigte Art und Weise anzusteuern ist? Genau. > Ist die jetzige Variante besser? ja, mindestens solltest du jetzt keine Timing verletzungen mehr haben. Cheers, Roger
Hallo, ich denke, dass ich das mit der Taktsteuerung soweit verstanden habe. Muss man halt etwas um die Ecke denken, wenn man verschiedene Takte braucht. ... und schon hänge ich am nächsten Punkt :P In der Schaltung ist ja der /Reset-Pin mit 5 Gatter-Eingängen verbunden. Wenn ich in einer anderen Anwendung einen Pin an 8 Logik-gatter hänge, bekomme ich die Warnung:
1 | Warning: Macrocell buffer inserted after node "/xy" |
Ist das auch ein Timing-Problem, oder geht es eher um Spannungsversorgung? Wenn ich nach dem NOT ein lCell-Element einfüge, ist die Warnung weg. Leider verstehe ich die Hilfe zu dem LCELL-Element nicht wirklich. Was ist das? ... und wie wird es getriggert? Über Pegel, oder Flanke, oder ist es noch wieder was anderes? ... und wann muss ich sowas einsetzen, wann geht es ohne? Gruß Santi
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.