Jump to content

    

Inanity

Участник
  • Content Count

    235
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Inanity

  • Rank
    Местный

Recent Profile Visitors

2933 profile views
  1. Думаю, что это исключено. Задержка всегда одна и та же, если в FIFO есть данные, о чем явно указывает строб "не пусто" и вы хотите их прочитать. Другое дело, что от входа до выхода FIFO количество тактов может быть различным ввиду различного числа степеней синхронизации между портами и т.д. Иными словами, если вы записали в FIFO слово, то попадает оно в выходной порт с некоторой задержкой и не всегда детерминированной. Но если в FIFO есть слово, т.е. оно не пусто, то по стробу чтения данные должны выходить с оговоренной задержкой, иначе этим нереально было бы пользоваться. А вообще очень похоже на банальное нарушение таймингов. Строб пустоты не успевает остановить чтение, например.
  2. Вопрос не в том, что синтезатор добавил мультиплексор, а в том, ожидали ли вы то, что получили в итоге? Код пишется для людей, а человек вас не поймёт. Во всяком случае вам повезло, что синтезатор вообще хоть как-то переварил написанное.
  3. Для начала установить природу дребезга или глитча. В 90% уверен, что проблема в несогласованности линии, сигнал отражается от приёмника и гуляет по проводу, создавая внеочередные фронты, провалы, короче говоря глитчи. Решать эту проблему надо на схемотехническом уровне (согласование/экранирование и т.д.). Если все эти вопросы решены, но всё равно есть проблемы с приёмом данных ввиду внешних наводок и т.д. то проблему можно попробовать решить на уровне протокола, т.е. контрольные суммы, запрос-ответ и т.д. В худшем случае SPI как интерфейс может вам и не подойти совсем. Тогда нужен асинхронный протокол с нормальной преамбулой, ECC и т.д. Вы же, насколько я понимаю, предлагаете оверсемплингом восстанавливать клок, который поможет детектировать данные. Не могу сказать, что это не будет работать, но зачем тогда вообще применять не предназначенный для таких задач синхронный интерфейс? Стоит ли программировать навороченный гибрид SPI-приёмника и осциллографа, чтобы принять шумный SPI? Не знаю, возможно, когда другого выхода нет, то это оправданно, но во всех других ситуациях это не рационально.
  4. Переход на внутренний клок будет в любом случае, но приёмный каскад должен работать по клоку приходящему. Это какой-то непонятный огород, который вас не спасёт, т.к. кроме фронта приходящего тактового сигнала нет никаких других способов детектировать валидные данные на шине.
  5. Какой-то странный подход. Это же не асинхронный интерфейс. Зачем тогда лишний провод на тактовый сигнал тратить?
  6. Вопрос не мне, но отвечу. Когда-то делал специфический SPI на 64MHz 16 бит. Тактовый сигнал и данные держал в двух регистрах. В момент передачи оба регистра синхронно выдвигал. Выходные регистры были упакованы в IO буфферы ПЛИС. За счёт всего этого удалось добиться полного отсутствия разницы фаз между клоком и данными и достаточно простым управлением тактового сигнала в период пачки. Минус в том, что внутренняя логика должна в этом случае работать на удвоенной частоте. Но думаю, что даже 100MHz SPI (200Mhz внутренней частоты) этот дизайн бы запросто потянул, при условии согласованности линии и возможности ведомого принять такой поток. Но это если делать на чистом HDL. Не знаю как на C5, но на спартане6 есть ODDR2 (выходной буфер DDR). Думаю, что тот же фокус с двумя регистрами можно провернуть и с ним, только в этом случае удвоенная внутренняя частота уже не будет нужна. А топикстартеру рекомендую изучить неблокирующие присваивания, иначе этот ад не заработает никогда.
  7. Магазин Терраэлектроника

    Вы намекаете на трактор или на то, чтобы заниматься электроникой теперь обязательно нужно быть ИП?
  8. Магазин Терраэлектроника

    Что теперь делать физ.лицам? Есть какие-нибудь альтернативы?
  9. Магазин Терраэлектроника

    Т.е. терра перестала работать с физ.лицами?
  10. Я бы ещё атрибутом на сигналах синхронизатора запретил бы упаковку в SRL, только триггеры. Просто не знаю, MAXII может LUT в SRL превращать?
  11. Сэмплировать висящие в воздухе ножки бессмысленно. Сделайте счётчик на плате с циклоном, выведите пару бит и заведите их обратно в ПЛИС (кольцо) и посмотрите что получится.
  12. Перечитал всё ещё раз. Всё таки не туда копаем. Если CE в единице и мы наблюдаем такую картину, то тут что-то на физическом уровне не так. На примере CE как будто что-то наводит помеху на него. А банки обеих ПЛИС реально (в железе) питаются от 3.3V ? Можете это подтвердить? С землёй как я понял всё в порядке?
  13. Чёрт, прошу прощения, впредь буду внимательнее. Если вы с помощью одной PLL создаёте эти два клока, они как раз синхронны, тем более для такого периода. Хотя как заметил MegaVolt на высоких частотах из-за разницы пути следования сигнала в ПЛИС возможны проблемы.
  14. Без инвертирования на целевой плате вы пытаетесь защёлкнуть данные в тот момент, когда они меняются. При инвертировании тактового сигнала у вас появляется большой запас.
  15. На обоих платах сделайте тактирование по фронту (posedge/rising_edge). И передаваемый тактовый сигнал нужно инвертировать! И всё будет работать и не только на 2МГц.