Takt 2 mal verdoppeltn für State Machine

Gast #688189
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.
Angehängte Dateien:
#688206
@ 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
Gast #688242
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
Angehängte Dateien:
#688647
@ 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
Gast #699121
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.