Forum: FPGA, VHDL & Co. Suche ordentliches aktuellesTutorial für NIOS2 mit Flash DE2 Board


von No Y. (noy)


Lesenswert?

Hallo Forum,

kennt jemand ein aktuelles (Quartus 12 oder 13 mit Qsys) Tutorial, das 
ordentlich beschriebt wie genau das Flash an den NIOS angebunden wird 
(DE2 Board). Und was man wie, wo im BSP Editor einstellen muss damit der 
NIOS aus dem Flash das Programm bootet.

Ich habe glaube ich den Flash soweit richtig angebunden und auf der Top 
Entity mit den richtigen PINs verbunden. Im BSP Editor wird auch der 
Falsh angezeigt und ich kann mein Programm auf den Flash laden. Aber 
mein Nios startet einfach nicht mit dem Programm, nach einem Reset tut 
sich einfach nichts. Ich habe den Resetvektor auf den Flash gesetzt und 
angegeben das mein Programmcode im Flash liegt.

von Duke Scarring (Gast)


Lesenswert?

No y. schrieb:
> Aber
> mein Nios startet einfach nicht mit dem Programm, nach einem Reset tut
> sich einfach nichts. Ich habe den Resetvektor auf den Flash gesetzt und
> angegeben das mein Programmcode im Flash liegt.
Dann schau Dir doch mit Signaltap mal an, was auf dem Bus zum Flash 
passiert.

Duke

von Tobias M. (tm0991)


Lesenswert?

Duke Scarring schrieb:
> No y. schrieb:
>> Aber
>> mein Nios startet einfach nicht mit dem Programm, nach einem Reset tut
>> sich einfach nichts. Ich habe den Resetvektor auf den Flash gesetzt und
>> angegeben das mein Programmcode im Flash liegt.
> Dann schau Dir doch mit Signaltap mal an, was auf dem Bus zum Flash
> passiert.
>
> Duke

Nutzt du wirklich den Flash als Programmspeicher deines NIOS oder hast 
du einen Programmspeicher als BRAM im FPGA, welcher bei der 
Konfiguration mit dem Inhalt des Flash geladen wird ?

von No Y. (noy)


Lesenswert?

Hab mich wohl etwas falsch ausgedrückt. Ich habe den SRAM, internen RAM 
(momentan nicht genutzt) und den Flash angebunden. Wenn ich das Programm 
direkt vom PC lade also nur mit dem SRAM arbeite geht alles wunderbar. 
Ich möchte nun das das Programm beim einschalten der Spannung aus dem 
Flash geladen wird. Also mein Code soll im Flash liegen wie bei einem 
normalen µC. Als "Arbeitsspeicher" soll weiterhin der SRAM benutzt 
werden.

Den Nios habe ich bereits in diesen Konfigurationschip geladen. Er wird 
auch immer schön ins FPGA beim "Strom an" geladen.

von Tobias M. (tm0991)


Lesenswert?

Hallo,

Mach doch mal einen Screenshot von deinem SOPC Builder oder QSys- 
Ansicht

Ich versteh momentan nicht wirklich was jetzt dein Befehlsspeicher ist.

Gruß

Tobias

von No Y. (noy)


Angehängte Dateien:

Lesenswert?

