Podczas gdy ogromny multiplekser / demultiplekser z pewnością będzie działał, podłączenie wiązki multiplekserów 16: 1 to dużo pracy i ma pewne ograniczenia, które mogą, ale nie muszą, stanowić problem. Bardziej konwencjonalnym podejściem byłoby użycie rejestrów przesuwnych. Użyj rejestru wejścia szeregowego / wyjścia równoległego dla końca „napędzającego”, a rejestru równoległego / wyjścia szeregowego dla końca odbiorczego. Zaletą rejestrów przesuwnych jest to, że można je łatwo połączyć łańcuchowo, aby utworzyć dłuższy rejestr przesuwny. 256-bitowy, a nawet 1024-bitowy rejestr przesuwny wcale nie stanowi problemu. Przy pewnym buforowaniu strumień szeregowy może być nawet przesłany kablem do innej płytki drukowanej (jeśli to ułatwi twoją rzecz).
Istnieje wiele 8-bitowych układów rejestrów przesuwnych, takich jak 74xx597, ale CPLD jest o wiele lepszy. Ale nie potrzebujesz gigantycznej 256-pinowej wtyczki CPLD. Zamiast tego możesz użyć kilku mniejszych CPLD i połączyć je razem. Chociaż nie zrobiłem matematyki, jestem całkiem pewien, że użycie większej liczby małych i średnich CPLD byłoby tańsze niż jednego dużego CPLD - i nie musisz się martwić o BGA.
Ten CPLD byłby dość intensywny w Flip-Flopie. Oznacza to, że normalna architektura CPLD (podobnie jak Xilinx) nie jest tak dobra, jak coś, co jest bardziej FPGA. Altera i Krata mają CPLD z dużo większą liczbą przerzutników na dolara niż to, co ma Xilinx.
Chociaż możesz nie mieć dużego doświadczenia z CPLD, ten projekt jest bardzo prosty, a korzyści z używania CPLD są ogromne. Byłoby bardzo warte poświęcenia czasu na naukę programowania CPLD w tym celu.
Zalety stosowania rejestru przesuwnego zamiast multipleksera nie są początkowo łatwe do zauważenia. Przeważnie masz dużą elastyczność w prowadzeniu i wyczuciu przewodów. Możesz nawet testować kilka wiązek naraz (jeśli masz wystarczającą liczbę rejestrów zmian). Wszystko, co można przetestować za pomocą multiplekserów, można wykonać za pomocą rejestrów przesuwnych, ale rejestry przesuwne mogą zrobić więcej. Jedyną wadą rejestrów przesuwnych jest to, że jest wolniejszy, chociaż nadal będzie szybszy niż to, czego potrzebujesz (IE, facet podłączający i odłączający wiązkę będzie znacznie wolniejszy niż czas testowania rejestrów przesuwnych).
Powinienem również powiedzieć, że nawet jeśli używasz CPLD, rejestry przesuwne są nadal łatwiejsze niż multipleksery. Najważniejsze jest to, że są one mniejsze - chociaż aby zobaczyć faktyczną zaletę / wadę, musiałbyś faktycznie wykonać projekt w obu przypadkach i zobaczyć, jaki rozmiar CPLD potrzebujesz. Będzie to dość zależeć od typu użytej architektury CPLD, więc żadne uogólnienia dokonane za pomocą Xilinx nie będą miały zastosowania do Altera.
Edycja: Poniżej znajduje się trochę więcej szczegółów na temat tego, jak faktycznie przeprowadzić test przy użyciu rejestrów przesuwnych ...
Aby wykonać test, możesz zignorować fakt, że korzystasz z rejestrów przesuwnych i wziąć pod uwagę, że dane są napędzane po „stronie napędowej” i, mam nadzieję, czytane po stronie „odbiorczej”. Sposób, w jaki dane są przesyłane tam iz powrotem (przez port szeregowy), jest w dużej mierze nieistotny. Ważne jest to, że dane, którymi możesz jeździć, są całkowicie arbitralne.
Dane, którymi jeździsz, nazywane są „wektorami testowymi”. Dane, których OCZEKIWANIA DO CZYTANIA są również częścią wektorów testowych. Jeśli kabel jest okablowany w stosunku 1: 1, można oczekiwać, że dane dotyczące jazdy i odbierane dane będą takie same, jak podczas jazdy. Jeśli kabel nie jest 1: 1, to oczywiście będzie inaczej.
Jeśli zastosowałeś podejście oparte na MUX, nadal używasz wektorów testowych, ale nie masz kontroli nad rodzajem wektora testowego. W przypadku Muxes wzór nazywa się „Walking Ones” lub „Walking Zeros”. Powiedzmy, że masz 4-pinowy kabel. W przypadku chodzących kierowałbyś następującym wzorem: 0001, 0010, 0100, 1000. Zerujące zera są takie same, ale odwrócone.
W przypadku prostego testu ciągłości chodzenie jedynek / zer działa dość dobrze. W zależności od sposobu podłączenia kabla można wykonać inne wzorce, aby przyspieszyć test lub przetestować określone rzeczy. Na przykład, jeśli niektóre piny nigdy nie mogą być zwarte względem innych pinów, możesz zoptymalizować wzór testowy, aby nie patrzeć na te przypadki, a tym samym działać szybciej. Radzenie sobie z czymś innym niż chodzącymi zerami / zerami może być skomplikowane po stronie oprogramowania do obsługi.
Ostateczna metoda generowania wektorów testowych jest wykonywana do testowania JTAG. JTAG, zwany także skanem granicznym, jest podobnym schematem do testowania połączeń między układami scalonymi na płytce drukowanej (i między płytkami drukowanymi). Większość układów BGA używa JTAG. JTAG ma rejestry przesuwne w każdym układzie, które mogą być użyte do napędu / odczytu każdego pinu. Skomplikowane i drogie oprogramowanie sprawdza listę sieci PCB i generuje wektory testowe. Wyrafinowany tester kabli mógłby zrobić to samo - ale byłoby to dużo pracy.
Na szczęście istnieje O wiele ŁATWSZY sposób generowania wektorów testowych. Oto, co robisz ... Podłącz znany dobry kabel do rejestrów zmiany. Przeprowadź wzór chodzącego zera / jedynki przez stronę napędową. Gdy to zrobisz, zapisz to, co widać na końcu odbierającym. Na prostym poziomie możesz tego użyć jako wektorów testowych. Po podłączeniu złego kabla i wykonaniu tych samych zer / zer, otrzymane dane nie będą pasować do danych, które wcześniej zarejestrowałeś - i dlatego wiesz, że kabel jest zły. Ma to kilka nazw, ale wszystkie z nich są odmianą terminu „uczenie się”, na przykład samodzielnego uczenia się lub automatycznego uczenia się.
Jak dotąd z łatwością radzi sobie z przypadkiem, w którym jeden pin po stronie napędowej przechodzi do więcej niż jednego pinu po stronie odbiorczej, ale nie obsługuje drugiego przypadku, w którym wiele pinów po stronie napędowej jest połączonych ze sobą. W tym celu potrzebujesz specjalnych elementów, aby zapobiec uszkodzeniu przez rywalizację z magistralą, a wszystkie piny rejestru przesuwnego powinny być dwukierunkowe (IE, działać zarówno jako sterownik, jak i odbiornik). Oto co robisz:
Umieść rezystor obniżający na każdym pinie. Coś około 20 do 50 000 omów powinno być w porządku.
Umieść rezystor szeregowy między CPLD a kablem. Coś około 100 omów. Ma to na celu zapobieganie uszkodzeniom spowodowanym przez wyładowania elektrostatyczne i inne rzeczy. Nasadka 2700 pF do masy (po stronie styku CPLD rezystora 100 omów) również pomoże w ESD.
Zaprogramuj CPLD tak, aby doprowadzał tylko wysoki sygnał, nigdy nie obniżając poziomu. Jeśli twoje dane wyjściowe mają wartość „0”, wówczas CPLD potroi ten styk i pozwoli opornikowi obniżającemu obniżyć linię. W ten sposób, jeśli kilka pinów CPLD poprowadzi ten sam drut na kablu wysoko, nie nastąpi uszkodzenie (ponieważ CPLD nie doprowadzi również tego samego drutu do niskiego poziomu).
Każdy pin jest zarówno sterownikiem, jak i odbiornikiem. Więc jeśli masz 256-pinowy kabel, twoje rejestry przesuwne będą miały 512 bitów dla sterownika i 512 bitów dla odbiornika. Prowadzenie i odbieranie może odbywać się w tym samym CPLD, więc złożoność PCB tak naprawdę się nie zmienia z tego powodu. Będziesz miał 3 lub 4 przerzutniki na pin kabla w tym CPLD, więc odpowiednio zaplanuj.
Następnie wykonujesz ten sam wzór zer / zer podczas porównywania otrzymanych danych z wcześniej zarejestrowanymi. Ale teraz będzie obsługiwać wszelkiego rodzaju dowolne połączenia w wiązce przewodów.