Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Шина PLB
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Cont
Доброго времени суток. Вопрос к специалистам по Xilinx. Решил использовать Microblaze в системе сбора данных. Добавил в проект EDK свое периферийное устройство с интерфейсом PLB, суть которого получать данные с параллельного ацп. На другой строне у меня стоит контроллер памяти. Еще к шине, помимо проца, подключен контроллер BRAM, в которой храниться моя программа и UART, для передачи данных на PC. По логике вещей когда память заполнится, проц может приступить к обработке. Вроде в даташите написано, что шина мультиплексируемая, но когда я посмотрел что творится с шиной в Modelsim, пришел в ужас. Судя по диаграммам шина обычная, разделяемая, и если проц обращается к BRAM, то данные из ацп в Sdram уже не поступают. Но более того, меня поразила низкая производительность шины. Сначала 10 тактов - цикл адреса, потом еще 10 - цикл данных, потом еще 10 тактов ждем непонятно что. Вообщем с 8-битного 100Mhz ацп непрерывно данные получать невозможно. Работать напрямую тоже не хочется, проц нужен однозначно. Реализовывать пакетные передачи по шине пробовал, потратил уйму времени, не помогло (хотя и стало работать быстрее). Кто-нибудь сталкивался с этой шиной. Может быть я где-то косячу, не понимаю, почему такая низкая производительность. Работал с Альтерой, там шина Avalon куда шустрее была.
Заранее спасибо!

Может быть существует возможность подключения проца напрямую, но тогда нужно реализовать собственную шину. Есть ли реализация чего-нибудь подобного. Хотелось бы так же найти информация по шинам, принципам реализации на HDL
des00
Цитата(Cont @ Oct 15 2008, 01:01) *
Может быть существует возможность подключения проца напрямую, но тогда нужно реализовать собственную шину. Есть ли реализация чего-нибудь подобного. Хотелось бы так же найти информация по шинам, принципам реализации на HDL


а что вы хотите, все таки это PLB от самой IBM, а не Avalon от какой то альтеры %)))

если вам нужно быстро и в одну сторону, почему бы вам не воспользоваться FSL линками + DWC с 8 ми до 36 бит. они как раз для этого и были придуманы.

Или как вариант MPMC и качать данные через один из его портов в память.

Шина реализуется просто, основных архитектур 2 shared bus / cross bar switch + арбитр с вашим алгоритмом. Ну а дальше берете стандарт на шину и делаете. Кстати у альтеры про это очень хорошо написано в доках, зачем же искать чего то более, тем более что вы с Avalon Switch Fabric работали

Удачи !!!
Alex77
Цитата(Cont @ Oct 15 2008, 10:01) *
и если проц обращается к BRAM, то


А почему BRAM подключен к процессору через PLB ? Ведь для этого есть отдельная шины LMB.
А посмотреть к примеру DMA ?
Дмитрий Мазунин
Самое быстрое - сделать ядро, работающее с АЦП и подключенное к отдельному NPI порту MPMC и качать напрямую в память. Мы так и делаем.
Cont
Всем большое спасибо за ответы

Дмитрий Мазунин
Подключить АЦП к NPI порту MPMC: такая идея уже возникла, да вот только на плату память поставили такую, что MPMC с ней неработает. Вот пришлось делать свой контроллер.

Теперь передо мной задача, либо использовать вариант предложенный des00 с FSL-линками, либо попытаться реализовать свой MPMC(к счастью в EDK нашел его исходники!).
Дмитрий Мазунин
Что значит - MPMC не работает с Вашей памятью ?
Ее нет в списке MPMC ? Или уже собранный проект не работает в железе ? Какая память у Вас ?
axalay
Цитата(Дмитрий Мазунин @ Oct 16 2008, 11:24) *
Что значит - MPMC не работает с Вашей памятью ?
Ее нет в списке MPMC ? Или уже собранный проект не работает в железе ? Какая память у Вас ?


МПМС чето с СДРАМ не желает работать. Я решил эту проблему переходником на ОПБ и ОПБ_СДРАМ контроллером. Если У Вас с МПМС работает СДРАМ - я был бы благодарен за совет. Версия сапра 9.2, а плиска виртекс5
Alex77
Цитата(axalay @ Oct 16 2008, 13:36) *
МПМС чето с СДРАМ не желает работать. Я решил эту проблему переходником на ОПБ и ОПБ_СДРАМ контроллером. Если У Вас с МПМС работает СДРАМ - я был бы благодарен за совет. Версия сапра 9.2, а плиска виртекс5

Что значит не работает ?
В 10.sp3 есть MPMC v4. Так в ней есть sdram & ddr. В свой проект заложил MPMC + sdram + spartan3e. Проект собирается. Будет печать посмотрим на результат.
Да и в 9.2 MPMC + sdram тоже было. см в pdf.
А opb шина мне видится ещё более тормознее чем plb.
axalay
Цитата(Alex77 @ Oct 16 2008, 14:45) *
Что значит не работает ?
В 10.sp3 есть MPMC v4. Так в ней есть sdram & ddr. В свой проект заложил MPMC + sdram + spartan3e. Проект собирается. Будет печать посмотрим на результат.
Да и в 9.2 MPMC + sdram тоже было. см в pdf.
А opb шина мне видится ещё более тормознее чем plb.

А я и не говорил, что МПМС+СДРАМ в 9.2 нет. Просто чего то не желает работать
zherdiy
Я вот думаю, может и у меня mpmc не коректно работает с DDR2 по PLB из-за ее глючности? Не пойму в чем причина: пишу - читаю из памяти, и получаю "немного не то" что писал. Менял и частоту шины и размер загружаемых данных (32,16 бит), - ничего не помагает.
На картинке приведена BlockDiagram моей системы.

Может память нельзя так подключать?

В моей ветке о проблеме немного подробнее: http://electronix.ru/forum/index.php?showtopic=50288
Alex77
Цитата(zherdiy @ Oct 29 2008, 16:44) *
Я вот думаю, может и у меня mpmc не коректно работает с DDR2 по PLB из-за ее глючности? Не пойму в чем причина: пишу - читаю из памяти, и получаю "немного не то" что писал. Менял и частоту шины и размер загружаемых данных (32,16 бит), - ничего не помагает.
На картинке приведена BlockDiagram моей системы.

Может память нельзя так подключать?

В моей ветке о проблеме немного подробнее: http://electronix.ru/forum/index.php?showtopic=50288

Несколько замечаний:
1) У меня сложилось ощущение что s3an + EDK10.2 сыроват. Я пытался сделать один и тот же проект на s3an и на s3e. Так вот на s3an компиляция не прошла (а может у меня руки кривые).
2) возможны глюки при использовании кеша. (если его не правильно сконфигурить)
3) Было много исправлений в mpmc с версии 3 по 4
4) Я так думаю, что если есть демо плата то где-то должен быть заведомо исправный проект.
5) Воспользоваться отладчиком в SDK ?
6) Если пользоваться "волшебником" в EDK 9 почему-то не всегда правильно формируется C_MEM_DM_WIDTH в MPMC
7) кроме всего прочего доступ к памяти должен быть выравнен на границу данных. Если писать / читать слово (4 байта) то и адрес должен быть кратен 4. (или я ошибаюсь ?)
zherdiy
1) У меня ISE 9.2.04i и то со Spartan3AN "сыроват" - урезана практическии вся база в создавалке корок IP(Coregen&ArhitectureWizard).
2) какого еще кеша?
4) полного проекта нигде не нашел
5) а как пользоваться отладчиком SDK? В общем?
7) пробовал задавать даже так:
pMem[32] = 33264;
pMem[132] = 44332211; - не помогло.
Alex77
Цитата(zherdiy @ Nov 3 2008, 13:06) *
1) У меня ISE 9.2.04i и то со Spartan3AN "сыроват" - урезана практическии вся база в создавалке корок IP(Coregen&ArhitectureWizard).
2) какого еще кеша?
4) полного проекта нигде не нашел
5) а как пользоваться отладчиком SDK? В общем?
7) пробовал задавать даже так:
pMem[32] = 33264;
pMem[132] = 44332211; - не помогло.


2) в процессоре
4) К примеру http://www.xilinx.com/products/boards/s3as...nce_designs.htm
5) Дык в хелпе написано

А посмотреть можно ?
*.mhs
*.mss
*.xmp
Alex77
Цитата(Alex77 @ Nov 5 2008, 11:13) *
2) в процессоре
4) К примеру http://www.xilinx.com/products/boards/s3as...nce_designs.htm
5) Дык в хелпе написано

А посмотреть можно ?
*.mhs
*.mss
*.xmp

В догонку:
*.ucf

Число IP-core что в 9.2.2 и 10.1.3 практически одно и тоже.

Может пригодится
http://www.xilinx.com/support/answers/29221.htm

Я пользуюсь только EDK/SDK.
ISE я не использую т.к. хватает возможностей EDK.
zherdiy
Число IP-core что в 9.2.2 и 10.1.3 практически одно и тоже.
Не для всех вариантов Плис. Для Spartan3AN с чипом XC3S700AN FGG484 они (разрабы) зачем-то закрыли кучу полезного, но это полезное перенесенное из другого проекта под другую ПЛИС работает и в S3AN. Спращивается - зачем мне лишние головняки?

В примерах нету нормального проекта для Microblaze+MMPC. Что-то близко к теме есть в проекте с Web-сервером, попробую что-то выудить оттуда. Никто не в курсе что за шина XCL?

Файлы прикрепил. В *.ucf у меня названия выводов соответствуют выводам проекта верхнего уровня (ISE), так что они немного отличаются от тех выводов, что в *.mhs, но соответствуют им функционально.
Alex77
Цитата(zherdiy @ Nov 6 2008, 12:37) *
Число IP-core что в 9.2.2 и 10.1.3 практически одно и тоже.
Не для всех вариантов Плис. Для Spartan3AN с чипом XC3S700AN FGG484 они (разрабы) зачем-то закрыли кучу полезного, но это полезное перенесенное из другого проекта под другую ПЛИС работает и в S3AN. Спращивается - зачем мне лишние головняки?

В примерах нету нормального проекта для Microblaze+MMPC. Что-то близко к теме есть в проекте с Web-сервером, попробую что-то выудить оттуда. Никто не в курсе что за шина XCL?

Файлы прикрепил. В *.ucf у меня названия выводов соответствуют выводам проекта верхнего уровня (ISE), так что они немного отличаются от тех выводов, что в *.mhs, но соответствуют им функционально.


Я так понял что используется ISE вместо EDK ?
По мне если есть демо плата то лучше всего использовать EDK. потренироваться, а потом и в бой.

В этом *.ucf задаются только типы интерфейсов, а распределение выводов отсутствует. Можно увидеть все *.ucf ?

Это была лирика. теперь к делу.

1) внешний тактовый генератор на 50 мгц. Зачем умножителем задано 66.666666 и 133,333333 мгц. Более прощее 62.5 и 125 тогда в mpmc можно будет точнее указать 8 нсек в место 7.499. C_MPMC_CLK0_PERIOD_PS
2) ECC используется ? Это о сигналах DDR2_SDRAM_DDR2_DQS_n итд. По мне они здесь явно лишние.
3) шина XCL? читать в описании cpu. в двух словах: это более быстрая шина чем plb ( как вариант используется между cpu и mpmc).
DmitryR
Цитата(Alex77 @ Nov 6 2008, 14:54) *
2) ECC используется ? Это о сигналах DDR2_SDRAM_DDR2_DQS_n итд. По мне они здесь явно лишние.
Какая связь между DQS и ECC? DQS - это строб байта данных.
Alex77
Цитата(DmitryR @ Nov 6 2008, 16:47) *
Какая связь между DQS и ECC? DQS - это строб байта данных.

Снимаю шляпу...
Видать слишком сильно задумался о насущном...

