|
mt32 под EP3C25 не работает в режиме Burst, Проблема организации пакетного режима |
|
|
|
Jun 19 2012, 13:25
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 28-03-12
Из: Санкт-Петербург
Пользователь №: 71 050

|
Здравствуйте
У меня такая проблема: Сделал программу на Verilog, которая принимает данные из вне, а потом перекидывает их на сторону PCI(работал, как таргет, считывали с меня по прерыванию)... но такой вариант был слишком затратен по времени, т.к. верхнее ПО было написано под Linux, а сам чипсет компа не давал возможности с меня считывать пакетно... что только не пробовал, ничего не выходило, прочитал на форуме ELECTRONIX, подсказали, что придется реализовывать мастера...
Так вот поставил mt32 core для Альтеры с возможностью работы в режиме 66Мгц...
Прога под Linux пока не подправлена, но я попробовал выходить на шину мастером и писать данные в меня... я увидел, что я пишу так же, т.е. одиночными посылками, а не пакетно....
Вопрос: что необходимо указать в установках core(я пробовал менять конфигурацию баров с non - prefetchable на prefetchable), либо как организовывать обмен по PCI так, чтобы я работал в пакетном режиме???
Спасибо...
|
|
|
|
|
 |
Ответов
|
Jun 29 2012, 08:35
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата Вопрос: как необходимо вести обмен между мною и ПК? какой адрес памяти ПК, выделенный для меня, должен передаваться мне(просто там 64 бита, а мне передается старшая часть 64го слова) Если там 64 бита, то вы и должны передавать 64 бита. Т.е. у вас должна быть PCI64. Если же у вас PCI32, то со стороны Linux'а вы должны заказывать себе буфер для обмена в нижней части памяти (в 32х битах) Скажите своему програмисту, что бы позвал pci_set_dma_mask(pdev, DMA_32BIT_MASK) перед pci_alloc_consistent Отдавать на плату нужно будет младшую часть 64х битного адреса (от pci_alloc_consistent)
|
|
|
|
|
Jul 6 2012, 09:25
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 28-03-12
Из: Санкт-Петербург
Пользователь №: 71 050

|
Цитата(XVR @ Jun 29 2012, 12:35)  Если там 64 бита, то вы и должны передавать 64 бита. Т.е. у вас должна быть PCI64. Если же у вас PCI32, то со стороны Linux'а вы должны заказывать себе буфер для обмена в нижней части памяти (в 32х битах)
Скажите своему програмисту, что бы позвал pci_set_dma_mask(pdev, DMA_32BIT_MASK) перед pci_alloc_consistent Отдавать на плату нужно будет младшую часть 64х битного адреса (от pci_alloc_consistent) XVR, Не мог бы скинуть код под Линукс, если есть конечно, где ты работаешь как таргет, а в тебя пишут.... буду очень признателен мыло: petrov3372@yandex.ru
|
|
|
|
|
Jul 9 2012, 07:50
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 28-03-12
Из: Санкт-Петербург
Пользователь №: 71 050

|
Цитата(XVR @ Jul 6 2012, 17:57)  Запись в таргет под управлением CPU возможна только словами. Для записи блоками нужен мастер. Так комп работает как таргет, а я со стороны своего модуля как мастер... У меня виснет, когда я захватываю шину, становлюсь мастером на шине и пишу в ПК... вероятнее всего, что проблема в работе со стороны ПК, либо адрес, который определяет linux и мне выдает, неверный, либо сконфигурирована память на стороне ПК не правильно... Просто я грешу на неправильную работу проги под Linux...
|
|
|
|
|
Jul 9 2012, 09:01
|
Знающий
   
Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112

|
У меня mt32 на Cyclone III работает как в Линук, так и в ДОС. BAR0 и BAR1 проецируются на память ПК, а BAR2 и BAR3 на регистры ввода-вывода в mt32. Один из последних используется для приема начального адреса (через запрос на прерывание), по которому потом в память ПК начинает записываться массив. Правда я записываю в память ПК последовательно по слову, может быть и для того, чтобы не занимать надолго PCI-шину, были сомнения, что иначе ограничивается производительность программы на ПК… Заметил, что Ваша программа работает с ClkPCI и Clk50. У меня тоже две частоты, обошел коллизии тем, что работаю с внутренним ОЗУ на одной более высокой в процессе подготовки данных, а потом при работе с шиной переключаю на ClkPCI. Ну и соответственно два банка для подготовки данных, работающих по принципу «пинг-понг»…
|
|
|
|
|
Jul 9 2012, 09:25
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 28-03-12
Из: Санкт-Петербург
Пользователь №: 71 050

