mikrocontroller.net

Forum: FPGA, VHDL & Co. xc9500, ps2


Autor: marcel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich versuche mit einem xilinx xc9536 einen kleinen controller zu
entwerfen welcher die seriellen daten einer ps2 tastatur intern in
parallele daten wandelt und nach erhalt eines kompletten frames einen
interrupt "am zielsystem" auslöst indem er eine steigende flanke an
einem seiner ausgänge erzeugt.

der controller funktioniert unregelmäßig ein paar tastendrücke
(jedesmal drei scancodes) wunderbar aber irgendwann (meistens nach ca 4
tastendrücken) "übersieht" er irgendwie eine fallende flanke an der
clock-leitung der tastatur oder erkennt eine zu viel und somit erhalte
ich nur noch unbrauchbare daten :(

ich habe das komplette webpack-projekt als rar-archiv im anhang

ich hab schon allesmögliche versucht und bin total am verzweifeln
kopfaufdietastaturschlag ich wäre überglücklich falls ihr mir helfen
könntet den fehler zu finden :)

gruß
marcel

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du deine Schaltung mal simuliert?

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, aber der VHDL-Code sieht total chaotisch aus.
Habe wenig Zeit, aber folgendes ist mir aufgefallen:
- ist reset bei Dir synchron ? Ich hoffe ja, ansonsten
  musst Du Deine Prozesse alle umschreiben :

process (reset, clk)
   if reset='0' then
      ...
   elsif rising_edge(clk) then
      ...

Wenn Du zuerst die Taktflanke abfragst, dann wird
alles nachfolgende synchron mit clk implementiert.

core.vhd, Zeile 92 : process(clk)
- ist hier völlig falsch, wenn Du anschließend
  reine Kombinatorik beschreibst.
richtig wäre : process (cs, rd, wr, read)

rxunit.vhd, Zeile 36: warum sind kclk und kdata
in der Sensitivity-List des Prozesses ?

Wie wärs, wenn Du über jeden process mal einen
Kommentar schreibst, was das ganze machen soll?

Weiterer Vorschlag:

Alle Signale die als Register/FF implementiert werden
sollen erhalten am Ende des Namens ein _q
z.B. counter_q
alle L-aktiven Signale _n, also reset_n,
alle asynchronen Signale wenigstens in Kommentaren
erwähnen, dann kann man die Sourcen besser lesen.

Autor: marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen lieben dank für die antworten :)

wie man unschwer erkennen kann bin ich blutiger neuling in dem gebiet

ich werde deine ganzen vorschläge gleich mal umsetzen und dann
weiterschaun

gruß
marcel

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, dann poste mal die neuen Sourcen, wenn
Du soweit bist, ich schau dann nochmal drüber

Autor: marcel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
so hier ist der aktuelle code :)

mein systemtakt wird von einem 4mhz quarzoszilator erzeugt... also habe
ich die ganze zeit mit diesem 4mhz takt am clk-eingang meines
controllers gearbeitet und nur unsinniges zeugs erhalten. gestern habe
ich mit einem HC74 einen einfachen frequenzteiler gebaut und somit
einen 2mhz takt an meinen controller gegeben... und siehe da... er hat
genau(meistens) das gemacht was er machen soll

ich verwende den xc9572-15 also die langsame 15ns version... aber diese
sollte doch dazu in der lage sein mit meinem 4mhz-takt zu funktionieren,
oder?

gruß
marcel

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keine Angst wegen der Geschwindigkeit, habe mit
einem 9572-15 einen 7-stelligen Frequenzzähler gebaut,
der bis 200 MHz zählt, also die Teile sind schnell.
Sehe mir heute Nachmittag mal die Sourcen an.

Autor: FPGA-User (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
na sehr viel Arbeit hast du dir nicht gemacht, aber
ok, ich hab mal die rxunit modifiziert weil ich denke,
dass schon dort probleme entstehen, wenn du kclk und
kdata abfragst, ohne sie auf deinen internen clk zu
synchronisieren. kclk ist jetzt nur noch vom typ IN,
weiss nicht, ob INOUT nötig war.
schau dir einfach mal die neue rxunit an + die Modelsim-
Waves.
Ist bestimmt nicht optimal, sollte aber erstmal so gehen.

viel spass

Autor: marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wow danke :)

des muss ich jetzt erstmal verstehen g

gruß
marcel

Autor: marcel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
so... ich habe nochmal den aktuellen code angehängt

es will irgendwie nicht so richtig... im großen und ganzen funktioniert
der controller aber ab und zu löst er einfach so einen interrupt zu viel
aus... ich weiß nicht recht warum :)

könntest du nochmal drüberschaun?

gruß
marcel

Autor: johnny (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo.
bin zwar auch neuling in sachen vhdl habe aber mit elektronik viel zu
tun.
wäre es nicht besser wenn du das "rxunit.vhd - Zeile 64 - kclk2_q <=
kclk1_q;"
bei der steigenden flanke machst. den hast du nen master slave
flipflop
weil momentan laufen diese beiden dinge " kclk1_q <= kclk; kclk2_q <=
kclk1_q;" gleichzeitig ab. das ist nicht so gut.
probier mal den etwas veränderten code aus.
mfg

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
an der Stelle sollte es keine Probleme geben,
das ist die typische Flankenerkennung bei
synchronen Schaltungen mit 2 hintereinander-
geschalteten FFs.
Im Gegenteil : wenn man hier mit 2 verschiedenen
Flanke arbeitet, kann es Timing-Probleme geben,
da ja nur noch die halbe Clockperiode verfügbar ist.
(ist hier unkritsch aufgrund sehr niedriger Taktfrequenz)

Also eine gute Design-Praxis ist : möglichst nur mit
einer Taktflanke arbeiten u. alles synchron implementieren.

marcel: ich schau bei Gelegenheit nochmal auf den Source-Code

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.