не могу сообразить что и как нужно делать чтобы 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') thenend if;Counter <= Counter+1;end if;
CopyBckEnbl <= '0';
--....
--.....
if(counter = RecivedBit) then -- RecivedBit == 2 bits Readif (CopyBckEnbl = '0') then MN_Tmp <= MemoryNext(NEWSTATE); end if;-- 1 raz schitatend if;
if(TaktCnt > 6 and TaktCnt < 14)then--14
if( MN_Tmp < LargestValue ) thenMemoryNext(NEWSTATE_1) <= LargestValue; end if; -- 1 once writeend if;
--......
if(TaktCnt = 13)then ---13Counter <= 0;else TaktCnt <= TaktCnt+1;
TaktCnt <=0;
CopyBckEnbl <= '1';
end if;
if ( CopyBckEnbl = '1' ) thenMemory(CBCnt) <= MemoryNext(CBCnt);end if; --2 read is a Copy backend if;
if (CBCnt= 64)then CBCnt <= 0;CopyBckEnbl <= '0';else CBCnt <= CBCnt+1;
SetEnbl <= '1';
end if;
if ( SetEnbl = '1' ) thenMemoryNext(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 process Symbol_Read;
end Behavioral;