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

 
 
 
Reply to this topicStart new topic
> Кошмар с внутреней памятью., Квартус не хочет нормально распределять.
Amper25
сообщение Dec 8 2007, 15:04
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



Вообщем такая проблема - есть плис 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, и читать из него по очереди, но хотелось бы все сделать красиво и без геморроя.
Кто что посоветует по этому поводу?
Go to the top of the page
 
+Quote Post
sazh
сообщение Dec 8 2007, 17:40
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(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
Go to the top of the page
 
+Quote Post
dvladim
сообщение Dec 8 2007, 19:18
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 654
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737



Попробуйте сделать свой элемент, состоящий из 3х блоков RAM 512*8.
Из старших 2 бит адреса формируете WE и управление мультиплексором выходов.
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Dec 10 2007, 07:50
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



Amper25, Квартус ведёт себя правильно и никакая он не с... :-)
Для адресации вашего объема требуется 11 битная шина адреса, вот он Вам и создает массив, соответствующий 11 битной адресации.
Там же всё железно и если бы была логика по разруливанию запросов, допустим, 1537 байта (в вашем случае), то память работала бы медленнее. Поэтому логики там нет и наращивание ведётся х2.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Dec 10 2007, 08:27
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



Цитата(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.
Go to the top of the page
 
+Quote Post
Amper25
сообщение Dec 10 2007, 15:36
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



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


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

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

У меня тут еще такой волпрос, касательно VHDL. Есть ли такой тип данных, нечто среднее между bit_vector и integer. Чтобы можно было и складывать и обращатся побитово?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Dec 11 2007, 06:04
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



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

bit_vector не рекомендую. Используйте std_logic_vector.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:31
Рейтинг@Mail.ru


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