18 апреля 2014 г.

Signal Integrity: Часть 1.

Побывал я как-то на интересном собеседовании на вакансию схемотехника.
Узнал много интересных штук. На все вопросы можно было дать ответ не только если просто знаешь, но если просто хорошо знаешь физику в области электроники. Один из таких хороших вопросов касался целостности сигналов. Итак, вопрос.

Имеются две линии на идентичных платах. По одной линии передается бесконечная последовательность чередующихся единиц и нулей вот так: 101010101010101... По другой линии с такой же скоростью передаестя случайная последовательность единиц и нулей. Кодирование сигнала элементарное: единица - высокий уровень, ноль - низкий уровень, никаких изощрений. В каком случае больше вероятность возниконовения ошибки при передаче?
Бонусом была дана подсказка, что результатом ошибки будет служить межсимвольная интерференция.
В таких задачах, где нужно что-то с чем-то сравнить, в первую очередь ищем отличия.
Итак, идеализированно напряжения в линиях должны быть такими.
Ну на самом деле они не совсем такие. Все из-за того, что линия может быть представлена (как я уже отмечал в другой статье) RLCG-моделью.
Что же может "испоганить" наш сигнал?
Может, это катушка, о которой я писал в другой статье? Но она ведет себя плохо, когда происходит резкое переключение уровней. Начинает проявлять себя самоиндукция, которая "сопротивляется" как резкому увеличению тока, так его уменьшению. Таким образом фронты становятся "плавными". Вот я на цепи с утрированными параметрами немного помоделировал.
А что тут у нас около нулевого уровня?
Не успел ток выйти на нулевое значение, как пора уже снова расти до максимума.
Теперь посмотрим, что даст конденсатор.
Конденсатор с сопротивлениями линий образует классический RC-фильтр, который действует похожим образом с индуктивностью, рассмотренной выше.
Вот результат моделирования.

А вот, что будет, если увеличить емкость.

Фронтов почти не существует. Емкость не успевает разрядиться. Самое низкое наблюдаемое напряжение выше порогового. Все время в цепи определяется единица. Передача не осуществляется.
Перед тем, как вернуться к самой задаче обратим внимание еще на одну вещь. А именно на верх фронта.

Он тоже не доходит до максимального значения. Если уж совсем теоретизировать, то конденсатор будет заряжаться до значения напряжения источника бесконечное время.
Теперь, учитывая все изложенное выше, рассмотрим задачу. Пусть передача по первой линии осуществляется "почти нормально". То есть зарядись емкость на нановольт больше и на другом конце вроде как "ноль" определится как "единица".
Что же тогда будет происходить на второй линии? На ней явно будет возможность зарядить емкость больше, чем на первой линии, т. к. там могут присутствовать последовательности данных из нескольких единиц подряд. И вот начиная с какого-то верхнего значения напряжения емкость перестанет успевать разряжаться и произойдет ошибка детектирования бита.
Вывод: в линии, где происходит передача псевдослучайной последовательности бит выше вероятность возникновения ошибки. При передаче данных на высокой скорости стоит избегать "кучкования" бит с одним значением. Для этого существуют скрэмблеры, интерливеры и прочие блоки для повышения помехоустоичивости.
P.S.: я не могу точно сказать, что вносит больший вклад в смазывание фронтов, поэтому рассказывал на примере емкости, хотя рассуждения практически не поменялись бы, если бы ведущую роль в этом разрушительном для информации процессе играла индуктивность.
P.P.S.: и все-таки мне кажется, что ответстенная за это все именно емкость.

Комментариев нет:

Отправить комментарий