Forum: FPGA, VHDL & Co. Altera <-> Xilinx: RAM-Konfiguration


von H. G. (Gast)


Lesenswert?

Ich habe begonnen, ein Design zu erzeugen und bin dabei auf einen (für 
mich wichtigen) Unterschied zwischen A. und X. gestossen:

Bei Xilinx kann ich BRAM mit bis zu 1024 Bit Breite definieren, die über 
eine Adresse (bei insgesamt N Adressen) angesprochen werden und dann 
bitweise anwählbar sind, bei Adressierung mit N+10 bits.

Das bekomme ich bei Altera nicht hin. Die Adressbreiten dürfen sich 
nicht 1024:1 unterscheiden, sondern nur 128:1, wie mir scheint und es 
gibt auch maximal 288 Bit. Ich beziehe mich auf den Vergleich Spartan 
3/6 gegenüber Cyclone 3/4.

Ist das so? Bekommt man gfs bei Stratix flexiblere Konfigurationen hin?

Nun ist mir bewusst, dass ich mehrere Altera RAMs passend verschalten 
kann, um meine Funktion zu erhalten, aber warum kann man das nicht per 
Core? Ich denke nicht, dass die Xilinx BRAMs grundsätzlich anders 
funktionieren und dass nur der CoreGen mehr Bauarbeit leistet.

Oder hat es doch HW-Gründe?

von Duke Scarring (Gast)


Lesenswert?

Ich würde mich an den Standard halten (IEEE Std 1076.6™-2004).
Damit ist man Herstellerunabhängig und variabel:
1
-- Example 1: A RAM with edge-sensitive write to storage elements
2
library ieee;
3
use ieee.std_logic_1164.all;
4
use ieee.numeric_std.all;
5
use ieee.rtl_attributes.all;
6
7
entity ram is
8
  generic (
9
    WIDTH : Natural := 8;
10
    DEPTH : Natural := 16);
11
  port (
12
    q   : out std_logic_vector(WIDTH-1 downto 0); -- Ram output
13
    d   : in  std_logic_vector(WIDTH-1 downto 0); -- Ram data input
14
    a   : in  std_logic_vector(DEPTH-1 downto 0); -- Address
15
    we  : in  std_logic; -- Write enable
16
    clk : in  std_logic); -- system clock
17
end entity ram;
18
19
architecture RTL of ram is
20
  type ram_typ is array(0 to 2**DEPTH-1) of
21
      std_logic_vector(WIDTH-1 downto 0);
22
23
  signal ram : ram_typ; -- ram element
24
  attribute ram_block of ram : signal is "RAM_CELL XYZ01";
25
  -- For RAM design with registers logic use:
26
  -- attribute logic_block of z : signal is TRUE;
27
28
begin -- architecture RTL
29
      -- purpose: Synchronous Ram definition
30
      -- type : combinational
31
32
Ram_Proc: process is
33
  begin -- process Ram_Proc
34
    wait until clk = '1';
35
    if we = '1' then
36
      ram(to_integer(unsigned(a))) <= d;
37
    end if;
38
  end process Ram_Proc;
39
40
  q <= ram(to_integer(unsigned(a)));
41
42
end architecture RTL;

Duke

von H. G. (Gast)


Lesenswert?

Dieses RAM hat aber nicht die beiden benötigten Ports und die 
unterschiedlichen Schreib-Lesebreiten.

von Duke Scarring (Gast)


Lesenswert?

Gerald Hellinghaus schrieb:
> Dieses RAM hat aber nicht die beiden benötigten Ports und die
> unterschiedlichen Schreib-Lesebreiten.
Das stimmt.

Was möchtest Du denn konkret machen? Vielleicht kann man Dein Problem 
auch anders lösen.

Duke

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.