Forum: FPGA, VHDL & Co. Probleme beim Ausführen


von Spartaner (Gast)


Angehängte Dateien:

Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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)?

von Spartaner (Gast)


Lesenswert?

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.

von bko (Gast)


Lesenswert?

Ist "chip enable" (ce not) auf 1 oder 0 ?
ich sehe es nicht im Code...

von Spartaner (Gast)


Lesenswert?

laut Schaltplan ist es auf GND

von bko (Gast)


Lesenswert?

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 ?

von Spartaner (Gast)


Lesenswert?

--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?

von Spartaner (Gast)


Lesenswert?

Im Xilinx habe ich nur die Pins auf die Ein- und Ausgänge gesetzt sind 
vielleicht irgendwo Pull Up oder -Downs notwendig.

von bko (Gast)


Lesenswert?

>--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)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>> -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?

von Spartaner (Gast)


Lesenswert?

>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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>> 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...

von mac4ever (Gast)


Lesenswert?

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.

von Spartaner (Gast)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.