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
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?
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 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?
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
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);
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.