Forum: FPGA, VHDL & Co. Spartan 6 Eval Board SP601: Programm über JTAG persistent auf Board laden?


von Martin K. (mkohler)


Lesenswert?

Hallo,

Ich befasse mich zur Zeit mit dem Xilinx Spartan 6, konkret mit dem vor 
mir liegenden EvalBoard SP601.
Nun habe ich die fix einprogrammierten Selftests durchgespielt, was bis 
auf die nicht reagierenden Pushbuttons auch geklappt hat.

Als nächsten Schritt wollte ich das Board via ISE iIMPACT12.1 ansteuern, 
um dieses in einem nächsten Schritt mit einem eigenen Design zu 
befüllen.
Das USB Download Cable wird auch wunderbar erkannt, welches auf dem 
Board bereits integriert ist. Soweit so gut.

Nach "Initialize Chain" erscheint auch mein Spartan 6 (xc6slx16 bypass) 
in der grafischen Darstellung.

Nun zum Problem: Wohin brate ich denn jetzt mein config File, damit 
dieses persistent auf dem Board gespeichert wird und das FPGA die Daten 
aus dem Flash lädt (aus welchem?).

Ich möchte eigentlich vermeiden, dass die auf dem Board abgelegten 
Selftests etc. gelöscht werden...

Hat jemand dasselbe Board? Wie muss es programmiert werden?

Gruss, Martin

von Rick Dangerus (Gast)


Lesenswert?

Martin Kohler schrieb:
> Ich möchte eigentlich vermeiden, dass die auf dem Board abgelegten
> Selftests etc. gelöscht werden...
Da wirst Du nicht drumherumkommen. Aber die Selftests sind sicher auch 
bei Xilinx zum Download zu finden. [1]


> Hat jemand dasselbe Board? Wie muss es programmiert werden?
Ja, wir haben hier auch so ein Board, aber ich hatte es noch nicht in 
den Fingern.
Programmieren kannst Du den FPGA (mittels .bit-File, nicht dauerhaft) 
oder den Flash (dauerhaft). Wie das geht sollte sich auch in der Appnote 
zu finden sein. [2]

Rick


[1] http://www.xilinx.com/support/answers/35871.htm
[2] http://www.xilinx.com/products/boards/sp601/reference_designs.htm

P.S.: Ich sehe gerade: auf der Webseite steht was von Multiboot. Schau 
Dir die Dokumente an, vielleicht kannst Du Dein Design doch daneben 
legen.

von Christian R. (supachris)


Lesenswert?

Ich hab das Board auch hier. Für dauerhafte Speicherung gibts 2 
varianten: BPI Flash oder SPI Flash. In Impact musst du dann auf "Create 
PROM File" links und dann über den Wizzard ein mcs File erzeugen. Je 
nachdem, welchen der beiden Chips du nutzen möchtest, halt entsprechend 
beim Wizzard einstellen. Dann im Boundary Scan Mode auf das blaue 
Kästchen über dem erkannten Spartan, wo BPI/SPI steht und "Add BPI/SPI 
Flash" anklicken. Dann das MCS File zuweisen und nochmals den richtigen 
Flash typ auswählen. Dann kannst du auch per ReadBack erst mal das File 
von Xilinx speichern. Dauert beim BPI Flash einige Minuten. Und dann 
einfach dein MCS da rein und fertig ist.

von Martin K. (mkohler)


Lesenswert?

Vielen Dank für die kompetenten bisherigen Antworten.
Ich habe jetzt mal für beide Flashtypen ein Readback gemacht - man weiss 
ja nie.
Multiboot möchte ich mir vorerst noch nicht antun, zuerst soll jetzt mal 
eine LED leuchten wenn eine Taste gedrückt wird...

Hat einer zuuuufälligerweise gleich ein ähnliches Minimalprojekt zur 
Hand? ;-)

von Rick Dangerus (Gast)


Lesenswert?

Martin Kohler schrieb:
> LED leuchten wenn eine Taste gedrückt wird
1
library ieee;
2
use ieee.std_logic_1164.all;
3
4
entity test is
5
  port (
6
    taste : in  std_logic;
7
    led   : out std_logic
8
  );
9
end entity test;
10
11
architecture rtl of test is
12
begin
13
14
  led <= taste;
15
16
end;

Suchst Du sowas?

Rick

von Martin K. (mkohler)


Lesenswert?

Rick Dangerus schrieb:
> Suchst Du sowas?

Ja genau.

Ich habe das Minimalprojekt noch auf die weiteren 3 Taster erweitert - 
es funktioniert aber einfach nicht!

BPI und SPI Flash habe ich jetzt gesichert und gelöscht, d.h. die DONE 
LED kommt bei Wahl des Flash und Impuls auf PROG nicht mehr, die rote 
INIT LED leuchtet.

