Latar belakang dan sampel pertama
Dalam posting lama saya menulis bahwa saya sedang mengerjakan rekayasa balik chip PLA Commodore 128. Sekarang saya hampir menyelesaikan proses ini, jadi inilah saatnya untuk membagikan temuan saya.
Itu adalah proyek yang sangat menarik karena saya tidak tahu banyak tentang perancangan dan pembuatan semikonduktor. Pengetahuan saya terbatas pada melihat gambar kristal dan mengagumi foto-foto indah ini.
Bagi saya, penelitian saya dimulai dengan pembelian mikroskop murah untuk komponen penyolderan permukaan mount (SMD).

Mikroskop murah
Setelah beberapa waktu, saya menemukan video di Youtube yang menunjukkan cara yang lebih mudah untuk menghilangkan kristal silikon dari casing.
Metodenya terlihat cukup sederhana untuk diterapkan di rumah, karena saya sudah memiliki semua peralatan yang diperlukan. Menghapus IC dari paket biasanya membutuhkan asam sulfat yang dipanaskan atau bahan kimia berbahaya lainnya yang tidak benar-benar ingin saya coba di rumah. Jadi saya menggali beberapa chip MOS yang rusak di inventaris saya (jangan pernah membuang apa pun, mungkin berguna). Dengan sedikit kerja, saya mendapat dua kematian 8521R0 dan satu 8721 PLA. Di postingan sebelumnya, saya menunjukkan foto asli pertama.

Foto lengkap chip 8721 PLA
Mikroskop yang lebih baik
Meskipun percobaan berhasil, saya segera menyadari bahwa mikroskop tidak memiliki resolusi yang cukup untuk mengambil gambar dengan kualitas yang memadai bagi saya. Dengan lensa 2x Barlow, perbesaran maksimumnya adalah 90x. Selain itu, mikroskop tidak memiliki panggung, jadi saya harus meletakkan kristal di atas meja dan kemudian memindahkan seluruh mikroskop; desain ini sangat tidak stabil dan sulit untuk melepaskan bagian yang diperlukan dengan bantuannya.
Jadi saya menemukan dan membeli mikroskop yang lebih baik, juga dengan harga yang wajar.

Mikroskop AmScope ME580-T Ia melakukan pekerjaan yang
jauh lebih baik dalam mengambil foto dengan kualitas yang layak, tetapi saya tidak senang dengan kamera yang saya beli dengannya. Ini adalah kamera murah tanpa kendali jarak jauh, kecuali untuk aplikasi AmScope. Saat itu, yayasan Raspberry Pi merilis kamera baru berkualitas tinggi untuk Raspberry Pi. Kamera ini memiliki C-mount yang kompatibel dengan mikroskop, jadi saya langsung membelinya dan memasangnya di mikroskop. Ini melakukan pekerjaan luar biasa dalam menyediakan kontrol penuh dari kenyamanan Linux.

Bagian dari silikon mati 8521R0
Dibandingkan dengan sistem sebelumnya, ini merupakan peningkatan yang sangat besar. Karena resolusi yang ditingkatkan, saya harus menjahit foto untuk mendapatkan gambar yang lebih besar. Kedengarannya sederhana pada awalnya, tetapi ternyata (seperti yang mungkin sudah Anda duga) bukanlah tugas yang mudah sama sekali. Saya masih kesulitan menyatukan foto, tetapi saya secara bertahap meningkatkan keterampilan saya. Salah satu faktor kunci untuk bidikan panorama yang sukses adalah keseragaman dalam fokus, white balance, dll. Semakin seragam fotonya, semakin mudah dan lebih baik jahitannya.
Mekanisasi
Semua ini membuat saya mulai mengatur meja. Saya mulai sangat lelah saat memindahkan tabel secara manual, di mana foto-foto dipindahkan di sepanjang beberapa sumbu dan terjadi distorsi lainnya.
Setelah melakukan banyak desain, pencetakan 3D dan penelitian tentang firmware CNC, saya mendapatkan desain berikut:

Mikroskop modifikasi AmScope ME580-T
Di atas terdapat layar Raspberry berukuran 7 inci, di belakangnya terdapat Raspberry Pi4. Foto tidak menunjukkan kamera RPi HiQ yang dipasang di mikroskop. RPi mengambil foto, menampilkannya di layar, dan juga menjalankan kode Python yang menggerakkan papan CNC.
Tahap dan leveling digerakkan oleh motor stepper 28BYJ-48, yang digerakkan oleh papan ESP32 kecil yang menjalankan Grbl_Esp32 , dan empat pengontrol motor stepper AD4498.
Sirkuit memiliki masalah perangkat lunak dan perangkat keras tertentu, tetapi berfungsi dengan baik untuk tujuan saya.
Balikkan chip
Setelah menangani logistik, saya kembali merekayasa balik chip itu sendiri. Saya awalnya ingin menangani chip PLA karena itu akan menjadi hal termudah untuk dipecahkan. PLA adalah singkatan dari Programmable Logic Array ; struktur serupa sangat umum di era Commodore.
Berdasarkan skema dari Wikipedia, kita harus berharap bahwa ada dua array utama pada chip tersebut, AND dan OR. Input terhubung ke AND dan pin keluar dari array OR.
Kembali ke bidikan dadu sebelumnya, kita dapat memperbaikinya dengan menambahkan anotasi ke pin dan area chip. Setelah membahas tujuan kristal, kita dapat melihat bahwa semua input terhubung ke satu array, dan semua output terhubung ke yang lain, seperti yang diharapkan. juga, ini akan membantu kita memahami di mana array itu.

Cuplikan dari 8721 PLA mati dengan anotasi
Di sini kita melihat pin I / O yang ditandai dan koneksinya ke rangka utama dan ke pin DIP itu sendiri. Juga terlihat dua area utama yang membentuk struktur PLA, array AND dan array OR. Juga, ada beberapa logika tambahan di sini yang ditandai dengan tanda tanya. Tujuannya tidak saya ketahui, tetapi karena semua kontak keluaran melewatinya, saya berasumsi bahwa ini adalah semacam tahap keluaran.
DAN array
Jadi, jika kita mulai memeriksa matriks AND lebih dekat, kita akan melihat gambar di bawah ini. Warnanya sedikit terdistorsi, karena gambar ini diambil dengan kamera AmScope dan saya tidak dapat menemukan cara menyetel white balance padanya.

AND matriks dengan lapisan logam
Gambar tersebut tidak terlalu berguna untuk memahami apa yang terjadi, karena semua bagian yang menarik ditutupi oleh lapisan logam paling atas. Saya baru mulai belajar saat itu, jadi saya menggunakan kekerasan untuk menghilangkan logam. Saya menghapus logam dengan benturan mekanis yang kuat; setelah dipelajari di bawah mikroskop, ternyata semuanya dibuang secara umum, kecuali substrat itu sendiri.
Untungnya, detail yang saya butuhkan ada di lapisan difusi yang terletak di substrat:

Substrat matriks DAN
Melihat lebih dekat pada gambar, Anda dapat melihat garis bergelombang kecil di mana transistor berada untuk membuat sambungan dalam matriks.
ATAU array
Pindah ke array OR, kita melihat format yang persis sama. Sulit untuk mengurai tanpa menghilangkan lapisan logamnya, tetapi lebih mudah dibandingkan dengan matriks AND. Dan jauh lebih mudah jika hanya tersisa substrat dan lapisan difusi.

ATAU mati dengan lapisan logam

ATAU Substrat Matriks
Penguraian matriks penuh
Berbekal pengetahuan ini, kami dapat melanjutkan untuk memulihkan matriks logika PLA penuh dari gambar.
Saya menandai semua transistor di setiap matriks dengan titik dan mendapatkan gambar berikut:

