www.mikrocontroller.net

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


Autor: FPGA-Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag!

für meinen Projekt habe ich ein DualPort RAM geschrieben:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
-----------------------------------------------------------------------------
entity vram is

  port
  (
    clka        : in std_logic;
    dina  : in std_logic_vector(7 downto 0);
    addra   : in std_logic_vector(12 downto 0);
    wea         : in std_logic;
    addrb    : in std_logic_vector(12 downto 0);
    doutb     : out std_logic_vector(7 downto 0)
  );

end vram;

architecture ram_arch of vram is

  type ram_t is array (0 to 8191) of std_logic_vector(7 downto 0);
  signal ram : ram_t;

begin

process(clka) -- clka 56MHz
begin
  if(clka'event and clka = '1') then
    if wea = '1' then
      ram(to_integer(unsigned(addra))) <= dina;
    end if;
  end if;
end process;

doutb <= ram(to_integer(unsigned(addrb)));

end ram_arch;

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

Autor: Jan M. (mueschel)
Datum:

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

Autor: Berater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich fürchte, Dein "RAM" braucht noch etwas Synchronisation !

Autor: FPGA-Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich fürchte, Dein "RAM" braucht noch etwas Synchronisation !

Was genau meinen Sie???

Autor: Willy (Gast)
Datum:

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

Autor: lkmiller (Gast)
Datum:

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

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.