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