Перейти к содержанию
    

Реализация памяти в FLEX10K

Доброго времени суток, Уважаемые!!!

Помогите плз неопытному разобраться в тонкостях.

Есть описание на VHDL:

type vob_mem is array (2047 downto 0) of unsigned (7 downto 0);
...
signal VOB_RAM: vob_mem;
...
p_vob_ram: process(CLK80, CPU_data, vob_wr, ram_adr)
begin
	if (rising_edge(CLK80))
	then
		if (VOB_WR = '1')
		then
			VOB_RAM(ram_adr_int) <= CPU_data(7 downto 0);
		end if;
			DAT_VOB <= VOB_RAM(ram_adr_int);
	end if;
end process p_vob_ram;

Данное описание (типа память 2Кх8) выдает следующий варнинг при компиляции:

Warning: Assertion warning: Current device family (FLEX10K) does not support dual-port synchronous RAM -- implementing the synchronous RAM as a DFFE array instead

Что, в принципе? логично и понятно (соответствует описанию семейства), после чего Quartus эту память пытается реализовать на логических элементах.

Собственно вопрос: Каким образом мне нужно изменить описание, чтобы Quartus смог реализовать ее на базе блоков памяти? Двух-портовая память не обязательна, вполне хватит одно-портовой. Девайс используется EPF10K50... Altera.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Собственно вопрос: Каким образом мне нужно изменить описание, чтобы Quartus смог реализовать ее на базе блоков памяти? Двух-портовая память не обязательна, вполне хватит одно-портовой. Девайс используется EPF10K50... Altera.

Поставить lpm_ram_dq в проект

http://cse.spsu.edu/clo/lpm_ram_dq.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сори, сразу не указал. Альтеровские фишечки использовать нельзя, т.к. проект должен быть "кросплатформенным". Т.е. первая реализация будет на отечественной ПЛИС, далее возможен БМК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Подключите lpm_ram_dp, как советовали выше, убедитесь что разводится.

2. Далее, когда уже стало разводиться, посмотрите какой получился интерфейс lpm_ram_dp (registered/не registered адрес, данные и т.д.).

3. После чего опишите то же, но на регистрах, а в квартусе укажите опцию автоматически вставлять блоки памяти.

4. Проконтролируйте по нетлисту, что блоки lpm_ram_dp вставляются аналогично, как если бы вы их вставляли вручную.

 

Работает? Значит, вы получили универсальный дизайн и под плис (хотите 5576 использовать?) и под асик (если в 10к запахет, значит должно развестись по 0.5um, 5V).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:) Спасибо. Завтра займусь реализацией вашего плана. Использовать буду 5576ХС3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день, коллеги!

 

Давно я тут не появлялся - времени не хватало. Но вот я вернулся к этому вопросу и... что-то я ничего понять не могу.

Подключиля я память lpm_ram_dq, сконфигурировав под свои нужды следующим образом:

p_lpm_ram: lpm_ram_dq
generic map (lpm_width => 8,
		lpm_widthad => 11)
port map (data => CPU_data (7 downto 0),
		address => ram_adr (10 downto 0),
		we => VOB_WR,
		inclock => CLK80,
		outclock => CLK80,
		q => DAT_VOB);

Все у меня развелось и замечательно улеглось во внутреннюю память. Как теперь это описать не используя мегафункцию? Я имею ввиду код приведенный в первом посте - это не то самое нужное описание, или я что-то не понимаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как теперь это описать не используя мегафункцию? Я имею ввиду код приведенный в первом посте - это не то самое нужное описание, или я что-то не понимаю?

 

попробуйте так:

    process(clk)
    begin
    if(rising_edge(clk)) then
        if(we = '1') then
            ram(addr) <= data;
        end if;

        -- Register the address for reading
        addr_reg <= addr;
    end if;
    end process;

    q <= ram(addr_reg);

 

Пример взят из квартусовских темплэйтов (доступны из текстового редактора), VHDL - Full designs - RAMs and ROMs

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Код реализованный по примеру уважаемого ISK'а генерирует меньше логических элементов, но упорно не желает укладываться в память. :(

 

