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

 
 
> mt32 под EP3C25 не работает в режиме Burst, Проблема организации пакетного режима
xxxmatrixxx
сообщение Jun 19 2012, 13:25
Сообщение #1


Участник
*

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



Здравствуйте

У меня такая проблема:
Сделал программу на Verilog, которая принимает данные из вне, а потом перекидывает их на сторону PCI(работал, как таргет, считывали с меня по прерыванию)... но такой вариант был слишком затратен по времени, т.к. верхнее ПО было написано под Linux, а сам чипсет компа не давал возможности с меня считывать пакетно... что только не пробовал, ничего не выходило, прочитал на форуме ELECTRONIX, подсказали, что придется реализовывать мастера...

Так вот поставил mt32 core для Альтеры с возможностью работы в режиме 66Мгц...

Прога под Linux пока не подправлена, но я попробовал выходить на шину мастером и писать данные в меня... я увидел, что я пишу так же, т.е. одиночными посылками, а не пакетно....

Вопрос: что необходимо указать в установках core(я пробовал менять конфигурацию баров с non - prefetchable на prefetchable), либо как организовывать обмен по PCI так, чтобы я работал в пакетном режиме???

Спасибо...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
XVR
сообщение Jun 29 2012, 08:35
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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)
Go to the top of the page
 
+Quote Post
xxxmatrixxx
сообщение Jul 6 2012, 09:25
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
XVR
сообщение Jul 6 2012, 13:57
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(xxxmatrixxx @ Jul 6 2012, 13:25) *
XVR, Не мог бы скинуть код под Линукс, если есть конечно, где ты работаешь как таргет, а в тебя пишут.... буду очень признателен

Запись в таргет под управлением CPU возможна только словами. Для записи блоками нужен мастер.
Go to the top of the page
 
+Quote Post
xxxmatrixxx
сообщение Jul 9 2012, 07:50
Сообщение #5


Участник
*

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



Цитата(XVR @ Jul 6 2012, 17:57) *
Запись в таргет под управлением CPU возможна только словами. Для записи блоками нужен мастер.


Так комп работает как таргет, а я со стороны своего модуля как мастер...

У меня виснет, когда я захватываю шину, становлюсь мастером на шине и пишу в ПК... вероятнее всего, что проблема в работе со стороны ПК,
либо адрес, который определяет linux и мне выдает, неверный, либо сконфигурирована память на стороне ПК не правильно...

Просто я грешу на неправильную работу проги под Linux...
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Jul 9 2012, 09:01
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



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


Участник
*

Группа: Участник
Сообщений: 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ю неделю, а копать не очень понимаю где...
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Jul 9 2012, 10:00
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(xxxmatrixxx @ Jul 9 2012, 12:25) *
..какие настройки для коры ставите, чтобы работать как мастер....

По поводу корки PCI_bb, как черного ящика. Не нашел в Вашей программе определения параметров для mt32. Мои, в приложении. Правда, в предыдущем посте я ошибся по BAR3, но это не принципиально...
Программы на ПК под PCI-шину не пишу, пока только синтез ПЛИС...
Прикрепленные файлы
Прикрепленный файл  PCI_bb___defparam.zip ( 5.81 килобайт ) Кол-во скачиваний: 39
 
Go to the top of the page
 
+Quote Post
xxxmatrixxx
сообщение Jul 9 2012, 12:08
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 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;
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Jul 9 2012, 12:33
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 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ом, к которому можно обращаться. В заданных Вами параметрах этих регистров нет....
Go to the top of the page
 
+Quote Post
xxxmatrixxx
сообщение Jul 10 2012, 06:22
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 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е окно при конфигурировании коры)???
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Jul 10 2012, 06:39
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(xxxmatrixxx @ Jul 10 2012, 09:22) *
А какие настройки...

См.приложение...[attachment=69714:Par_PCI_Comp.zip]
Прикрепленные файлы
Прикрепленный файл  Par_PCI_Comp.zip ( 83.12 килобайт ) Кол-во скачиваний: 33
 
Go to the top of the page
 
+Quote Post
xxxmatrixxx
сообщение Jul 10 2012, 07:01
Сообщение #13


Участник
*

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



Цитата(Serhiy_UA @ Jul 10 2012, 10:39) *
См.приложение...[attachment=69714:Par_PCI_Comp.zip]


Спасибо, похоже дело не в настройках коры...

Не могли бы скинуть код, как работаете с корой,т.е. где видно, когда и какие сигналы выставляются на PCIcore...
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Jul 10 2012, 07:24
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(xxxmatrixxx @ Jul 10 2012, 10:01) *
Не могли бы скинуть код, ...