Matriks AND dengan Lapisan Logam
Dalam matriks AND, semua input berbentuk horizontal, dan sinyal normal dan terbalik diumpankan ke setiap baris. Dalam matriks OR, semua kabel horizontal dan terhubung ke garis vertikal yang disebut minterms.
Setelah memeriksa titik-titiknya, kita dapat memecahkan kode minterm dengan menjalankan logika "AND" untuk semua garis vertikal dalam matriks AND, misalnya
p0 = CHAREN & HIRAM & BA & !MS3 & GAME & RW & AEC & A12 & !A13 & A14 & A15
Untuk pin, kita mengambil garis horizontal untuk setiap pin dan menggabungkannya dengan "atau", misalnya
SDEN = p42 | p43 | p66 | p69
Ini adalah cara kita mendapatkan seluruh rangkaian persamaan logika. Hore!
Tahap keluaran
Mari kembali ke foto lengkap kristal - sekarang kita memiliki segalanya kecuali persegi panjang yang ditandai dengan tanda tanya di jalur keluar.
Melihat foto beresolusi lebih tinggi di area ini, kami melihat pola serupa untuk setiap pin. Dalam semua kecuali dua kasus, struktur ini dilewati dan keluaran dari matriks OR langsung menuju ke pin keluaran. Namun, ini tidak berlaku untuk dua kontak:
DWEdan CASENB.
DWEApakah sinyal Write Enable diterapkan ke chip DRAM sistem utama, dan CASENB meneruskan sinyal CAS ke RAM. Kedua sinyal ini entah bagaimana diproses oleh struktur gerbang keluaran ini, jadi saya harus merekayasa balik blok ini.

Blok outlet dengan lapisan logam

Substrat Blok Keluaran
Setelah menghabiskan cukup banyak waktu untuk membaca informasi tentang desain dan pembuatan chip silikon, serta melakukan banyak upaya, saya dapat membuat rangkaian yang tampak logis. Saya tidak akan membahas secara detail seluruh proses di sini, tetapi akan mendokumentasikan dan mempublikasikannya nanti. Di sini saya juga ingin berterima kasih kepada Frank Wolfe atas bantuannya, jika memungkinkan, mendukung proyeknya!

