Forum: FPGA, VHDL & Co. Arty A7-35T, Flash zum Abspeichern von Daten nutzen


von Julian (Gast)


Lesenswert?

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

von Gustl B. (-gb-)


Lesenswert?

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.

von ktorkkelson (Gast)


Lesenswert?

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.

von Duke Scarring (Gast)


Lesenswert?

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

von Stephan N. (someone_like_you)


Lesenswert?

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 ;)

von Christoph Z. (christophz)


Lesenswert?

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 :-)"

von Julian (Gast)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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
Noch kein Account? Hier anmelden.