Forum: FPGA, VHDL & Co. ADS8365 über FPGA ansteuern


von Dennis L. (eslon)


Lesenswert?

Ich würde gerne den ADS8365 über einen FPGA ansteuern und natürlich die 
Bitstreams dann auch auslesen. Bisher hatte ich nur mit ADCs zu tun, wo 
ich nur ein CLK vorgeben muss. Bei diesem hier sind aber auf Grund der 6 
Channel diverse Timings einzuhalten und die entsprechenden Signale zum 
auslesen zu geben.
Vorest will ich nur 2 Channel nutzen.
Muss ich das über states in VHDL machen oder welche Möglichkeiten habe 
ich das in VHDL zu realisieren.

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


Lesenswert?

Dennis Lindner schrieb:
> Muss ich das über states in VHDL machen oder welche Möglichkeiten habe
> ich das in VHDL zu realisieren.
Wenn du das in VHDL machen willst, wirst du auf jeden Fall eine 
State-Machine brauchen. Denn nur so kannst du schrittweise irgendwas 
nacheinander machen.

Alternativ könntest du einen Prozessor auf dem FPGA als Soft-Core 
implementieren und die Ansteuerung in Assembler oder C machn. Aber das 
ist nur eine sehr umständliche Schreibweise für "technischer 
Overkill"... ;-)

Dennis Lindner schrieb:
> Bei diesem hier sind aber auf Grund der 6 Channel diverse Timings
> einzuhalten
Das hat nichts direkt mit irgendwelchen Kanälen zu tun. Es hat damit nur 
damit zu tun, dass die Statemachine im ADC so aufgebaut ist.

> Bisher hatte ich nur mit ADCs zu tun, wo ich nur ein CLK vorgeben muss.
Wenn du bisher nur Nägel kanntest, dann ist eine Schraube schon eine 
technische Herausforderung. Der Knackpunkt ist aber einfach: du brauchst 
ein anderes Werkzeug.
Im Fall des ADC heißt das: du braucht die FSM, damit du nacheinander die 
nötigen signale an den ADC anlegen kannst. Welche Signale und in welcher 
reihenfolge, das steht im Datenblatt.

von Dennis L. (eslon)


Angehängte Dateien:

Lesenswert?

Ich hab jetzt mal was zusammen geschrieben, wahrscheinlich überhaupt 
nicht elegant, aber ich denke es müsste funktionieren, konnte ich bisher 
noch nicht testen, weil der ADC noch nicht fertig ist.

Ich habe es erstmal nur für 2 Channel geschrieben und zum Teil schon die 
Erweiterung auf 6 Channel mit Kommentaren eingefügt, jedoch werden 
einige Teile bei 6 Channel sehr lang, wahrscheinlich fehlt mir da gerade 
die passende Idee, wie ich das eleganter umsetzen kann.

Verbesserungsvorschläge nehme ich gerne an.

von Klaus F. (kfalser)


Lesenswert?

Dennis Lindner schrieb:
> konnte ich bisher
> noch nicht testen, weil der ADC noch nicht fertig ist.

Genau aus diesem Grund gibt es VHDL Simulatoren ...

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


Lesenswert?

Klaus Falser schrieb:
> Genau aus diesem Grund gibt es VHDL Simulatoren ...
Den VHDL-Code debuggt man mit dem Simulator.
Das Design debuggt man mit dem Oszi und dem Logic-Analyzer.

Es bringt nichts, den VHDL-Code direkt auf der Hardware debuggen zu 
wollen.

von Dennis L. (eslon)


Lesenswert?

Ok, würd ich ja auch gern, hab bisher noch nicht herausgefunden wie oder 
mit was das in Quartus II 10.0 funktioniert.

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


Lesenswert?

Dennis Lindner schrieb:
> wie oder mit was das in Quartus II 10.0 funktioniert.
Stichwort: ModelSim

von Dennis L. (eslon)


Lesenswert?

Gutes Stichwort, Danke, habs damit hinbekommen und auch gleich ein paar 
Fehler gefunden :D

Hab gleich noch ne Frage zu diesem Teil hier:
1
.
2
.
3
.
4
when adress =>    if (channel=2 AND gelesen=0 AND A="000011") then    
5
                    A0 <= '0';
6
                    A1 <= '0';
7
                    A2 <= '0';
8
                    daten_channel <= 1;
9
                    A(0) <= '0';
10
                  end if;
11
                  if (channel=1 AND gelesen=0 AND A="000001") then
12
                    A0 <= '0';
13
                    A1 <= '0';
14
                    A2 <= '0';
15
                    daten_channel <= 1;
16
                    A(0) <= '0';
17
                  end if;
18
                  if (channel=1 AND gelesen=0 AND A="000010") then
19
                    A0 <= '1';
20
                    A1 <= '0';
21
                    A2 <= '0';
22
                    daten_channel <= 2;
23
                    A(1) <= '0';
24
                  end if;
25
                  if (channel=2 AND gelesen=1 AND A="000010") then
26
                    A0 <= '1';
27
                    A1 <= '0';
28
                    A2 <= '0';
29
                    daten_channel <= 2;
30
                    A(1) <= '0';
31
                  end if;
32
.
33
.
34
.


channel gibt die anzahl der auszuwertenden kanäle an, gelesen die 
bereits ausgelesenen und in A steht, je nachdem an welcher stelle eine 1 
ist, welcher channel noch auszulesen ist.
Das ganze funktioniert so ja nicht, wie kann ich das lösen?

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


Lesenswert?

Dennis Lindner schrieb:
> Das ganze funktioniert so ja nicht, wie kann ich das lösen?
Das sieht mir irgendwie kompliziert aus. Ich würde da einfach alle 
Kanäle nacheinander wandeln, und wenn ich damit fertig bin, habe ich 
alle Kanäle gewandelt... ;-)

von Dennis L. (eslon)


Lesenswert?

So einfach hab ich das noch garnicht betrachtet :D
Danke

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.