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

 
 
> Block RAM на VHDL в Spartan3, Could not implement Block RAM. Is the read address registered using th
Vadim_nsk
сообщение Jun 28 2006, 09:38
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-09-05
Из: г. Новосибирск
Пользователь №: 8 335



При описании памяти как массива производится чтение и запись по разным адресам, при этом чтение производится ассинхронно, а запись синхронно.
При объявлении массива указываю атрибут:
attribute syn_ramstyle : string;
attribute syn_ramstyle of data_array_1 : signal is "block_ram";--"no_rw_check";

При этом Synplify Pro 8.4 в отчете выдает следующее сообщение:
Could not implement Block RAM. Is the read address registered using the same clock as the RAM?

Код примерно следующий:

entity name is
clock : in std_logic;
din : in signed( 15 downto 0 );
write : in std_logic;
dout : out signed( 15 downto 0 );
...
end name;

architecture name_body of name is

subtype data_type is signed( 15 downto 0 );
type data_array_type is array( 0 to 7 ) of data_type;
signal data_array_1 : data_array_type := ( others => to_signed( 0, data_type'length ) );
signal data_array_2 : data_array_type := ...;
attribute syn_ramstyle : string;
attribute syn_ramstyle of data_array_1 : signal is "block_ram";--"no_rw_check";
attribute syn_ramstyle of data_array_2 : signal is "block_ram";--"no_rw_check";

signal rd1_addr, wr1_addr : unsigned( 2 downto 0 ) := to_unsigned( 0, 4 );
signal rd2_addr, wr2_addr : unsigned( 2 downto 0 ) := to_unsigned( 0, 4 );
signal A, C : data_type := to_signed( 0, data_type'length );

body

A <= data_array_1( to_integer( rd1_addr ) );
C <= data_array_2( to_integer( rd2_addr ) );

process( reset, clock )
begin
if reset = '1' then
A <= to_signed( 0, data_type'length );
C <= to_signed( 0, data_type'length );
rd1_addr <= ...;
wr1_addr <= ...;
rd2_addr <= ...;
wr2_addr <= ...;
...
elsif rising_edge( clock ) then
dout <= A * C;
if write = '1' then
data_array_1( to_integer( wr1_addr ) ) <= din;
end if;
rd1_addr <= rd1_addr + 1;
wr1_addr <= wr1_addr + 1;
rd2_addr <= rd2_addr + 1;
end if;
end process;

end name_body;

Как нужно описывать RAM в виде массива, чтобы Synplify сделал из него BlockRAM?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
des00
сообщение Jul 1 2006, 06:42
Сообщение #2


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



МОЕ ИМХО на весь этот счет, у памяти 2 конфигурации, 1 чистый бехавор для симуляции и первоначальной сборки (1 раз потратил день на изучение как правильно нужно писать память, после этого ни разу не было проблем при синтезе, для симуляции попробуйте на вставленых БРАМАХ при объеме памяти кил в 100-200 симуляться и натравите профайлер).
2 конфигурация это уже конфигурация сборки, с реальными вставленными брамами, к которым к тому же можно и RLOC/LOC пристегнуть.
Выбор конфигурации в ВХДЛ 1 строка. в том же топ файле.


--------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Vadim_nsk   Block RAM на VHDL в Spartan3   Jun 28 2006, 09:38
- - oval   Цитата(Vadim_nsk @ Jun 28 2006, 13:38) Пр...   Jun 28 2006, 09:43
|- - Vadim_nsk   Цитата(oval @ Jun 28 2006, 16:43) Канал ч...   Jun 28 2006, 11:47
|- - oval   Цитата(Vadim_nsk @ Jun 28 2006, 15:47) Ци...   Jun 28 2006, 12:16
- - avesat   Проще использовать готовые RAM блоки, рекомендован...   Jun 28 2006, 10:03
- - des00   откуда у блочной памяти асинхронные сбросы ? чита...   Jun 28 2006, 10:44
- - des00   какая разница ? вы позволили синтезатору доопредел...   Jun 28 2006, 12:07
- - vetal   Возможно, что дело еще в: Кодrd1_addr <= rd1_a...   Jun 28 2006, 12:09
- - Gorby   Извините, что врываюсь... Почему-то никто ни слов...   Jun 28 2006, 12:16
- - Mad Makc   ЦитатаПочему-то никто ни слова не произнес про COR...   Jun 28 2006, 13:11
- - Wild   Если адрес чтения успевает устанавливаться к серид...   Jun 29 2006, 11:54
- - maior   Hо ведь есть еще стандартные примитивы памяти (бло...   Jun 29 2006, 14:26
|- - Gorby   Цитата(maior @ Jun 29 2006, 18:26) Hо вед...   Jun 30 2006, 09:32
- - maior   Цитата(Gorby @ Jun 30 2006, 13:32) ... Фа...   Jun 30 2006, 12:58
- - qwqw   У меня Spartan2 а не 3, но думаю это непринципиаль...   Aug 23 2006, 09:08
- - BSV   Пытался делать такую штуку в ISE 4.2. Были проблем...   Aug 23 2006, 19:42
- - qwqw   разрядность портов: A (запись) = 8 B(чтение) = 32 ...   Aug 24 2006, 08:44
- - BSV   А синтезатор-то что говорит? В Вашей реализации я ...   Aug 24 2006, 10:59
- - BSV   Попробовал - таки да, не хавает, говорит, что вмес...   Aug 24 2006, 11:40
- - qwqw   насчет ошибки я не согласен, если посмотрите в при...   Aug 24 2006, 14:05
- - BSV   Зачем Вам противофазный клок? Если нужен отрицател...   Aug 24 2006, 14:46


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:57
Рейтинг@Mail.ru


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