Да. Ошибся.
zherdiy
Цитата(Alex77 @ Nov 6 2008, 14:54) *
Я так понял что используется ISE вместо EDK ?

Почему сразу "вместо"? У меня ISE - проект верхнего уровня, а EDK - нижнего.

Цитата(Alex77 @ Nov 6 2008, 14:54) *
В этом *.ucf задаются только типы интерфейсов, а распределение выводов отсутствует. Можно увидеть все *.ucf ?

А это что, к примеру: NET "led_out<7>" LOC = W21;? А UCF от EDK я вообще не использую.

Цитата(Alex77 @ Nov 6 2008, 14:54) *
1) внешний тактовый генератор на 50 мгц. Зачем умножителем задано 66.666666 и 133,333333 мгц. Более прощее 62.5 и 125 тогда в mpmc можно будет точнее указать 8 нсек в место 7.499. C_MPMC_CLK0_PERIOD_PS
3) шина XCL? читать в описании cpu. в двух словах: это более быстрая шина чем plb ( как вариант используется между cpu и mpmc).

1) 66.666666 попробую обратно на 62.5, но 133 - это не умножитель, у меня на ките это внешний генератор.
3) попробовать что ли шину XCL под ДДР2?
Alex77
Цитата(zherdiy @ Nov 10 2008, 09:44) *
Почему сразу "вместо"? У меня ISE - проект верхнего уровня, а EDK - нижнего.
А это что, к примеру: NET "led_out<7>" LOC = W21;? А UCF от EDK я вообще не использую.
1) 66.666666 попробую обратно на 62.5, но 133 - это не умножитель, у меня на ките это внешний генератор.
3) попробовать что ли шину XCL под ДДР2?



1) По вопросу частоты:
В system.mhs указано что внешняя частота 50 МГц ( PARAMETER C_CLKIN_FREQ = 50000000 )
а вы утверждаете что используете 133 МГц с внешнего генератора. Это так ?

BEGIN clock_generator
PARAMETER INSTANCE = clock_generator_0
PARAMETER HW_VER = 1.00.a
PARAMETER C_EXT_RESET_HIGH = 1
PARAMETER C_CLKIN_FREQ = 50000000
PARAMETER C_CLKOUT0_FREQ = 66666667
PARAMETER C_CLKOUT0_PHASE = 0
PARAMETER C_CLKOUT0_GROUP = NONE
PARAMETER C_CLKOUT1_FREQ = 133333334
PARAMETER C_CLKOUT1_PHASE = 0
PARAMETER C_CLKOUT1_GROUP = GROUP0
PARAMETER C_CLKOUT2_FREQ = 133333334
PARAMETER C_CLKOUT2_PHASE = 90
PARAMETER C_CLKOUT2_GROUP = GROUP0
PORT CLKOUT0 = sys_clk_s
PORT CLKOUT1 = DDR2_SDRAM_mpmc_clk_s
PORT CLKOUT2 = DDR2_SDRAM_mpmc_clk_90_s
PORT CLKIN = dcm_clk_s
PORT LOCKED = Dcm_all_locked
PORT RST = net_gnd
END

3) это можно будет использовать когда заработает связка mpmc+ddr. (для ускорения выполнения программы процессором)
zherdiy
50MGz - от внешнего генератора - для clk процессора;
133MGz - от внешнего генератора через DCM для получения прямых и смещенных на 90град тактовых импульсов - для MIG. Внутренний dcm MIGа не использую.

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

На самом деле у меня на ките есть и 50 и 133МГц, но моя связка Microblaze+MPMC использует только 50. Остальное - уже преобразование внутренними умножителями через ClockGenerator.

3) А если не заработает? Я что, не смогу сейчас шину XCL попробовать? Щас попробую переделать проектик.

p.s.: а на MIGе память заработала, значит не глючная.
zherdiy
Переделал на XCL - те же пироги, ничего не поменялось. Я правда MPMC прицепил только к DXCL. Наверное, я как-то не так к этой памяти обращаюсь, а шины тут ни при чем.

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