|
PCI Target 32/33 не везде работает, Помогите заставить работать |
|
|
|
Apr 20 2007, 07:08
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
Доброго времени суток. Уважаемые коллеги, помогите мне разобраться со слеующей ситуацией:
Делаю свое первое PCI устройство. Опробовал его на 4 машинах (больше под рукой не оказалось), на первых 3 работает успешно, а на червертой виснет BIOS. Выглядит это так, проходит инициализация устройств необходимых для загрузки (появляется заставка BIOS на мониторе, слышится один короткий пик и все насмерть виснет, светодиоды на клавиатуре уже не мигают, а должны были). Линии #PERR, #SERR, #STOP в видимом сегменте PCI шины в активное состояние никем не переводятся.
Устройство: PCI Тaгget 32/33 5V, работает в диапазоных CFG и I/O, питается от +3,3V. Основано на Xilinx XCR3256XL-10PQ208C. Если верить PostFit Simulation, то временные требования PCI Spec 3.0 выполняются. Использую Xilinx ISE 8.1 SP3 IP1. Потроха ПЛИС пишу сам, вдохновляясь PCI Spec 3.0.
Chipset'ы плат такие: 1. EPOX: nForce2T. 2. ASUS: (A8N-E / A8N-SLI SE) nForce4 Ultra. 3. Advantech: PICMG PCA6003 (VIA Appolo 133) + Cross (мост Intel). 4. ASUS (A7V600): VIA KT600 (виснет с этим chipset'ом).
Для аппаратной отладки имеются только 2 осциллографа: TDS2012 и TPS2012 (по 2 канала, полоса 100 Мгц).
|
|
|
|
|
Apr 20 2007, 15:21
|

Знающий
   
Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045

|
Цитата(Boris_TS @ Apr 20 2007, 14:12)  При чтении BAR0 на шину AD(31:16) даю x"0000" (если давать константу x"FFFF", то BIOS даже не пикает, виснет сразу). Старшая часть BAR0 (у Вас это (31:8)) все-таки должна быть выполнена в виде регистра, иначе BIOS может сильно удивиться, обнаружив, что после записи FFFFFFFFh прочитаны 0 в старших разрядах. Цитата(Boris_TS @ Apr 20 2007, 14:12)  PAR генерирую как XOR от AD(31:0) и C_#BE(3:0). Надеюсь, про триггер не забыли? PAR отражает значение четности на предыдущем такте. Цитата(Boris_TS @ Apr 20 2007, 14:12)  Сейчас проверил, на первых трех машинах (где все работает) реакции на неправильный PAR нет. Вообще говоря, по спецификации мост не обязан рапортовать об ошибках четности и системных ошибках - он же сам эти события должен обрабатывать. По конфигурационному пространству: Попробуйте убрать бит Fast Back-to-Back Capable в статусном регистре. Что из себя представляет поле Interrupt Line?
--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
|
|
|
|
|
Apr 20 2007, 16:23
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
Еще разок увеличил у BAR0 регистровую часть до (31:8). Реакция машины не изменилась. Да, не забыл и про триггер для PAR (время работы XOR36 на этой ПЛИС около 26 ns, без триггера выглядит очень забавно). На всякий случай прилогаю времянки CFG Read полученную при помощи MXE 8.2 PostFit Simulation. Убрал Fast Back-to-Back из Status - ничего не меняется. Interrupt Line - реализован в виде 8 разрядного регистра (я и сам удивился, когда Win2000 записал туда x"10", но ему виднее; правда и IRQ запретить он при этом не забыл).
|
|
|
|
|
Apr 20 2007, 17:17
|

Знающий
   
Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045

