Большие мультиплексоры / селекторы данных


10

Я ищу мультиплексор IC с 128: 1 или более входов (256 было бы неплохо). Я бы подумал, что такое устройство будет довольно распространенным, но мне трудно его найти. Может быть, я смотрю в неправильных местах, но почему-то мне кажется, что я что-то упускаю - возможно, большие входные мультиплексоры не так часто используются? Если так, какова альтернатива?

Макс. Мне удалось найти это верный старый 74150 с 16 входами.

Я понимаю, что могу создать большой мультиплексор, комбинируя 16 входных мультиплексоров - но я надеюсь на более интегрированное решение.


Я разрабатываю схему, которая может проверить на обрыв и короткое замыкание в автомобильной электропроводке. Типичный жгут может содержать около 200 проводов. В настоящее время схема использует 16 мультиплексоров для обработки 128 проводов.

Мультиплексоры подключены к одному 16-входному мультиплексору, который, в свою очередь, подключен к разъему uC. Аналогично, на другом конце 16 демультиплексоров. Демультиплексоры переключают провода на напряжение. В то же время этот провод подключается к одному из входов uC через мультиплексор.

Если провод в порядке, ОК должен видеть высокий на своем входе. ОК проверяет все остальные провода. Если какой-либо из них высокий, это означает, что между этими двумя проводами есть короткое замыкание.

Примечание: эта схема не была разработана мной. Это было сделано в 2003 году. Я просто хочу улучшить эту схему. Также обратите внимание, что ни один из жгутов проводов не содержит шину данных CAN или какую-либо другую шину. Это просто простые провода для питания и сигналов.

Вот очень грубая блок-схема, которую я быстро сделал только для этого поста. Я надеюсь, что это проясняет проблему, так как английский не является моим родным языком, и у меня есть проблемы с объяснением вещей через текст. Хотя диаграмма не очень хорошая, я надеюсь, что она улучшит ситуацию. Линии, идущие в сторону от demux и mux от MCU, являются адресными линиями.

Обратите внимание, что один из проводов разделен на 3. Я сделал это намеренно, чтобы показать, что некоторые соединения один-ко-многим, а не просто один-к-одному. Самый сложный, который я видел, это провод, разделенный на 60 соединений. Вот почему у demux и mux есть отдельные адресные строки. Демукс может быть при входе №. 20, тогда как мультиплексор может переключаться между 20,21,22 и т. Д. Проверьте все линии, которые соединены от линии 20.

введите описание изображения здесь

Если вы считаете, что есть лучший способ сделать это, пожалуйста, дайте мне знать.


Вы ищете 128: 1 или 128: 2: 1?
Majenko

128: 1. Извините, я забыл упомянуть. Приношу извинения.
Саад

@saad Мой опыт показал, что почти каждый раз, когда кто-то просит такого рода вещи, это потому, что они делают что-то в корне неправильно. Я предлагаю указать, что вы пытаетесь достичь, а не то, что вы думаете, решение. Таким образом, мы могли бы предложить вам лучшее решение, чем каскадирование групп 16: 1.

@ Дэвид Кесснер, пожалуйста, смотрите редактирование. Я на самом деле поинтересовался дизайном на этом сайте несколько недель назад, но получил мало откликов. Буду признателен за любую форму на входе.
Саад

1
В зависимости от того, как быстро, как часто и с какой степенью уведомления будут переключаться входы, использование каскадных мультиплексоров может значительно облегчить маршрутизацию. Вместо того, чтобы направлять 256 сигналов в одну точку на плате, можно направить 16 сигналов в каждую из 16 точек, направить один сигнал из каждой из этих точек в микросхему с 16 входами и направить четыре общих сигнала ко всем мультиплексоры. Использование одной микросхемы теоретически позволило бы получить любой из 256 сигналов от входа к выходу с одной «задержкой затвора», соответствующей двум последовательным транзисторам (N-тип для падающего фронта; P для нарастания), но ...
Суперкат

Ответы:


12

