Forum: FPGA, VHDL & Co. 2 Block-Rams in einer Entity


von TheMason (Gast)


Lesenswert?

Hallo @all,

mal eine Frage, und ich hoffe sie ist nicht zu doof gestellt (bzw. das
die Frage so simpel ist das keiner drauf antwortet :-)) :

Ich möchte 2 von den 12 Block-RAMS aus dem Spartan 3 in einer Entity
verwenden.
Sprich : mir reicht der 1k*18 nicht, ich möchte 2k*18 haben.
Also 2 Instanziierungen klappen noch, die beiden IN-ports sind ja auch
kein problem, aber wie sieht das aus mit dem Data-Out Port.
Muß ich den unbedingt multiplexen ? (kost ja laufzeit und logik)

So in etwa hatte ich mir das vorgestellt :

entity ram is
  ...
  addr : in  std_logic_vector (11 downto 0);
  din  : in  std_logic_vector (7 downto 0);
  dout : out std_logic_vector (7 downto 0);
  wen  : in  std_logic;
  ena  : in  std_logic
end entity;

architecture ...
  ...

  BLOCK_RAM_1 : RAMB16_S9_S9 port map (
       addr => addr (11 downto 0),
       din  => din,
       dout => dout,
       wen  => wen,
       ena  => not addr (0) and ena
       ...
      );


  BLOCK_RAM_2 : RAMB16_S9_S9 port map (
       addr => addr (11 downto 0),
       din  => din,
       dout => dout,
       wen  => wen,
       ena  =>     addr (0) and ena
       ...
      );

...

Bräuchte ich extra noch 2 8 bit-vektoren zwischen denen ich dann im
ausgang hin und her schalte und spare mir dann so das enable für das
jeweilge Block-Ram oder kann ich die out-ports doch
"aufeinander"-legen (ähnlich wie beim datenbus)

Habe beim synthetisieren immer das problem des Multi-Source :-((

Gruß
Rene

von FPGA-User (Gast)


Lesenswert?

für die Datenausgänge wirst Du schon einen MUX brauchen,
die RAMs sind ja von Natur aus nicht mit Tristate-Funktion
ausgestattet.

Also nimm ein Signal (wie Du das schon beim ena gemacht hast)
und schalte damit den Ausgangs-Multiplexer, z.B.:

ram1_selected <= not addr (0) and ena;

ram_out <= ram_out1 when ram1_selected='1' else ram_out2;

18bit Breite sollten kein Problem sein - welche Laufzeiten
bzw. Taktfreq. musst Du schaffen?

Evt. gleich wieder ein Register hinter den MUX setzen, wenn
das von der Funktion her möglich ist, falls das Signal direkt
zu FPGA-Pins führt, dann ein entspr. Timing-Constraint setzen
und schauen, was der Timing-Analyzer nach der Synthese sagt.

von TheMason (Gast)


Lesenswert?

hallo fpga user

erstmal danke. hatte ich mir schon fast gedacht das es an dem tri-state
scheitern könnte :-((
laufzeit ist erstmal nicht so kritisch.
es geht um ein vga-text-interface. ich brauche 2 (bzw. 3) blockrams um
den text zu speichern. insgesamt brauche ich 4800 byte (ich weiß,
hässliche krumme zahl :-), aber es kommt leider so aus bei 640*480) und
da brauche ich dann 3 blockrams (wenn ich nicht ein paar zeilen
abschneide um mit 2 blockrams auszukommen)

im moment dümpel ich mit schlappen 25 mhz vor mir hin. timing ist da
erstmal nicht das problem.
für spätere anwendungen (z.b. dsp) wird das timing u.u. kritischer.

gruß
rene

von FPGA-User (Gast)


Lesenswert?

OK, bei 25MHz seh ich auch kein Problem,

die ENA-Signale würde ich aber mit den MSBs der Adresse erzeugen
und die LSBs alle parallel an die RAM-Blöcke legen

(im Beispiel hast Du addr(0) verwendet, was im Prinzip auch
geht, aber wenn Du lineare Adressen hast dann wird ständig
wechselweise auf die RAMs geschrieben bzw. gelesen.)

von TheMason (Gast)


Lesenswert?

Hi Fpga User.

Danke noch für den Hinweis. Allerdings fehlte noch eine Information
meinerseits : Die Block-Rams sind als Dual-Port ausgelegt :-))
Von daher denke ich es es egal. Hauptsache die VGA-Seite hält sich auch
daran, sonst gibts Text-Salat :-))

Aber danke für die prompten Antworten. Find ich echt klasse an diesem
Forum.
Werde wohl auch noch öfter Fragen und wahrscheinlich mal ein kleines
Tutorial für Anfänger fertig machen (von wegen synchron, asynchron
Statemachines, generelle Prinzipien), damit ich auchmal einen
Hilfe-Beitrag leisten kann (sonst schlechtes gewissen hat :-))

Gruß
Rene

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.