大型多路复用器/数据选择器


10

我正在寻找具有128:1或更多输入(256个就很好)的多路复用器IC。我以为这样的设备会很常见,但是我很难找到它。可能是我看错地方了,但是我不知为何缺少了一些东西-也许不经常使用大型输入多路复用器?如果是这样,还有什么选择?

最高 我能够找到的是带有16个输入的可信赖的ol'74150。

我知道我可以通过组合多个16输入多路复用器来构建一个大型多路复用器-但我希望有一个更集成的解决方案。


我正在设计一种能够测试汽车线束中的开路和短路的电路。典型的线束可包含200根左右的电线。当前,该电路使用16个多路复用器来处理128条导线。

多路复用器连接到单个16输入多路复用器,然后又连接到uC。同样,在另一端,有16个解复用器。解复用器将电线切换到电压上。同时,该电线通过多路复用器切换到uC输入之一。

如果连线正常,则uC的输入应为高。然后,uC检查所有其他电线。如果它们中的任何一个很高,则表示这两根线之间短路。

注意:此电路不是我设计的。这是在2003年完成的。我只是想改进此电路。还要注意,所有线束都不包含CAN数据总线或任何其他类型的总线。它只是用于电源和信号的简单电线。

这是我为这篇文章快速制作的非常粗糙的框图。我希望这可以使问题更清楚,因为英语不是我的母语,并且我无法通过文本解释问题。即使该图不是很好,我希望它可以使情况变得更好。从MCU侧向解复用器和复用器的线是地址线。

请注意,其中一根线被分成3条。我故意这样做是为了表明某些连接是一对多的,而不仅仅是一对一的。我见过的最复杂的是将一根导线分成60个结。这就是为什么多路分配器和多路复用器具有单独的地址线的原因。多路分配器可以在输入编号。20,而多路复用器可以在20、21、22等之间切换。检查与20号线相连的所有线。

在此处输入图片说明

如果您觉得有更好的设计方法,请告诉我。


您是在寻找128:1还是128次2:1?
Majenko 2011年

128:1。对不起,我忘了提。我道歉。
萨德

@saad我的经验表明,几乎每当有人提出这样的要求时,这都是因为他们所做的事情根本上是错误的。我建议说明您要完成的工作,而不是您认为解决方案是什么。这样一来,与层叠一堆16:1的多路复用器相比,我们也许可以为您提供更好的解决方案。

@David Kessner,请查看编辑。实际上,几周前我确实在该站点上查询了该设计,但反应不佳。将不胜感激任何形式的输入。
萨德

1
根据切换输入的速度,频率和注意程度,使用级联多路复用器可以大大简化路由。不必将256个信号路由到板上的单个点,而是可以将16个信号路由到16个点中的每个点,将一个信号从这些点中的每个点路由到16个输入芯片,然后将四个共享信号路由到所有多路复用器。理论上,使用一个芯片将允许一个输入“延迟”从一个输入到输出的256个信号中的任何一个,该“延迟”对应于两个串联的晶体管(N型为下降沿; P为上升),但是...
超级猫

Answers:


12

虽然巨大的多路复用器/多路分配器肯定可以工作,但是连接一堆16:1的多路复用器是一项繁重的工作,并且存在一些局限性,可能会或可能不会成为问题。更常规的方法是使用移位寄存器。在“驱动”端使用串行输入/并行输出寄存器,在接收端使用并行输入/串行输出。移位寄存器的优点在于,可以轻松地以菊花链方式将其制成更长的移位寄存器。256位甚至1024位移位寄存器根本不是问题。有了一些缓冲,串行流甚至可以通过电缆传递到另一个PCB(如果这样会使您的事情更容易制造)。

有喜欢的74xx597很多8位的移位寄存器芯片,但CPLD是MUCH更好地为这一点。但是,您不需要巨大的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。行走零是相同的,但取反。