Хотя огромный 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, функционирующий как драйвер и приемник). Вот что вы делаете:

  1. Поместите понижающий резистор на каждый контакт. Что-то около 20 кОм должно быть в порядке.

  2. Поместите последовательный резистор между CPLD и кабелем. Что-то около 100 Ом. Это поможет предотвратить повреждение от электростатического разряда и прочего. Заземление 2700 пФ на землю (со стороны выводов CPLD 100-омного резистора) также поможет с ESD.

  3. Запрограммируйте CPLD так, чтобы он приводил только к высокому сигналу, а не к низкому. Если ваши выходные данные равны «0», то CPLD будет трижды устанавливать этот вывод и позволять понижающему резистору понижать линию. Таким образом, если несколько выводов CPLD выводят один и тот же провод на кабеле высокого уровня, то никакого повреждения не произойдет (поскольку CPLD также не будет выводить один и тот же провод низкого уровня).

  4. Каждый пин-код является как драйвером, так и приемником. Таким образом, если у вас есть 256-контактный кабель, то ваши сдвиговые регистры будут иметь 512 бит для драйвера и 512 бит для приемника. Вождение и прием могут осуществляться в одном и том же CPLD, поэтому сложность PCB из-за этого не меняется. У вас будет 3 или 4 триггера на каждый кабельный вывод в этом CPLD, поэтому планируйте соответственно.

Затем вы выполняете ту же схему «ходячих / нулей», сравнивая полученные данные с ранее записанными. Но теперь он будет обрабатывать все виды произвольных соединений в жгуте проводов.


Большое спасибо. Я собираюсь начать читать больше об этом прямо сейчас.
Саад

Я думал об этом. Вы сказали использовать SIPO для приводной части и PISO для RX. Теперь, если я правильно понимаю, я должен SIPO на выходной контакт на MCU и PISO на входной контакт. Если предположить, что все провода один к одному, то я должен отправить некоторые данные через жгут, и если я получу эти данные обратно, то провода пройдут тест. Это правильный метод? Кроме того, как я должен изменить это, чтобы обрабатывать строки, которые разбиваются на более чем 1 на принимающей стороне? Это то, что вы предлагали, или я совершенно не в курсе?
Саад

Думая больше об этих линиях - предположим, у нас есть 4 входных провода, и один из них (4-й) разделен на 2 провода. Таким образом, у нас есть 5 проводов на конце RX. Предположим, что мы сдвинули биты 0101, если мы получим обратно 01011, то у нас все провода в порядке. Но предположим, что 3-й бит высокий (01111), тогда мы знаем, что 3-й провод замкнут накоротко. Но это не скажет нам, с каким проводом его короткое замыкание. Возможно, лучшим способом было бы просто позволить "1" рябь в регистрах. Итак, на старте у нас 1000 и мы рек. 10000. Затем 1 рябь, и мы получаем 0100 и 01000. Пока мы не достигнем последнего бита, 0001.
Saad

Для этого случая мы знаем, что должны получить 00011, так как последний разделен на две части. Если на 4-м проводе есть короткое замыкание, и мы отправляем 0010, то мы получим rx 00111 - что, как мы знаем, неверно, и мы можем отобразить ошибку, указывающую, где происходит короткое замыкание. Этот метод звучит хорошо для вас?
Саад

@saad Я обновил свой ответ гораздо более подробно, чтобы покрыть ваш комментарий.

7

Я не думаю, что существуют решения с одним чипом. Они будут дорогими из-за большого количества операций ввода-вывода и, вероятно, также из-за низкого спроса. Большинство конструкций будут каскадными 8 или 16 входными мультиплексорами.

Если вы действительно хотите более интегрированное решение, вам придется искать CPLD . Существуют CPLD с более чем 256 входами / выходами , например Xilinx CoolRunner XC2C512 , который доступен в версии BGA с 270 пользовательскими входами / выходами . Имейте в виду, что для мультиплексора на 256 входов вам потребуются дополнительные 8 входов для сигналов выбора, конечно же, выход и, возможно, также включение, поэтому 270 входов / выходов не будет слишком большим.

Вы также должны иметь в виду, что ваша упаковка, скорее всего, будет BGA ; не уверен, что тебе понравится. В любом случае, я еще не видел QFP с примерно 300 контактами ...


2
Спасибо. У меня было чувство, что это будет так. Я думаю, что я просто сделаю большее мультиплексирование из 16 входных.
Саад

@saad - это может показаться вам лучшей ставкой, если только вы не захватите PLD (количество выводов, а не логические блоки / логические блоки), как это было предложено (преимущества более эффективны / размерны, на самом деле потребуется очень мало опыта с ними или HDL, но пакет действительно был бы болезненным - доска для разработчиков?)
Оли Глейзер

