www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Takt 2 mal verdoppeltn für State Machine


Autor: FPGA-Fragender (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Autor: FPGA-Fragender (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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.

--
proces my_machine ( clk100 )
begin
  if rising_edge(CLK100) then
    toggle = not toggle;             -- Hilfssignal für Taktteilung
    if toggle='1' then               -- jeden 2. Takt die Addressen 
                                        hochzählen und WE generieren
      address <= address+1;
      WE_int <= '0';
    else
      WE_int <= '1';
    end if;
  end if ;
end process;

process (clk100)
begin
  if falling_edge(CLK100) then
    WE <= WE_int;                  -- WE um halben Takt verzögern 
  end if;
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

Autor: Kralle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Womit ist denn dieses Bild produziert worden ?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sieht sehr stark nach Excel aus

Autor: Ernie ohne Bert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na die vielen Pfeile der Signale sind sicher automatisch ertzeugt 
worden, oder ?

Autor: FPGA-Anfaenger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.