реклама на сайте
подробности

 
 
> Работа с BRAM Памятью на Хилинх
Iskatel
сообщение Apr 3 2011, 16:16
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 27-02-11
Пользователь №: 63 276



Помогите пожаилуста с 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;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
XVR
сообщение Apr 4 2011, 09:17
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



У вас получилось 4 однонаправленных порта. Для того, что бы синтезировался BRAM у него должно быть не более 2х двунаправленных (в смысле - для чтения/записи) портов. Т.е. адреса (в пределах одного порта) должны совпадать и условия чтения/записи должны быть взаимоисключающими. Ну и синтезатор это все должен понять sm.gif
Go to the top of the page
 
+Quote Post
Kompot
сообщение Apr 4 2011, 09:36
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 242
Регистрация: 10-06-08
Из: Хочу в пампасы...
Пользователь №: 38 192



Цитата(Iskatel @ Apr 3 2011, 19:16) *
Помогите пожаилуста с BRAM

не могу сообразить что и как нужно делать чтобы Xilinx синтезатор MemoryNext как Block RAM организовал. Я понимаю что RAM двухпортовыи Read and Write, но мне надо два раза считать и два раза переписать его. А вот сделать этого не могу. Я думал


Давненько не брал в руки шашек...

Что-то вы не с того конца зашли. Если вы точно знаете, что вам нужно, то идете прямо в Кореген и с визардом вместе генерируете себе блок памяти с нужными свойствами. Он гарантированно будет лучше чем любой синтезированный, ибо уже аппаратно оптимизирован.

На будущее - далеко не все железо, что есть на борту современных ФПГА можно вот так просто выразить на VHDL и ожидать, что оно синтезируется. Надо либо читать доку на синтезатор (там до запятой расписывается как из ЯВУ инстанцировать определенные железные компоненты, но возможно это не всегда), либо корегеном (для памяти особенно), либо просто свои обертки писать и напрямую вставлять например двунаправленный выходной буфер с третим состоянием и DDR регистром в пине.
Go to the top of the page
 
+Quote Post
Iskatel
сообщение Apr 4 2011, 10:22
Сообщение #4





Группа: Новичок
Сообщений: 4
Регистрация: 27-02-11
Пользователь №: 63 276



Цитата(XVR @ Apr 4 2011, 12:17) *
У вас получилось 4 однонаправленных порта. Для того, что бы синтезировался BRAM у него должно быть не более 2х двунаправленных (в смысле - для чтения/записи) портов. Т.е. адреса (в пределах одного порта) должны совпадать и условия чтения/записи должны быть взаимоисключающими. Ну и синтезатор это все должен понять sm.gif


Так вот в этом то и проблема адреса ставил все одинаковые и для меня выглядит всё взаимноисключающим, а вот синезатор этого понимать не хочет
Go to the top of the page
 
+Quote Post
XVR
сообщение Apr 4 2011, 10:28
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Iskatel @ Apr 4 2011, 14:22) *
Так вот в этом то и проблема адреса ставил все одинаковые и для меня выглядит всё взаимноисключающим, а вот синезатор этого понимать не хочет
Посмотрите в доке (в описании библиотеки, а точнее BRAM'а) - там есть шаблоны на HDL. Их синтезатор понимать обязан rolleyes.gif (Кстати, там еще могут быть дополнительные ограничения, ну например невозможность извлечь из описание 2х двунарпавленных порта smile3046.gif Почитайте там же )

Go to the top of the page
 
+Quote Post
Иван Панченко
сообщение Apr 5 2011, 09:25
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 29-11-08
Из: санкт-петербург
Пользователь №: 42 061



действительно, примеры стандартных компонентов лучше посмотреть в : Xilinx_folder\ISE_DS\ISE\doc\usenglish\isehelp\xst.pdf.
Но даже грамотно написанная память, будет разводится много дольше, чем сгенерированная CoreGenerator. Возможно можно попытаться, найти какую-то галочку в оптимизации(чувствуется,что синтезатор пытается ее соптимизировать) - но мне не удалось.
Go to the top of the page
 
+Quote Post
Iskatel
сообщение Apr 9 2011, 08:18
Сообщение #7





Группа: Новичок
Сообщений: 4
Регистрация: 27-02-11
Пользователь №: 63 276



Спасибо всем за советы. Кореген то что нужно при этой задаче. BRAM сгенерировал привязал
и сейчас всё работает как часы. Все попытки заставить синтезатор самому сгенерировать Block RAM
провалились.
Go to the top of the page
 
+Quote Post
ADA007
сообщение Apr 11 2011, 10:24
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 218
Регистрация: 2-02-09
Из: Харьков
Пользователь №: 44 266



Цитата(Iskatel @ Apr 9 2011, 11:18) *
Все попытки заставить синтезатор самому сгенерировать Block RAM
провалились.

Чтобы не мучать синтезатор и себя Xilinx выпускает специально UG для тех, кто умеют читать ... читаем XST User Guide ... там все написано как в виде HDL представить тот или иной примитив понятный XST...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 00:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01448 секунд с 7
ELECTRONIX ©2004-2016