Изменено пользователем Кирилл Лубнин

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотелось бы посмотреть весь код вашего модуля памяти. И ещё, как вариант, можно добавить synthesys attribute, типа такого:

 

attribute ramstyle : string;
attribute ramstyle of ram: signal is "EAB";

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте.

Кирилл, посмотрите этот пост:

http://electronix.ru/forum/index.php?showtopic=104690

Там обсуждение XST и Симплифая, но оно актуально и для других синтезаторов.

А если вас беспокоит переносимость кода, то можно использовать generic, в зависимости от фирмы производителя ПЛИС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитал ветку по ссылке TRILLER'a. Вынес все, что связано с памятью в отдельный файл(VOB_RAM) и использую память как компонент в другом файлее (VOBUL), который сделал файлом верхнего уровня проекта, дабы небыло лишних неясностей.Попробовал использовать шаблон и атребуты, по рекомендации ISK'а (кстати атрибута "EAB" не существует это точно, а остальные не поддерживаются данным семейством, помоему). Вобщем "Легче дедушке не стало", как пихал все в Логик элементы, так и продолжает пихать. :smile3046:

Использовать разные реализации памяти для разных семейств - это, конечно, выход, но хочется найти более кразивае решение. Я не думаю, что это компилятор такой дурной/тупай/убогий, что не может понять "элементарные вещи". Скорее всего проблемма в том, что я ему не могу грамотно объяснить что я от него хочу, а вот как это сделать - вопрос. В общем прилагаю исходные файлы и надеюсь и уповаю на помощь Великого Интернет Разума. Уж очень хочется найти свою ошибку/непонимание.

VOB_RAM.vhd - файл описания памяти

VOBUL.vhd - файл верхнего уровня

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

(кстати атрибута "EAB" не существует это точно, а остальные не поддерживаются данным семейством, помоему).

 

Да я для примера "EAB" написал. На FLEX я доки на сайте альтеры почему-то не нашёл. Не знаю какие там модули памяти вообще.

 

Вобщем "Легче дедушке не стало", как пихал все в Логик элементы, так и продолжает пихать. :smile3046:

 

А пишет что? Всё равно считает что память двухпортовая?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нет, теперь он согласен с тем, что память однопортовая. и даже не дает варнингов, но в логе раскопал вот такое инфо:

Info: RAM logic "RAM_bloc:u1|VOB_RAM" is uninferred due to unsupported read-during-write behavior

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сори, сразу не указал. Альтеровские фишечки использовать нельзя, т.к. проект должен быть "кросплатформенным". Т.е. первая реализация будет на отечественной ПЛИС, далее возможен БМК.

 

А можно вопрос, зачем БМК, после отечественной ПЛИС, разработка проекта которой идет в среде мах плюса или квартуса не более 9 версии.

Где гарантия, что в этом БМК тот же тип памяти.

По идее, разработчики отечественной ПЛИС должны Вам сказать, в каком базисе Вам писать, чтобы легло на БМК.

(По мне, так использование отечественной ПЛИС снимает вопрос об БМК. Денег на это никогда не будет)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Действительно не айс держать на машине две версии квартуса (8 для отечественных). БМК - действительно другой тип памяти и для ее реализации используется какая-то мудренная программа-компилятор. И скорее, всего действительно придется использовать вариант с несколькими реализациами предложенный TRILLER'ом. Но, меня больше всего напрягает ситуация, что мы с Quartus'ом не можем найти общий язык, кроме lpm_ram_dq для семейства FLEX10K. Для Cyclon'а описание похожее на приведенное в первом посте без вопросов реализовалось в памяти, откуда в данной ситуации такие проблеммы?

БМК - это планы на случай на случай больших поставок. В приборе стоит три плиски (сейчас Altera), в новом варианте будет две отечественные (это требование заказчика). Цена одной плиски порядка 30к рублей... Короче мы прикидывали, что отобьем деньги на разработку БМК уже за год, а договор - лет на 5 будет если будет конечно :biggrin::)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...