Хотя огромный mux / demux, безусловно, будет работать, подключение нескольких мультиплексоров 16: 1 - большая работа, и у нее есть некоторые ограничения, которые могут быть или не быть проблемой. Более традиционный подход заключается в использовании сдвиговых регистров. Используйте последовательный вход / параллельный выход для «ведущего» конца и параллельный вход / последовательный выход для принимающего конца. Хорошая вещь о сдвиговых регистрах состоит в том, что они могут быть легко соединены последовательно, чтобы сделать более длинный сдвиговый регистр. 256-битный или даже 1024-битный сдвиговый регистр вообще не является проблемой. С некоторой буферизацией последовательный поток может даже передаваться по кабелю на другую печатную плату (если это облегчает создание вашей вещи).
Есть много 8-битных регистра сдвига фишек , как 74xx597, но CPLD является гораздо лучше для этого. Но вам не нужен гигантский 256-контактный CPLD. Вместо этого вы можете использовать несколько небольших CPLD и объединить их в цепочку. Хотя я не занимался математикой, я вполне уверен, что использование CPLD более малого и среднего размера будет дешевле, чем одного большого CPLD - и вам не нужно беспокоиться о BGA.
Этот CPLD будет довольно интенсивным. Это означает, что обычная архитектура CPLD (например, используемая в Xilinx) не так хороша, как нечто более похожее на FPGA. У Altera и Lattice есть CPLD с гораздо большим количеством триггеров на доллар, чем у Xilinx.
Хотя у вас может не быть большого опыта работы с CPLD, этот дизайн очень прост, и преимущества использования CPLD огромны. Было бы очень полезно узнать, как запрограммировать CPLD для этого.
Кроме того, преимущества использования сдвигового регистра вместо мультиплексирования не так просто увидеть изначально. В основном вы получаете большую гибкость в том, как вы водите и чувствуете провода. Вы можете даже протестировать несколько ремней одновременно (если у вас достаточно сменных регистров). Все, что вы можете проверить с помощью мультиплексоров, можно сделать с помощью сдвиговых регистров, но сдвиговые регистры могут сделать больше. Недостатком сдвиговых регистров является то, что он медленнее, хотя все равно будет быстрее, чем вам нужно (IE, парень, подключающий и отключающий жгут, будет гораздо медленнее, чем время для тестирования с помощью сдвиговых регистров).
Я также должен сказать, что даже если вы используете CPLD, сдвиговые регистры все же проще, чем мультиплексоры. Главное, что они меньше - хотя, чтобы увидеть реальное преимущество / недостаток, вам нужно было бы сделать дизайн в обоих случаях и посмотреть, какой размер CPLD вам нужен. Это будет в значительной степени зависеть от типа используемой архитектуры CPLD, поэтому любые обобщения, сделанные с помощью Xilinx, не будут применяться к Altera.
Изменить: Ниже немного подробнее о том, как на самом деле выполнить тест с использованием сдвиговых регистров ...
Для выполнения теста вы можете игнорировать тот факт, что вы используете сдвиговые регистры, и только считать, что данные приводятся на «движущей стороне» и, надеюсь, читаются на «принимающей стороне». Как вы получили данные туда и обратно (через последовательный порт) в значительной степени не имеет значения. Важно то, что данные, которые вы можете использовать, абсолютно произвольны.
Данные, с которыми вы работаете, называются «тестовыми векторами». Данные, которые вы ожидаете прочитать, также являются частью тестовых векторов. Если кабель соединен с соотношением 1: 1, вы можете ожидать, что данные вождения и данные приема будут такими же, как и у вас. Если кабель не 1: 1, то он, очевидно, будет другим.
Если вы использовали подход, основанный на MUX, вы все еще используете тестовые векторы, но у вас нет контроля над типом тестового вектора. У муксов этот паттерн называется «Ходячие» или «Ходячие нули». Допустим, у вас есть 4-контактный кабель. При ходьбе вы должны следовать следующей схеме: 0001, 0010, 0100, 1000. Нули при ходьбе такие же, но перевернутые.
Для простого теста на непрерывность ходячие нули работают достаточно хорошо. В зависимости от того, как вы подключили кабель, существуют другие схемы, которые могут быть использованы для ускорения теста или для проверки конкретных вещей. Например, если некоторые выводы никогда не могут быть закорочены относительно других выводов, вы можете оптимизировать тестовый шаблон, чтобы не рассматривать эти случаи и, следовательно, работать быстрее. Работа с чем-то отличным от ходячих / нулей может усложнить работу программного обеспечения.
Окончательный метод генерации тестовых векторов сделан для тестирования JTAG. JTAG, также называемый граничным сканированием, является аналогичной схемой для тестирования соединений между микросхемами на печатной плате (и между печатными платами). Большинство чипов BGA используют JTAG. JTAG имеет сдвиговые регистры в каждой микросхеме, которые можно использовать для записи / считывания каждого вывода. Сложное и дорогое программное обеспечение просматривает список соединений для печатной платы и генерирует тестовые векторы. Сложный кабельный тестер мог бы сделать то же самое - но это было бы много работы.
К счастью, для вас есть гораздо более простой способ создания тестовых векторов. Вот что вы делаете ... Подключите заведомо исправный кабель к сдвиговым регистрам. Запустите паттерн "ходячие нули / единицы" через движущийся конец. Когда вы это сделаете, запишите, что видно на принимающей стороне. На простом уровне вы можете просто использовать это как свои тестовые векторы. Когда вы подсоединяете неисправный кабель и выполняете те же «гуляющие» / нули, данные, которые вы получаете, не будут соответствовать данным, которые вы записали ранее - и, следовательно, вы знаете, что кабель плохой. Это происходит под несколькими именами, но все имена представляют собой некоторую вариацию термина «обучение», например, самообучение или самообучение.
До сих пор это легко обрабатывает случай, когда один контакт на приводном конце идет к более чем одному контакту на приемном конце, но не обрабатывает другой случай, когда несколько контактов на приводном конце соединены вместе. Для этого вам понадобятся некоторые специальные средства для предотвращения повреждения из-за конфликта шины, и все ваши контакты регистра сдвига должны быть двунаправленными (IE, функционирующий как драйвер и приемник). Вот что вы делаете:
Поместите понижающий резистор на каждый контакт. Что-то около 20 кОм должно быть в порядке.
Поместите последовательный резистор между CPLD и кабелем. Что-то около 100 Ом. Это поможет предотвратить повреждение от электростатического разряда и прочего. Заземление 2700 пФ на землю (со стороны выводов CPLD 100-омного резистора) также поможет с ESD.
Запрограммируйте CPLD так, чтобы он приводил только к высокому сигналу, а не к низкому. Если ваши выходные данные равны «0», то CPLD будет трижды устанавливать этот вывод и позволять понижающему резистору понижать линию. Таким образом, если несколько выводов CPLD выводят один и тот же провод на кабеле высокого уровня, то никакого повреждения не произойдет (поскольку CPLD также не будет выводить один и тот же провод низкого уровня).
Каждый пин-код является как драйвером, так и приемником. Таким образом, если у вас есть 256-контактный кабель, то ваши сдвиговые регистры будут иметь 512 бит для драйвера и 512 бит для приемника. Вождение и прием могут осуществляться в одном и том же CPLD, поэтому сложность PCB из-за этого не меняется. У вас будет 3 или 4 триггера на каждый кабельный вывод в этом CPLD, поэтому планируйте соответственно.
Затем вы выполняете ту же схему «ходячих / нулей», сравнивая полученные данные с ранее записанными. Но теперь он будет обрабатывать все виды произвольных соединений в жгуте проводов.