У меня действительно НЕСКОЛЬКО опыта работы с HDL и FPGA (Handel-C - с которым было неприятно работать) в школе. Я никогда не работал над CPLD, хотя. Но я никогда не путался с пакетом BGA, и это действительно кажется болью. РЕДАКТИРОВАТЬ: XC2C512 также доступен в PQFP - хотя я теперь задаюсь вопросом, может ли кто-то с таким же небольшим опытом, как мой в HDL и FPGA, работать с такими устройствами. Это также довольно дорого - стоит 60 фунтов в Farnell UK.
Саад

@saad - PQFP имеет только 173 пользовательских ввода-вывода. Мой коллега запрограммировал свой CPLD (простое приложение: адресный декодер) в Abel , что на первый взгляд кажется намного проще, чем VHDL или Verilog. Вероятно, не так мощно, как VHDL / Verilog, но это не должно быть проблемой для вашего приложения
Стивенв

@stevenvh: Абель в некотором роде немного уродлив, но определение поведения выводов в терминах часов и уравнений иногда может быть гораздо более естественным, чем более подробное написание слов в VHDL или Verilog. Интересно, почему инструменты не поддерживают более хороший язык, основанный на уравнениях?
суперкат

3

Хотя CPLD / FPGA кажется правильной идеей для большого количества выводов, автомобильный жгут обычно будет физически достаточно разложенным, а разъемы - умеренно большими. Поэтому вместо того, чтобы разветвляться от устройства с большим количеством выводов на большое количество разъемов, Модульная система с, скажем, 16 ввода-выводами на сдвиговых регистрах, связанных небольшим количеством линий синхронизации / сдвига, может быть более подходящей, а также очень масштабируемой.
Что-то еще нужно учитывать при тестировании кабеля: вы можете использовать цепочку резисторов для подачи, скажем, 16 напряжений на 16 линий, и аналоговый мультиплексор для проверки напряжения на каждом конце. Это обнаружит открытия и шорты и будет дешевым.


Вы хотите сказать, что я должен реализовать сдвиговые регистры в 16-битных блоках на CLPD? Я, скорее всего, не буду использовать один большой CPLD для выполнения всей работы. Я хочу избегать BGA-пакетов и поэтому буду придерживаться меньших CLPD. В настоящее время для каждой новой жгута проводов требуется новая «плата соединителей», на которой установлены все соединители. Эти соединители затем, в свою очередь, подключаются к схеме, описанной в предыдущем вопросе. В новой системе мы собираемся сохранить этот механизм - с какими проблемами я столкнусь, если подключу большое количество IO к одному чипу?
Саад

1

Использование сдвигового регистра для чтения большого количества входных данных - хороший пример. Однако поскольку Дэвид Кесснер предложил использовать CPLD, я бы предложил другой шаблон. Предположим, вы хотите, чтобы каждый CPLD обрабатывал 32 входа. Назначьте каждому CPLD общий вход синхронизации, отдельный вход разрешения, выход разрешения (который связан с входом включения следующего чипа) и вывод общих данных. Каждая микросхема имеет пятибитный счетчик и индикатор переполнения. Когда вход разрешения сброшен, очистите счетчик и индикатор переполнения. Когда разрешающий вход подтвержден, но индикатор переполнения не установлен, выведите состояние входного бита, указанного счетчиком. Когда тактовый импульс получен и чип включен, и счетчик не переполнен, увеличьте счетчик. Бит переполнения будет подавать на выход «enable». Общий эффект всей этой логики состоит в том, что можно получить всего лишь около 8 макроэлементов для обработки 32 входов. Таким образом, можно уместить в CPLD другие функции, которые требуют больше вычислений или регистров, но не требуют большого количества операций ввода-вывода.

Если у вас есть CPLD с цепями держателя выводов, можно использовать аналогичный подход для вывода, особенно если есть способ вывода вывода из одного макроячейки на несколько выводов (без необходимости тратить макроячейку на каждый вывод). Микросхема будет иметь общие входы синхронизации и данных, вход разрешения и выход разрешения. Внутренне, это потребовало бы пятибитного счетчика, дополнительной копии нижнего бита счетчика, зафиксированного на противоположном фронте тактового сигнала от первых пяти, бит переполнения и сигнал общих данных, который подал бы все выводы. Семь макроэлементов, а также большое количество было необходимо для копирования сигнала входных данных на все контакты (элементы управления выходом для контактов будут служить в качестве защелки).

