Forum: FPGA, VHDL & Co. Dual Port RAM im BlockRAM mit 2 frequenzen?


von FPGA-Neuling (Gast)


Lesenswert?

Guten Tag!

für meinen Projekt habe ich ein DualPort RAM geschrieben:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.numeric_std.all;
4
-----------------------------------------------------------------------------
5
entity vram is
6
7
  port
8
  (
9
    clka        : in std_logic;
10
    dina  : in std_logic_vector(7 downto 0);
11
    addra   : in std_logic_vector(12 downto 0);
12
    wea         : in std_logic;
13
    addrb    : in std_logic_vector(12 downto 0);
14
    doutb     : out std_logic_vector(7 downto 0)
15
  );
16
17
end vram;
18
19
architecture ram_arch of vram is
20
21
  type ram_t is array (0 to 8191) of std_logic_vector(7 downto 0);
22
  signal ram : ram_t;
23
24
begin
25
26
process(clka) -- clka 56MHz
27
begin
28
  if(clka'event and clka = '1') then
29
    if wea = '1' then
30
      ram(to_integer(unsigned(addra))) <= dina;
31
    end if;
32
  end if;
33
end process;
34
35
doutb <= ram(to_integer(unsigned(addrb)));
36
37
end ram_arch;

Daten werden mit 56MHz geschrieben und mit 35MHz ausgelesen.
Geht es so oder soll ich besser daten so auslesen???
1
process(clkb) -- clkb 35MHz
2
begin
3
  if(clkb'event and clkb = '1') then
4
    doutb <= ram(to_integer(unsigned(addrb)));
5
  end if;
6
end process;

von Jan M. (mueschel)


Lesenswert?

Du solltest auf jeden Fall die zweite Variante vorziehen - so kannst du 
sicher sein dass a) die zwei verschiedenen Clocks erkannt werden und b) 
du hast einen synchronen Ausgang.

von Berater (Gast)


Lesenswert?

Ich fürchte, Dein "RAM" braucht noch etwas Synchronisation !

von FPGA-Neuling (Gast)


Lesenswert?

>Ich fürchte, Dein "RAM" braucht noch etwas Synchronisation !

Was genau meinen Sie???

von Willy (Gast)


Lesenswert?

Hast du denn mal geschaut, ob deine VHDL-Beschreibung für das RAM
vom Synthese-Tool auch als RAM (Embedded RAM) implementiert wird
(sollte in irgendeinem Map/Ressourcen-Report ersichtlich sein) ?

Wieso verwendest du nicht ein Dual-Clock-RAM-Template ? Oder
benötigst du das RAM lediglich für Simulationszwecke ?

Gruß
Willy

von lkmiller (Gast)


Lesenswert?

Ein BRAM kann von der Synthese eingesetzt werden, wenn die Adresse 
registiert (getaktet) ist. Es ist irrelevant, ob der Ausgang ebenfalls 
getaktet oder concurrent zugewiesen wird.
Wenn die Adresse kombinatorisch ist, wird ein Distributed RAM 
eingesetzt.

D.h. es müsste auf jeden Fall auch die Adresse B registriert werden.
Und damit gilt fürs Auslesen die Schreibweise 2.

Nach der Synthese im Synthese-Report nachsehen, ob auch wirklich BRAMs 
eingesetzt wurden.


Was der Berater meint dürfte ein Handshake sein, mit dem die schreibende 
Seite der lesenden Seite mitteilt, dass da was zum Abholen bereitsteht.

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.