Hallo zusammen,
ich hab mal wieder ein Problem, das mich graue Haare kostet und bitte um
Euren Rat.
Ich habe das Spartan 3 1000 Starter Board von Digilent mit schnellem
SRAM ( 10 ns )
Takt beträgt 50 Mhz ( 20 ns )
Nun hab ich einen Master SRAM Controller mit der kostenlosen WEB ISE 8.1
entworfen.
Zwei verschiedene Master sollen auf das SRAM lesend oder schreibend
zugreifen können.
Das ganze ist so aufgebaut, dass der Takt 50 Mhz = CLK durch 2 geteilt
wird ( = CLK2 ). Ist der CLK2 positiv darf der eine wenn negativ der
andere Client auf das SRAM zugreifen.
Den Orginal Code hab ich leider grad nicht zur Verfügung deshab den u.g.
code aus dem Gedächtnis. ( dürfte aber so passen )
Der controller hat unter anderem die Eingänge
- USB_SRAM_Adr(17 downto 0)
- USB_SRAM_RD
- USB_SRAM_WR
- USB_Data_in( 31 downto 0)
sowie
- FPGA_SRAM_Adr(17 downto 0)
- FPGA_SRAM_RD
- FPGA_SRAM_WR
- FPGA_Data_in( 31 downto 0)
und eben den Ausgang
- SRAM_Data_Out ( 31 downto 0)
-----------------------------------------------------------------------
( pseudo Code )
Signal SRAM_Data_in ( 31 downto 0 )
Signal SRAM_WE
Signal SRAM_Adr( 17 downto 9 )
Process ( clk, clk2 )
..
if ( clk = '1') and (clock' event)
-- USB darf zugreifen
if clk2 = '1' then
if USB_SRAM_RD = '1' then
SRAM_Adr <= USB_SRAM_Adr ; -- USBB Adr übernehmen
SRAM_Data_in <= SRAM_Data_in ;
SRAM_WE <= '0' ; -- WE inaktiv
elsif USB_SRAM_WR = '1' then -- USBB Adr übernehmen
SRAM_Adr <= USB_SRAM_Adr ;
SRAM_Data_in <= USB_SRAM_Data_in ; -- Daten USB einlesen
SRAM_WE <= '1' ; -- WE aktiv !
else
SRAM_Adr <= SRAM_Adr;
SRAM_Data_in <= SRAM_Data_in ; -- Daten USB einlesen
SRAM_WE <= '0' ; -- WE inaktiv
end if ;
else
if FPGA_SRAM_RD = '1' then
SRAM_Adr <= FPGA_SRAM_Adr ; -- FPGA Adr übernehmen
SRAM_Data_in <= SRAM_Data_in ;
SRAM_WE <= '0' ; -- WE inaktiv
elsif FPGA_SRAM_WR = '1' then -- FPGA Adr übernehmen
SRAM_Adr <= FPGA_SRAM_Adr ;
SRAM_Data_in <= FPGA_SRAM_Data_in ; -- Daten FPGA einlesen
SRAM_WE <= '1' ; -- WE aktiv !
else
SRAM_Adr <= SRAM_Adr;
SRAM_Data_in <= SRAM_Data_in ; -- Daten USB einlesen
SRAM_WE <= '0' ; -- WE inaktiv
end if ;
end if
------------------------------------------------------------------------
--
Nun zu meinem verflixten Problem
Alternatives lesen / schreiben ist OK
======================================
Ich kann per USB die Daten im SRAM mit Zufallszahlen schreiben und
Rücklesen ohne Probleme.
Das gleiche funktioniert auch per FPGA client ohne Probleme.
Soll heißen der jeweils andere Client ist inaktiv während der andere
Client liest oder schreibt.
Konflikt beim gemischten Zugriff
================================
Zum Testen des gemischten Zugriff mache ich folgendes.
Wie oben wird von der PC USB Seite her das SRAM komplett mit
Zufallszahlen gefüllt und diese wieder ausgelesen.
Gleichzeitig lege ich an der FPGA Client Seite des controllers die
Eingangssignale für FPGA fest auf schreiben.
FPGA_SRAM_RD <= '0' ; -- dauerhaft auf inaktiv
FPGA_SRAM_WR <= '1' ; -- dauerhaft auf aktiv.
FPGA_SRAM_Adr <= "111100000000000000" ; -- irgend eine feste Adresse
SRAM_Data_in <= My_Test_Data_Fix_32_Bit ;
Nun erwarte ich, dass mein PC Testprogramm bis auf die fest
FPGA_SRAM_Adr Adresse alles wieder korrekt zurückliest.
Genaue Fehlerbeschreibung:
==========================
Die Zufallszahlen werden bis zu der o.g. Adresse korrekt zurückgelesen.
Also ich kann beliebig oft Zufallszahlen erzeugen, diese in einem Array
abspeichern, dann auf das SRAM per USB schreiben und wieder aus dem SRAM
auslesen alles fehlerfrei.
Aber nur bis der o.g. Adresse. Ab der o.g. Adresse enthalten alle
Dateninhalte nur noch den o.g. Werte die ich zurücklesen nur noch das
o.g. My_Test_Data_Fix_32_Bit Bitmuster.
Ich weiß beim besten Willen nicht mehr wie ich den Fehler finden soll.
Gruß vom FPGA-Fragenden
@ FPGA-Fragender (Gast) >Zwei verschiedene Master sollen auf das SRAM lesend oder schreibend >zugreifen können. >Den Orginal Code hab ich leider grad nicht zur Verfügung deshab den u.g. >code aus dem Gedächtnis. ( dürfte aber so passen ) Sowas kannst du dir sparen. Es kommt da auf Details drauf an. Original oder gar nichts. >Ich weiß beim besten Willen nicht mehr wie ich den Fehler finden soll. Und ich nicht, wie wir dir ohne den echten Quelltext helfen sollen MFG Falk
Ich kann Dir leider auch nicht weiterhelfen, würde aber gerne wissen wie du den USB an das Starterkit gebastelt hast?
Hallo manuel, http://www.braintechnology.de Selbst auf eine Lochraster Platine gelötet und per Adapter an das Board angesteckt usw. Gruß vom FPGA-Fragenden
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.