Forum: FPGA, VHDL & Co. FPGA über I2C steuern


von Sigi (Gast)


Lesenswert?

Hallo VHDL Gemeinde

Ich möchte mit I2C, Werte und Zustände in einem FPGA ändern aber auch 
auslesen können. Hauptsächlich sind das Werte von VARIABLEn bzw. 
SIGNALen.

Also müsste ja der FPGA als Slave arbeiten und der I2C Controller der 
Master sein. Ich habe aber keine Idee wie ich den FPGA und desen Inhalt 
ansprechen kann.

Kann mir da jemand nen Tip geben bitte.

Sers :)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Sigi schrieb:
> Werte und Zustände in einem FPGA ändern aber auch auslesen können.
> Hauptsächlich sind das Werte von VARIABLEn bzw. SIGNALen.
> Ich habe aber keine Idee wie ich den FPGA und desen Inhalt
> ansprechen kann.
Was ist denn überhaupt dein Problem?
Im FPGA gibt es keine Signale und keine Variablen.
Dort gibt es nur Register und Logik...

> Also müsste ja der FPGA als Slave arbeiten und der I2C Controller der
> Master sein.
> Kann mir da jemand nen Tip geben bitte.
Du wirst einen I2C Slave ins FPGA hacken müssen, wenn du da irgendwas 
hin- und herbewegen willst...
Aber das ist vorerst noch schwieriger, als du dir vorstellen kannst. 
Welche Erfahrung hast du mit VHDL und FPGAs?

von Sigi (Gast)


Lesenswert?

Lothar Miller schrieb:
> Welche Erfahrung hast du mit VHDL und FPGAs?

...sagen wir mal Basiswissen ist vorhanden. Die Aufgaben die ich in VHDL 
lösen musste habe ich bis jetzt immer "hinbekommen".

Lothar Miller schrieb:
> Dort gibt es nur Register und Logik...

Ich meinte Zustände in FF und Registern ändern :). Da habe ich mich 
flasch ausgedrückt.

Also müsste ich ja erstmal wissen wie die Hardwareadressen der Register 
sind wo die Werte gespeichert sind?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Sigi schrieb:
> Also müsste ich ja erstmal wissen wie die Hardwareadressen der Register
> sind wo die Werte gespeichert sind?
Klar weißt du das. Du selber schreibst das ja hin:
signal meinregister : std_logic_vector(7 downto 0);
Und genau das meinregister mußt du über den I2C zurücksenden, wenn 
jemand "draussen" diesen Wert wissen will, und das dann über I2C 
anfragt.

Es gibt nicht (wie z.B. in einem uC) irgendwelche "Registersätze" im 
FPGA, die über irgendwelche "Adressen" angesprochen werden.
Diese Denkweise ist grundsätzlich falsch!

von Sigi (Gast)


Lesenswert?

Lothar Miller schrieb:
> Diese Denkweise ist grundsätzlich falsch!

...das hör ich immer wieder. Ich verfalle immer wieder in das C-Denken.

Also ist der Name des SIGNAls / der VARIABLen gleichzeit der 
Registername. Also muss ich mit I2C auch diesen "Namen" ansprechen?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Sigi schrieb:
> Also muss ich mit I2C auch diesen "Namen" ansprechen?
Du kannst da nichts "ansprechen" (schon wieder diese Pointer-Denkweise).
Du mußt das hart und explizit "verdrahten":
Wenn z.B. ein Bitmuster "00010110" als I2C-Adresse auftauchen sollte, 
dann wird meinregister an den I2C Master zurückgegeben (das ist jetzt 
meine Definition, deine wird logischerweise anders aussehen).
Und in der Hardware wird das letztlich als Multiplexer abgebildet.

von Sigi (Gast)


Lesenswert?

Hmmm...ok. Ich glaube das wird mir noch Kopfschmerzen machen :).

Danke erstmal.

von Kleiens Licht (Gast)


Lesenswert?

Das macht nicht nur dir Kopfschmerzen ,-)

Herr Miller und einige andere auch sind hier aber sehr hilfbereit und 
haben i.d.R. gute Ratschläge.
Frage ist denke ich natürlich ob bei dir was professionelles rauskommen 
soll oder so ein gesundes 'hab ich grob verstanden' wie bei mir 
ausreicht.

Persönlich würde ich mir die Verwirrung wirklich konkret vorstellen, 
nämlich als 74er Grab, was kreuz und quer wild gefädelt wird.
Da sind dann 8 FF da steht ein Aufkleber "meinregister" drauf. Soll das 
in ein Senderegister, muss( bzw 'kann' ist ja auch praktisch irgendwie) 
das bit für bit an dieses Senderegister gefädelt werden. Also nicht über 
eine Adresse, einen Bus oder sonstwas angesprochen werden.

Man möge dieses Bild gerne korrigieren wenns dann doch zu naiv ist.

von Christian R. (supachris)


Lesenswert?

Sag uns doch erst mal, wozu das gut sein soll. Meistens werden hier 
Probleme erörtert, die gar keine sind. Soll das zum Debuggen sein? Wenn 
ja, das geht sowieso überhaupt nicht mal ansatzweise so, wie beim einem 
µC. FPGAs werden durch Simulation verifiziert. Für ganz haarige Sachen 
hilft auch mal ChipScope, Problem dabei ist aber, dass der aktiv Teil 
des Systems ist und nicht einfach unabhängig vom Rest der Logik agiert.

von Sigi (Gast)


Lesenswert?

Ich habe einen FPGA auf dem eine Videobearbeitung und Funkübertragung 
läuft. Nun möchte ich per I2C gewisse Werte ändern. Auflösung, 
Modulation...etc.

Habe gerade ein I2C Slave für den FPGA gefunden. Und siehe da, auf 
einmal machte es klick wie ich das programmieren muss. Habe wieder mal 
erlebt wie schön und hilfreich Kommentare zu den Befehlen sein können.

Das Teil "verdrahtet" mit dem anderen VHDL "Zeug"...und läuft.

Jetzt muss ich mich nur noch um die Programmierung des uC kümmern..."nur 
noch" ;)

von dr.schmock (Gast)


Lesenswert?

http://www.fpga4fun.com/I2Cslave1.html

Hier gibt's eine Verilog-Implementierung. Muss man noch nach VHDL 
übersetzen, ist sicher viel einfacher als alles neu zu erfinden.

MfG

von dr.schmock (Gast)


Lesenswert?

...ach was seh ich da... unten auf der genannten Seite gibt's ne 
VHDL-Implementierung runterzuladen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

dr.schmock schrieb:
> unten auf der genannten Seite gibt's ne
> VHDL-Implementierung runterzuladen.
Mit solchen Konstrukten:
1
-- stop condition detection
2
process (RST, SCL, SDA_IN, START)
3
begin
4
  if RST = '0' or SCL = '0' or START='1' then
5
    STOP <= '0';
6
  elsif SCL = '1' and SDA_IN = '1' and SDA_IN'event then
7
    STOP <= '1';
8
  end if;
9
end process;
Ein asynchroner kombinatorischer Reset mit nicht einsynchronisierten 
externen Signalen... :-o
Für ein CPLD lasse ich das noch mal durchgehen. Aber ich würde /sehr 
empfehlen/, dieses Design vor der Serienauslieferung auf Herz&Nieren zu 
testen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.