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

电器工程 复用器
2022-01-20 19:24:11

我正在寻找具有 128:1 或更多输入的多路复用器 IC(256 会非常好)。我原以为这样的设备会很常见,但我很难找到它。可能是我看错了地方,但不知何故我觉得我错过了一些东西——也许大型输入多路复用器不经常使用?如果是这样,有什么替代方案?

最大。我能找到值得信赖的 ol' 74150,有 16 个输入。

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


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

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

如果电线没问题,uC 的输入端应该会看到一个高电平。uC 然后检查所有其他电线。如果其中任何一个很高,则意味着这两条线之间存在短路。

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

这是我为这篇文章快速制作的一个非常粗略的框图。我希望这能让问题更清楚,因为英语不是我的第一语言,而且我很难通过文字解释事情。尽管图表不是很好,但我希望它能让事情变得更好。从 MCU 侧向解复用器和复用器的线路是地址线。

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

在此处输入图像描述

如果你觉得有更好的方法来设计这个,请告诉我。

4个回答

虽然一个巨大的多路复用器/解复用器肯定会工作,但连接一堆 16:1 多路复用器是一项繁重的工作,并且有一些可能会或可能不会成为问题的限制。更传统的方法是使用移位寄存器。“驱动”端使用串入/并出寄存器,接收端使用并入/串出寄存器。移位寄存器的好处是它们可以很容易地以菊花链形式连接起来,从而形成更长的移位寄存器。256 位甚至 1024 位移位寄存器根本不是问题。通过一些缓冲,串行流甚至可以通过电缆传递到另一个 PCB(如果这让你的东西更容易制作的话)。

有很多 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 的方法,您仍在使用测试向量,但您无法控制测试向量的类型。对于多路复用器,该模式称为“Walking Ones”或“Walking Zeros”。假设您有一根 4 针电缆。对于行走的,您将驾驶以下模式:0001、0010、0100、1000。行走零点是相同的,但倒置了。

对于简单的连续性测试,步行 1/0 效果相当好。根据电缆的连接方式,可以使用其他模式来加快测试速度或测试特定事物。例如,如果某些引脚永远不会与其他引脚短路,那么您可以优化测试模式以不查看这些情况,从而运行得更快。在软件方面处理的事情可能会变得复杂,而不是步行一/零。

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

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

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

  1. 在每个引脚上放置一个下拉电阻。大约 20K 到 50k 欧姆应该没问题。

  2. 在 CPLD 和电缆之间放置一个串联电阻。大约100欧姆的东西。这是为了帮助防止 ESD 和其他东西造成的损坏。一个 2700 pF 的接地电容(在 100 欧姆电阻的 CPLD 引脚侧)也有助于 ESD。

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

  4. 每个引脚既是驱动器又是接收器。因此,如果您有一根 256 针电缆,那么您的移位寄存器将是驱动器的 512 位和接收器的 512 位。驱动和接收可以在同一个 CPLD 中完成,因此 PCB 的复杂性并没有因此而真正改变。在这个 CPLD 中,每个电缆引脚将有 3 或 4 个触发器,因此请相应地进行计划。

然后,您在将接收到的数据与之前记录的数据进行比较时,执行相同的步行 1/0 模式。但现在它将处理线束内的各种任意连接。

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

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

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

尽管 CPLD/FPGA 似乎是高引脚数的正确想法,但汽车线束通常会在物理上相当分散,并且连接器大小适中。模块化系统,比如说,移位寄存器上有 16 个 IO,由少量时钟/移位线互连,可能更合适,而且可扩展性也很强。
其他需要考虑的是电缆测试,您可以使用电阻链将 16 电压施加到 16 条线路,并使用模拟多路复用器检查另一端的电压。这将检测开路和短路,并且很便宜。

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

如果有一个带有引脚保持器电路的 CPLD,则可以使用类似的方法进行输出,特别是如果有一种方法可以将输出从一个宏单元输出到多个引脚(无需为每个引脚花费一个宏单元)。该芯片将具有共享时钟和数据输入、一个启用输入和一个启用输出。在内部,它需要一个 5 位计数器,一个额外的底部计数器位的副本,锁存在与前 5 个相反的时钟沿,一个溢出位,以及一个可以为所有引脚提供数据的共享数据信号。七个宏单元,以及将输入数据信号复制到所有引脚的多个宏单元(引脚的输出使能控制将用作锁存使能)。

这种方法(顺便说一句,在 LCD 驱动器中经常使用)的一个漂亮特点是可以有多条数据线并行传输数据,并且芯片之间仍然只需要一条菊花链线。它还允许人们从每个输入或输出中消除一个锁存电路。