hallo miteinander,
ich beschäftige mich rein autodidaktisch mit einem xc9536. Hab Null
Vorkenntnisse aufzuweisen und gehe einen entsprechend steinigen Weg,
hoffe daher auf Geduld.
Meine Frage: Wie initialisiert man im cpld eigentlich Signale. Las, daß
das vergeben von Startwerten nur für eine Simulation Wirkung hat. Die
bisherige Literatur sagt immer: will man in realer Hardware eine
Initialisierung haben, muss man dies anders erreichen. OK. Schön. Und
konkreter?
Die einzige Idee wäre, alles in einen reset prozess zu stecken und zu
hoffen, daß der nach dem Einschalten zum richtigen Zeitpunkt durchlaufen
wird. (der ganze Baustein läuft ja schnell los, aber falls mal fpgas ein
Thema werden - die brauchen doch unkalkulierbar lange?)
Alternative Vorstellung wäre für mich ein Internes Signal 'cpld' (oder
fpga) läuft los, was man in die Sensitivitätsliste eines
Initialisierungsprozesses schreiben könnte....
Irgendwie überzeugt mich alles nicht.
Ach ja: Konkret möchte ich nur einen Vektor mit 'irgendeinem'
definierten Wert laden können und den einfach mit einem Taster
rundschieben.
Das Problem ist aber ja denke ich immer da. Seien es Register, Zustände
oder was auch immer.
Daher die Frage: Wie mache ich das am besten. Mit meinem cpld und
allgemein?
Wenn Du eine aktuelle ISE Software (Webpack oder Foundation) verwendest,
wird das Initialisieren unterstützt.
Das heißt, ein Signal das mit
signal mySig : std_logic := '1';
definiert wird, startet mit High.
Kein Grund, also sich Sorgen zu machen.
> Las, daß das vergeben von Startwerten nur für eine Simulation Wirkung hat. Die> bisherige Literatur sagt immer: will man in realer Hardware eine> Initialisierung haben, muss man dies anders erreichen.
Theorie und Praxis. Es gibt Standards, die auf VHDL aufbauen und die
festlegen, was mindestens synthetisierbar ist. Signalinitialisierungen
sind das nicht. Das bedeutet aber erstmal nur, dass es wieder auf das
konkrete Synthesetool ankommt, ob diese Initialisierungen nun
synthetisiert werden oder nicht. Wie Klaus schon sagte ist das bei
aktueller Xilinx-Software der Fall.
Die Bücher zum Thema orientieren sich oft nur am Standard, selbst wenn
der schon veraltet ist. Das ist leider etwas praxisfern, weil man 1.
keinen Zugriff auf Features wie Signalinitialisierungen hat, die in der
Praxis sehr nützlich sind, und 2. der Standard noch lange nicht
garantiert, dass die Programme sich auch an ihn halten...
Was ich möchte: 8 leds mit einem Muster vorinitialiisieren und per
Taster einfach immer im Kreis schieben.
Das vorinitialisieren funktioniert (obgleich mir daran nicht gefällt,
daß ein internes Signal und nicht der Ausgabe Vektor initialisiert
werden muss.)
Was nicht funktioniert, ist die Funktion.... welch sprachliches
Konstrukt.
Warum die leds sich -irgendwie- ändern und das auch noch bei Tasten
Druck und loslassen....da bräuchte ich Rat. Achja den Taster habe ich an
gclk0 angeschlossen und mit einem rc Glied an einem Schmitt Trigger,
hoffentlich, entprellt. Passiert auch nur beim niederdruck und leider
loslassen entwas.
@ Hartmut F. (Gast)
Der Code ist erstmal OK.
>Taster einfach immer im Kreis schieben.
Taster? Als Takt für einen sauschnellen CPLD?
>gclk0 angeschlossen und mit einem rc Glied an einem Schmitt Trigger,>hoffentlich, entprellt.
Klingt komisch deine Beschreibung. Poste mal einen Schaltplan unter
Beachtung der Bildformate.
Entprellung funktioniert wie im Artikel beschrieben.
MFG
Falk
Anbei der Schaltplan. Der Schalter ist bischen fragwürdig, ich habe aber
in der Eile nichts besseres gefunden, hoffe wird euch klar.
Code soweit ok ist doch was dann habe ich sicher einen Fehler in der
Schaltung / Aufbau. Wenn das sehr unkonventionell ist, den Taster zum
takten zu nehmen - wie würde ich es richtig, d.h.
fehlerunanfälliger/narrensicher machen?
Könnte ich editieren, würde ich jetzt schreiben, daß ich die
invertiereigenschaft nciht bedacht habe und daher auch die 'rising' edge
irgendwie nicht passst.
Ich werde die von die verlinkte Entprellung ausprobieren und bin recht
zuversichtlich.
vielen Dank erstmal!
@ Hartmut F. (Gast)
>takten zu nehmen - wie würde ich es richtig, d.h.>fehlerunanfälliger/narrensicher machen?
Indem du mal einen Schmitt-Trigger verwendest. Das was du dort hast ist
KEIN Schmitt-Trigger! Das ist ein einfacher Inverter. Damit geht das
nicht! Du brauchst einen 74HC_14_ ! Statt 74HC_04_ .
Siehe Entprellung.
Und machs auch mit den Widerständen wie im Artikel. Spart Nerven und
sinnlose Nachfragen.
MFG
Falk