|
Block RAM на VHDL в Spartan3, Could not implement Block RAM. Is the read address registered using th |
|
|
|
Jun 28 2006, 09:38
|

Участник

Группа: Участник
Сообщений: 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?
|
|
|
|
|
 |
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|