Hallo zusammen, ich möchte einen SRAM ( SRAM hat 10ns Zugriffszeit ) controller für eine Spartan 3 Starter Board von Digilent entwerfen. Mein bisheriger Entwurf hat zwar funktioniert, aber wie mir jetzt erst klar geworden ist nur durch Zufall :-)) Hab nochmal die Datenblätter durchgearbeitet. Ich brauche nicht die maximale Geschwindigkeit es genügt, wenn ich mit 50 Mhz bei jedem Takt lesen oder schreiben kann, also 20ns Zyklus Zeit. Ich hab nicht beachtet, dass jeder Schreibvorgang mit einer steigenden Flanke abgeschlossen werden muss. D.h. das mehrfache schreiben nacheinander brachte Fehler. Ich brauche also ein Write Enable Signal siehe Anlage. Nun meine Frage wie würdet Ihr das Problem am elegantesten lösen. DCM aufbauen mit vierfachem Takt und eine State machine mit 4 States. Ist das der richtige Weg ? Ich hoffe es geht auch einfacher ? Gebt mir bitte einen Rat bevor ich in die falsche Richtung laufe. Gruß vom FPGA-Fragenden P.S. Danke für die vielen Guten Infos, die ich durch das Board schon bekommen hab.
@ FPGA-Fragender (Gast) >Ich brauche nicht die maximale Geschwindigkeit es genügt, wenn ich mit >50 Mhz bei jedem Takt lesen oder schreiben kann, also 20ns Zyklus Zeit. >DCM aufbauen mit vierfachem Takt und eine State machine mit 4 States. >Ist das der richtige Weg ? Takt auf 100 MHz verdoppeln und steigende sowie fallende Flanke nutzen reicht. Damit hat man auch 4 Zustände, mit welchen man den Zugriff korrekt codieren kann. Dein Timingdiagramm ist noch nicht so ganz OK. Die Adressen sollten NICHT gleichzeitig mit WR wechseln. MFG Falk P.S. Bildformate
Hallo Falk, ich habs im timing Diagramm abgeändert. Ich hab noch nie mit fallenden Flanken und 2 Takten gearbeitet und versteh nicht so ganz wie ich die Abfrage schreiben muss ? Beispiel für die Abfragen der States 1 bis 4 ============================================== proces my_machine ( clk100 ) .. if ( CLK100'event ) then if Clk100 = '1' then if ( clk50 = '1' ) then pinzip WE = '0' ; -- state 1 else WE = '0' ; -- state 3 end if ; else if ( clk50 = '1' ) then pinzip WE = '0' ; -- state 2 else WE = '1' ; -- state 4 end if ; end if ; end process ; Oder aber proces my_machine ( clk100 ) .. if (clk100'event and clk100 = '0' and clk50 = '0' ) then WE = '1' ; else WE = '0' ; end if ; end process; Könntest Du mir ein Beispiel schreiben ? Bitte ! Ich versteh nicht wie man ein signal synchron zu verschiedenen Flanken Ereignissen auswertet bzw. setzt Gruß vom FPGA-Fragenden
@ FPGA-Fragender (Gast) >Dateianhang: quad_clock2.jpg (67,1 KB, 11 Downloads) Informiere dich bnitte über Bildformate!!! >Ich hab noch nie mit fallenden Flanken und 2 Takten gearbeitet und >versteh nicht so ganz wie ich die Abfrage schreiben muss ? Etwa so.
1 | --
|
2 | proces my_machine ( clk100 ) |
3 | begin
|
4 | if rising_edge(CLK100) then |
5 | toggle = not toggle; -- Hilfssignal für Taktteilung |
6 | if toggle='1' then -- jeden 2. Takt die Addressen |
7 | hochzählen und WE generieren |
8 | address <= address+1; |
9 | WE_int <= '0'; |
10 | else
|
11 | WE_int <= '1'; |
12 | end if; |
13 | end if ; |
14 | end process; |
15 | |
16 | process (clk100) |
17 | begin
|
18 | if falling_edge(CLK100) then |
19 | WE <= WE_int; -- WE um halben Takt verzögern |
20 | end if; |
21 | end process; |
>Ich versteh nicht wie man ein signal synchron zu verschiedenen Flanken >Ereignissen auswertet bzw. setzt Gar nicht. Die einzelnen Signale sind immer nur synchron zur steigenden oder fallenden Flanke. Aber es ist vollkommen OK und sicher, ein Signal mit steigender Flanke zu generieren und danach mit der fallenden Flanke nochmal abzutasten. Siehe oben. MFG Falk
Na die vielen Pfeile der Signale sind sicher automatisch ertzeugt worden, oder ?
Hallo zusammen, alles per Hand in Excel gemacht. Die Pfeile auch. Hab mittlerweile so viele Diagramme damit gemacht, dass es einigermaßen von der Hand geht. :-)) 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.