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
genericmap(
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
portmap(
8
CFGCLK=>open,-- 1-bit output: Configuration main clock output
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.