Не могу. Труд оказался немалый...
Go to the top of the page
 
+Quote Post
xxxmatrixxx
сообщение Jul 10 2012, 07:32
Сообщение #15


Участник
*

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



Цитата(Serhiy_UA @ Jul 10 2012, 11:24) *
Не могу. Труд оказался немалый...


так мне не весь код нужен)))

а именно часть код, где видно только когда выставляются lm_framen, lm_rdyn, lm_last...

интересен сам алгоритм работы с корой, как с мастером... просто хочется сравнить, понять, что я делаю не так... а если все верно, то выкатить программисту под linux...
Go to the top of the page
 
+Quote Post
xxxmatrixxx
сообщение Jul 11 2012, 13:56
Сообщение #16


Участник
*

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



Нашел в чем ошибка)))))))Причем только сейчас))))

Всем спасибо, кто откликнулся на мою просьбу!!! ОЧень помогли!!!

Пришлось перерыть всю документацию на PCIcore, стандарт PCI... а ошибка была в назначении пина))))) вернее я прогу свою,
которую писал под таргет, начал переделывать под мастера(изначально предполагалось работать таргетом, но скорость требует другой реализации)
и пин, который контролирует ошибку паритета(perrn), был направлен только на выход, а на мастере должен быть и на вход и на выход....

Короче, очень глупая ошибка,которую начинаешь рассматривать только когда все перероешь)))

Но слава Богу хоть так - 2 недели работы и 2 мин после того, как обнаружил ошибку))))

Всем спасибо)))

Сообщение отредактировал xxxmatrixxx - Jul 12 2012, 11:53
Go to the top of the page
 
+Quote Post
xxxmatrixxx
сообщение Jul 12 2012, 11:57
Сообщение #17


Участник
*

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



Извините за поспешные выводы...

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

Возникли следующие проблемы:

1. Почему-то передается только 64 32х битных слова... потом lm_ackn защелкивается на 1 и заканчивает работу... это по станларту так положено, что при мультизаписи передается только 64 слова???

2. Программист под линукс читает только 0... хотя видно, что от меня все данные уходят, сопровождаемые соответствующими сигналами...

Кто-нибудь сталкивался с такими проблемами?????
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Jul 12 2012, 12:16
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(xxxmatrixxx @ Jul 12 2012, 14:57) *
1. Почему-то передается только 64 32х битных слова...

pci_mt32_inst.MAX_LATENCY = 8'h00, попробуйте этот параметр поменять...

Цитата(xxxmatrixxx @ Jul 12 2012, 14:57) *
Программист под линукс читает только 0...
...для начала передавайте по одному-два слова...
Go to the top of the page
 
+Quote Post
xxxmatrixxx
сообщение Jul 12 2012, 13:28
Сообщение #19


Участник
*

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



Цитата(Serhiy_UA @ Jul 12 2012, 16:16) *
pci_mt32_inst.MAX_LATENCY = 8'h00, попробуйте этот параметр поменять...


Пробовал менять этот параметр - не помогло, а когда отключил его вообще(latency timer off), то заработало....

Спасибо

Цитата(Serhiy_UA @ Jul 12 2012, 16:16) *
...для начала передавайте по одному-два слова...


а вот на сторону ПК от PCI приходит похоже что-то, но затирается... т.е. я организовал мультизапись, выставил адрес, установил соединение, и считаю, что адрес с каждым тактом будет на стороне ПК увеличиваться на 4(кажется), а похоже вся инфа долбит в 1у ячейку, т.е. по одному и тому же адресу... получается должно быть записано последнее значение, что я кидал... по опытам так и происходит...

Вопрос:
программист под линукс может отслеживать, что приходит ему по PCI за такт???
однозначно ли определяется мультизапись на стороне ПК под Линукс,т.е. ПК автоматом увеличивает адрес с каждым тактом, когда я пишу при мультизаписи?

Сообщение отредактировал xxxmatrixxx - Jul 12 2012, 13:49
Go to the top of the page
 
+Quote Post
XVR
сообщение Jul 12 2012, 17:16
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(xxxmatrixxx @ Jul 12 2012, 17:28) *
программист под линукс может отслеживать, что приходит ему по PCI за такт???
Нет
Цитата
однозначно ли определяется мультизапись на стороне ПК под Линукс,т.е. ПК автоматом увеличивает адрес с каждым тактом, когда я пишу при мультизаписи?
Насколько я помню стандарт (давненько это было, увы) адрес в транзакции указывается 1 раз. Так что пока транзакция не кончится, она должна ложиться по последовательным адресам (если вы конечно не в IO пространство пишете)
Go to the top of the page
 
