Hallo,
ich habe ein kleines Problem. Ich bastel gerade an einem FPGA rum und
muss den Output von 1.5V auf 3.3V hochsetzen. Laut Anleitung muss ich
einfach nur zwei Register setzen. Ich sehe spontan keine andere
Möglichkeit, als das mit VHDL zu lösen (glaube ich zumindest). Ich habe
aber überhaupt keine Ahnung von VHDL.
Ich habe mir ein paar Tutorials und Beispiele im Netz angeschaut, werde
aber irgendwie nicht daraus schlau, möchte jetzt allerdings auch nicht
Stunden investieren, um die Sprache zu lernen, wegen einer Kleinigkeit.
Also, ich will nur die Register 0x8 auf den Wert 0x80 setzen und das
Register 0x0 auf den Wert 0x00.
Kann mir da jemand helfen? :)
Ein FPGA mit Registern um eine Spannung einzustellen? Wohl kaum. Da ist
wohl ein externer ADC dran? Meine Glaskugel sagt, dass der per SPI
angeschlossen ist und eben entsprechend einzustellen ist. Aber die
Glaskugel ist sehr trüb heute, schwer zu erkennen....
KAnn auch sein, wobei 1,5V schon recht unüblich sind. Und über welches
Register bitte soll das gehen? Da müsste ja ein programmierbarer
Spannungsregler die VCCIO speisen.
Oje, ich hatte schon befürchtet, dass meine Erklärung voll Unwissenheit
hinten und vorne nicht reicht.
Der Ingenieur hat schon Recht, ich möchte die Bankspannung ändern.
Ich benutze ein Spartan-3A DSP von Xilinx.
An die Pins der Bank komme ich nicht ran, sonst könnte ich einfach die
3.3V Ausgänge benutzen. Zur Zeit ist der Augang auf einem justierbaren
Voltage Rail: FMC expansion connector (ich weiß nichtmal genau was das
bedeutet).
Hier mal der Auszug aus dem Handbuch, der mich zu meiner Frage getrieben
hat:
To set the appropriate voltage on the FMC connector, an I²C digital pot
must be set to a specific value. The value should be written to the
volatile register of the digital pot. This register is located at
address 0x00. To write to the volatile section of the digital pot make
sure that address 0x08
is set to 0x80.
Aus dem Rest des Buches habe ich mir zusammengereimt, dass ich dies in
VHDL machen müsste, aber wie gesagt, vielleicht habe ich das Ganze auch
falsch verstanden.
Oha, da hast du dir ja was vorgenommen. Dazu musst du einen I2C
Controller in dein System implementieren, das ist ohne Vorkenntnisse
gelinde gesagt, schwierig. Was genau ist denn das für ein Board? FMC ist
der "FPGA Mezznine Card" Verbinder, der ist üblicherweise auf neueren
Xilinx Demo-Boards zu finden. Aber Spartan 3 und FMC hab ich noch nicht
gesehen. Poste doch mal den Link zu dem Board, und erklär, wieso du die
Boardspannung ändern willst/musst. 1.5V klingt für mich nicht nach
ungefähr, kann es sein, dass da ein Mobile DDR RAM dran hängt?
Edit: Hab das Board gefunden, ist das XtremeDSP™ Development Platform
Spartan-3A DSP 3400A, oder?
Da geht die Spannung offenbar wirklich nur zu den FMC Steckern. Naja,
dann siehe oben. Ein I2C Controller muss dran. Was läuft denn auf dem
FPGA? VIelleicht sogar ein MicroBlaze Prozessor?
Christian R. schrieb:> Oha, da hast du dir ja was vorgenommen. Dazu musst du einen I2C> Controller in dein System implementieren, das ist ohne Vorkenntnisse> gelinde gesagt, schwierig.
Falls es der einzige IC an diesem I2C ist und du nur diese beiden
Register setzen willst, brauchst du keinen kompletten I2C Controller, da
genügt es per FSM einen paar bits im richtigen timing rauszushiften.
Gruß
Richtig. Ich häng mal den Simpel-I2C Core an, der in der FPGA
Implementierung des Apple II verwendet wird, um den Sound-Controller
beim Start einzustellen. Du könnte man simpel anpssen. Da werden auch
bloß einmalig ein paar Register beschrieben...
Christian R. schrieb:> Edit: Hab das Board gefunden, ist das XtremeDSP™ Development Platform> Spartan-3A DSP 3400A, oder?>> Da geht die Spannung offenbar wirklich nur zu den FMC Steckern. Naja,> dann siehe oben. Ein I2C Controller muss dran. Was läuft denn auf dem> FPGA? VIelleicht sogar ein MicroBlaze Prozessor?
Genau dieses Board ist es.
Micro- oder PicoBlaze, gute Frage. Könnte ich erst am Montag wieder
nachschauen.
Als ich das Board in die Hand gedrückt bekam, war es schon auf 1.5V
eingestellt, ich weiß nicht, was damit vorher gemacht wurde. Ich muss
eigentlich nur einen Bitstrom aus einem Gerät auslesen, protokollieren
und weitergeben. Das weiterverarbeitende Gerät kann aber nur mit 3.3V
arbeiten.
Wie mir das aussieht, bin ich wohl doch schneller, wenn ich den Kasten,
wo das Board drin ist aufschraube, die Bank manuel auf 3.3V ändere und
dann das Ganze wieder zusammenbastel.
Trotzdem vielen Dank für die Hilfe, ich werde mich mal ein wenig in den
Code vom I2C Controller einlesen, vielleicht komm ich damit noch ein
wenig weiter.
Hm, das sind ja wieder tolle Aufgabenbeschreibungen. Also die
Bank-Spannung an diesem Board kannst du niht manuell ändern. Dazu muss
man das Digital-Poti einstellen. Wenn da ein *blaze drauf ist, ist
sicherlich schon irgendwo eine I2C Funktion implementiert, das machts
dann einfacher.
Christian R. schrieb:> Richtig. Ich häng mal den Simpel-I2C Core an, der in der FPGA> Implementierung des Apple II verwendet wird, um den Sound-Controller> beim Start einzustellen. Du könnte man simpel anpssen. Da werden auch> bloß einmalig ein paar Register beschrieben...
Ist ein bißchen komplizierter als nötig.
Picoblaze odergar Microblaze ist IMHO auch zu viel des Guten.
Im wesentlichen braucht es ein schieberegister das seriell ca. 2x27 bit
auf SDA rausschiebt (Address&rw&ACK&data&ACK&DATA&ACK) (siehe Philips
I2C specification S. 13), dazu um eine viertel periode versetzt SCL
klappern lassen (S.9) . Dazu eine kleine Statemachine die die Start/Stop
condition (SDA wechsel während SCL High) realisiert und abschliessend
auf Tristate schaltet.
Idealerweise nimmst du für Xilinx ein paar vorinitialisierte SRL16
Macros für ROM und schieben, dann sollteset du mit wenigen Slices (10
-25? (grobe Schätzung)) auskommen.
MfG