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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Julian (Gast)


Bewertung
0 lesenswert
nicht 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-)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.
-- Access to CCLK pin
STARTUPE2_inst: STARTUPE2
generic map (
PROG_USR => "FALSE", -- Activate program event security feature. Requires encrypted bitstreams.
SIM_CCLK_FREQ => 0.0 -- Set the Configuration Clock Frequency(ns) for simulation.
)
port map (
CFGCLK => open, -- 1-bit output: Configuration main clock output
CFGMCLK => open, -- 1-bit output: Configuration internal oscillator clock output
EOS => open, -- 1-bit output: Active high output signal indicating the End Of Startup.
PREQ => open, -- 1-bit output: PROGRAM request to fabric output
CLK => '0', -- 1-bit input: User start-up clock input
GSR => '0', -- 1-bit input: Global Set/Reset input (GSR cannot be used for the port name)
GTS => '0', -- 1-bit input: Global 3-state input (GTS cannot be used for the port name)
KEYCLEARB => '1', -- 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM)
PACK => '0', -- 1-bit input: PROGRAM acknowledge input
USRCCLKO => flash_clk, -- 1-bit input: User CCLK input
USRCCLKTS => '0', -- 1-bit input: User CCLK 3-state enable input
USRDONEO => '1', -- 1-bit input: User DONE pin output control
USRDONETS => '0' -- 1-bit input: User DONE 3-state enable output
);

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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.