Forum: FPGA, VHDL & Co. EPCS Flash ohne NIOS vom FPGA aus beschreiben


von flint (Gast)


Lesenswert?

Hallo,

ich würde gerne von meinen Stratix 2&3 FPGAs aus den Bitstream im EPCS 
Config Flash überschreiben. Ich bin beim Googeln auf die EPCS Device 
Controller Core Komponente gestoßen, die angeblich das leistet, was ich 
brauche, aber in der Dokumentation ist angegeben, dass diese Komponente 
von einem NIOS aus angesteuert werden muss. Ich würde es gerne direkt 
machen von einer FSM in VHDL aus. Hat jemand eine Ahnung, woran das 
scheitern könnte? Das Interface zum EPCS Device Controller Core ist ja 
Avalon-MM, die HAL-Treiber gibts angeblich auch im Source, woran soll es 
also scheitern (außer dass Quartus dann vielleicht einfach die Synthese 
abbricht).

Hat da jemand eine Idee?

LG,
flint

von dnalorac (Gast)


Lesenswert?

Ich würde mir den ganzen IP-Kram nicht antun, sondern alles zu Fuß 
machen. Das ROM hat eine ganz normale SPI-Schnittstelle. Da musst Du ein 
paar Befehle hinschicken (Schreiben freischalten, Page löschen und 
Startadresse setzen) und dann die Daten byteweise übertragen. Das ist 
alles sehr ausführlich im Altera Configuration Handbook Vol. II 
dokumentiert.

von flint (Gast)


Lesenswert?

Aber die Pins an denen der Flash hängt sind bei einem Stratix keine User 
Pins, wenigstens wenn ich die Doku richtig verstanden habe. Der IP Core 
ist die einzige Möglichkeit, an die Programmier-HW in dem Ding 
ranzukommen.

Ansonsten würde ich auch lieber eine FSM in meinem Stil dafür 
implementieren.

lg
flint

von Harald F. (hfl)


Lesenswert?

Auch wenn das keine Antwort auf die Frage ist: Was für einen triftigen 
Grund kann man dafür anführen, das NICHT mit einem NIOS und den 
Device-Treibern zu machen? Die neuen Konfigurationsdaten wird das FPGA 
ja nicht selbst erfinden, sondern über irgendeinen Kommunikationskanal 
mitgeteilt bekommen. Dort muss man bestimmt ein Protokoll bedienen, mit 
Sicherungsschichten etc. Genau hierfür wurde Software erfunden.

Grüße,
Harald

von flint (Gast)


Lesenswert?

Naja, es handelt sich um ein Board in einem Datenpfad, dh der 
Übertragungskanal ist schon vorhanden. Weiters sitzen mehrere dieser 
Instanzen sehr nahe an einem Prozess, der thermisch ziemlich heikel ist. 
Es ist das absolute Ziel, die Leistungsaufnahme niedrig zu halten.

In dieser Situation einfach einen NIOS reinzutun nur für die Aufgabe, 
den Flash zu beschreiben, das wäre imo ein Blödsinn. Abgesehen davon, 
dass der FPGA-interne SRAM dann vielleicht knapp werden könnte und ein 
externer ist, siehe Leistungsproblematik, einfach keine Option.

lg
flint

von Harald F. (hfl)


Lesenswert?

Das sind natürlich gute Gründe, obwohl, Stratix und geringe 
Leistungsaufnahme passen eigentlich nicht zusammen. Und einen Nios/e 
kann man mit 1000 LE und 4 kByte RAM schon hinbekommen. Aber ok.

Bleibt nur noch das Problemchen, dass Du an die Pins nicht hinkommst. Da 
wirst Du wohl um eine externes Multiplexing nicht drumrum kommen.

Grüße,
Harald

von flint (Gast)


Lesenswert?

Das Rankommen an die Pins sollte nach meinem Verständnis über diesen IP 
Core gehen. Falls das nicht klappt bin ich chancenlos, die Boards sind 
schon gebaut.

lg
flint

von dnalorac (Gast)


Lesenswert?

