Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Знакокам PCI: DMA запись в память ПК
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
L_Konstantin
При попытке писать в память (команда CBE = X"F") 64-битных данных происходит следующее:
1. происходит запись 1280 байт (80 транзакций по 64 бита), после чего транзакция прерывается по DisconnectOnNextADB - все корректно.
2. при продолжении как будто происходит все номрально, но при этом после 4 транзакции передачи данных выставляется STOP (DisconnectOnNextADB), но при этом на 8 такте снимаются TRDY и DEVSEL.

Как это может быть, если в стандарте записано что прерывание транзакции возможно лишь на границу в 128 байт (16 тактов по 64 бита).

Я в полном ступоре: либо я сильно чего-то не понимаю, либо налицо несоответствие поведения стандарту PCI.

(попытался прикрепить картинку с логгера как происходит отсоединение target-а)
BSV
Регистр Сacheline Size реализован? Какое он имеет значение?
В стандарте написано, что Master обязан выдать данные целиком исключая случай, когда транзакция прерывается Target'ом. (i.e., the master intends to write all bytes within the addressed cacheline in a single PCI transaction unless interrupted by the target.) На картинке похоже, что STOP#, IRDY#, TRDY#, DEVSEL# снимаются на такт позже, чем этого требует спецификация, хотя, возможно, это глюк логгера.
L_Konstantin
Цитата(BSV @ Nov 1 2006, 18:53) *
Регистр Сacheline Size реализован? Какое он имеет значение?
В стандарте написано, что Master обязан выдать данные целиком исключая случай, когда транзакция прерывается Target'ом. (i.e., the master intends to write all bytes within the addressed cacheline in a single PCI transaction unless interrupted by the target.) На картинке похоже, что STOP#, IRDY#, TRDY#, DEVSEL# снимаются на такт позже, чем этого требует спецификация, хотя, возможно, это глюк логгера.


1. Регист Сacheline Size реализован. Как того требует спецификация после reset он встает в ноль, затем система его записывает в значение X"8".

2. я работаю в режиме мастера, то есть обращаюсь к таргету. Соответственно сигналами STOP#, IRDY# и DEVSEL# рулит он. Я же вижу что по прошествие 4 тактов он выставляет запрос на прерывание, но при этом после 8 такта снимает все свои сигналы. А я при этом, согласно стандарту PCI-X, планирую прервать транзацию на 16 такте передачи данных.
BSV
Только сейчас внимание обратил, а ведь FRAME# тоже на такт запаздывает, его нужно снять на следующем такте после активизации STOP#. А чем Вы времянку смотрите?
L_Konstantin
УРА!!!! cheers.gif
Проблема побеждена!

Дело было вот в чем: я хотел писать 4К данных. После записи 80 транзакий меня прерывал таргет (DisconnectOnNextADB). Соответственно реально я записал 80*64b = 640Byte. Значит при инициализации следующей транзакции я должен был выставить адрес 640 (X"280"), а я выставлял X"140" (осталось от 32-битных передач).
Вот в этом месте бридж похоже с ума и сходил. Вообщем оба мы были не правы a14.gif

Если у кого будут вопросы по PCI-X - обращайтесь - походу я уже на все грабли наступил smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.