|
Цитата(Serhiy_UA @ Jul 9 2012, 13:01)  У меня mt32 на Cyclone III работает как в Линук, так и в ДОС. BAR0 и BAR1 проецируются на память ПК, а BAR2 и BAR3 на регистры ввода-вывода в mt32. Один из последних используется для приема начального адреса (через запрос на прерывание), по которому потом в память ПК начинает записываться массив. Правда я записываю в память ПК последовательно по слову, может быть и для того, чтобы не занимать надолго PCI-шину, были сомнения, что иначе ограничивается производительность программы на ПК… Заметил, что Ваша программа работает с ClkPCI и Clk50. У меня тоже две частоты, обошел коллизии тем, что работаю с внутренним ОЗУ на одной более высокой в процессе подготовки данных, а потом при работе с шиной переключаю на ClkPCI. Ну и соответственно два банка для подготовки данных, работающих по принципу «пинг-понг»… Я использую очередь для согласования частот, а так же по функциональности она больше подходит.... У меня просьба, не смогли бы скинуть код, часть кода, где видно, как работаете с корой как с мастером, какие настройки для коры ставите, чтобы работать как мастер.... Может у вас будет код под Линукс, где выделяете память, конфигурируете ее под линукс... Я буду очень благодарен... просто мучаюсь уже 2ю неделю, а копать не очень понимаю где...
|
|
|
|
|
Jul 9 2012, 10:00
|
Знающий
   
Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112

|
Цитата(xxxmatrixxx @ Jul 9 2012, 12:25)  ..какие настройки для коры ставите, чтобы работать как мастер.... По поводу корки PCI_bb, как черного ящика. Не нашел в Вашей программе определения параметров для mt32. Мои, в приложении. Правда, в предыдущем посте я ошибся по BAR3, но это не принципиально... Программы на ПК под PCI-шину не пишу, пока только синтез ПЛИС...
|
|
|
|
|
Jul 9 2012, 12:08
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 28-03-12
Из: Санкт-Петербург
Пользователь №: 71 050

|
Цитата(Serhiy_UA @ Jul 9 2012, 14:00)  По поводу корки PCI_bb, как черного ящика. Не нашел в Вашей программе определения параметров для mt32. Мои, в приложении. Правда, в предыдущем посте я ошибся по BAR3, но это не принципиально... Программы на ПК под PCI-шину не пишу, пока только синтез ПЛИС... вот параметры: CODE pci_mt32_inst.CLASS_CODE = 24'hff0000, pci_mt32_inst.DEVICE_ID = 16'h0005, pci_mt32_inst.REVISION_ID = 8'h01, pci_mt32_inst.SUBSYSTEM_ID = 16'h0000, pci_mt32_inst.SUBSYSTEM_VENDOR_ID = 16'h0000, pci_mt32_inst.TARGET_DEVICE = "NEW", pci_mt32_inst.VENDOR_ID = 16'h1172, pci_mt32_inst.MIN_GRANT = 8'h00, pci_mt32_inst.MAX_LATENCY = 8'h00, pci_mt32_inst.CAP_PTR = 8'h40, pci_mt32_inst.CIS_PTR = 32'h00000000, pci_mt32_inst.BAR0 = 32'hfff00008, pci_mt32_inst.BAR1 = 32'hfff00008, pci_mt32_inst.BAR2 = 32'hfff00000, pci_mt32_inst.BAR3 = 32'hfff00000, pci_mt32_inst.BAR4 = 32'hfff00000, pci_mt32_inst.BAR5 = 32'hfff00000, pci_mt32_inst.NUMBER_OF_BARS = 32'h00000002, pci_mt32_inst.HARDWIRE_BAR0 = 32'h00000000, pci_mt32_inst.HARDWIRE_BAR1 = 32'h00000000, pci_mt32_inst.HARDWIRE_BAR2 = 32'h00000000, pci_mt32_inst.HARDWIRE_BAR3 = 32'h00000000, pci_mt32_inst.HARDWIRE_BAR4 = 32'h00000000, pci_mt32_inst.HARDWIRE_BAR5 = 32'h00000000, pci_mt32_inst.HARDWIRE_EXP_ROM = 32'h00000001, pci_mt32_inst.EXP_ROM_BAR = 32'hfff00000, pci_mt32_inst.PCI_66MHZ_CAPABLE = "YES", pci_mt32_inst.INTERRUPT_PIN_REG = 8'h01, pci_mt32_inst.ENABLE_BITS = 32'h00000000;
|
|
|
|
|
Jul 9 2012, 12:33
|
Знающий
   
Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112

