Forum: FPGA, VHDL & Co. BlockRam verwendung bei Xilinx FPGAs


von Unnormaley (Gast)


Lesenswert?

Hallo,


ich will VHDL Code schreiben, der dazu führt, dass die Synthesesoftware 
XST von Xilinx BlockRam als Speicher verwendet. Jetzt weiß ich, dass 
dazu synchron gelesen, als auch geschrieben werden muss.

Was ist aber wenn ich eine Vergleich mache mit Speicherinhalt aus dem 
BlockRam?


Hier sei x Speicherinhalt aus dem BlockRam. Wenn dieser Vergleich 
asynchron gemacht wird, wird nicht mehr als BlockRam synthetisiert oder?

if x = y then
...
end if;

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


Lesenswert?

Unnormaley schrieb:
> Wenn dieser Vergleich
> asynchron gemacht wird, wird nicht mehr als BlockRam synthetisiert oder?
Synchron oder Asynchron hat damit nichts zu tun...

Dieser Vergleich eines kompletten RAMS mit einem anderen geht sowieso 
nicht! Du kannst nicht das ganze Blockram auf einmal lesen (oder gar 
schreiben) und so mit einem anderen vergleichen, denn von dem RAM sind 
je nach Datenbusbreite ja maximal 32 (bzw. 36) Bits über die 
Datenleitungen zu sehen!

So ein Blockram ist nämlich in allererster Linie ein RAM, das über 
Adressleitungen ein Wort speichern oder lesen kann.

von Unnormaley (Gast)


Lesenswert?

Hallo,

danke für die Antwort. Ja das stimm natürlich, ich habe mich undeutlich 
ausgedrückt. Ich addressiere eine 32-Bit Zeile in meinem BlockRam mit x, 
und y ist einfach ein 32-Bit Signal (nicht im Blockram )

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


Lesenswert?

Unnormaley schrieb:
> Hier sei x Speicherinhalt aus dem BlockRam. Wenn dieser Vergleich
> asynchron gemacht wird, wird nicht mehr als BlockRam synthetisiert oder?
Beim BRAM muss die Lese-Adresse (!) getaktet sein:
http://www.lothar-miller.de/s9y/archives/20-RAM.html#extended
Sieh dir einfach mal den XST-Users-Guide an. Da steht drin, wie ein RAM 
beschrieben werden muss, damit ein BRAM rauskommt...

von Unnormaley (Gast)


Lesenswert?

Eine letzte Frage. Ich habe jetzt diese VHDL Beschreibung geschrieben. 
Ich möchte jetzt gerne, dass für das array ram BlockRam verwendet wird. 
Würde das in der Synthese so durchgehen? Was mir Angst macht ist
"adr <= memory_adr(4 downto 0);".
1
entity bram is
2
  port( 
3
    CLK : in std_logic;
4
    memory_adr : in std_logic_vector(31 downto 0)
5
    we : in std_logic;
6
    data_i : in std_logic_vector(31 downto 0);
7
    data_o : out std_logic_vector(31 downto 0);
8
  );
9
end entity bram;
10
11
architecture behavior of bram is
12
13
  signal adr : std_logic_vector (4 downto 0);
14
15
  type t_ram is array (31 downto 0) of std_logic_vector(31 downto 0);
16
  signal ram : t_ram;
17
18
begin
19
  adr <= memory_adr(4 downto 0);
20
21
  process(Clk)
22
  begin
23
      if(rising_edge(CLK)) then
24
    if(we='1') then
25
        ram(adr) <= data_i;
26
    end if;
27
    data_o <= ram(adr);
28
      end if; 
29
  end process;
30
31
32
33
end behavioral;

von Bernie (Gast)


Lesenswert?

Lothar Miller schrieb:
> Du kannst nicht das ganze Blockram auf einmal lesen (oder gar
>
> schreiben)

Doch geht, wenn man es als ein-Bit breites Ram nimmt.

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


Lesenswert?

Das geht so sicher nicht durch, weil zum Indizieren eines Arrays in VHDL 
nur Integer zulässig sind...

von Unnormaley (Gast)


Lesenswert?

Ja stimmt, das hatte ich vergessen, dazu zu schreiben. Und wenn ich 
jetzt mit conv_integer arbeite, würde das dann durchgehen? :)

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


Lesenswert?

Nimm besser die NUMERIC_STD statt der alten Synopsys Libs...

von Unnormaley (Gast)


Lesenswert?

OK, danke für die Hilfe. Ich werde heut gleich auf der Arbeit los 
synthetisieren :D und hoffe auf BlockRam!

von Michael (Gast)


Lesenswert?

Lothar Miller schrieb:
> Nimm besser die NUMERIC_STD statt der alten Synopsys Libs...

Ist aber bei Rams ziemlich schnuppe.

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.