Перейти к содержанию
    

spashok2

Участник
  • Постов

    23
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о spashok2

  • Звание
    Участник
    Участник

Контакты

  • ICQ
    Array
  1. Спасибо за совет. Попробую отмоделировать.
  2. Первая чатота 70 Мг. Вторая 33Мгц. Констейн задан общий в виде 70 Мгц (соответвует ~14 нс). После разводки получил сообщение что реальное значние ~ 28нс. Регистр 32 разряда. Почему сбоит один бит - это и есть суть вопроса. Мое предположение - особенность разводки внутри кристалла линии именно этого бита. Почему зависит от разводки - пока еще сам не понял.
  3. Большое спасибо за такое количество советов. Еще поизучаю проблему. Будут новые данные - напишу.
  4. Я тут для эксперимента вторую тактовую (ну которая через обычный порт заведена) завел через свободный тактовый вход. А сам проект не трогал. Только вывод переназничил. Вероятность возникновения ошибки уменьшилась значительно. Стала 1 бит на 150 Гб!!! Но ошибка не исчезла. Т.е. вот это некореркное тактирование очень сильно влияет. Но беда в том, что изменять топологию платы нельзя. Буду экпериментировать с тем, что есть.
  5. Изменился только производитель. Топология осталась та же. Т.е. визуально платы - точные копии. Элементы точно ни при чем, т.к. полностью менял. Кстати spartanы тоже менял, т.к. предположил что дело в бракованной серии. Перейти на spatan 3e нет возможности, т.к. заказчик уже закупил достаточно большое число spartan 2 для этого изделия. Новых плат тоже около 1000. Т.е. надо как-то решить вопрос в рамках существующих условий. Я просто не могу понять ЧТО может быть причиной такого поведения. Я думал помехи, но используются 99% IO остальные - посажены на землю. В общем пока еще проблема не решена, в данный момент пробую Ваши предложения (Большое спасибо за них).
  6. Подскажите пожалуйста, если кто сталкивался вот с каким вопросом. Разработал устройство на Spartan 2 достаточно долгое время оно корерктно работало. Некоторое время назад заказчик поменял завод, где он заказывает печатные платы. Так вот на этих новых платах устройство стало работать со сбоями. Сбой смешной - сбоит 1 бит на 256 кб. Т.е. схемотехника одна и таже, детали одни и те же(в качестве эксперимента даже полностью переставлял датели со старой платы на новую), только сами печатные платы разные. Суть устройства - сбор данных с PCI шины. Начал изучать причину сбой, устаносил что данные бьются в одном из триггеров. Я поставил компаратор на входе и выходе триггера и передаю в устройство заданный шаблон и смотрю на оссциллографе. Так вот на входе триггера данные корректны - на выходе нет. Бьется один из битов! Заполненоость кристалла 99%. Установил требуемые констейны, при разводке получаю сообщение что они не выполнены. От требуемых отличаются более чем в 2,5 раза. Плюс тригер с которого данне идут на триггер, где и наблюдается сбой, тактирован второй частотой, которая заведена НЕ через GCLK. Это все конечно ошибки и достаточно грубые. Про метастабильность я знаю. Но ведь данные бьются в тригере на входе которого они корректные задолго до момента защелкивания. Я все никак не могу понять причину этого. Как такое может быть. Задача осоложняется еще тем, что вероятность появления ошибки зависит от разводки. И кроме того основной момент - устройство достаточно долго работало и было произведено несколько тысяч экземпляров. Вот такой интересный момент - новая печатная плата - значительно качественней предыдущей. Если кто-то может что-то подсказать по этому поводу, буду очень признателен.
  7. спасибо за подсказку. Сегодня у меня возникла примерна та же идея. Попробую это учесть.
  8. CY7C680015A

    Помогите пожалуйста вот в каком вопросе. Суть проблемы: есть USB устройство на основе CY7C680015A (полный аналог CY7C680013A кроме 2 выводов). Оно передает данные в компьютер через КТ 4 типа bulk. Параметры точки: 2-я буферизация, размер FIFO 512 байт, High-Speed. На компьютере стоит операционная система Win XP SP2. К устройству подключена NAND флешка с которой считываются 2048 байт. Используется GPIF, типа FIFO RD, т.е. данные читаются в FIFO 4 КТ. FIFO работает в режиме AUTOIN, т.е. при появлении в нем 512 байт, буфер автоматически отправляется хосту. Так вот при считывании с флешки 1024 байта в контроллере поднимается флаг FIFO FULL, стоит примерно 100 мкс, при этом соотвественно GPIF останвливается, после этого убирается и GPIF дочитывает 1024 байта. подобная картина повторяется при каждом последующем чтении. Вопрос почему такая пауза? Я так понимаю 2-я буферизация сделана для того чтобы пока часть буфера передается, вторая часть - заполняется. При этом размер FIFO 512 байт дожлен передаться (при High Speed 60Mb/s) примерно за 8 мкс. Ну не 100 же мкс! При этом заполнение FIFO - 512 байт - происходит примерно за 30 мкс. При этом в данном месте работает с одной стороны GPIF, а я программа просто ждет его завершения, а с другой стороны - драйвер нижнего уровня, которому я послала запрос на чтение 2048 байт. Ни там, ни там нет не выполняется мой код. Кто сталкивался с подобной проблемой, подскажите пожалуйста. Хочц заметить что данные передается верно. Волнует именно проблема скорости. ЗАранее привожу фрагменты соотвесвующего кода устройства и драйвера: устройство: GPIFTCB1 = 0x08; // Setup GPIF count high GPIFTCB0 = 0x00; // GPIF low count GPIFTRIG = 0x04 | cEP4; // Arm EP4 _nop_(); while(!gpifIdle()){;}; дравер(ф-ция чтения): URB pUrb = m_ep4In.BuildBulkTransfer( pBuffer, // Where is data coming from? 2048, // How much data to read? TRUE, // direction (TRUE = IN) NULL, // Link to next URB TRUE // Allow a short transfer ); if (pUrb == NULL) { I.Information() = 0; return STATUS_INSUFFICIENT_RESOURCES; } //чтение status = m_ep4In.SubmitUrb(I, pUrb, NULL, NULL, 0); // Plug and Play accounting DecrementOutstandingRequestCount(); Заранее списибо. Буду благодарен за любые идеи и помощь.
  9. Спасибо. за помощь. Я уже разобрался с проблемой. Смысл был в том. что у меня сигнал TRDY# держался 2 такта (моя ошибка).Поэтому мастер на каждый такт считывал по dword , т.е. одни и те же денные, поэтому и не повторял запрос. Сделал TRDY# активным в течении одного такта и все заработало.
  10. Но ведь в спецификации(и в приведенной вами цитате) сказано ,что " Мастер должен повторить запрос, который был завершен целевым устройством (за исключением аварийного прекращения работы целевым устройством) по адресам следующих еще не переданных данных, если он, конечно, предполагает полностью завершить запрос." Т.е. получается, что чипсет не соответсвует спецификции? На самом деле я пробовал на разных чипсетах - тот же результат. причем результат стабильный. У меня есть предположение, может я что -то не так делаю, что мастер опять выставляет адрес первого dwordа.Но я смотрел осциллографом, все соответствует спецификации. Если я запрещею декодирование адреса в своем устройстве, то эта область памяти читается верно (все 8 байт), а если разрешаю то два раза читается 1 dword кождой пары dword ов.
  11. внес изменения в устройство, оно теперь завершет пакетное чтение как сказано в спецификации тип disconnect-A т.е. завепешение транзакции посл передачи 1 dword данных. Но проблема осталась. Я в DOS читаю память моего устройства с помощью инструкции MOVQ т.е. читаю 8 байт при этом читается 2 раза 1 dword. Т.е. получается, что мастер все время устанавливает адрес 1 dwordа. Никтом не может подсказать как ведет себя PCI в таком случае? Буду благодарен за ЛЮБУЮ помошь.
  12. Спасибо, буду пробовать. Мастер вроде бы сделан нормально :)
  13. спасибо, что ответили. Смысл в том, что пакетами мою память читает другое устройство, и это я изменить не могу. =( С TRDY и IRDY я поступаю так как Вы говорите. А вот STOP отпукаю вместе с TRDY, т.е. не жду frame. Вопрос такой:если мастер читает пакетно 2 dword. если передать 1 dword данных выставив одновременно с TRDY STOP,то мастер перезапросит данные с адреса 2 dword или опять повторит пакетное чтение с адреса первого dword.
  14. Здраствуйте всем. подскажите с вопросом. Сделал свое PCI устройство. Оно поддерживает только одиночные передачи. Имеет некоторое ПЗУ, отображаемое на память. подскажите пожалуйста, как быть, если чтение с моей памяти ведется пакетно. У меня при выставлении сигнала TRDY я выставляю одновременно STOP. но все равно данные передаеются некорректно.
  15. Здраствуйте, подскажите пожалуйста с таким вопросом. Каково назначени сиганлов BE# в фазе данных. Если BE#[0]=0 BE#[1]=0 BE#[2]=1 BE#[3]=1 это значит, что запрашивается 1и2 байты из дворда лежащего по адресу переданному в фазе адреса и их необходимо передать в первых 2-х байтах dwordа посылаемого моим устройством на PCI шину. Если это я понял верно, то в такой ситуации: BE#[0]=1 BE#[1]=1 BE#[2]=0 BE#[3]=0 - запрашивается 2-е два байта из того же адреса и их необходимо передать в 2-х СТАРШИХ байтах dwordа посылаемого на PCI шину, или они должны быть переданы в 2-х младших байтах. Буду благодарен за любую информацию по вопросу.
×
×
  • Создать...