Одна прекрасная особенность этого подхода (который, между прочим, часто используется в драйверах ЖК-дисплеев) состоит в том, что можно иметь несколько линий данных, перемещающих данные параллельно, и при этом все же требуется только один последовательный провод между микросхемами. Это также позволяет исключить замыкающую цепь с каждого входа или выхода.


1

Как это звучит для идеи, если предположить, что наибольшая группа контактов, которые должны быть подключены, это, например, 20 контактов: используйте набор микросхем драйвера привода регистра сдвига с открытым коллектором (один выход на контакт), каждый из которых может утопить не менее 2 мА; подключите резистор 1 кОм от каждого контакта к общей точке и используйте схему, источник которой составляет одно вольт при 20,1 мА (хорошо, если напряжение выше, когда ток ниже, при условии, что оно составляет один вольт при 20,1 мА), и укажите, является ли попытка делается, чтобы привлечь больше этой суммы. Для некоторых конфигураций кабеля может потребоваться небольшое количество «запасных» выводов, которые имеют резисторы 1К, но не подключены к кабелю. Может быть желательно иметь запасной контакт с резистором 1 кОм, один с резистором 500 Ом (или двумя параллельными 2 кОм), один с резистором 250 Ом (четыре 1 кОм)

Чтобы проверить кабель, сформулируйте сценарии, которые должны привести к тому, что ровно двадцать выводов будут опущены, и сценарии, которые должны привести к тому, что ровно двадцать выводов будут опущены (запасные контакты могут быть полезны для этого), и подтвердите, что сценарии с двадцатью выводами не сообщается, что используется более 20,5 мА, но есть сценарии с 21-контактным разъемом.

Предположим, например, что у вас есть жгут проводов, который должен соединять 1-2, 3-4, 5-6 и т. Д. До 39-40. Проверьте наличие коротких замыканий, выбрав различные комбинации из десяти пар выводов, и снизьте обе пары каждого вывода. У вас будет 20 низких пинов, и никакие пины не должны быть низкими, кроме тех, которые вы ведете, поэтому ток всегда должен быть ниже 20 мА. Если все закончится, что-то замкнуто. Если можно найти какую-либо комбинацию из десяти пар, которая не считывает перегрузку по току, то по одной отключите активную пару и включите другую пару, пока что-то не станет перегрузочным; последняя включенная пара замкнута на что-то, чего не должно быть.

Проверьте наличие открытий, опустив запасной штифт на низком уровне, а затем выбрав различные комбинации из десяти пар, ведя по одному штифту из каждой пары (иногда нечетный, а иногда четный). Если есть какие-либо размыкания, такое действие приведет к тому, что менее 21 булавки будут переведены в низкий уровень, и, таким образом, будет считан недостаточный ток. Если это произойдет, то по одному, возьмите каждую пару, где проходит один провод, и вместо этого возьмите оба. Если текущее значение превышает 20,1 мА, эта пара открыта.

Можно использовать CPLD для этого приложения, но система, как я описал, может быть лучше. Это может быть дополнительно улучшено путем добавления схемы для фактического измерения тока (а не просто с помощью индикатора превышения / уменьшения). Такое измерение позволит установить значения допуска для сопротивления.


1

Это то, что вы ищете?

Maxwell 81840 - 128 канальный мультиплексор


Возможно нет. Это аналоговый мультиплексор, хотя вы также можете мультиплексировать цифровые сигналы с ним, если будете следить за скоростью устройства. Также это радикальное устройство, будет дорого.
Стивенвх

Добро пожаловать! Стивен прав, может быть, это не подходящее решение, но хороший улов! Может быть, добавить описание компонента ниже ссылки
Clabacchio

Спасибо, Клабаккио. Я не уверен, насколько подробно я могу описать компонент. Я никогда не использовал его раньше, и у меня пока нет достаточного опыта.
Даниэль

милая фишка :) Я хочу использовать ее в проекте цифрового пианино, но если вы не можете найти цену, просто погуглив, вы не можете себе этого позволить!
Эндрю Вагнер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.