Ich kann dann auch wunderbar mit IMPACT mein .bit File direkt ins FPGA 
laden, die DONE LED kommt - aber weder Tasten noch LED des Evalboard 
zeigen eine Reaktion! Hmmm...

von Rick Dangerus (Gast)


Lesenswert?

Martin Kohler schrieb:
> aber weder Tasten noch LED des Evalboard
> zeigen eine Reaktion! Hmmm...

Du brauchst noch ein passendes .ucf-File. Sonst verteilt er die Ein- und 
Ausgaenge nach gutduenken auf dem Chip.

Rick

von Martin K. (mkohler)


Lesenswert?

Rick Dangerus schrieb:
> Du brauchst noch ein passendes .ucf-File.

Das ist natürlich dabei, ich habe das komplette Standard .ucf File vom 
SP601 Board genommen und auch die darin aufgeführten Namen verwendet.
Was ich nicht gemacht habe ist timing constraints zu definieren, aber 
das dürfte wohl nicht das Problem sein.

Zur Hintergrundinfo: Mit dem Spartan 3 XC3S250E habe ich schon so 
einiges gemacht, nur eben noch nie mit dem Spartan 6. Die 
VHDL-technische Seite inkl. Builden des .bit und .mcs Files ist weniger 
das Problem.

Ich poste dann morgen wohl mal ein paar Daten mehr, habe diese aber 
leider nicht zu Hause.

von Martin K. (mkohler)


Lesenswert?

Nun hat es geklappt, das Projekt lauffähig auf das Board zu laden.
Irgendwas mit dem ursprünglichen .ucf File passte nicht.
Nach dem Neu-erstellen des Projekts funktioniert nun alles wie 
vorgesehen.
Danke für die Unterstützung.

Falls später mal jemand seine LEDs zum Leuchten bringen will füge ich 
noch die verwendeten Sourcen ein. Es ist kein Copyright drauf ;-)

Das ist das Projekt:
1
-------------------------------------------------------------------------
2
-- Project Name: LED+Button Test
3
-------------------------------------------------------------------------
4
library IEEE;
5
use IEEE.STD_LOGIC_1164.ALL;
6
7
entity MINIMALTEST is
8
    port (
9
        USER_CLOCK          : in STD_LOGIC;
10
11
        GPIO_BUTTON0        : in STD_LOGIC;
12
        GPIO_BUTTON1        : in STD_LOGIC;
13
        GPIO_BUTTON2        : in STD_LOGIC;
14
        GPIO_BUTTON3        : in STD_LOGIC;
15
16
        GPIO_LED_0          : out STD_LOGIC;
17
        GPIO_LED_1          : out STD_LOGIC;
18
        GPIO_LED_2          : out STD_LOGIC;
19
        GPIO_LED_3          : out STD_LOGIC
20
    );
21
end MINIMALTEST;
22
23
architecture MINIMALTEST_arch of MINIMALTEST is
24
25
begin
26
    process(USER_CLOCK)
27
    begin
28
        if rising_edge(USER_CLOCK) then
29
            GPIO_LED_0 <=     GPIO_BUTTON0;
30
            GPIO_LED_1 <= not GPIO_BUTTON1;
31
        end if;
32
    end process;
33
34
    GPIO_LED_2 <=     GPIO_BUTTON2;
35
    GPIO_LED_3 <= not GPIO_BUTTON3;
36
37
end MINIMALTEST_arch;

und das steht im .ucf File
1
NET "GPIO_BUTTON0"                  LOC = "P4";
2
NET "GPIO_BUTTON1"                  LOC = "F6";
3
NET "GPIO_BUTTON2"                  LOC = "E4";
4
NET "GPIO_BUTTON3"                  LOC = "F5";
5
6
NET "GPIO_LED_0"                    LOC = "E13";
7
NET "GPIO_LED_1"                    LOC = "C14";
8
NET "GPIO_LED_2"                    LOC = "C4";
9
NET "GPIO_LED_3"                    LOC = "A4";
10
11
NET "USER_CLOCK"                    LOC = "V10";

von Johann (Gast)


Lesenswert?

Ist das nicht so das der Spartan6 den Programmspeicher im FPGA hat und 
somit kein externer Speicher mehr benötigt wird?

von Andreas (Gast)


Lesenswert?

@Johann

nein, bei Xilinx FPGAs ist lediglich die XC3AN Familie mit Flashon 
Chip(or Case) bestueckt...

von Johann (Gast)


Lesenswert?

Und ich dachte das jetzt alle Spartan 6 FPGAs einen internen Speicher 
besitzen, da war ich wohl falsch informiert. Ich hatte dies immer noch 
als Vorteil im Hinterkopf.

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.