mikrocontroller.net

Forum: FPGA, VHDL & Co. MICO32 - Probleme mit 32Bit GPIO


Autor: Reini (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich hab's jetzt endlich geschafft, dass der MICO32 einigermaßen läuft. 
Allerdings ist mir aufgefallen, dass der Core abstürzt wenn ich alle 
Bits eines GPIO-Ports auf '1' setzen möchte. Der Port hat nur Ausgänge 
mit insgesamt 32 Bit.

Die Kurzform meines C-Codes sieht folgendermaßen aus:
MicoGPIOCtx_t *port1 = (MicoGPIOCtx_t *) MicoGetDevice("port1");

MICO_GPIO_WRITE_DATA(port1,0x00000000); // Funktioniert
MICO_GPIO_WRITE_DATA(port1,0x00000001); // Funktioniert
MICO_GPIO_WRITE_DATA(port1,0xFF000000); // Funktioniert
MICO_GPIO_WRITE_DATA(port1,0xFFFFFFFF); // Funktioniert NICHT

Vielleicht hat ja jemand eine Idee. Bin für jeden Tipp dankbar.

Reini

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hängt denn am GPIO dran? Hast Du vielleicht den Reset drangehangen?
Ich würde mal jedes Pin/Bit einzeln testen.

Duke

Autor: Reini (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, der MICO32 hat zwar einen 32Bit Ausgang, im Design sind im Moment 
allerdings nur die unteren 18Bit mit einem Pin (über Output Buffer) 
verbunden.
Das sollte aber keine Rolle spielen, denke ich.

Das Programm beginnt im Falle eines Absturzes von vorne mit dem 
Programmlauf, oder springt irgendwohin und bleibt dort hängen.

Für mich deutet das auf irgendwelche Zeiger-Probleme hin. Kann ich das 
irgendwie rauskriegen ?

Autor: bko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Reini:

Probier es mal so oder ähnlich,
MICO_GPIO_WRITE_DATA(port1,0x00000001); 
MICO_GPIO_WRITE_DATA(port1,0xFF000007);
MICO_GPIO_WRITE_DATA(port1,0xFF00001F); 
MICO_GPIO_WRITE_DATA(port1,0xFF00003F);
MICO_GPIO_WRITE_DATA(port1,0xFF0000FF);
MICO_GPIO_WRITE_DATA(port1,0xFF0003FF);
  usw. bis 
MICO_GPIO_WRITE_DATA(port1,0xFFFFFFFF); 
wenn dies ohne Absturz geht, aber nicht mit dem Code aus deinem
ersten Posting, hast du vielleicht ein  Problem damit, das zu viele
Ports gleichzeitig umschalten (auf amerikanisch: SSO-noise)
Das erzeugt evtl. kurze Einbrüche auf der Versorgung,
und lässt die Logik kurz mal entgleisen ...

Bei Lattice kenne ich mich nicht so genau aus, bei Xilinx
gibt es die sog. SSO-Guidelines, das sind Tabellen welche
darstellen wieviele Pins zwischen einem VDD/GND Paar
bei welcher Treiberstärke (4,8 12,.. mA) gleichzeitig Schalten
dürfen, das ist bei Lattice wahrscheinlich ähnlich.

Bei Lattice hab ich unter dem Stichwort "SSO guidelines" z.B.: dies
 da gefunden:
http://www.latticesemi.com/forums/forum/messagevie...

Autor: Reini (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@bko

Danke für den Tipp.

Ich hab jetzt folgenden Test gemacht:
Habe auf den Port folgende Werte geschrieben: 0x0, 0x1, 0x2 etc., also 
ein einfacher Inkrement.
Das geht gut bis 0x7FF. Bei 0x800 steigt der MICO aus.
Das gleiche passiert wenn ich mich von oben annähere:
0x1001, 0x1000 ist in Ordnung. Bei 0xFFF ist wieder Schluss.
Es sieht also so aus, als ob ein bestimmtes Bit ein Rolle spielen würde.

Möglicherweise taucht das ganze bei den höherwertigen Bits nochmal auf. 
Hab das noch nicht getestet.

Kann mir jedenfalls noch keinen Reim drauf machen.

Gibts irgendeine spezielle Einstellung, die besonders wichtig ist und 
von mir übersehen wurde?

Gruß
Reini

Autor: bko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dein Beispiel bestätigt meine Vermutung, denn z.B. bei Wechsel
von 0x7FF auf 0x800 schalten auch wieder  12 Out-Ports gleichzeitig!
Das könnte Störungen auf der Spannungsversorgung verursachen.

Wenn deine Ports nicht schnell sein müssen:
  - "Slow Slew" bei den Outputs einstellen.
  - die Treiberstärke (drive strength) reduzieren
   Ich denke das muss auch bei den Lattice-Tools für jeden Pin
   extra einstellbar sein.
oder oder und   :)
wenn dein Pinning es zulässt dann nimm für deinen 32-Bit-
   Bus Ausgänge die weiter voneinander entfernt liegen.

Was hängt an deinen Ausgängen, und was für ein Board benutzt du ?

Eventuell ist bei deinem Board auch die Versorgung das Problem
  - sind an jedem VCC/Ground Pin die richtigen Blockkondensatoren ?
  - sind diese nahe genug am Chip ?
  - wie sehen die Versorgungen aus ?

 hierzu auch die Doku von Lattice durchlesen ..

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Okay, der MICO32 hat zwar einen 32Bit Ausgang, im Design sind im Moment
>allerdings nur die unteren 18Bit mit einem Pin (über Output Buffer)
>verbunden.
>Das sollte aber keine Rolle spielen, denke ich.

Naja, Versuch macht kluch! Häng doch einfach den Rest auch mal an Pins, 
so dass garantiert nichts weg"optimiert" wird und versuch nochmal. Ist 
jetz ja nicht der riesen Aufwand.

Autor: Reini (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habs gefunden.

Verantwortlich für den Fehler war ein VHDL-Block (der mir bereits 
mehrfach Kummer bereitet hatte). Damit werden DVI-Bildparameter 
bestimmt. Unter anderem auch die Pixelfrequenz. Das ganze wird asynchron 
ausgemessen. Aus irgendwelchen Gründen scheint das Synthese-Tool hier 
ein Problem zu haben und schießt dann entweder das komplette Design in 
die Tonne, oder es funktioniert scheinbar mit sporadischen, 
unerklärbaren Fehlern (siehe oben). Mit den Tools anderer großer 
Hersteller gabs hier noch keine Probleme.

Trotzdem gelten natürlich die Tipps, die bko gemacht hat (stabile 
Versorgungsspannung etc.).

Vielen Dank für die Hilfe.


Gruß
Reini

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.