32 Bit Block RAM erzeugen - Xilinx

Gast #4492327
Lesenswert?
• ▲
▼
Guten Tag,

ich beschäftige mich seit ein paar Tagen mit FPGA's (Xilinx Artix 7 mit 
Vivado, VHDL). Jetzt bin ich grade beim Block RAM angekommen und hab es 
auch schon geschaft ein Block-RAM zum laufen zu bekommen. Dabei hatten 
Adress und Daten-Bus 16 Bit. Nun hab ich versucht den Datenbus auf 32 
Bit auf zu bohren, aber dann erzeugt Vivado kein Block-RAM mehr sondern 
Distributed-RAM. Ich achte natürlich darauf, dass das Array nicht zu 
groß wird. (Max 1800kb (50 x 36kb) BRAM).

1
entity Test is
2
    Generic( AddrWidth: INTEGER := 16;
3
             DataWidth: INTEGER := 32 );
4
    Port ( Clk : in STD_LOGIC;
5
           Write : in STD_LOGIC;
6
           Addr : in STD_LOGIC_VECTOR ((AddrWidth - 1) downto 0);
7
           DataIn : in STD_LOGIC_VECTOR ((DataWidth - 1) downto 0);
8
           DataOut : out STD_LOGIC_VECTOR ((DataWidth - 1) downto 0));
9
end Test;
10

11
architecture Test_Behavioral of Test is
12
    type BRAM is array((((1800 * 1024) / DataWidth) - 1) downto 0) of STD_LOGIC_VECTOR(DataWidth - 1 downto 0);
13
    signal mem: BRAM;
14
begin
15

16
    process(Clk)
17
    begin
18
        if rising_edge(Clk) then
19
            if Write = '1' then
20
                mem(to_integer(UNSIGNED(Addr))) <= DataIn;
21
            end if;
22
            
23
            DataOut <= mem(to_integer(UNSIGNED(Addr)));
24
        end if;
25
        
26
    end process;
27
end Test_Behavioral;

Vielleicht kennt sich hier ja jemand mit dem Block-RAM aus?
Gast #4492415
Lesenswert?
• ▲
▼
FPGA-Einsteiger schrieb im Beitrag #4492327:
> dass das Array nicht zu
> groß wird. (Max 1800kb (50 x 36kb) BRAM).

http://www.xilinx.com/support/documentation/user_guides/ug473_7Series_Memory_Resources.pdf


S.27 check mal ob du bei 32bit datenbusbreite 36kb zur Verfügung hast.
und ob 32 bit wirklich so realisierbar ist.

Und auf S. 13 kannst du checken ob dein FPGA überhaupt 50 BRAM's hat. 
Dann wäre noch zu klären ob die auch alle frei sind. Check doch mal den 
Synthese Report. Alternativ kannst du dich ja bei der type -decla
type BRAM is array((((1800 * 1024) / DataWidth) - 1) downto 0) of 
STD_LOGIC_VECTOR(DataWidth - 1 downto 0);

so langsam hochtasten. Versuch erst mal einen  BRAM -Block 32kbit @ 
32bit zu allokieren.
Moderator (Firma: Titel) Persönliche Seite #4492534
Lesenswert?
• ▲
▼
Bit Wurschtler schrieb:
> S.27 check mal ob du bei 32bit datenbusbreite 36kb zur Verfügung hast.
> und ob 32 bit wirklich so realisierbar ist.
Wenn man an die Obergrenze kommt, dann darf man sich nicht wundern, dass 
einem 1/9 des Speichers fehlt: das 9. Bit ist in die Marketingzahlen 
eingepreist (so kommen die 9, 18, 36, 72 Bit Wortbreite zustande), es 
kann aber so einfach nicht auf 32 Breite "umgemappt" werden...

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.