Forum: FPGA, VHDL & Co. NIOS-System. Probleme nach Einbinden ALT_PLL


von Schmidtmann (Gast)


Lesenswert?

Moin moin.

Habe vor einigen Tagen hier im Forum was gepostet ( 
Beitrag "NIOS-System mit PLL und diversen Speichern" ). Das Problem glaubte 
ich gelöst zu haben, jetzt weiß ich nicht ob das wirklich der Fall ist.

Vor dem Einbinden der PLL ging alles wunderbar. Jetzt habe ich mit dem 
Mega-Plugin-Wizzard eine ALT_PLL generiert, im SoPCB die externe clock 
auf 100 MHz geändert und die PLL im top-level folgendermaßen 
eingebunden:

...
...
...
ARCHITECTURE Structure OF top IS
...
...
...
COMPONENT pll_sys
  PORT (

inclk0: IN STD_LOGIC; -- 50MHz
c0: OUT STD_LOGIC; --100MHz
c1: OUT STD_LOGIC; --100MHz um 54° versetzt
locked : OUT STD_LOGIC
  );
  END COMPONENT;

signal system_clock, sdram_clock, pll_lock : std_logic;

test: pll_sys
  port map(
    inclk0 => CLOCK_50,
    c0 => system_clock,
    c1 => sdram_clock,
    locked => pll_lock
  );

  NiosII: nios_system
  PORT MAP (
    reset_n => pll_lock,
    clk_100 => system_clock,
    zs_addr_from_the_sdram_0 => DRAM_ADDR,
    zs_ba_from_the_sdram_0 => DRAM_BA,
    zs_cas_n_from_the_sdram_0 => DRAM_CAS_N,
    zs_cke_from_the_sdram_0 => DRAM_CKE,
    zs_cs_n_from_the_sdram_0 => DRAM_CS_N,
    zs_dq_to_and_from_the_sdram_0 => DRAM_DQ,
    zs_dqm_from_the_sdram_0 => DRAM_DQM,
    zs_ras_n_from_the_sdram_0 => DRAM_RAS_N,
    zs_we_n_from_the_sdram_0 => DRAM_WE_N


  );

  DRAM_CLK <= sdram_clock;
 END Structure;

Und jetzt kann ich mein C-Code, den ich in der Eclipse IDE schreibe, 
nicht auf dem System laufen lassen. Ab und zu geht das, wenn ich im 
SoPCB assign-base-address und refresh system klicke, dann neu generire 
und im Quartus neu kompiliere, dann das System wieder drauf lade. 
Manchmal kommt dann der Fehler "Downloading ELF Process failed" und 
manchmal geht es, bekomme "Hello World" Ausgabe. Sobald ich das zuvor 
kompilierte und generierte System wieder auf das FPGA drauf lade, kann 
ich mein Projekt nicht laufen lassen, kommt halt IMMER "Downloading ELF 
Process failed"....

Es ist vielleicht ein wenig unverständlich, so ein Fehler ist ziemlich 
schwer zu erklären, noch schwieriger nach so einem Fehler zu googlen.

Ich weiß wirklich nicht mehr weiter, so etwas eigenartiges hatte ich 
noch nie. Mache ich vielleicht mit PLL etwas falsch? Muss die PLL ein 
reset-Eingang haben? Ich habe mein System mittlerweile auch auf Quartus 
13.1 getestet, mit QSYS statt SoPC, hat nichts gebracht. Hatte jemand 
sowas schon mal gehabt?

Bitte um Hilfe, bin der Verzweiflung nahe.
Danke. Schmidtmann.

von hiall (Gast)


Lesenswert?

updatest du im eclipse die adressen mit generate bsp?

oder probier mal beim draufladen der software den haken zu setzen das er 
die ID nicht prüfen soll

von Schmidtmann (Gast)


Lesenswert?

Moin moin.

Danke für die Antwort. Ja, das erste mache ich immer. Das zweite.... Er 
meckert ja nicht weil er nicht die richtige ID vorfindet, probiert habe 
ich das jetzt, brigt jedoch nichts.... Weiß wirklich nicht mehr weiter. 
Hab alles gelesen was es dazu gab, das einzige was mir noch einfällt ist 
lock-range der PLL. Das kann ich aber nicht einstellen wenn ich mein 
device (Cyclon IV E) im Mega-Plugin-Wizzard auswähle. Scheint so, als ob 
er das automatisch machen sollte. Keine Ahnung was ich da noch tun kann.