Ich kenne leider nur Cyclone III. Man kann im Quartus (Settings - Device 
- Button "Device and Pin Options"- Reiter "Dual Purpose Pins" 
einstellen, was mit (einigen) der speziellen Pins nach dem Booten des 
FPGA geschehen soll. Für die Cyclones kann man alle relevanten Pins auf 
"Regular I/O" stellen. Dann geht's definitiv. Vielleicht funktioniert 
das ja auch bei den Stratixen...

flint schrieb:
> Aber die Pins an denen der Flash hängt sind bei einem Stratix keine User
> Pins, wenigstens wenn ich die Doku richtig verstanden habe. Der IP Core
> ist die einzige Möglichkeit, an die Programmier-HW in dem Ding
> ranzukommen.

von Günter (. (dl4mea)


Lesenswert?

Hallo,

weils thematisch ein bischen hier dazu passt: Ich habe es mittlerweile 
geschafft das EPCS1 mit diesem Programmer
http://www.embeddedcomputers.net/products/BlackcatUSB
zu beschrieben.
(War nicht ganz einfach, denn es waren Anpassungen in der BlackCat 
GUI-SW nötig)

Ich habe mir dazu einen kleinen Adapter für den AS-Stecker gebaut, mit 
einem Schalter wird nCONFIG des FPGAs auf LOW und nCE auf HIGH gebracht. 
Wie erwartet wird das EPCS1 als ST M25P10 erkannt (sind ja beides 
bekanntlich identische Device).

Die Bits in jedem Byte werden offenbar inverse programmiert, aber dann 
klappt es, ich kann ein RBF-File ins Flash-Device schreiben, den 
Schalter umlegen und das FPGA liest die Konfiguration und arbeitet.

Warum das ganze?
1) BlackCat ist wesentlich!!! schneller als der USB-Blaster, was für die 
größeren dann noch interessanter wird.
2) BlackCat kann auch alternative Flashtypen beschreiben, während der 
USB Blaster die ID des EPCS-Device überprüft und andere nicht 
akzeptiert.

Das Vorgehen ist beispielsweise hier beschrieben:
http://www.spansion.com/Support/AppNotes/Configuring_Altera_FPGAs_via_SPI_Flash_AN_02_e.pdf

Damit braucht man nicht die sündhaft teueren EPCS devices, sondern kann 
die deutlich günstigeren Alternativen verwenden.

Ciao, Günter (dl4mea)

von flint (Gast)


Lesenswert?

Hat übrigens wunderbar funktioniert, ich hab jetzt eine VHDL State 
Machine, die alle Kommandos auf dem Flash durchführen kann. Mir ist 
nicht ganz klar, warum Altera das nicht von VHDL aus zugänglich macht, 
es ist wirklich nicht allzu schwierig.

lg
flint

von Lrak (Gast)


Lesenswert?

Hallo,

sorry erstaml, dass ich hier einen 6 Jahre alten Thread ausgrabe.

Aber ich stehe gerade vor der gleichen Aufgabe. Diese sieht wie folgt 
aus:

Mein FPGA (Cyclone V) hat bereits eine Datenverbindung zum PC (USB mit 
dem FTDI FT2232). Über diese Datenschnittstelle soll die FPGA Firmware 
auch Upgedated werden können. Folglich muss ich in das EPCS (bzw. 
benutze ich ein EPCQ) schreiben.

Ich wäre über Tipps dankbar ob es hierzu mittlerweile einen IP-Core 
(ohne nios) gibt oder ob jemand der das schonmal realisiert hat 
eventuell seine SM oder gute Ratschläge zur verfügung stellt.

VG Lrak

von user (Gast)


Lesenswert?

beim Cyclone5 kannst du diesen Block verwenden um auf das SPI/QSPI Flash 
zuzugreifen:
1
 asmi : cyclonev_asmiblock
2
 port map( 
3
    data0in  => open,
4
    data0oe  => '1',
5
    data0out => FLASH_MOSI,
6
    data1in  => FLASH_MISO,
7
    data1oe  => '0',
8
    data1out => '0',
9
    data2in  => open,
10
    data2oe  => '1',
11
    data2out => '1',
12
    data3in  => open,
13
    data3oe  => '1',
14
    data3out => '1',
15
    dclk     => FLASH_CLK,
16
    oe       => '1',
17
    sce      => FLASH_CS
18
 );

von user (Gast)


Lesenswert?

die libraries dazu sind:
1
library altera_mf;
2
use altera_mf.all;
und die component declaration:
1
   component cyclonev_asmiblock
2
      port(
3
         data0in  :  out std_logic;
4
         data0oe  :  in std_logic := '0';
5
         data0out :  in std_logic := '0';
6
         data1in  :  out std_logic;
7
         data1oe  :  in std_logic := '0';
8
         data1out :  in std_logic := '0';
9
         data2in  :  out std_logic;
10
         data2oe  :  in std_logic := '0';
11
         data2out :  in std_logic := '0';
12
         data3in  :  out std_logic;
13
         data3oe  :  in std_logic := '0';
14
         data3out :  in std_logic := '0';
15
         dclk     :  in std_logic;
16
         oe       :  in std_logic := '0';
17
         sce      :  in std_logic
18
      );
19
   end component;

von Lrak (Gast)


Lesenswert?

Vielen Dank, das hilft mir schonmal weiter!

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.