Hallo, ich wollte mal Daten von einen 16-bit ADC mit einem Xilinx Spartan3A Board auslesen. Leider fehlt mir da jetzt ein anhaltspunkt wo ich anfange. Könnt ihr mir da Tipps geben oder entsprechende Litertur, idealerweis mit Beispielen, empfehlen?
@ Neuling (Gast) >ich wollte mal Daten von einen 16-bit ADC mit einem Xilinx Spartan3A >Board auslesen. Der hat wahrscheinlich ein serielles Interface. Also brauchst du ein Schieberegister für die Daten, und eine State Machine für die Ablaufsteuerung. MFG Falk
Das hätte ich wohl noch schreiben sollen. Dies Daten sollen parallel ausgelesen werden. Hierzu benötige ich 16-Datenleitungen und 2Steuerleitungen(Output vom FPGA) sowie 1 Steurleitung (BUSY, Input vom FPGA).
@ Neuling (Gast) >Das hätte ich wohl noch schreiben sollen. Dies Daten sollen parallel >ausgelesen werden. Hierzu benötige ich 16-Datenleitungen und >2Steuerleitungen(Output vom FPGA) sowie 1 Steurleitung (BUSY, Input vom >FPGA). Ja umso besser. Vereinfacht die State Machine. Das notwenige Signalspiel steht im Datenblatt des ADC. MFg Falk
Aha....also sollte man das mit einer State Machine machen und nicht selber in VHDL programmieren, oder? Muss den man beim anschließen der Verbindungen irgendwas beachtet werden, oder einfach ran und funzt oder wie? Hatte bis jetzt noch nie externe Geräte angeschlossen, sondern nur die sachen die auf den Entwicklungsboards sind.
@ Neuling (Gast) >Aha....also sollte man das mit einer State Machine machen und nicht >selber in VHDL programmieren, oder? Eine State Machine kann man in VHDL, oder mit einem speziellenEditor erstellen. >Muss den man beim anschließen der Verbindungen irgendwas beachtet >werden, oder einfach ran und funzt oder wie? Im wesentlichen einfach anschliessen. Ausnahmen bstätigen die Regel ;-) MFG Falk
Hab mir mal wieder die Grundladen einer FST Machine durchgelesen. Aber irgendwie hab ich noch keine Vorstellung wie ich das genau für einen ADC realisieren kann. Hat einer von euch hierzu vielleicht einen passenden Link oder ein Beispiel für mich um mich besser einarbeiten zu könnne?
In der Entwicklungssoftware ist ein Beispiel für eine Statemachine in VHDL mitgeliefert. Ich habe hier das "Template" aus Altera Quartus, in Webpack ist vermutlich ähnliches drin:
1 | -- Quartus VHDL Template
|
2 | -- State Machine with Asynchronous Reset (1 block)
|
3 | -- State Machine outputs will be registered
|
4 | |
5 | LIBRARY ieee; |
6 | USE ieee.std_logic_1164.all; |
7 | |
8 | ENTITY fsm IS |
9 | PORT
|
10 | (
|
11 | clk : IN STD_LOGIC; |
12 | input1, input2 : IN STD_LOGIC; |
13 | output1, output2 : OUT STD_LOGIC |
14 | );
|
15 | END fsm; |
16 | |
17 | ARCHITECTURE rtl OF fsm IS |
18 | TYPE state_type IS (state1, state2, state3); |
19 | SIGNAL state: state_type; |
20 | BEGIN
|
21 | PROCESS (clk) |
22 | BEGIN
|
23 | IF clk'EVENT AND clk = '1' THEN |
24 | CASE state IS |
25 | WHEN state1 => |
26 | output1 <= value1; |
27 | output2 <= value2; |
28 | IF condition1 THEN |
29 | state <= state2; |
30 | END IF; |
31 | WHEN state2 => |
32 | output1 <= value3; |
33 | output2 <= value4; |
34 | IF condition2 THEN |
35 | state <= state3; |
36 | END IF; |
37 | WHEN state3 => |
38 | output1 <= value5; |
39 | output2 <= value6; |
40 | IF condition3 THEN |
41 | state <= state1; |
42 | END IF; |
43 | END CASE; |
44 | END IF; |
45 | END PROCESS; |
46 | |
47 | END rtl; |
Danke erstmal....aber der prinzipelle Aufbau ist mir schon klar. Interessanter wäre hierzu das Timing Diagramm zu sehen, um die verschiedenen States nachvollziehen zu können.
Gibt es den noch jemand der so ein Beispiel für mich hätte?
Das Timing-Diagramm steht im Datenblatt des ADC. Anhand dieses Diagramms musst du dir dann States erfinden, die dieses interpretieren (IN) bzw. nachbilden (OUT).
Jaja das ist mir schon alles klar. Aber irgendwie fehlt mir gerade der ansatz wie ich da anfangen soll. Also die eine Steuerleitung auf Low setzen (ein Takt) dann wieder auf High und auf die Steuerleitung warten die mir sagt das die Konvertierung fertig ist....da habe ich gerade ein gedankliche Blockade und weis nicht recht wie ich da anfangen soll.
Neuling wrote: > Jaja das ist mir schon alles klar. Aber irgendwie fehlt mir gerade der > ansatz wie ich da anfangen soll. Du nimmst das Timingdiagram von dem Datenblatt und ziehst jedesmal eine senkrechte Linie, wenn ein Signal sich ändert. Jetzt nummerierst du die einzelnen Bereiche durch und schon hast du deine States für die FSM. Jetzt musst du nur beachten das dein Systemtakt wahrscheinlich viel höher ist als die Länge der States. Also wirst du noch einen Zähler bemühen müssen, damit die States so lange sind, wie im Timingdiagram spezifiziert.
;-) stimmt so macht das irgendwie Sinn. Am besten ich mache das mal und kann es hier dann ja mal posten.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.