Hi,
Habe einen fehler in einer IF-Abfrage den ich mir nicht erklären kann,
vielleicht könnt ihr es:
In diesem Stück code soll ein MIG-Memmory-Interface so angesprochen
werden, dass ein lesen und schreiben ermöglicht.
Problem ist die abrage des rdy-Signals, dieses Signal kommt von der MIG
und sollte anzeigen, dass ein Kommando angenommen wurde.
Scheinbar ist diese Abfrage immer wahr. Da der state-Zustand sonst nicht
auf 2 besetzt werden könnte, und ein signal write_ok <= '1'; niemals mit
1 erscheinen dürfte.
Doch obwohl ich messtechnisch emitteln kann, dass rdy nie true wird,
läuft die state-Maschiene weiter.
Ziel ist an ein Interface Daten+Addressen anzulegen, und ein
read/write-Anable zu setzen.
Die State-Maschiene sollte durch read/write_ok zurückgeben wenn die
Daten geschrieben oder gelesen wurden.
Habt ihr einen Rat?
Dies ist mein 1. Versuch einen IP-Block (MIG7) für DDR2-Ram anzusteuern.
Matze schrieb:> Hi,> In diesem Stück code soll ein MIG-Memmory-Interface so angesprochen> werden, dass ein lesen und schreiben ermöglicht.>> Problem ist die abrage des rdy-Signals, dieses Signal kommt von der MIG> und sollte anzeigen, dass ein Kommando angenommen wurde.
Hi Matze, das mem_rdy Signal des UserInterfaces ist tatsichlich 99% der
Zeit auf '1', bewegt sich aber doch auf '0' - nämlich bei zwei
Gelegenheiten:
* sobald das Write Kommando akzeptiert wurde, also als Reaktion auf
das Setzen von "mem_wdf_wren" UND "mem_wdf_end"
* ohne vorausgegangenes Kommando - wohl während des Autorefresh
Diese Zustandswechsel sehe ich tatsächlich "messtechnisch" - mit einem
USB-Logicanalyzer, sie liegen wohl nur eine Periode an.
BTW: In meinen Design benutze ich mem_rdy, um aus dem State "CmdWr" in
den State "Idle" zu wechseln. Wenn Dein "debug"-Signal in einer anderen
Clk-Domäne weiterverarbeitet wird, muss es noch einsynchronisiert
werden, die mem_ui_clk läuft mit einem Viertel bzw. der Hälfte (2:1
Mode) der DDR2 Clk.
Gruß, Burkhard
Reden wir hier vom Data Ready oder vom Command Ready?
In der statemachine wird das debug Signal auch gelachted, statt
geswitched, weil es keinen else zweig gibt.
auch weiter unten bei rd_data_valid gehört n.m.E ein Else hin
Wir reden von "mem_rdy" - das wäre wohl "Command ready".
Ich muss meine obige Darstellung korrigieren - mem_rdy >>kann<< während
des Schreibvorgangs auf '0' gehen - muss aber nicht. Wenn das passiert,
müssen das WriteCmd, wdf_wren, wdf_end usw. solange gehalten werden, bis
mem_rdy wieder asserted wird.
Tatsächlich gibt es gleich mehrere mögliche Reihenfolgen, in denen
Daten, WDF Maske und Schreibkommando präsentiert werden können, bitte am
besten selbst im MIG User Guide, Abschnitt "User Interface" nachlesen -
und zwar in der neuesten Version (Zynq-7000 AP SoC and 7 Series Devices
Memory Interface Solutions v2.4)! In älteren Versionen des Dokuments ist
die Abfolge unvollständig dargestellt, was mich einige Zeit gekostet
hat.
Gruß,
Burkhard
Weltbester FPGA-Pongo schrieb im Beitrag #4508945:
> In der statemachine wird das debug Signal auch gelachted, statt> geswitched, weil es keinen else zweig gibt.
Da wird zum Glück nichts mit einem Latch gemacht sondern alles hübsch
synchron mit Registern, weil das Ganze ja getaktet ist...