Jump to content

    

Recommended Posts

Здравствуйте, уважаемые гуру.

 

Пытаюсь я тут решить следующую задачу.

Есть проект для Xilinx Spartan-3. Он состоит из системы Microblaze и кучи модулей, написанных на Верилоге.

К ПЛИСу снаружи подключен SDRAM.

До недавнего времени этот SDRAM подключался к системе Microblaze при помощи контроллера opb_sdram (досталось по наследству).

Сейчас перешел на MPMC версии 5.04a.

Оно вполне себе работает, если синтезировать проект при помощи XST (да, среда - ISE 11.5).

Но если синтезировать при помощи Synplify 2009.06, происходит следующая бяка:

синтез проходит успешно, но при попытке Translate появляются ошибки:

 

ERROR:NgdBuild:947 - bidirect pad net 'SDRAM_Controller_SDRAM_DQ_pin_c[0]' is
   driving non-input buffer(s):
     pin I on block SDRAM_Controller_SDRAM_DQ_pin_obuf[0] with type OBUF
(для каждой линии данных)
И еще 
ERROR:NgdBuild:467 - output pad net 'SDRAM_Controller_SDRAM_Clk_pin_c' has an
   illegal buffer
ERROR:NgdBuild:467 - output pad net 'SDRAM_Controller_SDRAM_DM_pin_c[0]' has an
   illegal buffer
ERROR:NgdBuild:467 - output pad net 'SDRAM_Controller_SDRAM_DM_pin_c[1]' has an
   illegal buffer

К остальным сигналам (пока) не придирается.

 

Если посмотреть Technology schematic, можно увидеть, что Synplify почему-то сделал двунаправленную шину SDRAM_Controller_SDRAM_DQ однонаправленным выходом. Хотя, явно прописано inout.

 

Подскажите, куда читать и чего смотреть...

Share this post


Link to post
Share on other sites

Да-да, про XST там хорошо написано...

Где бы аналогично прочитать про Симплифай.

Какие конкретно логи - в студию?

Edited by Koluchiy

Share this post


Link to post
Share on other sites

Там один вменяемый лог для человеков - *.srr, в нём можно поиском прошвырнуться касательно интересующих моментов.

Или же через гуй :laughing: будет он же, но удобней

Share this post


Link to post
Share on other sites

Навскидку вот

@W: CG360 :"D:\files\Xilinx\E1X32_DataStream7L5_X11_32ch\projnav\Sources\E1X32XRT.v":575:13:575:43|No assignment to wire SDRAM_Controller_SDRAM_DQ_O_pin

А с иллегал буферами побороться можно конечно руками или самому повырезать их из кода

Share this post


Link to post
Share on other sites
@W: CG360 :"D:\files\Xilinx\E1X32_DataStream7L5_X11_32ch\projnav\Sources\E1X32XRT.v":575:13:575:43|No assignment to wire SDRAM_Controller_SDRAM_DQ_O_pin

 

Это рудимент, никуда не подключенные wire.

 

А с иллегал буферами побороться можно конечно руками или самому повырезать их из кода

 

Как они вообще появляются, как с ними бороться руками и как, из какого кода вырезать?

Share this post


Link to post
Share on other sites

2 Koluchiy

по первому - ну тогда в данной ситуации думаю вам самому быстре будет найти почему оно так не по джентельменски обходится с SDRAM_DQ пинами.

По второму - в сгенерированном коде который вам выдало детище индусов присутствуют I/OBUF, с которыми и нужно "разобраться"..

 

Сам всегда брал МИГ и дописывал нужный интерфейс - и потому был избавлен от таких траблов.. Раньше встречал темы по поводу дозатачивания MPMC руками потому и выбрал MIG+руки :laughing: Поищите по форуму если не найдётся людей кто руками дотачивал MPMC..

Share this post


Link to post
Share on other sites

Оно буферы содержит, но код, где они есть, юзеру недоступен.

Synplify не понимает того, что буферы уже есть, и ставит еще сверху OBUF'ы.

 

Вопрос в том, как отучить его это делать.

Share this post


Link to post
Share on other sites

Тогда он вообще не будет их вставлять, в том числе там, где это надо (когда-то пробовал - ничего хорошего не получилось).

 

В общем, сейчас проблему решил через строчку /*synthesis syn_black_box black_box_pad_pin=...*/, вставляемую в файл system.v .

Всё бы хорошо, но этот файл перезаписывается при каждой перекомпиляции системы Microblaze, и ее надо вставлять заново.

 

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

Ничего хорошего не получилось - Synplify считает этот промежуточный модуль как black box, и системы там не видит.

 

/*synthesis syn_black_box black_box_pad_pin=...*/ "работает" там, где модуль создается.

В моём понимании, надо сделать то же самое, но там, где модуль (система Microblaze) подключается.

Вот только вот как это сделать?

Edited by Koluchiy

Share this post


Link to post
Share on other sites
В общем, сейчас проблему решил через строчку /*synthesis syn_black_box black_box_pad_pin=...*/, вставляемую в файл system.v .

Всё бы хорошо, но этот файл перезаписывается при каждой перекомпиляции системы Microblaze, и ее надо вставлять заново.

А в файле констрейнов самого Synplify?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this