|
Цитата(xxxmatrixxx @ Jul 9 2012, 15:08)  pci_mt32_inst.BAR0 = 32'hfff00008, pci_mt32_inst.BAR1 = 32'hfff00008, попробуйте эти параметры упростить: запросить поменьше памяти и без "Prefetchable" Цитата(xxxmatrixxx @ Jul 9 2012, 15:08)  pci_mt32_inst.PCI_66MHZ_CAPABLE = "YES", тоже, пока бы с "NO"... И еще, Вы уже работали с прямым доступом к памяти, хотя бы без режима Burst? ...Еще, вставьте регистр в пространство ввода/вывода и попробуйте записать в него что либо из программы ПК, с выдачей на светодиод. А также считать в ПК... Чтобы увидеть работу корки mt32. Потом в подобном стиле подергать прерываниями.... ...Да, и главное. Регистры в пространстве вводв/вывода должны обязательно быть. Иначе как корка (и за ней FSM) может получить адрес памяти в ПК, назначенный и зарезервированный при инициализации BIOSом, к которому можно обращаться. В заданных Вами параметрах этих регистров нет....
|
|
|
|
|
Jul 10 2012, 06:22
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 28-03-12
Из: Санкт-Петербург
Пользователь №: 71 050

|
Цитата(Serhiy_UA @ Jul 9 2012, 16:33)  попробуйте эти параметры упростить: запросить поменьше памяти и без "Prefetchable"
тоже, пока бы с "NO"... И еще, Вы уже работали с прямым доступом к памяти, хотя бы без режима Burst?
...Еще, вставьте регистр в пространство ввода/вывода и попробуйте записать в него что либо из программы ПК, с выдачей на светодиод. А также считать в ПК... Чтобы увидеть работу корки mt32. Потом в подобном стиле подергать прерываниями....
...Да, и главное. Регистры в пространстве вводв/вывода должны обязательно быть. Иначе как корка (и за ней FSM) может получить адрес памяти в ПК, назначенный и зарезервированный при инициализации BIOSом, к которому можно обращаться. В заданных Вами параметрах этих регистров нет.... Сделал, как посоветовал, все равно та же тема... А какие настройки у вас установлены в окне выбора Advanced PCI MegaCore Function Features(3е окно при конфигурировании коры)???
|
|
|
|
|
Jul 10 2012, 06:39
|
Знающий
   
Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112

|
Цитата(xxxmatrixxx @ Jul 10 2012, 09:22)  А какие настройки... См.приложение...[attachment=69714:Par_PCI_Comp.zip]
|
|
|
|
|
Jul 10 2012, 07:01
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 28-03-12
Из: Санкт-Петербург
Пользователь №: 71 050

|
Цитата(Serhiy_UA @ Jul 10 2012, 10:39)  См.приложение...[attachment=69714:Par_PCI_Comp.zip] Спасибо, похоже дело не в настройках коры... Не могли бы скинуть код, как работаете с корой,т.е. где видно, когда и какие сигналы выставляются на PCIcore...
|
|
|
|
|
Jul 10 2012, 07:32
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 28-03-12
Из: Санкт-Петербург
Пользователь №: 71 050

|
Цитата(Serhiy_UA @ Jul 10 2012, 11:24)  Не могу. Труд оказался немалый... так мне не весь код нужен))) а именно часть код, где видно только когда выставляются lm_framen, lm_rdyn, lm_last... интересен сам алгоритм работы с корой, как с мастером... просто хочется сравнить, понять, что я делаю не так... а если все верно, то выкатить программисту под linux...
|
|
|
|
|
Jul 11 2012, 13:56
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 28-03-12
Из: Санкт-Петербург
Пользователь №: 71 050