Hier sind schonmal Bilder aus meinem Qsys und meine Top Level Entity 
sieht so aus (die Flash Verbindungen sind hier momentan 
Auskommentiert!):
1
library IEEE;
2
use IEEE.std_logic_1164.all;
3
use IEEE.numeric_std.all;
4
5
entity I2C_Sensor is
6
  port (
7
     CLOCK_50: in  std_logic;
8
    SW: in  std_logic_vector(4 downto 0);
9
    KEY: in std_logic_vector (2 downto 0);
10
    HEX0: out std_logic_vector (6 downto 0) := (others => '1');
11
    HEX1: out std_logic_vector (6 downto 0) := (others => '1');
12
    HEX2: out std_logic_vector (6 downto 0) := (others => '1');
13
    HEX3: out std_logic_vector (6 downto 0) := (others => '1');
14
    HEX4: out std_logic_vector (6 downto 0) := (others => '1');
15
    HEX5: out std_logic_vector (6 downto 0) := (others => '1');
16
    HEX6: out std_logic_vector (6 downto 0) := (others => '1');
17
    HEX7: out std_logic_vector (6 downto 0) := (others => '1');
18
    LEDR: out std_logic_vector(7 downto 0);
19
    LEDG8: out std_logic;
20
    -- UART_RXD: in std_logic;
21
    -- UART_TXD: out std_logic;
22
    LCD_RW: out std_logic;
23
    LCD_EN: out std_logic;
24
    LCD_RS: out std_logic;
25
    LCD_Data: inout std_logic_vector (7 downto 0);
26
    LCD_ON: out std_logic := '1';
27
     LCD_BLON: out std_logic := '1';
28
    GPIO_0: inout std_logic_vector (27 downto 26);
29
     GPIO_028: in std_logic;
30
    GPIO_126: out std_logic;
31
    GPIO_127: in std_logic;
32
    GPIO_128: in std_logic;
33
    sram_addr: out std_logic_vector (17 downto 0);
34
      sram_dq: inout std_logic_vector (15 downto 0);
35
      sram_ce_n: out std_logic;
36
    sram_oe_n: out std_logic;
37
    sram_we_n: out std_logic;
38
      sram_lb_n: out std_logic;
39
    sram_ub_n: out std_logic
40
--    FL_ADDR: out std_logic_vector(21 downto 0);
41
--    FL_DQ:   inout std_logic_vector(7 downto 0);
42
--    FL_OE_N: out std_logic_vector(0 downto 0);
43
--    FL_CE_N: out std_logic_vector(0 downto 0);
44
--    FL_RST_N:out std_logic_vector(0 downto 0);
45
--    FL_WE_N: out std_logic_vector(0 downto 0)
46
  );
47
end entity I2C_Sensor;
48
49
architecture connect of I2C_Sensor is 
50
  component Mein_Nios is
51
    port (
52
      clk_clk            : in    std_logic                     := 'X';             -- clk
53
      gpio_in_export     : in    std_logic_vector(7 downto 0)  := (others => 'X'); -- import
54
      gpio_out_export    : out   std_logic_vector(7 downto 0);                     -- export
55
      lcd_out_RS         : out   std_logic;                                        -- RS
56
      lcd_out_RW         : out   std_logic;                                        -- RW
57
      lcd_out_data       : inout std_logic_vector(7 downto 0)  := (others => 'X'); -- data
58
      lcd_out_E          : out   std_logic;                                        -- E
59
      uart_out_rxd       : in    std_logic                     := 'X';             -- rxd
60
      uart_out_txd       : out   std_logic;                                        -- txd
61
      uart_out_cts_n     : in    std_logic                     := 'X';             -- cts_n
62
      uart_out_rts_n     : out   std_logic;                                        -- rts_n
63
      sram_export_dq     : inout std_logic_vector(15 downto 0) := (others => 'X'); -- dq
64
      sram_export_ce_n   : out   std_logic;                                        -- ce_n
65
      sram_export_lb_n   : out   std_logic;                                        -- lb_n
66
      sram_export_ub_n   : out   std_logic;                                        -- ub_n
67
      sram_export_oe_n   : out   std_logic;                                        -- oe_n
68
      sram_export_we_n   : out   std_logic;                                        -- we_n
69
      sram_export_addr   : out   std_logic_vector(17 downto 0);                    -- addr
70
      reset_n_reset_n    : in    std_logic                     := 'X';             -- reset_n
71
      i2c_out_scl_pad_io : inout std_logic              := 'X';            -- scl_pad_io
72
      i2c_out_sda_pad_io : inout std_logic               := 'X'              -- sda_pad_io
73
--      flash_out_Flash_Control_tcm_chipselect_n_out   : out   std_logic_vector(0 downto 0);                     -- Flash_Control_tcm_chipselect_n_out
74
--      flash_out_Flash_Control_tcm_reset_n_out        : out   std_logic_vector(0 downto 0);                     -- Flash_Control_tcm_reset_n_out
75
--      flash_out_Flash_Control_tcm_outputenable_n_out : out   std_logic_vector(0 downto 0);                     -- Flash_Control_tcm_outputenable_n_out
76
--      flash_out_Flash_Control_tcm_address_out        : out   std_logic_vector(21 downto 0);                    -- Flash_Control_tcm_address_out
77
--      flash_out_Flash_Control_tcm_data_out           : inout std_logic_vector(7 downto 0)  := (others => 'X'); -- Flash_Control_tcm_data_out
78
--      flash_out_Flash_Control_tcm_write_n_out        : out   std_logic_vector(0 downto 0)       -- Flash_Control_tcm_write_n_out
79
  );
80
end component Mein_Nios;
81
82
signal Reset: std_logic;
83
84
begin
85
86
P1: component Mein_Nios
87
port map (
88
reset_n_reset_n=>Reset,
89
clk_clk=> Clock_50,
90
lcd_out_data=>LCD_Data,
91
lcd_out_E=>LCD_EN,
92
lcd_out_RS=>LCD_RS,
93
lcd_out_RW=>LCD_RW,
94
uart_out_rxd=>GPIO_127,
95
uart_out_txd=>GPIO_126,
96
uart_out_cts_n =>GPIO_128,
97
gpio_in_export (7) =>GPIO_028,
98
gpio_in_export(6 downto 4)=> KEY,
99
gpio_in_export(3 downto 0)=> SW (3 downto 0),
100
gpio_out_export(7 downto 0)=> LEDR,
101
--gpio_out_export (6)=> LCD_BLON,
102
--gpio_out_export (7)=> LCD_ON,
103
i2c_out_scl_pad_io=>GPIO_0(26),
104
i2c_out_sda_pad_io=>GPIO_0(27),
105
sram_export_addr=> sram_addr,
106
sram_export_dq=> sram_dq,
107
sram_export_ce_n=> sram_ce_n,
108
sram_export_lb_n=> sram_lb_n,
109
sram_export_oe_n=> sram_oe_n,
110
sram_export_ub_n=> sram_ub_n,
111
sram_export_we_n=> sram_we_n
112
--flash_out_Flash_Control_tcm_chipselect_n_out=>FL_CE_N, 
113
--flash_out_Flash_Control_tcm_reset_n_out=>FL_RST_N,       
114
--flash_out_Flash_Control_tcm_outputenable_n_out=>FL_OE_N,
115
--flash_out_Flash_Control_tcm_address_out=>FL_ADDR,        
116
--flash_out_Flash_Control_tcm_data_out=>FL_DQ,           
117
--flash_out_Flash_Control_tcm_write_n_out=>FL_WE_N        
118
);
119
Reset<=SW(4);
120
LEDG8<=Reset;
121
end connect;



Hm bei Bild 2 und Bild 6 ist was schief gelaufen...


Bild 7 und 8 zeigt die Einstellungen im BSP-Editor. Ob die so richtig 
sind weiß ich leider nicht....

von No Y. (noy)


Lesenswert?

Hat noch keiner versucht den Nios von Flash zu booten?

Wäre schön wenn mir jemand helfen könnte... bin leider immer noch nicht 
weiter. Und mit Try and Error komme ich bei dem Problem nicht sehr weit 
:(

von Michael W. (Gast)


Lesenswert?

Da würde ich eher mal im Altera / NIOS - Forum nachfragen. Da sind ein 
paar mehr Experten unterwegs.

von Kest (Gast)


Lesenswert?

Ich glaube, da schmeißt Du Vieles durcheinander.

Ist denn das FPGA geladen?
Ist die FPGA Konfiguration auch im Flash?
Wie hast Du alles in Dein Flash geladen?
Stimmen die Pinbelegungen?

Damit NIOS startet muss erstmal ein Bootloader aktiv werden, der die 
Daten aus dem Flash ins SRAM/SDRAM lädt und erst dann wird daraus 
ausgeführt.

Ich könnte jetzt noch ewig schreiben, was Du womöglich nicht bedacht 
hast, aber es bringt einfach wenig. Du solltest wohl oder übel die 
Application Notes von Altera lesen. Sonst kommst Du einfach nicht 
weiter.

Da können solche "Kleinigkeiten" wie Flash-Adressraum und NIOS 
Adressraum und auch Address-Pins beim Flash mit 16 Bit alignment oder so 
Dir das Genick brechen.

Es ist keinesfalls trivial, wenn man das zum ersten Mal macht. Kopf 
hoch! :-)

Grüße
Kest

von No Y. (noy)


Lesenswert?

Also der Nios wird aus dem EPCS Baustein (nicht der Flash) beim 
einschalten korrekt geladen.
Die Pinbelegungen sollten soweit stimmen. Zumindest wenn ich von dem 
Handbuch für das DE2 ausgehe (was wohl stimmt).

Die Daten habe ich über den Flashprogrammer in der Eclipse Umgebung auf 
den Flash geladen (es gab wohl auch keine Fehler dabei).

Das einzige was ich nicht gemacht habe diesen Bootloader. Ich dachte es 
hätte sich mit dem einstellen im BSP Editor erledigt. (Siehe Bilder 
oben).

Der Bootloader wird aber so wie ich es gelesen habe automatisch im 
hintergrund eingebunden wenn ich meine Software als Flashdatei 
konvertiere und aufspiele.

Leider weiß ich nicht genau ob ich in Qsys die richtigen Einstellungen 
für das Flash gewählt habe. Die Tutorials die ich gefunden habe sind 
alle SOPC und da gibt es noch weniger Einstellungen zum auswählen.

Das genau ist ja mein Problem. Ich bräuchte mal eine Schritt für Schritt 
Anleitung nur für das Aktuelle Quartus mit Qsys.

Von daher hatte ich gehofft jemand hat es schonmal hier gemacht und weiß 
wo mein Fehler liegt.

Passt denn die Konfiguration in Qsys? Siehe Bilder oben! (Flash Control, 
Pin Sharer, Bridge)

Und im BSP Editor?

von Kest (Gast)


Lesenswert?

hier steht alles drin:
http://www.altera.com/literature/an/an458.pdf

Schmeiß das Zeug, was Du nicht brauchst weg, Instruction-Master musst Du 
auch nicht an alles heranführen (nur SRAM und Flash (+JTAG Debugger)). 
Statt SRAM nimm erstmal einen ONCHIP-RAM, schmeiß den Tri-State Buffer 
raus. Kriege erstmal das zum laufen (mit der APP Note). Wenn das läuift, 
klikst Du den SRAM wieder rein + Tri-State buffer.

Kest

von No Y. (noy)


Lesenswert?

Soo mal wieder ich.

Ich habe aufgegeben. Saß die letzten 3 Tage nur an Flash dran. Und es 
läuft immer noch nicht. Habe alle Arten aus der PDF versucht und noch 
eine weitere die ich im Internet gefunden habe. Nirgends ging es. Ich 
denke die Flash einstellungen in Qsys stimmen bei mir nicht (hatte auch 
in der TOP Entity Verbindungen falsch aber das is berichtigt). Da ich 
aber kein Tutorial finde wo mal genau die Einstellungen für das DE2 
gezeigt sind wird das so nichts.

Bleib ich halt nur bei SRAM und muss über den PC das Programm laden.

von Martin M. (clorky)


Lesenswert?

Grüße,

ein häufiges Problem ist, dass der stdout auf dem jTag liegt.

Workaround:

Im BSP-Editor->Main->Settings->hal->stdout auf "none" stellen.

Danach kann natürlich eine andere UART-Schnittstelle für den stdout 
verwendet werden.

Bei mir läuft der Nios aus dem Flash ohne Probleme. Wenn wetier Probleme 
bestehen kann ich dir gerne helfen (z.B.: mit Source-Files).

MFG;

Martin

: Bearbeitet durch User
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.