Findet sich vielleicht ein Experte, der eben helfen würde? Falls 
irgendwas fehlt, Erklärung, Screenshots, sagt bitte bescheid.

Danke.
Schöne Grüße, Schmidtmann.

von Ich (Gast)


Lesenswert?

Archivier doch mal das Design und lade es hoch.

von Ich (Gast)


Lesenswert?

Wie sehen denn Deine Constraints aus? BTW 54 Grad für die SDRAM Clock 
kommt mir komisch vor. -18 Grad würde ich erwarten.

von ./. (Gast)


Lesenswert?

Vielleicht lockt die PLL nicht.

Dann muss man den Pluginmanager ein wenig beschubsen.

(Eingangs-)Clock war bei mir 50 MHz.
Gewuenschte Ausgangsclock: 100 MHz.

Leider rastete die PLL nicht.
Geholfen hat, dem Pluginmanager einen Eingangstakt von 100 MHz und
einen Ausgangstakt von 200 MHz anzugeben.

Wenn beim NIOS-Debuggen etwas schief geht, bleiben auch gern Zombies
auf dem System zurueck, die den neuen Start erfolgreich verhinden.

von Schmidtmann (Gast)


Lesenswert?

Moin moin!

Lag die letzten Tage krank im Bett und konnte nicht wirklich arbeiten, 
hoffe jetzt mal einfach, dass der Thead nicht in Vergessenheit geraten 
ist.

Ich schrieb:
> kommt mir komisch vor. -18 Grad würde ich erwarten.

Die -54 Grad habe ich aus dem Altera-Tutorial Using the SDRAM:
ftp://ftp.altera.com/up/pub/Altera_Material/9.0/Tutorials/VHDL/DE2-115/U 
sing_the_SDRAM.pdf
Demnach, ab Seite 10, sollte der SDRAM Clock -3ns vorauseilen. Also:
20ns = 360
-3 = 360/20 * (-3) = -54
Mit -18 habe ich das jetzt auch ausprobiert, geht nicht.

./. schrieb:
> Geholfen hat, dem Pluginmanager einen Eingangstakt von 100 MHz und
> einen Ausgangstakt von 200 MHz anzugeben.

Also, wenn ich das richtig verstehe, hast du schon als input 50MHz 
benutzt und über die verdoppelt? Oder hattest du.....2 Plls, 50 --> 100 
und dann 100 --> 200? Versteh ich da irgendwas falsch?

Danke für die Antworten. Einer der wirklich wenigen Foren, bei den man 
mal Antworten zu dem Thema kriegt.
Liebe Grüße, Schmidtmann.

von ./. (Gast)


Lesenswert?

> Also, wenn ich das richtig verstehe, hast du schon als input 50MHz
> benutzt und über die verdoppelt?

[x]

von Andreas B. (te-bachi)


Lesenswert?

Was hast du denn für ein Evaluation-Board?
Ein Altera/terasIC DE2-115 Board oder ein anderes?

Ich benutze Quartus 12.1sp1 auf Linux mit einem DE2-115 Board, und bei 
mir funktioniert es. NIOS Clock ist auf 125 MHz. Naja... ich habe noch 
SDRAM-Timings, die nicht erfüllt werden. Bin auch gerade am PLL tweaken.

Was mich stutzig macht ist dein PLL-Lock-Output (MegaWizard -> 1. 
Parameter Settings -> Inputs/Lock -> Lock Output), der an den Reset vom 
NIOS geht.

Ich mache den NIOS Reset auf eine der KEY-Tasten. Einen Versuch wäre es 
Wert. Ob es "erwünscht" ist... keine Ahnung. Die Beispiele auf der CD 
vom DE2-115 benutzen den PLL-Lock auf nicht für den Reset vom NIOS.

> Demnach, ab Seite 10, sollte der SDRAM Clock -3ns vorauseilen.
In Quartus 12.1sp1 hast du die Wahl den "Clock phase shift" auch in "ns" 
anzugeben. Geht das bei älteren Versionen nicht?

> Also, wenn ich das richtig verstehe, hast du schon als input 50MHz
> benutzt und über die verdoppelt?
So wie ich das verstehe, täuschst du der PLL vor, du hättest 100 MHz 
Input und möchtest 200 MHz Output (Input * 200% = Output). Eigentlich 
hast du aber nur 50 MHz und möchtest 100 MHz. Wie der Input der PLL 
aussieht ist Wurscht. Die PLL verdoppelt es einfach.

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.