Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Кошмар с внутреней памятью.
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Amper25
Вообщем такая проблема - есть плис ACEX EP1K 50 QC208.
У нее 40960 бит внутреней памяти, распределенные по 10-ти EAB (Embedded array block), каждый из которых соответственно равен 4096бит. Ширина шины данных может состовлять 2,4,8,16 бит.

Так вот, мне надо получить три независимых блока памяти 1536x8бит (=12288 бит). То есть по 3 EAB на каждый блок.
Для этого в квартусе использую altdpram мегафункцию, в которой и указываю 12288бит. А он, сука, 01.gif почему то считает, что раз > 8192бит, то надо сразу брать 16384( 4шт EAB). При этом у него выходит 12 EAB на весь проект, и естественно он ругается что ему не хватает ресурсов. 01.gif

Вообщем конечно можно выкрутится, использовать один мегаблок 40960, и читать из него по очереди, но хотелось бы все сделать красиво и без геморроя.
Кто что посоветует по этому поводу?
sazh
Цитата(Amper25 @ Dec 8 2007, 18:04) *
Вообщем такая проблема - есть плис ACEX EP1K 50 QC208.
У нее 40960 бит внутреней памяти, распределенные по 10-ти EAB (Embedded array block), каждый из которых соответственно равен 4096бит. Ширина шины данных может состовлять 2,4,8,16 бит.

Так вот, мне надо получить три независимых блока памяти 1536x8бит (=12288 бит). То есть по 3 EAB на каждый блок.
Для этого в квартусе использую altdpram мегафункцию, в которой и указываю 12288бит. А он, сука, 01.gif почему то считает, что раз > 8192бит, то надо сразу брать 16384( 4шт EAB). При этом у него выходит 12 EAB на весь проект, и естественно он ругается что ему не хватает ресурсов. 01.gif

Вообщем конечно можно выкрутится, использовать один мегаблок 40960, и читать из него по очереди, но хотелось бы все сделать красиво и без геморроя.
Кто что посоветует по этому поводу?


Наверно Вы вольно обращаетесь с описанием. Блок фиксирован. Можно наращивать разрядность блока.
Как я понял, Вам подходит блок (2048x2)x4. Это и есть 4 EAB
dvladim
Попробуйте сделать свой элемент, состоящий из 3х блоков RAM 512*8.
Из старших 2 бит адреса формируете WE и управление мультиплексором выходов.
EvgenyNik
Amper25, Квартус ведёт себя правильно и никакая он не с... :-)
Для адресации вашего объема требуется 11 битная шина адреса, вот он Вам и создает массив, соответствующий 11 битной адресации.
Там же всё железно и если бы была логика по разруливанию запросов, допустим, 1537 байта (в вашем случае), то память работала бы медленнее. Поэтому логики там нет и наращивание ведётся х2.
alexadmin
Цитата(Amper25 @ Dec 8 2007, 18:04) *
Вообщем такая проблема - есть плис ACEX EP1K 50 QC208.
У нее 40960 бит внутреней памяти, распределенные по 10-ти EAB (Embedded array block), каждый из которых соответственно равен 4096бит. Ширина шины данных может состовлять 2,4,8,16 бит.

Так вот, мне надо получить три независимых блока памяти 1536x8бит (=12288 бит). То есть по 3 EAB на каждый блок.
Для этого в квартусе использую altdpram мегафункцию, в которой и указываю 12288бит. А он, сука, 01.gif почему то считает, что раз > 8192бит, то надо сразу брать 16384( 4шт EAB). При этом у него выходит 12 EAB на весь проект, и естественно он ругается что ему не хватает ресурсов. 01.gif

Вообщем конечно можно выкрутится, использовать один мегаблок 40960, и читать из него по очереди, но хотелось бы все сделать красиво и без геморроя.
Кто что посоветует по этому поводу?


Не знаю, применимо ли это конкретно к ACEX, но в целом надо смотреть на параметр MAXIMUM_DEPTH от altsyncram. В вашем конкретном случае его надо поставить равным 512.
Amper25
Цитата
Не знаю, применимо ли это конкретно к ACEX, но в целом надо смотреть на параметр MAXIMUM_DEPTH от altsyncram. В вашем конкретном случае его надо поставить равным 512.


Для ACEX нет мегафункции altsyncram.

Вообщем сделал свой элемент с 3-мя блоками по 512байт + мультиплексор, демультиплексор.

У меня тут еще такой волпрос, касательно VHDL. Есть ли такой тип данных, нечто среднее между bit_vector и integer. Чтобы можно было и складывать и обращатся побитово?
andrew_b
Цитата(Amper25 @ Dec 10 2007, 18:36) *
У меня тут еще такой волпрос, касательно VHDL. Есть ли такой тип данных, нечто среднее между bit_vector и integer. Чтобы можно было и складывать и обращатся побитово?
Не знаю, что имеется в виду "среднее". Побитно можно обращаться к вектору. См. пакет numeric_std, типы signed/unsigned.

bit_vector не рекомендую. Используйте std_logic_vector.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.