Незважаючи на те, що величезний мукс / демукс, безумовно, спрацює, підключення купу 16: 1 муксів - це велика робота і має деякі обмеження, які можуть бути, а можуть і не бути проблемою. Більш звичайним підходом було б використання регістрів змін. Використовуйте регістр послідовного введення / паралельного виходу для кінця "водіння" та паралельний вхід / серійний вихід для кінця прийому. Приємна річ у реєстрах змін - це те, що вони можуть бути легко ланцюговими, щоб зробити довший регістр змін. 256-бітний або навіть 1024-бітний регістр зсуву зовсім не є проблемою. З деякою буферизацією послідовний потік можна навіть передати по кабелю на іншу друковану плату (якщо це полегшить вашу справу).
Існує багато 8-бітових фішок реєстрації зсуву, таких як 74xx597, але CPLD набагато кращий для цього. Але вам не потрібен гігантський 256-контактний CPLD. Натомість ви можете використовувати декілька менших CPLD та з'єднати їх між собою. Хоча я ще не займався математикою, я досить впевнений, що використання більшої кількості малих та середніх розмірів CPLD буде дешевше, ніж один великий CPLD - і вам не доведеться турбуватися про BGA.
Цей CPLD був би досить інтенсивним Flip-Flop. Це означає, що нормальна архітектура CPLD (наприклад, те, що використовує Xilinx) не настільки добре, як щось, що є більш FPGA-ish. У Альтера та Решітки є CPLD, які мають набагато більше тригерів за долар, ніж у Xilinx.
Хоча ви, можливо, не маєте багато досвіду роботи з CPLD, цей дизайн дуже простий, а переваги використання CPLD величезні. Було б дуже вартим вашого часу, щоб навчитися програмувати CPLD для цього.
Також переваги використання регістру зсуву замість mux спочатку не легко помітити. Переважно ви отримуєте велику гнучкість у тому, як керуєте та відчуваєте провід. Ви навіть можете протестувати декілька джгутів одночасно (якщо у вас достатньо регістрів змін). Все, що ви можете протестувати з muxes, можна зробити з регістрами змін, але регістри змін можуть зробити більше. Однією стороною, яка переходить до регістрів зміщення, є те, що вона повільніше, хоча все одно буде швидшою, ніж вам потрібно (IE, хлопець, який з'єднує і відключає джгути, буде набагато повільніше, ніж час тестування з регістрами зсуву).
Я також повинен сказати, що навіть якщо ви використовуєте CPLD, регістри зрушення все ще простіші, ніж мукси. Головне, вони менші - хоча для того, щоб побачити фактичну перевагу / недолік, вам доведеться насправді зробити дизайн обох і побачити, який розмір CPLD вам потрібен. Це буде досить залежно від типу архітектури CPLD, що використовується, тому будь-які узагальнення, зроблені за допомогою Xilinx, не стосуються Altera.
Редагувати: Нижче трохи детальніше про те, як насправді виконати тест за допомогою регістрів зрушень ...
Виконуючи тест, ви можете проігнорувати той факт, що ви використовуєте регістри зсуву, і лише вважати, що дані ведуться на "рушійний кінець" і, сподіваємось, читаються на "приймальному кінці". Як ви отримали дані там і назад (через серію), в значній мірі не має значення. Важливим є те, що дані, які ви можете керувати, є абсолютно довільними.
Дані, якими ви керуєте, називаються "тестовими векторами". Дані, які ви очікуєте прочитати, також є частиною тестових векторів. Якщо кабель проводиться з провідним зв'язком 1: 1, тоді ви очікуєте, що дані про рух та дані прийому будуть такими ж, як і для ваших приводів. Якщо кабель не 1: 1, то, очевидно, було б інакше.
Якщо ви використовували підхід на основі MUX, ви все ще використовуєте тестові вектори, але у вас немає контролю над видом тестового вектора. З мюксами візерунок називається «Ходячи», або «Ходячи нулями». Скажімо, у вас 4-контактний кабель. Для тих, хто ходить, ви їдете за такою схемою: 0001, 0010, 0100, 1000. Нулі ходіння однакові, але перевернуті.
Для простого тесту на безперервність ходіння / нулі працює досить добре. Залежно від способу підключення кабелю, існують інші схеми, які можна зробити для прискорення тесту або для перевірки конкретних речей. Наприклад, якщо деякі штифти ніколи не можна зафіксувати проти інших штифтів, тоді ви можете оптимізувати тестову схему, щоб не дивитись на ці випадки і, таким чином, працювати швидше. Справа з чимось іншим, ніж кроки / нулі, може ускладнитися з боку програмного забезпечення, з якого можна впоратися.
Кінцевий метод генерації тестових векторів проводиться для тестування JTAG. JTAG, що також називається граничним скануванням, є аналогічною схемою тестування з'єднань між мікросхемами на друкованій платі (і між платами). Більшість фішок BGA використовують JTAG. JTAG має регістри зсуву у кожному чіпі, які можна використовувати для керування / читання кожного контакту. Складна і дорога частина програмного забезпечення розглядає мережевий список для друкованої плати і генерує тестові вектори. Витончений тестер кабелів міг би зробити те саме - але це було б багато роботи.
На щастя, для вас існує НАЙКРАЩИЙ ПРОСТИЙ спосіб генерувати тестові вектори. Ось що ви робите ... Підключіть відомий хороший кабель до регістрів зсуву. Проведіть прогулянковий нуль / ті схеми через ведучий кінець. Виконуючи це, запишіть побачене на приймальному кінці. На простому рівні, ви можете просто використовувати це як свої тестові вектори. Якщо ви підключите невдалий кабель і виконайте ті ж кроки / нулі, отримані вами дані не збігаються з тими, які ви записали раніше - і тому ви знаєте, що кабель поганий. Це стосується декількох назв, але всі назви є деякою варіацією терміна "навчання", наприклад, самонавчання або автонавчання.
Поки це легко обробляє випадок, коли один штифт на ведучому кінці переходить до більше одного штифта на приймальному кінці, але не обробляє інший випадок, коли кілька штифтів на ведучому кінці з'єднані разом. Для цього вам потрібні спеціальні речі, щоб запобігти пошкодженню конфлікту в шині, а всі шпильки вашого регістру зміни повинні бути двонаправленими (IE, функціонуючи як драйвер, так і приймач). Ось що ви робите:
Покладіть висувний резистор на кожен штифт. Щось близько 20K до 50k Ом повинно бути добре.
Покладіть серійний резистор між CPLD і кабелем. Щось близько 100 Ом. Це допоможе запобігти пошкодженню ШОЕ та інших матеріалів. Заглушка 2700 пФ на землю (на стороні штифта CPLD резистора 100 Ом) також допоможе з ESD.
Програмуйте CPLD так, щоб він подавав сигнал тільки високо, ніколи не знижуючи низький. Якщо ваші вихідні дані дорівнюють "0", то CPLD три-станить цей штифт і дозволить знижувальному резистору знизити лінію. Таким чином, якщо кілька штифтів CPLD ведуть один і той же провід по кабелю, то пошкодження не відбудеться (оскільки CPLD також не буде запускати той же провід низько).
Кожен штифт - це і драйвер, і приймач. Отже, якщо у вас є 256-контактний кабель, то ваші регістри зсуву становитимуть 512 біт для драйвера та 512 біт для приймача. Керування автомобілем та отримання можуть здійснюватися в одному CPLD, тому складність друкованої плати не змінюється через це. У цьому CPLD у вас буде 3 або 4 відкидних шланга на штир кабелю, тому плануйте відповідно.
Потім ви виконуєте ту саму схему прогулянкових / нулів, порівнюючи отримані дані з попередньо записаними. Але тепер він буде обробляти всілякі довільні з'єднання всередині джгута.