对于简单的连续性测试,步行1/0效果很好。根据电缆的连接方式,可以采用其他方式来加快测试速度或测试特定事物。例如,如果某些引脚永远无法与其他引脚短接,那么您可以优化测试模式以不考虑那些情况,从而运行得更快。在处理方面,处理行走零点以外的问题可能会变得很复杂。

生成测试向量的最终方法已用于JTAG测试。JTAG,也称为边界扫描,是一种用于测试PCB上芯片之间(以及PCB之间)的连接的类似方案。大多数BGA芯片使用JTAG。JTAG在每个芯片中都有移位寄存器,可用于驱动/读取每个引脚。一个复杂且昂贵的软件会查看PCB的网表,并将生成测试向量。复杂的电缆测试仪可以做同样的事情-但这将是很多工作。

幸运的是,对于您来说,有一种非常容易的方法可以生成测试向量。这就是您的工作...将已知良好的电缆连接到移位寄存器。在驱动端运行行走零点/单人模式。在执行此操作时,记录在接收端看到的内容。在简单的级别上,您可以将其用作测试向量。当您连接不良的电缆并执行相同的“ 1/0”时,您收到的数据将与之前记录的数据不匹配-因此,您知道电缆不良。这有几个名称,但是所有名称都是术语“学习”的一些变体,例如自学习或自动学习。

到目前为止,这很容易处理驱动端上一个引脚超过接收端上一个引脚的情况,但不能解决驱动端上多个引脚连接在一起的另一种情况。为此,您需要一些特殊的东西来防止总线争用所造成的损坏,并且所有移位寄存器引脚都应是双向的(即,IE既充当驱动器又充当接收器)。这是您的工作:

  1. 在每个引脚上放置一个下拉电阻。大约20K至50k欧姆应该可以。

  2. 在CPLD和电缆之间放置一个串联电阻。大约100欧姆。这是为了防止ESD和填充物损坏。2700 pF的接地电容(在100 ohm电阻的CPLD引脚侧)也将有助于ESD。

  3. 对CPLD进行编程,使其仅将信号驱动为高电平,而不会将其驱动为低电平。如果您的输出数据为“ 0”,则CPLD将使该引脚处于三态并允许下拉电阻将线路拉低。这样,如果几个CPLD引脚将电缆上的同一根导线驱动为高电平,则不会发生损坏(因为CPLD不会也将同一根导线驱动为低电平)。

  4. 每个引脚都是驱动器和接收器。因此,如果您使用256针电缆,则驱动器的移位寄存器将为512位,接收器的移位寄存器将为512位。驱动和接收可以在同一CPLD中完成,因此PCB的复杂度并没有真正改变。在此CPLD中,每个电缆引脚将有3个或4个触发器,因此要作相应的计划。

然后,在将接收到的数据与先前记录的数据进行比较的同时,执行相同的行走一号/零模式。但是现在它可以处理线束中的各种任意连接。


非常感谢你。我将立即开始阅读更多有关此的内容。
萨德

我一直在想这个。您说过将SIPO用作驱动端,将PISO用作rx。现在,如果我理解正确,我应该将SIPO接到MCU的输出引脚上,将PISO接到输入引脚上。假设所有电线都是一对一的,那么我应该通过线束发送一些数据,如果我收到了数据,那么电线就可以通过测试。这是有效的方法吗?此外,我应该如何修改它以处理在接收端拆分为多于1条的行?这是您的建议,还是我完全偏离了轨道?
萨德

对这些线路进行更多思考-假设我们有4条输入线,其中一根(第4条)分成2条线。所以我们在RX端有5根线。假设我们移出了比特0101,如果我们收到01011,那么我们所有的连线都正常。但是假设第3位为高电平(01111),则我们知道第3根线短路。但这不会告诉我们其短路线是哪根。也许更好的方法是使“ 1”在寄存器中波动。因此,一开始我们有1000个,我们记录。10000然后1通过涟漪,我们得到0100和01000,直到我们达到最后一位,0001
萨阿德

对于这种情况,我们知道应该收到00011,因为最后一个被拼接为两个。如果第4根电线短路,我们将发送0010,那么我们将接收00111-我们知道这是不正确的,并且我们会显示一条错误,指出短路在哪里。这种方法听起来对您有好处吗?
萨德

@saad我更新了我的答案,以涵盖您的评论。

7

我认为不存在单芯片解决方案。由于I / O数量众多,并且可能由于需求低,它们将很昂贵。大多数设计将级联8或16个输入多路复用器。

如果您真的想要一个更集成的解决方案,则必须寻找CPLD。有一些CPLD具有256个以上的I / O,例如Xilinx CoolRunner XC2C512,它是具有270个用户I / O的BGA版本提供的。请记住,对于256输入多路复用器,您需要为选择信号额外提供8个输入,一个输出,当然也可能需要一个使能,因此270个I / O不会太多。

您还必须记住,您的包装很可能是BGA;不知道您是否会喜欢。无论如何,我还没有看到具有大约300个引脚的QFP ...


2
谢谢。我有这种感觉。我想我只会坚持在16个输入中做一个更大的复用器。
萨德

@saad-这似乎是您最好的选择,除非您按照建议抓住一个大(引脚数,而不是门/逻辑块)PLD(优势/效率更高,实际上几乎不需要它们或HDL的经验,但是该软件包确实会很痛苦-开发板吗?)
Oli Glaser

我实际上在学校期间对HDL和FPGA有一些经验(使用Handel-C并不愉快)。不过,我从未从事过CPLD。但是我从来没有真正把BGA包弄乱过,它确实确实让人很痛苦。编辑:XC2C512也可以在PQFP中使用-尽管我现在想知道,像我在HDL和FPGA中经验很少的人是否可以使用这种设备。它也很贵-在Farnell UK价值60英镑以上。
萨德

@saad-PQFP只有173个用户I / O。我的同事在Abel中编程了他的CPLD(简单应用程序:地址解码器),从外观上看,它比VHDL或Verilog简单得多。可能不如VHDL / Verilog强大,但这不应该成为您应用程序的问题
stevenvh 2011年

@stevenvh:Abel在某些方面有点丑陋,但是用时钟和方程式指定引脚行为有时比用VHDL或Verilog更加冗长地写出来要自然得多。我不知道为什么工具不支持更好的基于等式的语言?
supercat

3

尽管CPLD / FPGA似乎是高引脚数的正确选择,但汽车线束通常会在物理上散布开来,并且连接器的尺寸适中,因此,与其将高引脚数的器件散布到大量连接器,例如,在移位寄存器上具有16个IO,通过少量时钟/移位线互连的模块化系统可能更合适,并且也很可扩展。
对于电缆测试,还需要考虑其他事项,您可以使用电阻器链向16条线路施加16个电压,并使用模拟多路复用器检查另一端两端的电压。这将检测到打开和短裤,并且很便宜。


您是说要在CLPD的16位块中实现移位寄存器吗?我很可能不会使用单个大型CPLD来完成所有工作。我想避免使用BGA封装,因此可能会坚持使用较小的CLPD。目前,针对需要新的“连接器板”的每个新线束开发了所有连接器。然后将这些连接器依次连接到上述问题中所述的电路I。在新系统中,我们将保留这种机制-如果在一个芯片上连接大量IO,我将面临什么样的问题?
萨德

1

使用移位寄存器读取大量输入是一个很好的模式。但是,由于David Kessner建议使用CPLD,所以我建议另一种模式。假设您希望每个CPLD处理32个输入。为每个CPLD提供一个共享的时钟输入,一个单独的使能输入,一个使能输出(与下一个芯片的使能输入关联)和一个共享的数据输出。每个芯片都有一个五位计数器和一个溢出指示器。当使能输入无效时,清除计数器和溢出指示器。当使能输入有效但未设置溢出指示符时,输出计数器指示的输入位的状态。当接收到时钟脉冲并且使能了芯片并且计数器没有溢出时,增加计数器。溢出位将提供“启用”输出。所有这些逻辑的最终结果是,只需要大约8个宏单元即可处理32个输入。因此,一个人可能可以在CPLD中容纳其他一些计算密集型或寄存器密集型功能,但不需要太多I / O的功能。

如果一个CPLD带有引脚保持电路,则可以使用类似的方法进行输出,尤其是如果有一种方法可以将一个宏单元的输出输出到多个引脚(而不必为每个引脚花费一个宏单元)。该芯片将具有共享的时钟和数据输入,一个使能输入和一个使能输出。在内部,它需要一个五位计数器,一个底部计数器位的额外副本,锁在与前五个计数器相反的时钟沿上,一个溢出位和一个共享数据信号,该信号将馈入所有引脚。需要七个宏单元,再加上许多宏单元,才能将输入数据信号复制到所有引脚(引脚的输出使能控件将用作锁存器使能)。

这种方法的一个美丽功能(btw,经常在LCD驱动器中使用)是可以有多条数据线并行移动数据,而芯片之间仅需要一条菊花链线。它还允许从每个输入或输出中消除锁存电路。


1

假设应该连接的最大引脚组为例如20个引脚,这对于一个主意听起来如何:使用一堆开集移位寄存器LED驱动器芯片(每个引脚一个输出),每个芯片可以吸收至少2mA; 将每个引脚的1K电阻连接到一个公共点,并使用一个电路以20.1mA的电流提供一伏的电压(如果电流较低时电压较高,则可以,只要20.1mA的电压为一伏的电压就可以了),并指出是否尝试被抽出更多的钱。对于某些电缆配置,可能需要使用少量的“备用”引脚,这些引脚具有1K电阻器,但未连接到电缆。可能希望有一个带1K电阻的备用引脚,一个带500欧姆电阻(或两个2K并联),一个带250欧姆电阻(四个1K')的备用引脚。

要测试电缆,请制定方案以使正好二十个引脚被拉低,并制定方案使正好二十一个引脚被拉低(备用引脚可能对此有用),并确认二十个引脚的情况是正确的。没有报告使用超过20.5mA的电流,但使用21针方案。

例如,假设有一个线束应该连接1-2、3-4、5-6等(最大39-40)。通过选择十对引脚的各种组合来检查短路,然后将每对引脚的两对都拉低。您将要驱动20个引脚为低电平,并且除要驱动的引脚以外,其他任何引脚都不应变为低电平,因此电流应始终低于20mA。如果结束,则表示短路。如果可以找到十对不读取过电流的任意组合,则一次关闭一个有源对,然后再接通另一对,直到出现过流为止。最后一对导通被短路到不应有的短路状态。

通过将备用引脚拉低,然后挑选十对的各种组合,从每对中驱动一个引脚(有时是奇数引脚,有时是偶数引脚)来检查开路。如果有任何开路,这种动作将导致少于21个引脚被驱动为低电平,从而读取欠电流。如果发生这种情况,则一次驱动一次,将每对驱动一根导线,然后同时驱动两根。如果这样将电流读数推至20.1mA以上,则该对断开。

可以将CPLD用于此应用程序,但是像我描述的系统可能更好。可以通过增加电路以实际测量电流(而不是简单地产生过/不足指示器)来进一步增强它。这样的测量将允许人们设置电阻的公差值。


1

这是您要找的东西吗?

Maxwell 81840-128通道多路复用器


可能不会。这是一个模拟多路复用器,但如果您注意设备的速度,则可能也可以将其与数字信号多路复用。而且这是一个抗辐射设备,将很昂贵。
2012年

欢迎!史蒂文是正确的,它可能不是适当的解决方案,但是不错!也许在链接下面添加了对该组件的一些描述
clabacchio

谢谢clabacchio。我不确定我可以描述该组件的详细程度。我以前从未使用过它,也没有足够的经验。
丹尼尔(Daniel)

sweeeeet芯片:)我想在一个数字钢琴项目中使用它,但是如果您只是通过谷歌搜索找不到价格,那么您负担不起!
安德鲁·瓦格纳
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.