Помогите пожаилуста с BRAM
не могу сообразить что и как нужно делать чтобы Xilinx синтезатор MemoryNext как Block RAM организовал. Я понимаю что RAM двухпортовыи Read and Write, но мне надо два раза считать и два раза переписать его. А вот сделать этого не могу. Я думал что Синтезатор имеет определённую интелигенцию и понимает, что я одновреммено только в одном месте, считываю либо записываю в память, но я как видно ошибаюсь, и вместо BRAM синтезатор использует кучу регистров. Помогите пожайлуста
Мой код выглядит следуюшим образом:
type MemoryTyp is array (0 to StateNumber-1) of signed(MWidth-1 downto 0);
signal Memory : MemoryTyp := (others => (others =>'0')) ;
signal MemoryNext : MemoryTyp := (others => "10000000") ;
begin
Symbol_Read: process(Clock)
begin
if rising_edge(Clock) then
if (Flanke = '1') then
Counter <= Counter+1;
CopyBckEnbl <= '0';
--....
end if;
--.....
if(counter = RecivedBit) then -- RecivedBit == 2 bits Read
if (CopyBckEnbl = '0') then MN_Tmp <= MemoryNext(NEWSTATE); end if;-- 1 raz schitat
if(TaktCnt > 6 and TaktCnt < 14)then--14
if( MN_Tmp < LargestValue ) then
MemoryNext(NEWSTATE_1) <= LargestValue; end if; -- 1 once write
--......
end if;
if(TaktCnt = 13)then ---13
Counter <= 0;
TaktCnt <=0;
CopyBckEnbl <= '1';
else TaktCnt <= TaktCnt+1;
end if;
end if;
if ( CopyBckEnbl = '1' ) then
Memory(CBCnt) <= MemoryNext(CBCnt);end if; --2 read is a Copy back
if (CBCnt= 64)then CBCnt <= 0;
CopyBckEnbl <= '0';
SetEnbl <= '1';
else CBCnt <= CBCnt+1;
end if;
end if;
if ( SetEnbl = '1' ) then
MemoryNext(SetEnblCnt) <= ( "10000000"); -- 2 Write set a smallest value
--.......
if (SetEnblCnt= 64)then SetEnblCnt <= 0;
SetEnbl <= '0';
-- ..........
else SetEnblCnt <= SetEnblCnt+1;
end if;
end if;
end if;
end process Symbol_Read;
end Behavioral;