虽然巨大的多路复用器/多路分配器肯定可以工作,但是连接一堆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既充当驱动器又充当接收器)。这是您的工作:
在每个引脚上放置一个下拉电阻。大约20K至50k欧姆应该可以。
在CPLD和电缆之间放置一个串联电阻。大约100欧姆。这是为了防止ESD和填充物损坏。2700 pF的接地电容(在100 ohm电阻的CPLD引脚侧)也将有助于ESD。
对CPLD进行编程,使其仅将信号驱动为高电平,而不会将其驱动为低电平。如果您的输出数据为“ 0”,则CPLD将使该引脚处于三态并允许下拉电阻将线路拉低。这样,如果几个CPLD引脚将电缆上的同一根导线驱动为高电平,则不会发生损坏(因为CPLD不会也将同一根导线驱动为低电平)。
每个引脚都是驱动器和接收器。因此,如果您使用256针电缆,则驱动器的移位寄存器将为512位,接收器的移位寄存器将为512位。驱动和接收可以在同一CPLD中完成,因此PCB的复杂度并没有真正改变。在此CPLD中,每个电缆引脚将有3个或4个触发器,因此要作相应的计划。
然后,在将接收到的数据与先前记录的数据进行比较的同时,执行相同的行走一号/零模式。但是现在它可以处理线束中的各种任意连接。