Hallo ich habe ein Xilinx Spartan II Board. Dabei habe ich versucht Daten aus dem Speicher zu lesen und am Monitor auszugeben. Wenn ich fixe Werte auf rgb_o gebe passt alles jedoch wenn ich versuche die Daten aus dem Speicher zu lesen erscheinen immer irgendwelche Streifen am Monitor und nicht das jeweilige Bild. Ich habe keine Idee mehr woran das liegen könnte. An der Simulation habe ich auch nichts besonderes erkannt. Wäre dankbar wenn ihr mir einen Tipp geben könntet. Die Datei wurde hinzugefügt. MfG
Wie schnell ist das Flash? Kannst du das Flash komplett asynchron lesen (ohne OE zu toggeln, was sagt das Datenblatt)? Hast du ein Timing-Constraint auf den 48MHz-Clock gesetzt (das ist das mindeste, was du tun mußt)? Wieso berechnest du die Flash-Adresse nicht aus der Zeile und der Spalte (das wäre üblich)?
Es sollten 70ns sein. Hier ist das Datenblatt http://www.digchip.com/datasheets/parts/datasheet/272/MX29F040PC-70.php -Kannst du das Flash komplett asynchron lesen (ohne OE zu toggeln, was -sagt das Datenblatt)? Was meinst du damit, wieso sollte ich OE toggeln. -Hast du ein Timing-Constraint auf den 48MHz-Clock gesetzt (das ist das -mindeste, was du tun mußt)? Im Xilinx habe ich 48MHz gesetzt. -Wieso berechnest du die Flash-Adresse nicht aus der Zeile und der Spalte -(das wäre üblich)? Wie meinst du das. Pro Adresse sind 2 Pixel. Ich habe es programmiert dass immer der nächste Pixel aufgerufen wird.
also wenn ich den Code so auf die schnelle durchsehe, meine ich er sollte eigentlich funktionieren. Bei diesem Flash ist es ok wenn ce_n und der oe_n auf 0 bleiben. (nur der we_n muss toggeln wenn das Flash beschrieben wird) Wenn ich es richtig verstehe, wird die Flash Adresse alle vier Takte erhöht; d.h du liest das Flash alle 83 nsec aus was nach der Flash-spec. ok sein sollte. Hast du in der Simulation das delay des Flashs (70 ns) berücksichtigt ? Oder Eventuell sind die IOs zu langsam: Wie hast du die Flash Adressausgänge constraint ? (Pin Constrains: Slewrate und Drive?) Benutzt der Router die IO-Flipflops ?
--Bei diesem Flash ist es ok wenn ce_n und der oe_n auf 0 bleiben. -- (nur der we_n muss toggeln wenn das Flash beschrieben wird) Der Flash wird ja nicht beschrieben sondern nur gelesen, also müsste es passen. --Hast du in der Simulation das delay des Flashs (70 ns) --berücksichtigt ? Wo kann ich das in der Simulation berücksichtigen. Ich habe einfach nur Werte auf data_i gesetzt. Die Werte kommen auch auf den Ausgang nur um einen Takt verschoben. --Oder Eventuell sind die IOs zu langsam: --Wie hast du die Flash Adressausgänge constraint ? -- (Pin Constrains: Slewrate und Drive?) Was meinst du damit? --Benutzt der Router die IO-Flipflops ? Wie kann ich das herausfinden?
Im Xilinx habe ich nur die Pins auf die Ein- und Ausgänge gesetzt sind vielleicht irgendwo Pull Up oder -Downs notwendig.
>--Hast du in der Simulation das delay des Flashs (70 ns) >--berücksichtigt ? >Wo kann ich das in der Simulation berücksichtigen. Ich habe einfach nur >Werte auf data_i gesetzt. Die Werte kommen auch auf den Ausgang nur um >einen Takt verschoben. Ahh ich glaube hier kommen wir eher weiter.. Bau dir einfach ein kleines Flash Model z.B: sowas (schnell mal aus der ISE-XST Doku Chapter 2: XST HDL Coding Techniques) [VDHL] architecture xxx of deiner_testbench is ... andere deklarationen ... addr : in std_logic_vector(viel downto 0); -- flash addressleitung data : out std_logic_vector(7 downto 0)); -- flash datenausgang type rom_type is array (sogrossduwillst downto 0) of std_logic_vector (7 downto 0); signal ROM : rom_type:= (X"0A", X"03", X"01", X"00", ... soviel du willst und was du willst.... X"0D", X"41", X"01", X"0D"); begin data <= ROM(conv_integer(addr)) AFTER 70 ns; <-- hier ist der delay ... mit deinem code verbinden ... rest der testbench ... end xxx; [/VHDL] >--Oder Eventuell sind die IOs zu langsam: >--Wie hast du die Flash Adressausgänge constraint ? >-- (Pin Constrains: Slewrate und Drive?) >Was meinst du damit? a): im UCF File kannst du verschiedene Eigenschaften der Pins einstellen z.B Output Treiberstärken, das sieht dann so aus: NET "led" LOC = P11 | DRIVE = 8; -- 2,4,8 ... 20 Die möglichen Werte stehen dann im FPGA_Datenblatt des jeweiligen Bausteins. (und lies mal das ISE Manual-Constraints Guide). >--Benutzt der Router die IO-Flipflops ? >Wie kann ich das herausfinden? mit dem "fpga_editor" (Place und Route Resultate ansehen)
>> -Wieso berechnest du die Flash-Adresse nicht aus der Zeile und der >> -Spalte (das wäre üblich)? > Wie meinst du das. Naja, aus Pixel(x=0, y=0) ergibt sich die Adresse 0x00 aus Pixel(639,479) ergibt sich die Adresse 307199 (bzw. 153599 in deinem Fall). Du brauchst also keinen flashaddress_s sondern kannst die Adresse einfach ausrechnen (Multiplikation). Super einfach geht es dann noch, wenn der Bildschirmspeicher sinnvoll aufgeteilt ist: statt 640 Pixel pro Zeile z.B. 1024 (2^10), dann ist die Flashadresse einfach die Concatenation von Zeile unds Spalte: ZZZZZZZZZSSSSSSSSSS >> erscheinen immer irgendwelche Streifen am Monitor Sind diese Streifen statisch oder verändern sie sich ständig? Sind diese Streifen nach jedem Einschalten gleich? Falls die Streifen immmer gleich und zudem statisch sind: bist du sicher, dass due sinnvolle Daten im Flash hast?
>Sind diese Streifen statisch oder verändern sie sich ständig? >Sind diese Streifen nach jedem Einschalten gleich? Bei diesem Code sind die Streifen eigentlich immer gleich. Wenn ich den Code ändere => die rgb_o Zuweisungen in einen process und alle anderen Zuweisungen (flashaddress, memory usw.) in einen anderen process schreibe dann wandern die Streifen. Manchmal passiert es auch dass sich die Streifen bisschen ändern zwischen diesen zwei Varianten. So sieht es dann ca. aus: 10101010101 10101001001010 >Falls die Streifen immmer gleich und zudem statisch sind: >bist du sicher, dass due sinnvolle Daten im Flash hast? Garantieren kann ich es nicht. Ich habe es aber auch an einem anderen Board versucht und den Flash neu beschrieben. Immer gleich. Bin noch nicht dazu gekommen aber muss versuchen den delay einzufügen vielleicht liegt es daran.
>> Falls die Streifen immmer gleich und zudem statisch sind: >> bist du sicher, dass due sinnvolle Daten im Flash hast? > Garantieren kann ich es nicht. Da solltest du dir aber schon sicher sein. Sonst stocherst du u.U. ewig und drei Tage an der falschen Stelle...
Also ich hab das Datenblatt gerade nur sehr grob überflogen. Dort finde ich die Aussage, dass die Adresse mit der fallenden Flanke von nCE bzw. nWE gelatcht wird. Ich würde erstmal verifizieren, ob die Daten wirklich auch korrekt gelesen werden wenn nCE und nOE dauerhaft auf LOW gehalten werden.
Hallo was ich komisch finde ist dass bei der Simulation die Zeiten nicht ganz passen. Kann mir jemand erklären wieso pixel_s bei der fallenden Flanke von clk24_s ausgeführt wird. Eigentlich sollte dies bei der steigenden passieren. Ebenso würde mich interessieren wieso rgb_o zeitverschoben gegenüber memory_s ist. mfg
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.