Великі мультиплексори / селектори даних


10

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

Макс. Мені вдалося знайти надійний ol '74150 з 16 входами.

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


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

Мультиплексори підключені до одного 16-вхідного мультиплексора, який, в свою чергу, підключений до UC. Так само на іншому кінці є 16 демультиплексорів. Демультиплексори перемикають дроти на напругу. Одночасно цей провід перемикається на один з входів UC через mux.

Якщо з дротом все гаразд, на вході повинно видно високе значення. Потім UC перевіряє всі інші дроти. Якщо будь-який з них високий, це означає, що між цими двома проводами є короткий проміжок.

Примітка: ця схема не була розроблена мною. Це було зроблено в 2003 році. Я просто прагну вдосконалити цю схему. Також зауважте, що жоден з електропроводів не містить шини даних CAN або будь-якого іншого типу шини. Це просто прості дроти для живлення та сигналів.

Ось дуже приблизна блок-схема, яку я швидко зробив саме для цієї посади. Я сподіваюся, що це робить проблему зрозумілішою, оскільки англійська мова не є моєю першою мовою, і у мене виникають проблеми з поясненням тексту за допомогою тексту. Навіть незважаючи на те, що діаграма не дуже хороша, я сподіваюся, що вона покращує ситуацію. Рядки, що йдуть бічними шляхами в demux та mux від MCU, - це адреси адреси.

Зверніть увагу, що один з проводів розділений на 3. Я зробив це навмисно, щоб показати, що деякі з'єднання один-на-багато, а не просто-на-один. Найскладніший, який я бачив, - це дріт, розбитий на 60 стиків. Ось чому demux та mux мають окремі рядки адреси. Демукс може бути на вході ні. 20 тоді як mux може перемикатися між 20,21,22 і т.д. Перевірте всі лінії, з'єднані з лінії 20.

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

Якщо ви вважаєте, що є кращий спосіб спроектувати це, будь ласка, дайте мені знати.


Шукаєте 128: 1 або 128 разів 2: 1?
Majenko

128: 1. Вибачте, що забув згадати. Прошу пробачення.
Саад

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

@David Kessner, будь ласка, дивіться редагування. Я насправді запитував про дизайн на цьому сайті кілька тижнів тому, але мало відповіді. Буду вдячний за будь-яку форму на вході.
Саад

1
Залежно від того, наскільки швидко, як часто і з якою мірою помітитимуть комутацію входів, використання каскадних мультиплексорів може значно полегшити маршрутизацію. Замість того, щоб направляти 256 сигналів на одне місце на платі, можна було спрямувати 16 сигналів у кожну з 16 точок, один сигнал від кожного з них до 16-вхідного мікросхеми та чотири загальних сигнали для всіх мультиплексори. Використання однієї мікросхеми теоретично дозволило б отримати будь-який із 256 сигналів від входу до виходу з одним "затримкою затвора", що відповідає двом послідовним транзисторам (N-тип для падіння краю; P для підйому), але ...
supercat

Відповіді:


12

Незважаючи на те, що величезний мукс / демукс, безумовно, спрацює, підключення купу 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, функціонуючи як драйвер, так і приймач). Ось що ви робите:

  1. Покладіть висувний резистор на кожен штифт. Щось близько 20K до 50k Ом повинно бути добре.

  2. Покладіть серійний резистор між CPLD і кабелем. Щось близько 100 Ом. Це допоможе запобігти пошкодженню ШОЕ та інших матеріалів. Заглушка 2700 пФ на землю (на стороні штифта CPLD резистора 100 Ом) також допоможе з ESD.

  3. Програмуйте CPLD так, щоб він подавав сигнал тільки високо, ніколи не знижуючи низький. Якщо ваші вихідні дані дорівнюють "0", то CPLD три-станить цей штифт і дозволить знижувальному резистору знизити лінію. Таким чином, якщо кілька штифтів CPLD ведуть один і той же провід по кабелю, то пошкодження не відбудеться (оскільки CPLD також не буде запускати той же провід низько).

  4. Кожен штифт - це і драйвер, і приймач. Отже, якщо у вас є 256-контактний кабель, то ваші регістри зсуву становитимуть 512 біт для драйвера та 512 біт для приймача. Керування автомобілем та отримання можуть здійснюватися в одному CPLD, тому складність друкованої плати не змінюється через це. У цьому CPLD у вас буде 3 або 4 відкидних шланга на штир кабелю, тому плануйте відповідно.