+Quote Post
xxxmatrixxx
сообщение Jul 15 2012, 08:35
Сообщение #21


Участник
*

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



Цитата(XVR @ Jul 12 2012, 21:16) *
Нет
Насколько я помню стандарт (давненько это было, увы) адрес в транзакции указывается 1 раз. Так что пока транзакция не кончится, она должна ложиться по последовательным адресам (если вы конечно не в IO пространство пишете)


Пробовал... ситуация такая - по signaltab видно, что в соответствии со стандартом пачка должна быть отправлена с моей стороны, но на стороне линукса считывается чушь, а вернее 1 слово почти всегда верно, а остальные выдаются 0... причем 0 - это данные, которыми я управляю вот так:
CODE
//выставление данных на шину АД PCI
assign l_adi = (rdWorkInf == 1)? WorkInf: (fl_adr == 1)? adress: (EnableWritePCIMaster == 1 && StatePCI == 0)? SumOfCountForPCI: (StatePCI == 4)? DataForPCI:(StatePCI == 6)? 32'hFACE_DEAD: ( StatePCI == 7 || StatePCI == 2 || StatePCI == 3 || StatePCI == 5)? WorkDataForPCI: 32'h0000_0000;


если я меняю 32'h0000_0000 на другое значение, то вместо 0 на стороне линукс появляется это значение....

под Линукс сделан лог того, что происходит... по приему прерывания от меня считывается 40 слов с того адреса, что мне выдавался на шину
лог такой:
CODE
57.282587] e_bus: got_irq irq=17 dev_id=f61d2800 minor=0
[ 57.282587] e_bus: e_bus_read f=ed7949c0, buf=775da008, size = 40000000h, loff=eb3edf98
[ 57.282589] e_bus: First word: 24h (36) from eb3f0000
[ 57.282626] e_bus: e_bus_buf[0] = 0h from eb3f0000
[ 57.282627] e_bus: e_bus_buf[1] = 0h from eb3f0004
[ 57.282629] e_bus: e_bus_buf[2] = 0h from eb3f0008
[ 57.282630] e_bus: e_bus_buf[3] = 0h from eb3f000c
[ 57.282631] e_bus: e_bus_buf[4] = 0h from eb3f0010
[ 57.282632] e_bus: e_bus_buf[5] = 0h from eb3f0014
[ 57.282634] e_bus: e_bus_buf[6] = 0h from eb3f0018
[ 57.282635] e_bus: e_bus_buf[7] = 0h from eb3f001c
[ 57.282636] e_bus: e_bus_buf[8] = 0h from eb3f0020
[ 57.282638] e_bus: e_bus_buf[9] = 0h from eb3f0024
[ 57.282639] e_bus: e_bus_buf[10] = 0h from eb3f0028
[ 57.282640] e_bus: e_bus_buf[11] = 0h from eb3f002c
[ 57.282641] e_bus: e_bus_buf[12] = 0h from eb3f0030
[ 57.282643] e_bus: e_bus_buf[13] = 0h from eb3f0034
[ 57.282644] e_bus: e_bus_buf[14] = 0h from eb3f0038
[ 57.282645] e_bus: e_bus_buf[15] = 0h from eb3f003c
[ 57.282646] e_bus: e_bus_buf[16] = 0h from eb3f0040
[ 57.282648] e_bus: e_bus_buf[17] = 0h from eb3f0044
[ 57.282649] e_bus: e_bus_buf[18] = 0h from eb3f0048
[ 57.282650] e_bus: e_bus_buf[19] = 0h from eb3f004c
[ 57.282652] e_bus: e_bus_buf[20] = 0h from eb3f0050
[ 57.282653] e_bus: e_bus_buf[21] = 0h from eb3f0054
[ 57.282654] e_bus: e_bus_buf[22] = 0h from eb3f0058
[ 57.282655] e_bus: e_bus_buf[23] = 0h from eb3f005c
[ 57.282657] e_bus: e_bus_buf[24] = 0h from eb3f0060
[ 57.282658] e_bus: e_bus_buf[25] = 0h from eb3f0064
[ 57.282659] e_bus: e_bus_buf[26] = 0h from eb3f0068
[ 57.282661] e_bus: e_bus_buf[27] = 0h from eb3f006c
[ 57.282662] e_bus: e_bus_buf[28] = 0h from eb3f0070
[ 57.282663] e_bus: e_bus_buf[29] = 0h from eb3f0074
[ 57.282665] e_bus: e_bus_buf[30] = 0h from eb3f0078
[ 57.282666] e_bus: e_bus_buf[31] = 0h from eb3f007c
[ 57.282667] e_bus: e_bus_buf[32] = 0h from eb3f0080
[ 57.282668] e_bus: e_bus_buf[33] = 0h from eb3f0084
[ 57.282670] e_bus: e_bus_buf[34] = 0h from eb3f0088
[ 57.282671] e_bus: e_bus_buf[35] = 0h from eb3f008c
[ 57.282672] e_bus: e_bus_buf[36] = 0h from eb3f0090
[ 57.282673] e_bus: e_bus_buf[37] = 0h from eb3f0094
[ 57.282675] e_bus: e_bus_buf[38] = 0h from eb3f0098
[ 57.282676] e_bus: e_bus_buf[39] = 0h from eb3f009c
[ 57.282677] e_bus: Last word: 0h


