Полная версия этой страницы:
EDK_8_10_11 переход
rv3dll(lex)
Aug 26 2009, 04:45
при переносе проекта из 8 версии в 11 есть ошибка стыковки брам блоков. выражается это так
одним концом брам блок подключен к процессору через контроллер другим к своему ядру.
ругается на несоответствие размера памяти по разным портам и не генерирует адреса, хотя в 8мой версии софта всё было без проблем и работает в железе.
DmitryR
Aug 27 2009, 11:18
Просто у вас в проекте некритическая ошибка: конечно же если по уму, то размер памяти по разным портам должен совпадать. Однако, если вы из двух несовпадающих размеров по обоим портам используете меньший, то все как понятно будет работать. А если больший - то не будет, поэтому видимо решили такую ситуацию обставить ошибкой.
из своего опыта: конвертировал из 7 в 10, пришлось создавать проект заново. потом конвертировал из 10 в 11: тоже пришлось заново. то-ли руки у меня кривые, то ли проект слишком сложный, то ли та помесь из индуса и китайца, что этот edk творила, накосячила
DmitryR
Aug 30 2009, 16:52
Если проект очень сложный, то это обычное дело. Потому что он сконвертировать-то сконвертирует, но потом оказывается, что проще пересобрать проект, чем разбираться с результатами конвертации.
rv3dll(lex)
Aug 31 2009, 05:21
да тут немного другой случай - если создавать проект заново, по приходится переходить на новую плб и новые темак и контроллер внешней памяти в результате чего налетаем на невозможность развести. После такого приезда остаётся только использовать старый проект. Я экспериментировал с размерностью шин адреса со стороны ядра ничего не получаесся. - а как задать размер памяти из своего ядра??? я его там вообще не задаю.
DmitryR
Aug 31 2009, 06:04
Во-первых, в новых версиях EDK старые версии ядер обычно есть, просто надо включить галочку в опциях, чтобы deprecated показывались. Во-вторых, можно в старой версии нужные ядра выгрузить в исходники и импортировать в новую версию. Я такой трюк делал например с контроллером HDLC, чтобы втащить его в оригинально не поддерживаемый Virtex-5.
rv3dll(lex)
Aug 31 2009, 06:28
что за галочка - где она?
DmitryR
Aug 31 2009, 07:21
Edit/Preferences/IP Catalog/"Display deprecated IP cores"
rv3dll(lex)
Aug 31 2009, 08:36
спасибо - только это ничего мне не дало - я собрал проект заново и получил снова ошибку по размеру памяти - как её задать из своего ядра, чтобы сравнять этот размер?
DmitryR
Aug 31 2009, 09:49
Я думаю, что вы используете не все адресные линии со своей стороны. Сгенерируйте блок памяти меньшего размера.
rv3dll(lex)
Aug 31 2009, 10:36
в том то и дело, что все пробовал и 32 и 16 - у меня 64 килобайтный блок
DmitryR
Aug 31 2009, 11:36
Я говорю про ширину данных, а не адреса. Убедитесь, что для случая 64 килобайта, организованных как 16384 тридцатидвухразрядных слов у вас с обеих сторон используется ровно по 14 линий адреса.
rv3dll(lex)
Aug 31 2009, 12:55
64 разряда использую и у меня 16 линий - на сколько я понимаю визард откидывает младшие линии сам
DmitryR
Aug 31 2009, 13:11
Судя по тому, что у вас проект не компилируется - не откидывает. Почем ему знать, что их надо откинуть, а может вы хотели именно 16 бит адреса, а память по ошибке сгенерили маленькую? Вот он и ругается.
rv3dll(lex)
Sep 1 2009, 07:57
пробовал по всякому
вообще в описании написано что адрес должен быть от 9 до 17 линий - 9 линий для 512 байттного размера и видимо вне зависимости от ширины шины данных
DmitryR
Sep 1 2009, 08:58
Цитата(rv3dll(lex) @ Sep 1 2009, 11:57)

9 линий для 512 байттного размера и видимо вне зависимости от ширины шины данных
Еще раз: от ширины шины данных - зависит. Если организация будет например 128 тридцатидвухразрядных слов, то ширина адреса будет 7 линий.
rv3dll(lex)
Sep 1 2009, 10:42
Цитата(DmitryR @ Sep 1 2009, 12:58)

