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.