|
Нашел в чем ошибка)))))))Причем только сейчас))))
Всем спасибо, кто откликнулся на мою просьбу!!! ОЧень помогли!!!
Пришлось перерыть всю документацию на PCIcore, стандарт PCI... а ошибка была в назначении пина))))) вернее я прогу свою, которую писал под таргет, начал переделывать под мастера(изначально предполагалось работать таргетом, но скорость требует другой реализации) и пин, который контролирует ошибку паритета(perrn), был направлен только на выход, а на мастере должен быть и на вход и на выход....
Короче, очень глупая ошибка,которую начинаешь рассматривать только когда все перероешь)))
Но слава Богу хоть так - 2 недели работы и 2 мин после того, как обнаружил ошибку))))
Всем спасибо)))
Сообщение отредактировал xxxmatrixxx - Jul 12 2012, 11:53
|
|
|
|
|
Jul 12 2012, 11:57
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 28-03-12
Из: Санкт-Петербург
Пользователь №: 71 050

|
Извините за поспешные выводы...
Сейчас добился того, что работает все в мультизаписи.... все сигналы выставляются как надо, и кажется куда надо пишется и ничего не виснет...
Возникли следующие проблемы:
1. Почему-то передается только 64 32х битных слова... потом lm_ackn защелкивается на 1 и заканчивает работу... это по станларту так положено, что при мультизаписи передается только 64 слова???
2. Программист под линукс читает только 0... хотя видно, что от меня все данные уходят, сопровождаемые соответствующими сигналами...
Кто-нибудь сталкивался с такими проблемами?????
|
|
|
|
Сообщений в этой теме
xxxmatrixxx mt32 под EP3C25 не работает в режиме Burst Jun 19 2012, 13:25 Serhiy_UA Цитата(xxxmatrixxx @ Jun 19 2012, 16:25) ... Jun 20 2012, 05:30 xxxmatrixxx Цитата(Serhiy_UA @ Jun 20 2012, 09:30) По... Jun 21 2012, 05:53  Serhiy_UA lm_tsr[9..0] от SignalTap показывает, что что-то н... Jun 21 2012, 09:10   xxxmatrixxx Цитата(Serhiy_UA @ Jun 21 2012, 13:10) lm... Jun 22 2012, 06:12    Serhiy_UA Цитата(xxxmatrixxx @ Jun 22 2012, 09:12) ... Jun 22 2012, 09:08     xxxmatrixxx Цитата(Serhiy_UA @ Jun 22 2012, 13:08) на... Jun 28 2012, 12:23 xxxmatrixxx RE: mt32 под EP3C25 не работает в режиме Burst Jul 4 2012, 09:11  608 А запись одного слова в память компьютера, по выде... Jul 4 2012, 12:38   xxxmatrixxx Цитата(608 @ Jul 4 2012, 16:38) А запись ... Jul 4 2012, 14:38                Serhiy_UA Цитата(xxxmatrixxx @ Jul 12 2012, 14:57) ... Jul 12 2012, 12:16                 xxxmatrixxx Цитата(Serhiy_UA @ Jul 12 2012, 16:16) pc... Jul 12 2012, 13:28                  XVR Цитата(xxxmatrixxx @ Jul 12 2012, 17:28) ... Jul 12 2012, 17:16                   xxxmatrixxx RE: mt32 под EP3C25 не работает в режиме Burst Jul 15 2012, 08:35    XVR Цитата(xxxmatrixxx @ Jul 9 2012, 11:50) У... Jul 9 2012, 09:09 XVR Цитата[ 57.282589] e_bus: First word: 24h (36) fro... Jul 15 2012, 08:45 xxxmatrixxx Цитата(XVR @ Jul 15 2012, 12:45) Странно ... Jul 16 2012, 06:39 XVR Все вроде правильно, НО -
обратите внимание - у ва... Jul 16 2012, 08:11 xxxmatrixxx Цитата(XVR @ Jul 16 2012, 12:11) Все врод... Jul 17 2012, 11:01
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|