Hallo, ich bin noch recht neu im Umgang mit VHDL und habe gerade meine erste kleine DC-Motoransteuerung mit einfacher Spannungsregelung und kleinem UART-Interface hinbekommen. Ich arbeite mit einem Arty A7-35T und würde jetzt gerne ein paar Werte nach der Eingabe über das UART-Interface auf dem internen Flash dauerhaft ablegen, so dass ich nicht jedes Mal den FPGA umprogrammieren muss. Falls ich das Internet richtig verstanden habe, sollte der Flash über den Quad SPI-IP Core ansprechbar sein, allerdings bin ich etwas überfordert. Hat jemand von euch das schon gemacht? Grüße Julian
Julian schrieb: > Falls ich das Internet richtig verstanden habe, sollte der Flash über > den Quad SPI-IP Core ansprechbar sein, allerdings bin ich etwas > überfordert. Richtig. Je nach Board Revision hast du unterschiedliche Flash Bausteine: Revision E: S25FL128SAGMF100 Revision C: N25Q128A13ESF40 alias mt25ql128 Du kannst das jetzt auf mehrere Arten machen: Zu Fuß, also in Datenblatt des Flash Bausteins https://www.cypress.com/file/177971/download gucken welche Befehle du brauchst und die dann über SPI an den Baustein schicken und dabei SPI selber beschreiben. Mit dem AXI Quad SPI IP aber ohne CPU. Da solltest du den Userguide https://www.xilinx.com/support/documentation/ip_documentation/axi_quad_spi/v3_2/pg153-axi-quad-spi.pdf lesen. Mit CPU im FPGA und dem AXI Quad SPI IP. Das ist vermutlich der einfachste Weg. Aber: Julian schrieb: > Hat jemand von euch das schon gemacht? Nein, ich habe das noch nicht gemacht. Wenn ich nur wenige Werte permanent speichern möchte, quasi Einstellungen die einen Neustart überleben, dann verwende ich dafür so kleine EEPROMS wie die 93LC46/56/66.
Hallo, prinzipiell stimmt der Hinweis oben. Wenn du aber die Daten auf dem Boot-Flash ablegen möchtest, muss du noch die STARTUPE2-Komponente benutzen.
1 | -- Access to CCLK pin
|
2 | STARTUPE2_inst: STARTUPE2 |
3 | generic map ( |
4 | PROG_USR => "FALSE", -- Activate program event security feature. Requires encrypted bitstreams. |
5 | SIM_CCLK_FREQ => 0.0 -- Set the Configuration Clock Frequency(ns) for simulation. |
6 | )
|
7 | port map ( |
8 | CFGCLK => open, -- 1-bit output: Configuration main clock output |
9 | CFGMCLK => open, -- 1-bit output: Configuration internal oscillator clock output |
10 | EOS => open, -- 1-bit output: Active high output signal indicating the End Of Startup. |
11 | PREQ => open, -- 1-bit output: PROGRAM request to fabric output |
12 | CLK => '0', -- 1-bit input: User start-up clock input |
13 | GSR => '0', -- 1-bit input: Global Set/Reset input (GSR cannot be used for the port name) |
14 | GTS => '0', -- 1-bit input: Global 3-state input (GTS cannot be used for the port name) |
15 | KEYCLEARB => '1', -- 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM) |
16 | PACK => '0', -- 1-bit input: PROGRAM acknowledge input |
17 | USRCCLKO => flash_clk, -- 1-bit input: User CCLK input |
18 | USRCCLKTS => '0', -- 1-bit input: User CCLK 3-state enable input |
19 | USRDONEO => '1', -- 1-bit input: User DONE pin output control |
20 | USRDONETS => '0' -- 1-bit input: User DONE 3-state enable output |
21 | );
|
https://forums.xilinx.com/t5/FPGA-Configuration/Controlling-SPI-flash-after-configuration-on-Artix-7/td-p/895686 Schöne Grüße.
Julian schrieb: > Hat jemand von euch das schon gemacht? Im Prinzip ja. Ich habe dafür einen kleinen Softcore verwendet, weil der eh schon für UART und so da war... Als erstes würde ich das Datenblatt für den Flash anschauen und dann entscheiden welcher Weg für dich sinnvoll ist. Duke
Duke Scarring schrieb: > Julian schrieb: >> Hat jemand von euch das schon gemacht? > Im Prinzip ja. > Ich habe dafür einen kleinen Softcore verwendet, weil der eh schon für > UART und so da war... > > Als erstes würde ich das Datenblatt für den Flash anschauen und dann > entscheiden welcher Weg für dich sinnvoll ist. > > Duke Mache ich im Endeffekt auch so, allerdings mit dem klassischen SPI, das die Flash Chips ja auch unterstützen. Kleiner Tipp, den ich gekonnt am Anfang übersehen habe: Nicht beim "Wrap-Around" der Adresse den goldenen FPGA-Bitstream überschreiben ;)
Stephan N. schrieb: > Kleiner Tipp, den ich gekonnt am Anfang übersehen habe: Nicht beim > "Wrap-Around" der Adresse den goldenen FPGA-Bitstream überschreiben ;) :-) Es gibt einen Thread im Offtopic, wo solche Erfahrung für alle gesammelt werden: Beitrag "Fehler zum nachbauen :-)"
Stephan N. schrieb: > Kleiner Tipp, den ich gekonnt am Anfang übersehen habe: Nicht beim > "Wrap-Around" der Adresse den goldenen FPGA-Bitstream überschreiben ;) oh ja, das sind die witzigen Fehler :D Hallo, vielen Dank für eure Antworten. Ich habe es mal ausprobiert, bin aber bisher gescheitert :( Ich glaube, dass es schon beim muss man denn korrekt den STARTUPE2 einbinden. Ich nehme an, man muss dieses Component genauso einbinden, wie jedes Andere? Grüße Julian
Wo willst du denn überhaupt die "Intelligenz" für den Flash hin packen? Klar, könnte man theoretisch in VHDL alles machen, aber das wird nicht schön. Gerade schreiben ist ja erst mal einiges an Befehlen....Write Enable, eventuell Sektoren entsperren, Adresse, Daten schicken, dann Status Register lesen und pollen bis der Flash fertig ist... gibt's sicher auch in VHDL, aber wenn du eh schon eine UART hast, könntest du die High Level Sachen alle am PC machen und in VHDL wirklich nur Lesen und Schreiben am Flash.
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.