Mặc dù một mux / demux khổng lồ chắc chắn sẽ hoạt động, việc kết nối một loạt các mux 16: 1 là rất nhiều công việc, và có một số hạn chế có thể hoặc không phải là một vấn đề. Cách tiếp cận thông thường hơn sẽ là sử dụng các thanh ghi thay đổi. Sử dụng một thanh ghi nối tiếp / song song cho đầu "lái xe" và đầu ra song song / nối tiếp cho đầu cuối nhận. Điều thú vị về các thanh ghi thay đổi là chúng có thể dễ dàng được xâu chuỗi để tạo ra một thanh ghi ca dài hơn. Thanh ghi dịch chuyển 256 bit hoặc thậm chí 1024 bit hoàn toàn không phải là vấn đề. Với một số bộ đệm, luồng nối tiếp thậm chí có thể được truyền qua cáp sang PCB khác (nếu điều đó làm cho việc của bạn dễ thực hiện hơn).
Có rất nhiều 8-bit chip đăng ký thay đổi như 74xx597, nhưng một CPLD là NHIÊU tốt hơn cho việc này. Nhưng bạn không cần một CPLD pin 256+ khổng lồ. Thay vào đó, bạn có thể sử dụng một số CPLD nhỏ hơn và xâu chuỗi chúng lại với nhau. Mặc dù tôi chưa thực hiện được phép toán, nhưng tôi khá chắc chắn rằng việc sử dụng các CPLD cỡ nhỏ đến trung bình sẽ rẻ hơn một CPLD lớn-- và bạn không phải lo lắng về việc của BGA.
CPLD này sẽ khá chuyên sâu Flip-Flop. Điều này có nghĩa là một kiến trúc CPLD bình thường (giống như những gì Xilinx sử dụng) không tốt bằng một thứ gì đó mang tính chất đồ họa cao hơn. Cả Altera và Lattice đều có CPLD với số lượng Flip-Flops trên mỗi đô la nhiều hơn so với những gì Xilinx có.
Mặc dù bạn có thể không có nhiều kinh nghiệm với CPLD, nhưng thiết kế này rất đơn giản và lợi ích của việc sử dụng CPLD là rất lớn. Sẽ rất đáng để bạn dành thời gian tìm hiểu cách lập trình CPLD cho việc này.
Ngoài ra, những lợi thế của việc sử dụng thanh ghi thay đổi thay vì mux không dễ thấy ban đầu. Chủ yếu là bạn có được rất nhiều sự linh hoạt trong cách bạn lái xe và cảm nhận dây. Bạn thậm chí có thể thử nghiệm nhiều khai thác cùng một lúc (nếu bạn có đủ thanh ghi thay đổi). Tất cả mọi thứ bạn có thể kiểm tra với muxes có thể được thực hiện với các thanh ghi thay đổi, nhưng các thanh ghi thay đổi có thể làm nhiều hơn nữa. Mặt trái của các thanh ghi thay đổi là nó chậm hơn, mặc dù nó vẫn sẽ nhanh hơn những gì bạn cần (IE, anh chàng kết nối và ngắt kết nối khai thác sẽ chậm hơn nhiều so với thời gian để kiểm tra các thanh ghi thay đổi).
Tôi cũng nên nói rằng ngay cả khi bạn đang sử dụng CPLD, các thanh ghi thay đổi vẫn dễ dàng hơn so với mux. Điều chính là chúng nhỏ hơn - mặc dù để thấy được lợi thế / bất lợi thực tế, bạn sẽ phải thực sự thiết kế trong cả hai và xem kích thước CPLD bạn cần. Điều này sẽ phụ thuộc khá nhiều vào loại kiến trúc CPLD được sử dụng, do đó, mọi khái quát được thực hiện với Xilinx sẽ không áp dụng cho Altera.
Chỉnh sửa: Dưới đây là chi tiết hơn một chút về cách thực hiện kiểm tra bằng cách sử dụng các thanh ghi thay đổi ...
Để thực hiện kiểm tra, bạn có thể bỏ qua thực tế rằng bạn đang sử dụng các thanh ghi thay đổi và chỉ xem xét rằng dữ liệu được điều khiển trên "kết thúc lái xe" và hy vọng đọc được "kết thúc nhận". Làm thế nào bạn có được dữ liệu ở đó và trở lại (thông qua nối tiếp) phần lớn không liên quan. Điều quan trọng là bạn có thể dữ liệu mà bạn có thể lái xe là hoàn toàn tùy ý.
Dữ liệu mà bạn lái xe được gọi là "vectơ kiểm tra". Dữ liệu mà bạn MỞ RỘNG ĐỌC cũng là một phần của vectơ kiểm tra. Nếu cáp được nối với mối quan hệ 1: 1 thì bạn sẽ mong đợi dữ liệu lái xe và dữ liệu nhận giống như những gì bạn lái. Nếu cáp không phải là 1: 1, thì rõ ràng nó sẽ khác.
Nếu bạn đã sử dụng phương pháp dựa trên MUX, bạn vẫn đang sử dụng các vectơ kiểm tra, nhưng bạn không có quyền kiểm soát đối với loại vectơ kiểm tra. Với Muxes, mẫu được gọi là "Walking Ones" hay "Walking Zeros". Giả sử bạn có cáp 4 chân. Với những người đi bộ, bạn sẽ lái mô hình sau: 0001, 0010, 0100, 1000. Số không đi bộ là như nhau, nhưng ngược lại.
Đối với một bài kiểm tra tính liên tục đơn giản, những người đi bộ / số không hoạt động khá tốt. Tùy thuộc vào cách cáp của bạn được kết nối, có những mẫu khác có thể được thực hiện để tăng tốc độ kiểm tra hoặc để kiểm tra những thứ cụ thể. Ví dụ, nếu một số chân không bao giờ có thể được rút ngắn so với các chân khác thì bạn có thể tối ưu hóa mẫu thử để không nhìn vào các trường hợp đó và do đó chạy nhanh hơn. Đối phó với một cái gì đó không phải là người đi bộ / số không có thể trở nên phức tạp về mặt phần mềm để xử lý.
Phương pháp cuối cùng để tạo các vectơ kiểm tra được thực hiện để kiểm tra JTAG. JTAG, còn được gọi là quét ranh giới, là một sơ đồ tương tự để kiểm tra các kết nối giữa các chip trên PCB (và giữa PCB). Hầu hết các chip BGA sử dụng JTAG. JTAG có các thanh ghi thay đổi trong mỗi chip có thể được sử dụng để lái / đọc từng pin. Một phần mềm phức tạp và đắt tiền nhìn vào danh sách mạng cho PCB và sẽ tạo ra các vectơ thử nghiệm. Một người kiểm tra cáp tinh vi có thể làm điều tương tự-- nhưng đó sẽ là rất nhiều công việc.
May mắn thay, đối với bạn, có một cách RẤT NHIỀU để tạo ra các vectơ thử nghiệm. Đây là những gì bạn làm ... Kết nối một cáp tốt được biết đến với các thanh ghi thay đổi. Chạy mô hình đi bộ / số không qua đầu lái xe. Khi bạn làm điều này, ghi lại những gì nhìn thấy ở đầu nhận. Ở cấp độ đơn giản, bạn chỉ có thể sử dụng nó như các vectơ thử nghiệm của mình. Khi bạn kết nối một cáp xấu và thực hiện cùng một số đi bộ / số không, dữ liệu bạn nhận được sẽ không khớp với dữ liệu bạn đã ghi trước đó - và do đó bạn biết rằng cáp rất tệ. Điều này có một số tên, nhưng tất cả các tên là một số biến thể của thuật ngữ "học", như tự học hoặc tự động học.
Cho đến nay, điều này dễ dàng xử lý trường hợp một chân ở đầu lái xe đi đến nhiều hơn một chân ở đầu nhận, nhưng không xử lý trường hợp khác khi nhiều chân ở đầu lái được kết nối với nhau. Cho rằng bạn cần một số công cụ đặc biệt để ngăn chặn thiệt hại do tranh chấp xe buýt và tất cả các chân đăng ký thay đổi của bạn phải là hai chiều (IE, có chức năng như cả trình điều khiển và bộ thu). Đây là những gì bạn làm:
Đặt một điện trở kéo xuống trên mỗi pin. Một cái gì đó khoảng 20K đến 50k ohms sẽ ổn.
Đặt một điện trở nối tiếp giữa CPLD và cáp. Một cái gì đó khoảng 100 ohms. Điều này là để giúp ngăn chặn thiệt hại từ ESD và các công cụ. Một nắp 2700 pF xuống đất (ở phía chân CPLD của điện trở 100 ohm) cũng sẽ giúp với ESD.
Lập trình CPLD sao cho nó sẽ chỉ truyền tín hiệu cao, không bao giờ lái thấp. Nếu dữ liệu đầu ra của bạn là '0' thì CPLD sẽ ba trạng thái đó và cho phép điện trở kéo xuống để hạ thấp dòng. Theo cách này, nếu một số chân CPLD đang lái cùng một dây trên cáp cao thì sẽ không có thiệt hại nào xảy ra (vì CPLD cũng sẽ không lái cùng một dây thấp).
Mỗi pin là cả một trình điều khiển và người nhận. Vì vậy, nếu bạn có cáp 256 pin thì các thanh ghi thay đổi của bạn sẽ là 512 bit cho trình điều khiển và 512 bit cho bộ thu. Lái xe và nhận có thể được thực hiện trong cùng một CPLD, vì vậy độ phức tạp PCB không thực sự thay đổi vì điều này. Bạn sẽ có 3 hoặc 4 flip-flop cho mỗi chân cáp trong CPLD này, vì vậy hãy lên kế hoạch cho phù hợp.
Sau đó, bạn thực hiện mô hình đi bộ / số không tương tự trong khi so sánh dữ liệu nhận được với dữ liệu đã được ghi lại trước đó. Nhưng bây giờ nó sẽ xử lý tất cả các loại kết nối tùy ý trong dây nịt.