Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Функциональная симуляция блока памяти (ПЗУ)
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
kst
Вопрос
Может кто помнит и подскажет, как правильно производить функциональную симуляцию блока памяти в XFS 4.2i?

Ситуация:
Есть старый проект (по большей части в схематике), который нужно подправить и сделать прошивку. Есть там блок памяти (ПЗУ) на 16K отсчетов, сгенерированный в COREGEN. Как не кручу, при функциональной симуляции нули на выходе.

Танцы с бубнами:
Дело дошло до того, что создал отдельный проект, с параметрами по умолчанию, где имеется только память. На ее адресные входы подается выход счетчика, а выходная шина на пины. Функциональная симуляция ни в какую, а вот временная правильно все показывает. Просмотр содержимого памяти в симуляторе, показывает, что при функциональной симуляции в ней нули.
Как заставить что-нибудь в нее загрузится?
Странно, но раньше я проблем не замечал.

Примечания:
САПР: Xilinx Foundation Series 4.2i
Корка: Single Port Block Memory v.4.0
Симулятор: встроенный
Для симуляции использую Script Editor
lexus.mephi
Этот глюк навернаяка у всех был, кто работал с этой памятью. Я точно не помню как ушла эта ошибка - вот несколько вариантов:
1)Установить начальное значение.
2)Перегенерировать - подключить другой файл с содержимым памяти.
Еще там обязательно на адресных входах должно быть какое-то значение!
kst
Все варианты уже перепробовал.
Начальное значение (если имеется в виду Global Init Value) установлено в 0.
Память перегенерировал уже не один раз, с подключением разныхфайлов.
А адресных входах значение всегда есть.
В файле *.edn присутствуют данные из файла *.coe. И *.mif файл присутствует.

Нету функциональной симуляции. НЕТУ! sad.gif
kst
На конференции telesys подсказали идею - описать ПЗУ поведенчески:
Код
type trom is array(0 to 1023) of integer;
constant rom : trom := (0,50,100,...);
data <= conv_std_logic_vector(rom(conv_integer(addr)),15);

Однако я не могу дождаться результата синтеза. Такое ощущение, что система (XFS) просто зависает. Все-таки 16kx14. Сам файл vhd получился 300кБ.

Поковырялся в справке симулятора, обнаружил такую штуку. Можно сделать блок памяти в который можно загрузить содержимое. В этом случае все начинает работать.
Нужно только как-то записать в эту память 16к отсчетов.
Ручками мне как-то не хочется.
Есть альтернатива - загрузить из hex-файла.
Но как сделать такой файл?
Koluntaev
Цитата(kst @ Dec 16 2006, 14:12) *
Есть старый проект (по большей части в схематике), который нужно подправить и сделать прошивку. Есть там блок памяти (ПЗУ) на 16K отсчетов, сгенерированный в COREGEN. Как не кручу, при функциональной симуляции нули на выходе.


А не пробовали для симуляции вместо Block memory сделать с того же .coe файла Distributed memory
(ROM). Она вроде вполне корректно симулится.
kst
Ваша правда! Действительно все нормально симулируется. Спасибо!
Я поначалу с сомнением относился к возможности "подмены" памяти, поэтому и не рассмотрел возможность реализации ПЗУ на распределенной памяти.

З.Ы.: Я таки дождался синтеза ПЗУ с поведенческим описанием на VHDL. 6 часов. Синтезатор все сделал на распределенной памяти. Все работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.