Forum: FPGA, VHDL & Co. VHDL Konfiguration ADC


von Sukram (Gast)


Lesenswert?

Hallo,

ich habe einen MAX V Baustein von Altera mit dem ich einen ADC mittels 
SPI ansteuere. Der ADC muss am Anfang konfiguriert werden. Dies 
geschieht über 16 Bits (Bsp. 0101011111111111). Die konfiguration soll 
die Logik übernehmen. Hierzu muss an der SDO Leitung dieser serielle 
Bitstrom erzeugt werden.  Da ich VHDL Anfänger bin ist es für mich 
momentan nich ganz einfach dies zu realisieren. Habt ihr Vorschläge wie 
das realisiert werden kann?

Viele Grüße
Sukram

von Sukram (Gast)


Lesenswert?

Ich hätte noch eine weitere Frage.
Wenn ich in der Entity Eingänge und Ausgänge definiere, kann ich diese 
auch intern weiterverarbeiten oder sind diese dann direkt Ein und 
Ausgänge der Logik?

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


Lesenswert?

Sukram schrieb:
> Habt ihr Vorschläge wie das realisiert werden kann?
Du brauchst also 1. eine Komponente, die SPI kann und 2. eine 
Komponente, die über diese SPI-Schnittstelle die passenden Daten 
überträgt und dazu die 1. Komponente passend ansteuert.

Sukram schrieb:
> Wenn ich in der Entity Eingänge und Ausgänge definiere, kann ich diese
> auch intern weiterverarbeiten
Ja klar. Es ist sogar der Ausnahmefall, dass die Ports einer Komponente 
an IO-Pins angeschlossen werden. Das kann nämlich nur von der 
"top"-Entity aus geschehen.
Dieses Top-Modul beinhaltet dann andere Komponenten, über deren Ports 
"interne" Entities angeschlossen werden. So z.B. in diesem einfachen 
Beispiel im Beitrag "Re: constanter Buswert in der Schematic (ISE WEBpack)" und dann 
die Links im Beitrag "Re: Aufrufen von untermodulen"

von Sukram (Gast)


Lesenswert?

Von was für Komponenten sprichst du? Wäre es möglich diese 
Konfigurationsdaten über einen Zähler zu erzeugen und dann über ein 
SChieberegsiter die Daten dem AD-Wandler übertragen? Mir geht es eher 
darum wie ich diese 16 Bits erzeugen kann?

von Thomas Ulrich (Gast)


Lesenswert?

Du legst einen Wert auf einen Vektor, baust eine Schleife von 1 .. 16 
und legst dann per Multiplexer die passenden Bits nacheiander raus oder 
schiebst sie raus:

ungefährt so:

process (doodle) is
begin
  if rising_edge (clk)

    if counter = 0 then
      vektor <= "001010101010101";
    elsif counter < 16 then
      vektor(14 downto 0) <= vektor (15 downto 1);
    end if;

    output <= vektor(0);

  end if;
end process

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


Lesenswert?

Sukram schrieb:
> Von was für Komponenten sprichst du?
Von einem SPI-Master und einer FSM, die diesen Master mit Daten füttert. 
Denn es wird nicht reichen, dem ADC 1 einziges Konfigurationswort zu 
senden. Veilmehr wirst du jedesmal, wenn du eine Wandlung machen willst 
1 Konfigurationswort senden, und gleichzeitig die Daten passend zum 
vorher übertragenen Konfigurationswort zurückbekommen.

> Mir geht es eher darum wie ich diese 16 Bits erzeugen kann?
Sieh dich mal hier im Forum um. Dieses Problem taucht laufend auf.
http://www.mikrocontroller.net/search?query=spi+vhdl+adc&forums[]=9&sort_by_date=1

Thomas Ulrich schrieb:
> vektor(14 downto 0) <= vektor (15 downto 1);
Damit wäre das MSB speichernd und du hättest implizit einen 
arithmetischen Rechtsshift. Üblicher ist es aber, alle Bits des 
Schieberegisters zu beschreiben. Etwa so:
   vektor <= '0' & vektor(15 downto 1);
Dann könntest du auch deine implizite Variante in einen expliziten 
arithmetischen Rechtsshift umwandeln:
   vektor <= vektor(15) & vektor(15 downto 1);

von Sukram (Gast)


Lesenswert?

Okay, dass muss ich mir mal anschauen versteh ich auf den ersten Blick 
nicht so ganz. Aber vielen Dank für die Hilfe. Ich denke es werden noch 
einige Fragen meiner Seite zur VHDL Programmierung auftauchen, da ich 
noch am Anfang meines Projekts bin.

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.