Потім ви виконуєте ту саму схему прогулянкових / нулів, порівнюючи отримані дані з попередньо записаними. Але тепер він буде обробляти всілякі довільні з'єднання всередині джгута.


Дуже дякую. Я зараз почну читати докладніше про це.
Саад

Я про це думав. Ви сказали використовувати SIPO для кінця водіння та PISO для rx. Тепер, якщо я правильно розумію, я повинен SIPO на вихідний контакт MCU та PISO на вхідному штифті. Якщо припустити, що дроти всі один на один, то я повинен надіслати деякі дані через джгут, і якщо я отримаю ці дані назад, то дроти пройдуть тест. Це дійсний метод? Крім того, як я можу змінити це для обробки ліній, які розділені на більше 1 на кінці прийому? Це те, що ви запропонували, чи я зовсім не в курсі?
Саад

Якщо розмістити більше на цих лініях - припустимо, у нас є 4 вхідні дроти, і один з цих (четвертих) розпадається на 2 дроти. Отже, ми маємо 5 проводів на кінці rx. Припустимо, ми витісняємо біти 0101, якщо ми отримуємо назад 01011, то ми з усіма проводами в порядку. Але припустимо, що 3-й біт високий (01111), тоді ми знаємо, що 3-й провід є короткозамкненим. Але це не скаже нам, з яким проводом його коротке замикання. Можливо, кращим способом було б просто дозволити пульсацію "1" через регістри. Отже, на початку у нас є 1000, і ми реквізуємо. 10000. Потім 1 пульсація наскрізь, і ми отримуємо 0100 та 01000. До досягнення останнього шматочка, 0001.
Саад

У цьому випадку ми знаємо, що нам слід отримати 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, і це дійсно здається болем. EDIT: XC2C512 також доступний у PQFP - хоча мені зараз цікаво, чи може хтось із таким меншим досвідом, як у мене в HDL та FPGA, працював на таких пристроях. Це також досить дорого - його вартість коштує 60 фунтів стерлінгів у Фарнелл, Великобританія.
Саад

@saad - PQFP має лише 173 вводу / виводу користувача. мій колега запрограмував свій CPLD (простий додаток: дешифратор адреси) в Авелі , який з вигляду здається набагато простішим, ніж VHDL або Verilog. Можливо, не настільки потужний, як VHDL / Verilog, але це не повинно бути проблемою для вашої заявки
stevenvh

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

3

Хоча CPLD / FPGA здається правильною ідеєю для високого підключення штифтів, автомобільний джгут, як правило, буде фізично досить розкинутим, а роз'єми помірно великими, тому замість того, щоб розвісити з великого штифтового пристрою велику кількість роз'ємів, Модульна система з, скажімо, 16 введеннями в регістри зсуву, пов'язаних між собою низькою кількістю ліній тактових / зсувних передач, може бути більш підходящою, а також дуже масштабованою.
Щось ще слід враховувати для тестування кабелю, ви можете використовувати резисторний ланцюг, щоб застосувати, скажімо, 16 напруг до 16 ліній, і аналоговий мукс для перевірки напруги на кожному з іншого кінця. Це виявило б відкриті і шорти, і було б дешевим.