видно, что First word: 24h (36), что соответствует действительности... но остальное...
причем иногда, но совсем редко можно получить такой пакет, что примерно соответствует правде

CODE
[ 57.581310] e_bus: got_irq irq=17 dev_id=f602d000 minor=0
[ 57.581313] e_bus: e_bus_read f=eb360900, buf=77590008, size = 40000000h, loff=eb2a7f98
[ 57.581315] e_bus: First word: 6ch (108) from eb378000
[ 57.581330] e_bus: got_irq irq=17 dev_id=f602d000 minor=0
[ 57.581354] e_bus: e_bus_buf[0] = 24h from eb378000
[ 57.581356] e_bus: e_bus_buf[1] = 1h from eb378004
[ 57.581357] e_bus: e_bus_buf[2] = 5h from eb378008
[ 57.581358] e_bus: e_bus_buf[3] = 20h from eb37800c
[ 57.581360] e_bus: e_bus_buf[4] = FFFF0000h from eb378010
[ 57.581361] e_bus: e_bus_buf[5] = 20001h from eb378014
[ 57.581362] e_bus: e_bus_buf[6] = 40003h from eb378018
[ 57.581364] e_bus: e_bus_buf[7] = 60005h from eb37801c
[ 57.581365] e_bus: e_bus_buf[8] = 80007h from eb378020
[ 57.581366] e_bus: e_bus_buf[9] = A0009h from eb378024
[ 57.581368] e_bus: e_bus_buf[10] = 0h from eb378028
[ 57.581369] e_bus: e_bus_buf[11] = 0h from eb37802c
[ 57.581370] e_bus: e_bus_buf[12] = 0h from eb378030
[ 57.581372] e_bus: e_bus_buf[13] = 0h from eb378034
[ 57.581373] e_bus: e_bus_buf[14] = 0h from eb378038
[ 57.581374] e_bus: e_bus_buf[15] = 0h from eb37803c
[ 57.581375] e_bus: e_bus_buf[16] = 0h from eb378040
[ 57.581377] e_bus: e_bus_buf[17] = 0h from eb378044
[ 57.581378] e_bus: e_bus_buf[18] = 0h from eb378048
[ 57.581379] e_bus: e_bus_buf[19] = 0h from eb37804c
[ 57.581381] e_bus: e_bus_buf[20] = 0h from eb378050
[ 57.581382] e_bus: e_bus_buf[21] = 0h from eb378054
[ 57.581383] e_bus: e_bus_buf[22] = 0h from eb378058
[ 57.581384] e_bus: e_bus_buf[23] = 0h from eb37805c
[ 57.581386] e_bus: e_bus_buf[24] = 0h from eb378060
[ 57.581387] e_bus: e_bus_buf[25] = 0h from eb378064
[ 57.581388] e_bus: e_bus_buf[26] = 0h from eb378068
[ 57.581390] e_bus: e_bus_buf[27] = 0h from eb37806c
[ 57.581391] e_bus: e_bus_buf[28] = 0h from eb378070
[ 57.581392] e_bus: e_bus_buf[29] = 0h from eb378074
[ 57.581394] e_bus: e_bus_buf[30] = 0h from eb378078
[ 57.581395] e_bus: e_bus_buf[31] = 0h from eb37807c
[ 57.581396] e_bus: e_bus_buf[32] = 0h from eb378080
[ 57.581398] e_bus: e_bus_buf[33] = 0h from eb378084
[ 57.581399] e_bus: e_bus_buf[34] = 0h from eb378088
[ 57.581400] e_bus: e_bus_buf[35] = 0h from eb37808c
[ 57.581401] e_bus: e_bus_buf[36] = 0h from eb378090
[ 57.581403] e_bus: e_bus_buf[37] = 0h from eb378094
[ 57.581404] e_bus: e_bus_buf[38] = 0h from eb378098
[ 57.581405] e_bus: e_bus_buf[39] = 0h from eb37809c
[ 57.581406] e_bus: Last word: 0h
[ 57.581407] e_bus: wrong signature 0h (0), expected 0xFACEDEAD


