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?