Еще раз: от ширины шины данных - зависит. Если организация будет например 128 тридцатидвухразрядных слов, то ширина адреса будет 7 линий.
ты говоришь про ise и уверен что в EDK тоже самое? - почему тогда в 8ом всё работает, что подтверждено работой железки и просмотрев лог нет ни одного предупреждения хотя при 64 разрядной организации памяти на адресный вход подаётся 32 разряда из которых 3 младших нули а старшие неиспользуемые вообще не определены. тоже было и в седьмом ЕДК 100 лет назад.
если откомпилировать этот проект он не выдаёт ошибок - он просто не расставляет автоматически адреса и не переносит их в икспараметерсашь
DmitryR
Sep 1 2009, 10:55
Цитата(rv3dll(lex) @ Sep 1 2009, 14:42)

ты говоришь про ise и уверен что в EDK тоже самое?
Это везде то же самое. Количество адресных линий, которое необходимо для адресации M слов разрядности N определяется просто математикой.
Цитата(rv3dll(lex) @ Sep 1 2009, 14:42)

- почему тогда в 8ом всё работает, что подтверждено работой железки и просмотрев лог нет ни одного предупреждения хотя при 64 разрядной организации памяти на адресный вход подаётся 32 разряда из которых 3 младших нули а старшие неиспользуемые вообще не определены.
Смотрю старенький DS444 (документация на EDK BRAM IP Core 2004 года). Вижу:
C_PORT_AWIDTH Port A and B Address Width 9 – 17
Где тут на адресный вход подается 32 разряда?
rv3dll(lex)
Sep 1 2009, 12:29
я этот же документ и читаю
9-17 для блоков размером 512 байт - 131072 байта для разрядности 64 и 32.
из чего следует, что для данного случая вне зависимости от разрядности выхода размерность адресной шины не меняется и младшие разряды 3 для 64 разрядов и 2 для 64 игнорируются и адрес описывает количество байт а не слов, в отличие от библиотечных элементов в ise
кусочек из мпд файла на брам блок
###################################################################
BEGIN bram_block
## Generics for VHDL or Parameters for Verilog
PARAMETER C_MEMSIZE = 2048, DT = integer
PARAMETER C_PORT_DWIDTH = 32, DT = integer, BUS = PORTA:PORTB
PARAMETER C_PORT_AWIDTH = 32, DT = integer, BUS = PORTA:PORTB
PARAMETER C_NUM_WE = 4, DT = integer
PARAMETER C_FAMILY = virtex2, DT = string
из чего следует, что 32 можно подавать и размер шины определяется автоматом, что он собственно и делал пока не появилась 11 версия.
DmitryR
Sep 1 2009, 13:40
Цитата(rv3dll(lex) @ Sep 1 2009, 16:29)

из чего следует, что для данного случая вне зависимости от разрядности выхода размерность адресной шины не меняется
Это хороший аргумент, однако все же не настолько хороший, чтобы не попробовать сдвинуть адрес на эти два или три разряда и не посмотреть на результат.
rv3dll(lex)
Sep 2 2009, 04:21
Цитата(DmitryR @ Sep 1 2009, 17:40)

Это хороший аргумент, однако все же не настолько хороший, чтобы не попробовать сдвинуть адрес на эти два или три разряда и не посмотреть на результат.
я выше писал что пробовал и сдвигать на эти 3 бита и ограничивать старшие адреса и сдвигать и ограничивать сразу - результат один((((
есть ещё мысля что со стороны контроллера на плб он хочет сделать 32 разряда, а у меня 64
у меня есть ещё одна ветка подключения к памяти на доцм шине которая в принципе 32 разрядная с порта В подключен свой модуль с 32 разрядным доступом. Надо посмотреть ругается ли на него.
rv3dll(lex)
Sep 2 2009, 07:08
там тоже самое , но прикол в том, что проект при этом в железе работает! ))
DmitryR
Sep 2 2009, 09:01
Цитата(rv3dll(lex) @ Sep 2 2009, 08:21)

есть ещё мысля что со стороны контроллера на плб он хочет сделать 32 разряда, а у меня 64
Это тоже верно, этот блок разную ширину шин данных по портам не умеет. Если PLB шириной 64, то и внутри должно быть 64.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.