Hallöchen, nachdem ich mit Eurer Hilfe gestern erstmals (juchhe) nen
CPLD programmiert habe, ist es nun an der Zeit sich mit VHDL zu
beschäftigen.
Hab schon paar Bücher bestellt, aber probier schonmal bissl.
Ich hab mal nen Adressdecoder gebastelt und fehlerfrei übersetzt.
Hier der Code.. könnt ihr mal fix drübergucken ob das so ok ist ? Danke
!!
Ralph H. schrieb:> Hallöchen, nachdem ich mit Eurer Hilfe gestern erstmals (juchhe) nen> CPLD programmiert habe
Na bitte geht doch.
Beitrag "Re: GAL Entwicklungsborad gesucht"
Und nein, die Fallstricke waren nicht absichtlich... ;-)
Aber du hast sie offenbar umschifft.
Das mit der Addresse <-> Adresse war ein Fipptehler...
Ralph H. schrieb:> Hab schon paar Bücher bestellt
Eins hätte vorab gereicht. Falls es noch nicht dabei ist, dann schreibs
auf die Wunschliste: VHDL-Synthese Reichhardt&Schwarz
Das handelt zwar eher von FPGAs, aber wer sich schon mal an CPLDs traut,
der wird bald sehen, dass mit den paar FFs, die dort drauf sind, kein
Blumentopf zu gewinnen ist.
Ralph H. schrieb:> Hier der Code.. könnt ihr mal fix drübergucken ob das so ok ist ?
Vergiss am besten gleich bit und bit_vector. Nimm stattdessen den
std_logic und dessen Vektor. Denn damit lassen sich z.B.
Tristate-Ausgänge 'Z' beschreiben.
Hallo Lothar,
Danke für Deine Antwort ! Ich hab es jetzt sogar geschafft,
den Decoder mittels Testbench im Simulator zu simulieren :)
Es geht also aufwärts..
Nun steht als nächstes mal ein Latch an. Da hab ich aber gelesen,
dass man sowas NICHT nehmen soll?
Ich brauch aber nur ein Latch, wo ich nen Bitmuster (ROM-Bank Nr.)
mittels IO-Befehl speichere. Da denk ich mal, das sollte kein Problem
sein, in diesem Fall ein Latch zu nehmen oder?
Das Buch "VHDL-Synthese" ist übigens da und dort beschriebene
Bespiele erzeugen unter dem Webpack 12.3 welches ich benutze, Fehler!!
z.B. ist der Syntax für das Erzeugen der Testbench ziemlich anders..
Mach ich was falsch????
Ralph H. schrieb:> Nun steht als nächstes mal ein Latch an. Da hab ich aber gelesen,> dass man sowas NICHT nehmen soll?
Nach sorgfältiger Abschätzung...
> Ich brauch aber nur ein Latch, wo ich nen Bitmuster (ROM-Bank Nr.)> mittels IO-Befehl speichere. Da denk ich mal, das sollte kein Problem> sein, in diesem Fall ein Latch zu nehmen oder?
...spricht dem nichts entgegen. ;-)
Wie schon durch die Blume gesagt:
bei der Arbeit mit CPLDs ist (wegen der wenigen FFs) eher eine
74er-TTL-Denkweise angesagt.
> Das Buch "VHDL-Synthese" ist übigens da und dort beschriebene> Bespiele erzeugen unter dem Webpack 12.3 welches ich benutze, Fehler!!> z.B. ist der Syntax für das Erzeugen der Testbench ziemlich anders..> Mach ich was falsch????
Ja: du zeigst kein Beispiel, und sagst nicht, welche Fehler in welchem
Zusammenhang da kommen... :-/
> z.B. ist der Syntax für das Erzeugen der Testbench ziemlich anders..
Das glaube ich nicht.
Eine Testbench ist nur eine "normale" VHDL-Beschreibung, die keine Ports
nach aussen hat. Und in diese Test-Entity wird das zu testende Modul als
Komponente eingefügt und entsprechend verdrahtet.
> z.B. ist der Syntax für das Erzeugen der Testbench ziemlich anders..
Bestenfalls der Weg zur Erzeugung einer Testbench ist ziemlich anders.
Das kommt u.U. daher, dass seit ISE12 der ModelSim nicht mehr aktiv
supported wird, und alles auf den ISIM zugeschnitten ist...
Lothar Miller schrieb:>> z.B. ist der Syntax für das Erzeugen der Testbench ziemlich anders..> Bestenfalls der Weg zur Erzeugung einer Testbench ist ziemlich anders.> Das kommt u.U. daher, dass seit ISE12 der ModelSim nicht mehr aktiv> supported wird, und alles auf den ISIM zugeschnitten ist...
Jo genau das wird es sein, es geht ja auch prima, wenn ich den vom
WebPack automatisch erstellen Code für die Testbench erstmal verwende..
:-)
Heut will ich mal ein Latch bauen und dann den Adressdecoder mit
verknüpfen :)
Beste Grüße
PS: Deine HP finde ich echt sehr int. hab gestern mal geschnüffelt :-)
Lothar Miller schrieb:> Falls es noch nicht dabei ist, dann schreibs> auf die Wunschliste: VHDL-Synthese Reichhardt&Schwarz
...
> Vergiss am besten gleich bit und bit_vector. Nimm stattdessen den> std_logic und dessen Vektor.
Hm, irgendwie wird aber gerade im Reichhardt&Schwarz der bit_vector
empfohlen, wenn ich mich richtig erinnere. Das war eines der Dinge, die
mich dort gestört haben. Müsste nochmal schauen, ob die nicht auch noch
asynchrone Resets verwenden... :)
Anguel S. schrieb:> wird aber gerade im Reichhardt&Schwarz der bit_vector empfohlen
Richtig, in der ersten Hälfte , es werden auch gern noch die alten
Synopsis-Libs verwendet. Das habe ich offenbar verdrängt...
> Das war eines der Dinge, die mich dort gestört haben.
Das Buch ist ein lokales Hoch. Dort wird nicht einfach der VHDL-Syntax
durchgekaut, sondern das gemacht, was jeder könnte: einfache Schaltungen
analysiert und dem Synthesizer ein wenig auf die Finger geschaut.
Es gibt blöderweise m.E. (noch) nichts besseres Deustsprachiges...
Aber wenn jemand eines weiß: ich kauf mir das gern mal... ;-)
> Müsste nochmal schauen, ob die nicht auch noch> asynchrone Resets verwenden... :)
Die werden leider in mindestens 99% der VHDL-Bücher, die ich (gesehen)
habe, verwendet. Und das ohne wenigstens die Problematik mit asynchronen
Resets einmal anzusprechen... :-(
und wieder ein Stückchen weiter...(war ja nicht schwer).. das Latch
funktioniert :) auch als ausschließlich internes Latch :). Hier der
Code..
begin
-- Variante Latch mit Adressierung
Latchout <= DB when (ADR7 = "00010100" AND IORQ = '0' AND WR = '0')
Else Latchout ;
end VERHALTEN;
Einzig ein dominanter Reset fehlt noch. Leider ist mir das nicht
gelungen, das ein '0' zwingend die Ausgänge auf '0' setzt. Könnt ihr mir
helfen dabei ? Dankeschön !
Oh Du wolltest sehen ?? hihi dann schau mal.. Das ist mein aktueller
Stand... Sinn und Zweck ist es, je nach Latchbelegung das CS des EPROMs
zu aktivieren. D.h. Bei Bit0=1 Adresse E000..FFFF aber bei zusätzlichen
Bit3=1 bereits 8000..FFFF sowie bei Bit1=1 den Bereich von 4000..5FFF.
Was mir auffällt ist, das ich bereits 55% der Termressourcen des XC9536
belege. Geht das besser?, denn ich muss noch einiges unterbringen..
Beste Grüße vom Ralph
Ralph H. schrieb:> bereits 55% der Termressourcen des XC9536 belege.
Ja, nimm ein 9572... ;-)
Das 9536 ist das kleinste CPLD von Xilinx, da passt nicht viel rein.
> Geht das besser?
Überleg dir, ob du den Reset wirklich brauchst...
Na ich hab den Ergeiz es mit dem XC9536 zu schaffen, weil den hab ich im
DIP hier und kann ihn prima programmieren.
Ja Reset muss für das Latch unbedingt sein ! Evl. reicht es ja auch
es nur beim Latch zu benutzen.. und nicht in jeder Verknüpfung.
Ralph H. schrieb:> Na ich hab den Ergeiz es mit dem XC9536 zu schaffen, weil den hab ich im> DIP hier und kann ihn prima programmieren.
So richtig im DIP (also nicht PLCC)?
So.. ich habs grad mal probiert den Reset weiter rauszumachen.. das
bringt überhaupt keine Einsparung an Pterms und Funktion Blocks... also
bleibt es drinne :)
Ralph H. schrieb:> Was mir auffällt ist, das ich bereits 55% der Termressourcen des XC9536> belege. Geht das besser?, denn ich muss noch einiges unterbringen..
Bei einem CPLD ist das nicht so wie bei einem FPGA.
Die Produktterme "gehören" zum Funktion Block, und jedes Input- oder
Output Signal benötigt mindesten einen Funktion Block.
Nachteilig ist es eventuell nur dann, wenn ein FB von einem benachbarten
FB Produkt-Terme ausleihen muss.
Zähle dein Pins zusammen und deine internen FF oder Latches, und Du
solltest auf die Anzahl der FBs kommen, die Du mindestens braucht.
Sorgen machen musst Du Dir, wenn Dir die FBs ausgehen.
Schau Dir den Fitter Report an, dort sind die Gleichungen aufgeführt und
dort siehts Du auch die Signale, die so viele Product-Terme benötigen,
dass sie vom Nachbarn gestohlen werden müssen oder die so komplexe
Gleichungen haben, dass der Fitter einen Zwischenknoten einfügen muss.
Lothar Miller schrieb:> Es gibt blöderweise m.E. (noch) nichts besseres Deustsprachiges...> Aber wenn jemand eines weiß: ich kauf mir das gern mal... ;-)
Ich weiß nicht mal was gutes englischsprachiges, was tatsächlich
up-to-date ist und sich mit neueren FPGAs wie Spartan3 beschäftigt. Das
bekannte "FPGA Prototyping by VHDL Examples: Xilinx Spartan-3 Version -
Hardcover (Feb. 4, 2008) by Pong P. Chu" ist teilweise auch sehr
eigenartig und praxisfern...
Ralph H. schrieb:
> Was mir auffällt ist, das ich bereits 55% der Termressourcen des XC9536> belege. Geht das besser?, denn ich muss noch einiges unterbringen..
Die XC95xx CPLD haben keine Latches sondern nur Flipflops,
somit wird eine Latch-Beschreibung auf viele PTs umgesetzt.
Warum nimmst du keine Flipflops?
Wenn ich aus deinem Code z.B. sowas mache benötigt er weniger Resourcen:
Ergibt: 11% der PTs
@lkmiller
hier ist nun mit Absicht ein asyncroner Reset drin, denn sonst
wäre CSROM evtl. bis zur ersten Taktflanke undefiniert oder ?
bko schrieb:> bis zur ersten Taktflanke undefiniert
Das wäre mir erst mal egal, denn danach kommen noch viele zigtausende
Taktflanken, wo man das korrigieren kann... ;-)
Aber es kommt in der Tat darauf an, wie das konkret umgesetzt wird.
M.W. sind in den Makrozellen tatsächlich FFs mit asynchonem Reset
eingebaut, da würde sich de4r dann sehr wohl anbieten.
Hm.. Danke Euch beiden.. aber verstehe ich das richtig, dass ich da nun
noch extra einen Takt für meine Schaltung benötige ? Das wäre nicht so
gut.
Übrigens.. der hohe Verbrauch an Terms war wohl darin zu suchen, das die
Latchout's als Buffer auch als Ausgangssignal verwendet wurden, was ich
nicht brauche.. zumindest nicht alle Ausgänge
Hier mein aktueller Codestand..
Der CPLD soll also die Steuerung der RAM und ROM CS in abhängigkeit
versch. gesetzten Bits im Latch übernehmen, sowie diverse
IO-Adressselektionen vornehmen. Dabei hab ich aus PINspargründen das
Signal CSIO extern mit nem 74LS138 decodiert!