т.е. данные примерно правильные до строки [ 57.581368] e_bus: e_bus_buf[10] = 0h from eb378028

Почему так происходит не понимаю.... причем от меня все уходит хорошо....

Кстати, у меня возник такой вопрос, для того чтобы сигнал готовности от меня(irdy) был неактивен там, где я хочу, надо сигнал lm_rdyn на локальной стороне выставлять за такт до тех данных, которые я не хочу чтобы попали но сторону PCI, хотя по диаграмме надо выставлять в том же такте, что и безразличные данные...

Сигнал lm_last так же высталяется в тот же момент, что и ты заканчиваешь передачу... а на диаграмме нарисовано что за такт до последних данных...

Я приложил диаграммы с signaltab, где на
1й картинке, как я работаю с локальной стороной и что в этот момент происходит на шине PCI
на 2й картинке, начало этой же транзакции, но увеличено для того, чтобы можно видеть было, что я передаю
на 3й картинке, конец этой же транзакции, но увеличено для того, чтобы можно видеть было, что я передаю

Сейчас управляющие сигналы и данные у меня выставляются так:
CODE
//выставление данных на шину АД PCI
assign l_adi = (rdWorkInf == 1)? WorkInf: (fl_adr == 1)? adress: (EnableWritePCIMaster == 1 && StatePCI == 0)? SumOfCountForPCI: (StatePCI == 4)? DataForPCI:(StatePCI == 6)? 32'hFACE_DEAD: ( StatePCI == 7 || StatePCI == 2 || StatePCI == 3 || StatePCI == 5)? WorkDataForPCI: 32'h0000_0000;

assign lm_rdyn = ((StatePCI == 0 || (StatePCI == 4 && CurrentIndexOfCounting >= localMaxCounting)) && lm_ackn == 0) ? 1'b1: (StatePCI_Wr == 4 && lm_ackn == 0)? 1'b0: 1'b1;

assign lm_lastn = (lm_ackn == 0 && /*(StatePCI == 1 && (localIndexSumOfCounting >= localMaxSumOfCount))*/StatePCI == 6)? 1'b0:1'b1;


пробовал синхронизировать данные сигналы для того, чтобы хоть что-то получить на стороне ПК из того, что я реально передаю, вот таким образом:
CODE
reg [31:0] ladi;
assign l_adi = ladi;
always @(*)
begin
if(Res == 0) ladi <= 32'h0000_0000;
else if (rdWorkInf == 1) ladi <= WorkInf;
else if (fl_adr == 1) ladi <= adress;
else case(StatePCI)
0: if(EnableWritePCIMaster == 0) ladi <= SumOfCountForPCI;
7: ladi <= WorkDataForPCI;
2: ladi <= WorkDataForPCI;
3: ladi <= WorkDataForPCI;
5: ladi <= WorkDataForPCI;
4: ladi <= DataForPCI;
6: ladi <= 32'hFACE_DEAD;
endcase
end*/

/*
reg lmrdyn;

// выставление сигнала готовности на стороне мастера
always @(posedge ClkPCI or negedge Res)
begin
if(Res == 0) lmrdyn <= 1;
else if(StatePCI == 0) lmrdyn <= 1; // ставим задержку в передаче при передаче на сторону PCI
else if (StatePCI == 4 && CurrentIndexOfCounting >= localMaxCounting) lmrdyn <= 1;
else if(lm_ackn == 0 && StatePCI_Wr == 4 ) lmrdyn <= 0;
else lmrdyn <= 1;

end */

/*lmlastn;
always @(posedge ClkPCI or negedge Res)
begin
if(Res == 0) lmlastn <= 1;
else case(StatePCI)
1: if(lm_ackn == 0 && (localIndexSumOfCounting >= localMaxSumOfCount)) lmlastn <= 0; //последняя пачка
default: lmlastn <= 1;
endcase
end */


Но результаты те же....

Я пробовал менять настройки pcicore, но ничего не получилось...

Вопрос:
Куда мне двигаться дальше?)))) На что обратить внимание?
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - 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


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:25
Рейтинг@Mail.ru


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