mikrocontroller.net

Forum: FPGA, VHDL & Co. Dual Ported RAMs bei Xillinx


Autor: gefrusteter FPGA-Progger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte mir mit dem coregen ein DP-RAM bauen, brauche aber einen 
asynchronen CLR zur Laufzeit. Wo findet man den?

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du suchst ein gleichzeitiges Löschen des kompletten RAMs? Das wird von 
der Hardware nicht unterstützt.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dual Ported RAMs
Das könnte evtl. gehen bei Distributed-Ram, weil das komplett asynchron 
ist.

Mit BRAMs geht das aber nicht, weil für das Schreiben jedes einzelnen 
Wortes ein Takt nötig ist. Selbst bei der Initialisierung (Startup) geht 
das nur Bit für Bit mit dem Config-Clock.

Aber wieso brauchst du überhaupt einen asynchronen Reset?
Ich würde einfach mal so sagen, dass das auch anders geht...

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller wrote:
>> Dual Ported RAMs
> Das könnte evtl. gehen bei Distributed-Ram, weil das komplett asynchron
> ist.

Distributed RAM setzt sich aber aus LUTs zusammen und diese können 
ebenfalls nicht komplett zurückgesetzt werden.
Nur bei einem "diskreten" RAM aus Flipflops funktioniert ein asynchroner 
Reset.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  gefrusteter FPGA-Progger (Gast)

>Ich möchte mir mit dem coregen ein DP-RAM bauen, brauche aber einen
>asynchronen CLR zur Laufzeit. Wo findet man den?

Gibt es nicht, braucht auch keiner. Wenn du die Daten WIRKLICH löschen 
musst, muss das deine State Machine "zu Fuß" machen. Und asynchron ist 
sowieso Pfui ;-)

MFG
Falk

Autor: Franke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir stellt sich immer die Frage, ob am Ende im FPGA überhaupt ein 
asynchroner Reset realisiert wird, da der Reset ja meistens mehrfach 
eingetaktet wird.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Franke wrote:
> Mir stellt sich immer die Frage, ob am Ende im FPGA überhaupt ein
> asynchroner Reset realisiert wird, da der Reset ja meistens mehrfach
> eingetaktet wird.

Ja, was soll das Synthesetool da machen, wenn ich dem explizit sage, 
wie ein Reset zu verwenden sei? Es muss die entspechenden FFs 
verwenden.

Als kleines Beispiel (damit wir vom Raten wegkommen) das hier:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity RSAS is
    Port ( din  : in  STD_LOGIC_VECTOR (1 downto 0);
           dout : out  STD_LOGIC_VECTOR (1 downto 0);
           rst  : in  STD_LOGIC;
           clk  : in  STD_LOGIC);
end RSAS;

architecture Behavioral of RSAS is
signal dsync  : std_logic;
signal dasync : std_logic;
signal rstsr  : std_logic_vector(2 downto 0);
begin
  -- Reset einsynchronisieren
  process begin
     wait until rising_edge(clk);
     rstsr<=rstsr(1 downto 0)&rst;
  end process;
  
  -- Synchroner Reset
  process begin
     wait until rising_edge(clk);
     if (rstsr(2)='1') then 
        dsync<='0'; 
     else
        dsync<=din(0);
     end if;
  end process;

  -- Asynchroner Reset
  process (clk, rstsr) begin
     if (rstsr(2)='1') then 
        dasync<='0'; 
     elsif rising_edge(clk) then
        dasync<=din(1);
     end if;
  end process;

  -- Ausgabe
  dout <= dasync & dsync;
end Behavioral;

Die RTL-Schematics (Bild) zeigen: der Snythesizer macht trotz des über 4 
D-FFs (FD) synchronisierten Reset-Signals genau das, was beschrieben 
wurde. Den asynchronen Reset mit einem asynchronen Clear-FF (FDC), den 
synchronen Reset mit einem synchronen Reset-FF (FDR).

Also: wird der Reset asynchron beschrieben,
wird das entsprechende Register auch asynchron implementiert.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Lothar Miller (lkmiller)

>Also: wird der Reset asynchron beschrieben,
>wird das entsprechende Register auch asynchron implementiert.

Wäre ja auch noch "Schöner" wenn das Tool ungefragt was 
verschlimmbessern würde. Aber solche Resets an BRAMs sind sowieso 
sinnlos, an vielen FlipFlops ebenso.

MFG
Falk

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber solche Resets an BRAMs sind sowieso sinnlos,
> an vielen FlipFlops ebenso.
Von der Sinnhaltigkeit abgesehen gibt es keinen "globalen" Reset für 
BRAMs und genausowenig für LUT-RAMs (distributed RAM). Da musste ich 
mich noch kurz (wieder) einlesen: LUTs sind 16x1 RAMs. Die können auch 
nicht irgendwie zu 1x16 umgebogen werden. Ich kann also nur 1 Bit 
auswählen, und das ändern.

Um eine komplette LUT zu löschen, müssen also 16 Schreibzugriffe 
stattfinden, um jedes einzelne Bit auf 0 zu setzen. Damit wären wir 
wieder mit einer State Machine "zu Fuß" unterwegs ;-)

Autor: Franke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber kann das nicht ein Problem werden? Der asynch Reset kommt doch dann 
einsynchronisiert genau zur Flanke des Taktes. Abgesehen davon, dass es 
keine andere Funktion macht, als ein synchroner Reset ist es nicht 
schicklich einen Takt an den synchronen und asynchronen Port eines FF zu 
legen. Das meckern die Synthesetools auch zurecht an.

Sinn macht das IMO nur bei clock domain crossing, wenn ganze Busse 
linksseitig eingetaktet werden und rechtsseitig (anderer clock) 
ausgelsen werden. Z.B. beim Zähler reset von Fifos.

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.