Meskipun mux / demux besar pasti akan berfungsi, menghubungkan banyak muxes 16: 1 adalah banyak pekerjaan, dan memiliki beberapa keterbatasan yang mungkin atau mungkin tidak menjadi masalah. Pendekatan yang lebih konvensional adalah dengan menggunakan register geser. Gunakan register serial-in / parallel-out untuk ujung "driving", dan parallel-in / serial-out untuk sisi penerima. Hal yang menyenangkan tentang register geser adalah bahwa mereka dapat dengan mudah dipasangi rantai daisy untuk membuat register geser yang lebih panjang. Register shift 256-bit atau bahkan 1024 bit bukanlah masalah sama sekali. Dengan beberapa buffering, aliran serial bahkan dapat dilewatkan melalui kabel ke PCB lain (jika itu membuat hal Anda lebih mudah dibuat).
Ada banyak chip register geser 8-bit seperti 74xx597, tetapi CPLD jauh lebih baik untuk ini. Tetapi Anda tidak perlu CPLD 256+ pin raksasa. Sebagai gantinya, Anda dapat menggunakan beberapa CPLD yang lebih kecil dan menyatukannya. Meskipun saya belum melakukan perhitungan, saya cukup yakin bahwa menggunakan CPLD yang lebih kecil hingga sedang akan lebih murah daripada CPLD besar - dan Anda tidak perlu khawatir tentang BGA.
CPLD ini akan cukup intensif Flip-Flop. Ini artinya bahwa arsitektur CPLD normal (seperti yang digunakan Xilinx) tidak sebagus sesuatu yang lebih FPGA-ish. Altera dan Lattice sama-sama memiliki CPLD dengan banyak Flip-Flops per Dollar dibandingkan Xilinx.
Meskipun Anda mungkin tidak memiliki banyak pengalaman dengan CPLD, desain ini sangat sederhana dan manfaat menggunakan CPLD sangat besar. Akan sangat berharga waktu Anda untuk mempelajari cara memprogram CPLD untuk ini.
Juga, keuntungan menggunakan register geser dan bukannya mux tidak mudah dilihat pada awalnya. Sebagian besar Anda mendapatkan banyak fleksibilitas dalam cara Anda mengemudi dan merasakan kabel. Anda bahkan dapat menguji beberapa harness pada satu waktu (jika Anda memiliki cukup register geser). Segala sesuatu yang dapat Anda uji dengan mux dapat dilakukan dengan register geser, tetapi register geser dapat berbuat lebih banyak. Satu-satunya sisi untuk register geser adalah lebih lambat, meskipun masih akan lebih cepat dari yang Anda butuhkan (IE, orang yang menghubungkan dan melepaskan harness akan jauh lebih lambat daripada waktu untuk menguji dengan register geser).
Saya juga harus mengatakan bahwa meskipun Anda menggunakan CPLD, register geser masih lebih mudah daripada muxes. Hal utama adalah bahwa mereka lebih kecil - walaupun untuk melihat keuntungan / kerugian sebenarnya Anda harus benar-benar melakukan desain di keduanya dan melihat ukuran CPLD yang Anda butuhkan. Ini akan sangat tergantung pada jenis arsitektur CPLD yang digunakan, sehingga generalisasi yang dibuat dengan Xilinx tidak akan berlaku untuk Altera.
Sunting: Di bawah ini adalah sedikit lebih detail tentang bagaimana sebenarnya melakukan tes menggunakan register geser ...
Untuk melakukan tes, Anda dapat mengabaikan fakta bahwa Anda menggunakan register geser dan hanya mempertimbangkan bahwa data didorong pada "ujung mengemudi" dan mudah-mudahan membaca pada "ujung penerima". Bagaimana Anda mendapatkan data di sana dan kembali (melalui serial) sebagian besar tidak relevan. Yang penting adalah Anda dapat data yang dapat Anda kendarai sepenuhnya sewenang-wenang.
Data yang Anda kendarai disebut "vektor uji". Data yang Anda HARAP BACA juga merupakan bagian dari vektor uji. Jika kabel dihubungkan dengan hubungan 1: 1 maka Anda akan mengharapkan data mengemudi dan data penerima sama dengan apa yang Anda kendarai. Jika kabelnya tidak 1: 1, maka jelas akan berbeda.
Jika Anda menggunakan pendekatan berbasis MUX Anda masih menggunakan vektor uji, tetapi Anda tidak memiliki kendali atas jenis vektor tes. Dengan Muxes, polanya disebut "Walking Ones", atau "Walking Zero". Katakanlah Anda memiliki kabel 4-pin. Dengan yang berjalan Anda akan menggerakkan pola berikut: 0001, 0010, 0100, 1000. Angka nol berjalan adalah sama, tetapi terbalik.
Untuk tes kontinuitas sederhana, berjalan satu / nol bekerja dengan cukup baik. Tergantung pada bagaimana kabel Anda terhubung, ada pola lain yang bisa dilakukan untuk mempercepat tes atau menguji hal-hal tertentu. Misalnya, jika beberapa pin tidak pernah dapat disingkat terhadap pin lain maka Anda dapat mengoptimalkan pola tes untuk tidak melihat kasus-kasus tersebut dan dengan demikian berjalan lebih cepat. Berurusan dengan sesuatu selain yang berjalan-/ nol dapat menjadi rumit di sisi perangkat lunak hal-hal yang harus ditangani.
Metode utama menghasilkan vektor uji dilakukan untuk pengujian JTAG. JTAG, juga disebut pemindaian batas, adalah skema serupa untuk menguji koneksi antara chip pada PCB (dan antara PCB). Kebanyakan chip BGA menggunakan JTAG. JTAG memiliki register geser di setiap chip yang dapat digunakan untuk mendorong / membaca setiap pin. Sepotong perangkat lunak yang rumit dan mahal melihat netlist untuk PCB dan akan menghasilkan vektor uji. Penguji kabel yang canggih bisa melakukan hal yang sama - tapi itu akan banyak pekerjaan.
Untungnya, bagi Anda, ada cara JAUH LEBIH MUDAH untuk menghasilkan vektor uji. Inilah yang Anda lakukan ... Hubungkan kabel yang dikenal baik ke register geser. Jalankan pola berjalan-nol / yang melalui ujung mengemudi. Saat Anda melakukan ini, catat apa yang terlihat di sisi penerima. Pada level sederhana, Anda bisa menggunakannya sebagai vektor uji. Saat Anda menyambungkan kabel yang buruk dan melakukan walk-ones / nol yang sama, data yang Anda terima tidak akan cocok dengan data yang Anda rekam sebelumnya - dan karena itu Anda tahu kabelnya buruk. Ini berjalan dengan beberapa nama, tetapi semua nama adalah beberapa variasi dari istilah "belajar", seperti belajar mandiri, atau belajar otomatis.
Sejauh ini, ini dengan mudah menangani kasing di mana satu pin di ujung penggerak pergi ke lebih dari satu pin di ujung penerima, tetapi tidak menangani kasing lain di mana beberapa pin di ujung penggerak terhubung bersamaan. Untuk itu Anda memerlukan beberapa hal khusus untuk mencegah kerusakan dari pertikaian bus, dan semua pin register geser Anda harus dua arah (IE, berfungsi sebagai pengemudi dan penerima). Inilah yang Anda lakukan:
Letakkan resistor pull-down di setiap pin. Sesuatu sekitar 20K hingga 50k ohm harus baik-baik saja.
Pasang resistor seri antara CPLD dan kabel. Sekitar 100 ohm. Ini untuk membantu mencegah kerusakan dari ESD dan lainnya. Tutup 2700 pF ke ground (di sisi pin CPLD dari resistor 100 ohm) juga akan membantu dengan ESD.
Program CPLD sehingga hanya akan mengarahkan sinyal tinggi, tidak pernah mengemudi rendah. Jika data output Anda adalah '0' maka CPLD akan tri-state pin itu dan memungkinkan resistor pull-down untuk membawa garis rendah. Dengan cara ini, jika beberapa pin CPLD menggerakkan kabel yang sama pada kabel tinggi maka tidak akan terjadi kerusakan (karena CPLD juga tidak akan menggerakkan kabel yang sama rendah).
Setiap pin adalah driver dan penerima. Jadi jika Anda memiliki kabel 256 pin maka register shift Anda akan menjadi 512 bit untuk pengemudi dan 512 bit untuk penerima. Mengemudi dan menerima dapat dilakukan dalam CPLD yang sama, sehingga kompleksitas PCB tidak benar-benar berubah karena ini. Anda akan memiliki 3 atau 4 sandal jepit per pin kabel dalam CPLD ini, jadi rencanakan dengan tepat.
Anda kemudian melakukan pola berjalan-orang / nol yang sama sambil membandingkan data yang diterima dengan apa yang sebelumnya direkam. Tapi sekarang ia akan menangani segala macam koneksi yang sewenang-wenang dalam harness wiring.