Output Block Circuit
Melihat lebih jauh, cara rangkaian ini digunakan adalah dengan pin
DWEdan CASENBmengubahnya menjadi D-latch biasa. Latch yang memungkinkan hal ini diwakili di PLA dengan sepasang garis di OR.
Hasil
Jadi kami mendapatkan hasil akhir dan sekarang kami dapat menulis kode HDL lengkap untuk chip PLA komputer C128. Untuk ini, saya akan menggunakan Verilog. Mempertimbangkan. bahwa ini adalah kode Verilog pertama saya, jadi mungkin tidak optimal. Menggunakan D-latch untuk pin umumnya dianggap praktik yang buruk di Verilog, tetapi dalam hal ini saya mereplikasi logika dan fungsionalitas chip yang sudah jadi.
Saya memeriksanya jika memungkinkan, tetapi jika saya melewatkan sesuatu, harap laporkan!
Berbeda dengan PLA C64, chip PLA C128 tidak dapat diganti dengan EPROM sederhana atau yang serupa karena adanya kait keluaran.
module pla_8721(
input rom_256,
input va14,
input charen,
input hiram,
input loram,
input ba,
input vma5,
input vma4,
input ms0,
input ms1,
input ms2,
input ms3,
input z80io,
input z80en,
input exrom,
input game,
input rw,
input aec,
input dmaack,
input vicfix,
input a10,
input a11,
input a12,
input a13,
input a14,
input a15,
input clk,
output sden,
output roml,
output romh,
output clrbnk,
output from,
output rom4,
output rom3,
output rom2,
output rom1,
output iocs,
output dir,
output reg dwe,
output reg casenb,
output vic,
output ioacc,
output gwe,
output colram,
output charom);
wire p0;
wire p1;
wire p2;
wire p3;
wire p4;
wire p5;
wire p6;
wire p7;
wire p8;
wire p9;
wire p10;
wire p11;
wire p12;
wire p13;
wire p14;
wire p15;
wire p16;
wire p17;
wire p18;
wire p19;
wire p20;
wire p21;
wire p22;
wire p23;
wire p24;
wire p25;
wire p26;
wire p27;
wire p28;
wire p29;
wire p30;
wire p31;
wire p32;
wire p33;
wire p34;
wire p35;
wire p36;
wire p37;
wire p38;
wire p39;
wire p40;
wire p41;
wire p42;
wire p43;
wire p44;
wire p45;
wire p46;
wire p47;
wire p48;
wire p49;
wire p50;
wire p51;
wire p52;
wire p53;
wire p54;
wire p55;
wire p56;
wire p57;
wire p58;
wire p59;
wire p60;
wire p61;
wire p62;
wire p63;
wire p64;
wire p65;
wire p66;
wire p67;
wire p68;
wire p69;
wire p70;
wire p71;
wire p72;
wire p73;
wire p74;
wire p75;
wire p76;
wire p77;
wire p78;
wire p79;
wire p80;
wire p81;
wire p82;
wire p83;
wire p84;
wire p85;
wire p86;
wire p87;
wire p88;
wire p89;
wire casenb_int;
wire casenb_latch;
/* Product terms */
assign p0 = charen & hiram & ba & !ms3 & game & rw & aec & a12 & !a13 & a14 & a15;
assign p1 = charen & hiram & !ms3 & game & !rw & aec & a12 & !a13 & a14 & a15;
assign p2 = charen & loram & ba & !ms3 & game & rw & aec & a12 & !a13 & a14 & a15;
assign p3 = charen & loram & !ms3 & game & !rw & aec & a12 & !a13 & a14 & a15;
assign p4 = charen & hiram & ba & !ms3 & !exrom & !game & rw & aec & a12 & !a13 & a14 & a15;
assign p5 = charen & hiram & !ms3 & !exrom & !game & !rw & aec & a12 & !a13 & a14 & a15;
assign p6 = charen & loram & ba & !ms3 & !exrom & !game & rw & aec & a12 & !a13 & a14 & a15;
assign p7 = charen & loram & !ms3 & !exrom & !game & !rw & aec & a12 & !a13 & a14 & a15;
assign p8 = ba & !ms3 & exrom & !game & rw & aec & a13 & !a13 & a14 & a15;
assign p9 = !ms3 & exrom & !game & rw & aec & a12 & !a13 & a14 & a15;
assign p10 = ba & !ms2 & ms3 & rw & aec & a12 & !a13 & a14 & a15;
assign p11 = !ms2 & ms3 & !rw & aec & a12 & !a13 & a14 & a15;
assign p12 = charen & hiram & ba & !ms3 & game & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p13 = charen & hiram & !ms3 & game & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p14 = charen & loram & ba & !ms3 & game & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p15 = charen & loram & !ms3 & game & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p16 = charen & hiram & ba & !ms3 & !exrom & !game & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p17 = charen & hiram & !ms3 & !exrom & !game & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p18 = charen & loram & ba & !ms3 & !exrom & !game & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p19 = charen & loram & !ms3 & !exrom & !game & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p20 = ba & !ms3 & exrom & !game & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p21 = !ms3 & exrom & !game & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p22 = ba & !ms2 & ms3 & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p23 = !ms2 & ms3 & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p24 = charen & hiram & ba & !ms3 & game & rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p25 = charen & hiram & !ms3 & game & !rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p26 = charen & loram & ba & !ms3 & game & rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p27 = charen & loram & !ms3 & game & !rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p28 = charen & hiram & ba & !ms3 & !exrom & !game & rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p29 = charen & hiram & !ms3 & !exrom & !game & !rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p30 = charen & loram & ba & !ms3 & !exrom & !game & rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p31 = charen & loram & !ms3 & !exrom & !game & !rw & aec & !a10 & a11 & a12 & !a13 & a15;
assign p32 = ba & !ms3 & exrom & !game & rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p33 = !ms3 & exrom & !game & rw & aec & !a10 & a11 & a12 & !a13 & a15;
assign p34 = ba & !ms2 & ms3 & rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p35 = !ms2 & ms3 & !rw & aec & !a10 & a11 & a12 & !a13 & a15;
assign p36 = !aec;
assign p37 = !rw & aec & !a10 & a11 & a12 & !a13 & a15;
assign p39 = !charen & hiram & !ms3 & game & rw & aec & a12 & !a13 & a14 & a15;
assign p40 = !charen & loram & !ms3 & game & rw & aec & a12 & !a13 & a14 & a15;
assign p41 = !charen & hiram & !ms3 & !exrom & !game & rw & aec & a12 & !a13 & a14 & a15;
assign p42 = va14 & !vma5 & vma4 & !ms3 & game & !aec;
assign p43 = va14 & !vma5 & vma4 & !ms3 & !exrom & !game & !aec;
assign p44 = !ms0 & !ms1 & ms2 &ms3 & z80en & rw & aec & a12 & !a13 & a14 & a15;
assign p45 = hiram & loram & !ms3 & !exrom & rw & aec & !a13 & !a14 & a15;
assign p46 = !ms3 & exrom & !game & aec & !a13 & !a14 & a15;
assign p47 = ms0 & !ms1 & ms3 & exrom & !game & aec & !a14 & a15;
assign p48 = !ms0 & ms1 & ms3 & aec & !a14 & a15;
assign p49 = hiram & !ms3 & !exrom & !game & aec & a13 & !a14 & a15;
assign p50 = ms3 & exrom & !game & aec & a13 & !a14 & a15;
assign p51 = vma5 & vma4 & !ms3 & exrom & !game & !aec;
assign p52 = ms0 & !ms1 & ms3 & rw & aec & !a12 & !a13 & a14 & a15;
assign p53 = !ms0 & ms1 & ms3 & rw & aec & !a12 & !a13 & a14 & a15;
assign p54 = !ms0 & !ms1 & ms3 & rw & aec & !a12 & !a13 & a14 & a15;
assign p55 = !ms0 & !ms1 & z80io & !z80en & rw & aec & !a12 & !a13 & !a14 & !a15;
assign p56 = !ms0 & !ms1 & ms3 & rw & aec & !a14 & a15;
assign p57 = !ms0 & !ms1 & ms3 & rw & aec & a14 & !a15;
assign p58 = hiram & !ms3 & game & rw & aec & a13 & a14 & a15;
assign p59 = hiram & !ms3 & !exrom & !game & rw & aec & a13 & a14 & a15;
assign p60 = hiram & loram & !ms3 & game & rw & aec & a13 & !a14 & a15;
assign p61 = !z80io & !z80en & aec & !a10 & !a11 & !a13 & a14 & a15;
assign p62 = !z80io & !z80en & aec & a12 & !a13 & a14 & a15;
assign p63 = !z80io & !z80en & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p64 = !rw & aec;
assign p65 = rw & aec;
assign p66 = !aec;
assign p67 = !ms2 & !z80en & aec & !a10 & !a11 & a12 & !a13 & !a14 & !a15;
assign p68 = !ms2 & !z80en & !rw & aec & !a10 & !a11 & a12 & !a13 & !a14 & !a15;
assign p69 = !charen & !vma5 & vma4 & ms3 & aec;
assign p70 = !rom_256 & !ms0 & !ms1 & ms3 & rw & aec & a14 & !a15;
assign p71 = !rom_256 & !ms0 & !ms1 & ms3 & rw & aec & !a12 & !a13 & a14 & a15;
assign p72 = !rom_256 & !ms0 & !ms1 & z80io & !z80en & rw & aec & !a12 & !a13 & !a14 & !a15;
assign p73 = clk;
assign p74 = rw & !aec & vicfix;
assign p75 = !ms0 & !ms1 & ms3 & rw & aec & a13 & a14 & a15;
assign p76 = !rom_256 & !ms0 & !ms1 & ms3 & rw & aec & a13 & a14 & a15;
assign p77 = !ms0 & ms1 & ms3 & rw & aec & a13 & a14 & a15;
assign p78 = !ms0 & ms1 & ms2 & ms3 & rw & aec & a12 & !a13 & a14 & a15;
assign p79 = ms0 & !ms1 & ms3 & rw & aec & a13 & a14 & a15;
assign p80 = ms0 & !ms1 & ms2 & ms3 & rw & aec & a12 & !a13 & a14 & a15;
assign p81 = !ms3 & exrom & !game & aec & a12 & !a14 & !a15;
assign p82 = !ms3 & exrom & !game & aec & a13 & !a14;
assign p83 = !ms3 & exrom & !game & aec & a14;
assign p84 = !ms3 & exrom & !game & aec & !a12 & !a13 & a14 & a15;
assign p85 = !loram & ms3 & aec;
assign p86 = !hiram & ms3 & !aec;
/* outputs */
assign sden = p42 || p43 || p66 || p69;
assign roml = p45 || p46 || p47;
assign romh = p49 || p50 || p51 || p52 || p79 || p80;
assign clrbnk = p85 || p86;
assign from = p48 || p53 || p77 || p78;
assign rom4 = p54 || p55 || p75;
assign rom3 = p56 || p70;
assign rom2 = p57;
assign rom1 = p58 || p59 || p60 || p71 || p71 || p76;
assign iocs = p0 || p1 || p2 || p3 || p4 || p5 || p6 || p7 || p8 || p9 || p10 || p11 || p62;
assign dir = p12 || p14 || p16 || p18 || p20 || p22 || p24 || p26 || p28 || p30 || p32 || p34 || p39 || p40 || p41 || p44 || p65;
assign vic = p12 || p13 || p14 || p15 || p16 || p17 || p18 || p19 || p20 || p21 || p22 || p23 || p61;
assign ioacc = p0 || p1 || p2 || p3 || p4 || p5 || p6 || p7 || p8 || p9 || p10 || p11 ||
p12 || p13 || p14 || p15 || p16 || p17 || p18 || p19 || p20 || p21 || p22 || p61 || p62;
assign gwe = p37;
assign colram = p24 || p25 || p26 || p27 || p28 || p29 || p30 || p31 || p32 || p33 || p34 || p35 || p36 || p63 || p67;
assign charrom = p39 || p40 || p41 || p42 || p43 || p44 || p69;
assign casenb_latch = p73 || p74;
assign casenb_int = p0 || p1 || p2 || p3 || p4 || p5 || p6 || p7 || p8 || p9
|| p10 || p11 || p12 || p13 || p14 || p15 || p16 || p17 || p18 || p19
|| p20 || p21 || p22 || p23 || p39 || p40 || p41 || p42 || p43 || p44
|| p45 || p46 || p47 || p48 || p49 || p50 || p51 || p52 || p53 || p54
|| p55 || p56 || p57 || p58 || p59 || p60 || p61 || p62 || p63 || p67
|| p69 || p70 || p71 || p72 || p75 || p76 || p77 || p78 || p79 || p80
|| p81 || p82 || p83 || p84;
/* Latched outputs */
always @ (clk or p64)
if (clk)
dwe <= p64;
always @ (casenb_latch or casenb_int)
if (casenb_latch)
casenb <= casenb_int;
endmodule
Apa berikutnya
Chip yang dianalisis selanjutnya adalah chip MMU komputer C128, yang akan memakan waktu lebih lama untuk dikerjakan, karena ini bukan hanya PLA biasa.
Lihat juga: