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.
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
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 ?
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.
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
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....
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 :(
Da würde ich eher mal im Altera / NIOS - Forum nachfragen. Da sind ein paar mehr Experten unterwegs.
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
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?
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.