Ви хочете сказати, що я повинен реалізувати регістри зсуву в 16-бітових блоках на CLPD? Я, швидше за все, не буду використовувати один великий CPLD, щоб виконати всю роботу. Я хочу уникати пакетів BGA і тому, швидше за все, дотримуватимуться менших CLPD. На даний момент для кожної нової електропроводки, яка вимагає нової «з'єднувальної плати», розроблено, і на цьому встановлені всі з'єднувачі. Ці з'єднувачі потім по черзі підключаються до ланцюга, описаного у вищенаведеному питанні. У новій системі ми збережемо цей механізм - з якими проблемами я зіткнуться, якщо підключуватимуть велику кількість IO до однієї мікросхеми?
Саад

1

Використання регістра зсуву для читання багато входів є приємною схемою. Оскільки Девід Кесснер запропонував використовувати CPLD, я б запропонував інший шаблон. Припустимо, ви хочете, щоб кожен CPLD обробляв 32 входи. Дайте кожному CPLD загальний вхід тактового сигналу, індивідуальний вхід для ввімкнення, вихідний сигнал увімкнення (який пов'язаний із входом для включення наступного мікросхеми) та спільний вихід даних. Кожен чіп має п'ятибітний лічильник та індикатор переливу. Коли вхід увімкнено, зменшіть індикатор лічильника та переливу. Коли введений вхід увімкнено, але індикатор переливу не встановлений, виведіть стан вхідного біта, вказаний лічильником. Коли надходить тактовий імпульс і чіп увімкнено, а лічильник не переповнений, натисніть на лічильник. Біт переповнення подає вихід "включення". Чистий ефект усієї цієї логіки полягає в тому, що можна дістатись, потребуючи лише близько 8 макроелементів для обробки 32 входів. Таким чином, одна людина може бути в змозі вписатись у CPLD інші функції, які є більш обчислювальними або реєструють, але не потребують великого вводу / виводу.

Якщо у вас є CPLD із схемами штифтового зберігача, можливо, ви зможете використати аналогічний підхід до виводу, особливо якщо є спосіб вивести вихід з однієї макроелементи на кілька штифтів (без необхідності витрачати макроелемент на кожен штифт). Чип мав би спільні тактові та вхідні дані, ввімкнення включення та вихідний сигнал. Внутрішньо знадобиться п'ятибітний лічильник, додаткова копія нижнього біта лічильника, зафіксованого на протилежному краю годинника від першої п’ятірки, біт переповнення та загальний сигнал даних, який би живив усі штифти. Сім макроелементів, а ще скільки потрібно було скопіювати сигнал вхідних даних на всі штифти (керування виведеннями для штифтів слугуватиме фіксатором).

Однією прекрасною особливістю цього підходу (який, до речі, часто використовується у драйверах РК), є те, що можна мати кілька рядків даних, що рухаються паралельно, і все ще вимагає лише одного дротяного ланцюга між чіпами. Це також дозволяє усунути замикаючий ланцюг з кожного входу або виходу.


1

Як це звучить для ідеї, якщо припустити, що найбільша група штифтів, які повинні бути підключені, це, наприклад, 20 контактів: використовуйте купу мікросхем світлодіодних драйверів відкритого колектора (один вихід на штифт), кожен з яких може раковина не менше 2mA; підключіть 1K резистор від кожного штиря до загальної точки і використовуйте ланцюг, який джерелом одного вольта при 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-канальний мультиплексор


Напевно, ні. Це аналоговий мультиплексор, хоча, ймовірно, ви можете також мультиплексувати цифрові сигнали також, якщо стежите за швидкістю пристрою. Також це рад-жорсткий пристрій, буде дорого.
stevenvh

Ласкаво просимо! Стівен має рацію, це може бути не підходящим рішенням, але приємний вилов! Можливо, додайте опис компонента під посиланням
clabacchio

Спасибі клабакчіо. Я не впевнений, наскільки детальніше я можу описати компонент. Я ніколи не використовував його, і ще не маю достатнього досвіду.
Даніель

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