Hallo,
ich habe hier ein kleines Problem mit Vivado 2015.2.1.
Wenn ich einen dual port BRAM so beschreibe:
1 | process(clka)
|
2 | begin
|
3 | if(clka'event and clka = '1') then
|
4 | if(ena = '1') then
|
5 | if(wea = '1') then
|
6 | ram_name(to_integer(unsigned(addra))) <= dina;
|
7 | end if;
|
8 | ram_data_a <= ram_name(to_integer(unsigned(addra)));
|
9 | end if;
|
10 | end if;
|
11 | end process;
|
12 |
|
13 | process(clka)
|
14 | begin
|
15 | if(clka'event and clka = '1') then
|
16 | if(enb = '1') then
|
17 | if(web = '1') then
|
18 | ram_name(to_integer(unsigned(addrb))) <= dinb;
|
19 | end if;
|
20 | ram_data_b <= ram_name(to_integer(unsigned(addrb)));
|
21 | end if;
|
22 | end if;
|
23 | end process;
|
dann funktioniert das in FPGA hervorragend. Bei der Simulation
funktioniert aber das schreiben auf den Speicher nicht. Überall wo eine
'1' geschrieben wird steht nachher im Speicher 'X'.
Schreibe ich beide Schreibzugriffe in einen Prozess funktioniert die
Simulation aber die Synthese schlägt fehl. Der Block wird nicht mehr als
BRAM erkannt.
Wie mache ich es richtig ohne auf einen fertigen BRAM Block von Xilinx
zuzugreifen?
Danke Michael