|
Странно, а почему на AD нигде третьего состояния не видать? Это не шина, а внутренние сигналы что-ли? Если в модели pullup'ы на шине висят - зря, уберите.
IRDY в модели неправильно формируется - должен перед тем, как отключается буфер быть в '1'. (это правда к делу не относится)
Похоже, что на AD времянка немного нарушена - Tval CLK to Signal Valid Delay (bused signals) - 11 ns, у Вас > 15 ns.
--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
|
|
|
|
|
Apr 22 2007, 14:00
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
PullUps с шины убрал - результаты моделирования стали интереснее (IRDY тоже поправил). А вот за 11ns для Bussed signals - большре спасибо, мне почему-то привиделось 14ns, когда читал спицифивацию.
По показаниям осциллографа, AD выходит из Z-состояния раньше (где-то на 10ns-12ns) - могу обяснить это только тем, что я использую ПЛИС индустриального температурного диапазона, а работаю при 23 градусах Цельсия.
К сожалению эксперимент с кучей устройств воткнутых во все имеющиеся слоты ничего не дал (!) - все работало, а как я предполагаю работать не должно было. Использованные устройства были: Promise Ultra66, Promise SATAII-TX4, Creative Audigy, USRobotics модем - каждый Promise имел по 1 HDD + моя плата.
Дело оказалось в ответе на Interrupt Acknowledge Cycle, когда моего IRQ нет - (гнусная опечатка, устройство отвечало на все IntAcc которые видело).
Спасибо BSV и Nicom, за содействие в поиске ошибки.
А теперь новый вопрос, где можно прочитать о том когда необходимо отвечать на Interrupt Acknowledge Cycle? Особо интересует такой случай: как должна вести себя система (т.е. все ее узлы), когда 2 устройства сидящие в одном снгменте PCI шины "одновременно" выставили IRQ, и теоретически готовы одновременно ответить на один и тотже Interrupt Acknowledge ?
|
|
|
|
|
Apr 22 2007, 18:43
|

Знающий
   
Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045

|
На него вообще не нужно отвечать, транзакции этого типа адресованы непосредственно системному контроллеру прерываний. Цитата Interrupt requests (that use INTx#) do not appear as transactions on the PCI bus (they are sideband signals) and, therefore, have no ordering relationship to any bus transactions. Furthermore, the system is not required to use the Interrupt Acknowledge bus transaction to service interrupts. So interrupts are not synchronizing events and device drivers cannot depend on them to flush posting buffers. However, when MSI are used, they have the same ordering rules as a memory write transaction (refer to Section 6.8 for more information). Цитата An Interrupt Acknowledge transaction has no addressing mechanism and is implicitly targeted to the interrupt controller in the system.) Сообщать устройству о действиях обработчика - функция драйвера устройства.
--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
|
|
|
|
|
Apr 25 2007, 14:50
|

Местный
  
Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894

|
Цитата(Boris_TS @ Apr 20 2007, 08:08)  Доброго времени суток. Уважаемые коллеги, помогите мне разобраться со слеующей ситуацией:
Делаю свое первое PCI устройство. Опробовал его на 4 машинах (больше под рукой не оказалось), на первых 3 работает успешно, а на червертой виснет BIOS. Выглядит это так, проходит инициализация устройств необходимых для загрузки (появляется заставка BIOS на мониторе, слышится один короткий пик и все насмерть виснет, светодиоды на клавиатуре уже не мигают, а должны были). Линии #PERR, #SERR, #STOP в видимом сегменте PCI шины в активное состояние никем не переводятся... У меня тоже случалось подобное, разработанное мной устройство вешало намертво систему в BIOS в момент конфигурирования в очень старых (под процессоры Pentuim) материнских платах. Оказалось всё было из-за сочетания FRAME/IDSEL на шине. Устройство наивно полагало, что наличия низкого уровня сигнала FRAME, высокого уровня сигнала IDSEL и отсутствия занятости шины (DEVSEL = 0) достаточно для функционирования, НО не всё так просто оказалось... IDSEL надо было смотреть ТОЛЬКО в первый такт активного сигнала FRAME, из-за специфики IDSEL....
|
|
|
|
|
May 17 2007, 15:34
|
Группа: Новичок
Сообщений: 3
Регистрация: 17-05-07
Пользователь №: 27 791

|
2Boris_TS. Я начал изучать PCI для написания собственного таргета(в рамках бакалаврского проекта). Не могли бы Вы сообщить источники информации по их построению, помимо спецификации
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|