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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> kintex7+pci-e
exigo
сообщение Jan 9 2018, 09:32
Сообщение #31


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 30-01-15
Пользователь №: 84 837



Проверенными методами выделяю память, и передаю начальный адрес в ПЛИС через БАР0, на стороне плис успешно его считываю, там же в БАР0 записываю бит разрешающий писать по данному адресу. В ПЛИС по этому флагу собственно вот такой механизм записи в ПК, в нем очень не уверен, думаю из-за него и проблема. Так же прочитал, что должен быть в конфигурации выставлен бит мастер шины, по 0x4 адресу = 0x0006, т.е. 2 бит выставлен верно.
Код
            if (write_en_f = '1') then                        
                        if ((s_axis_tx_tready) = '1') then
                         s_axis_tx_tlast <= '1' after TCQ;
                         s_axis_tx_tvalid <= '1' after TCQ;
                         s_axis_tx_tdata <= (
                                                    X"11111111" & --data
                                                    st_addr & --addr
                                                    "0000000000000000" &
                                                    "00000000" &
                                                    "0000" &
                                                    "1111" &
                                                    "01000000" &
                                                    '0' &
                                                    "000" &
                                                    "0000" &
                                                    '0' &
                                                    '0' &
                                                    "00" &
                                                    "00" &
                                                    req_len
                                                    ) after TCQ;

                            s_axis_tx_tkeep <= x"FFFF" after TCQ;
                        end if;
                
                    else         
                      s_axis_tx_tlast  <= '0' after TCQ;
                      s_axis_tx_tvalid <= '0' after TCQ;
                      s_axis_tx_tdata  <= (others => '0') after TCQ;
                      s_axis_tx_tkeep  <= (others => '1') after TCQ;
                  end if; --write_en_f

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

Сообщение отредактировал exigo - Jan 9 2018, 09:35
Go to the top of the page
 
+Quote Post
exigo
сообщение Jan 15 2018, 04:31
Сообщение #32


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 30-01-15
Пользователь №: 84 837



Скажите, пожалуйста, кто знает, похоже на правду или я кардинально неправильно делаю sm.gif А то всё капаю капаю, а вдруг, где 1 бит не так. Буду благодарен конечно, если скините кусок рабочего кода.
Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 15 2018, 07:12
Сообщение #33


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 146
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(exigo @ Jan 15 2018, 07:31) *
Скажите, пожалуйста, кто знает, похоже на правду или я кардинально неправильно делаю sm.gif А то всё капаю капаю, а вдруг, где 1 бит не так. Буду благодарен конечно, если скините кусок рабочего кода.

А как же "его величество светодиод"? Делая проект на PCI-E нужно не забывать об удобной инфраструктуре отладки, а не гадать в слепую. Надо иметь возможность четко знать "вот тут не так", а "тут как надо".

Могу лишь посоветовать или даже скинуть код отладки. Я отлаживаю так: есть некий буфер из полей единого формата, куда я кидаю события или значения каких-то регистров + временная метка в микросекундах например. Когда событий накопилось допустим 1000, я сбрасываю это в UART. Так можно получить ясную картину что где когда происходило и отладить проблему, сверить с моделью. Сам UART на передачу чудовищно прост: просто делитель и {1'b0, data[7:0], 1'b1} всё.

Еще один мой подход - PCI-E пользовательскую логику можно вынести в отдельный модуль, и его то уже моделировать, ведь интерфейс PCI-E ядер на мой взгляд примитивен, так что его легко имитировать, и таким образом отлаживать саму логику свой части в Modelsim или ином симуляторе, используя обильный принтинг ($display или $fprintf и т.д.). А уже в top-модуле просто слепить свою логику и PCI-E ядро.


--------------------
Go to the top of the page
 
+Quote Post
exigo
сообщение Jan 15 2018, 08:26
Сообщение #34


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 30-01-15
Пользователь №: 84 837



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

Функция запаси или автомат формирования запроса и данных, очень меня бы спас

А на счет бита, это я про бит мастер шины, мало ли, где что-то подобное упустил. (кстати через светодиод и проверил)

Сообщение отредактировал exigo - Jan 15 2018, 08:34
Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 15 2018, 12:47
Сообщение #35


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 146
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(exigo @ Jan 15 2018, 11:26) *
Да и светодиоды использую для проверки и chipscope, в том то и дело, что на основе моей логике и пакеты формируются и все что надо выставляется, но по заданным адресам на пк так и тишина, вот и грешу на служебные слова в заголовке пакета, что выше скидывал, хотя судя по мануалам везде нули.
Функция запаси или автомат формирования запроса и данных, очень меня бы спас
А на счет бита, это я про бит мастер шины, мало ли, где что-то подобное упустил. (кстати через светодиод и проверил)

Я предлагаю сделать свой отладочный модуль вместо chipscope, некий 9-битный FIFO, где 8 бит данные на каждый байт, а 9-й бит означает начало пакета. Вот это потом вывалить в UART при этом начало пакета предварять символами 0x0D 0x0A. Тогда будет видно - вот такие пакеты зашли, такие вышли. Я так и отлаживал, имея легкочитаемые пакеты перед глазами, в которых легко найти ошибку, неверный битик.
Понятно что PCI-E это скорость света, а UART улитка, но всё равно, накопив немного пакетов на огромной скорости, их потом можно неспешно выдавить в UART и скушать терминалом.

И да, я не вижу кода драйвера - может настройка неверна в части ПО? Добро пожаловать на paste.org.ru и ссылки сюда, можно просто приложить исходник сюда к сообщениям - этот форум имеет такую функцию.


--------------------
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th January 2018 - 16:57
Рейтинг@Mail.ru


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