Problem mit Dual Port BRAM

Gast #4289397
Lesenswert?

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
#4289738
Lesenswert?

Für Dual Ported RAM muss das aber schon als shared Variable deklariert 
sein. Sonst geht der Simulator davon aus, dass zwei Quellen ein Signal 
treiben und gibt dir völlig korrekt das X aus. Der Sythesizer kann das 
sicherlich erkennen, dass du in Wirklichkeit einen DP RAM beschreibst.

Ich hab das so:
1
--True Dual Ported RAM according to XST User Guide
2
type  ram_type  is  array  (0  to  MEMORY_SIZE - 1)  of  std_logic_vector  (15  downto  0);
3
shared  variable  RAM  :  ram_type;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren