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


von gefrusteter FPGA-Progger (Gast)


Lesenswert?

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

von Jan M. (mueschel)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

von Jan M. (mueschel)


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.

von Falk B. (falk)


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

von Franke (Gast)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

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:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
entity RSAS is
6
    Port ( din  : in  STD_LOGIC_VECTOR (1 downto 0);
7
           dout : out  STD_LOGIC_VECTOR (1 downto 0);
8
           rst  : in  STD_LOGIC;
9
           clk  : in  STD_LOGIC);
10
end RSAS;
11
12
architecture Behavioral of RSAS is
13
signal dsync  : std_logic;
14
signal dasync : std_logic;
15
signal rstsr  : std_logic_vector(2 downto 0);
16
begin
17
  -- Reset einsynchronisieren
18
  process begin
19
     wait until rising_edge(clk);
20
     rstsr<=rstsr(1 downto 0)&rst;
21
  end process;
22
  
23
  -- Synchroner Reset
24
  process begin
25
     wait until rising_edge(clk);
26
     if (rstsr(2)='1') then 
27
        dsync<='0'; 
28
     else
29
        dsync<=din(0);
30
     end if;
31
  end process;
32
33
  -- Asynchroner Reset
34
  process (clk, rstsr) begin
35
     if (rstsr(2)='1') then 
36
        dasync<='0'; 
37
     elsif rising_edge(clk) then
38
        dasync<=din(1);
39
     end if;
40
  end process;
41
42
  -- Ausgabe
43
  dout <= dasync & dsync;
44
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.

von Falk B. (falk)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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 ;-)

von Franke (Gast)


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.

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
Noch kein Account? Hier anmelden.