Intel mengembangkan chip 8087 pada tahun 1980 untuk meningkatkan kinerja PC dengan prosesor garis 8086/8088 (seperti PC IBM) saat melakukan operasi floating point. Karena mikroprosesor pertama dirancang untuk melakukan operasi dengan bilangan bulat, pelaksanaan operasi dengan angka floating point lambat, yaitu tentang kinerja operasi transendental, seperti fungsi trigonometri atau logaritma. Coprocessor 8087 secara signifikan meningkatkan kecepatan melaksanakan tugas floating point, semuanya dilakukan hampir 100 kali lebih cepat. Arsitektur 8087 juga diimplementasikan pada prosesor Intel yang lebih baru, dan instruksi 8087 masih digunakan pada PC x86 modern. Intel memperkenalkan chip 8087 pada 1980, yang dirancang untuk meningkatkan kinerja komputasi floating point pada prosesor 8086 dan 8088.

Karena mikroprosesor awal hanya bekerja dengan bilangan bulat, aritmatika floating-point lambat, dan operasi transendental seperti pemicu atau logaritma tampak lebih buruk. Menambahkan 8087 coprocessor matematika ke sistem memungkinkan kami untuk mempercepat operasi floating-point sebanyak 100 kali. Arsitektur 8087 menjadi bagian dari prosesor Intel yang lebih baru, dan instruksi 8087 (meskipun sudah ketinggalan zaman) masih merupakan bagian dari desktop x86 modern.
Chip 8087 memberikan aritmatika floating point cepat untuk PC IBM asli dan menjadi bagian dari arsitektur x86 yang digunakan saat ini. Salah satu fitur yang tidak biasa dari 8087 adalah ROM multi-level (memori read-only), yang mampu menyimpan dua bit per transistor, yang dua kali kepadatan ROM konvensional. Alih-alih menyimpan data biner, setiap sel dalam ROM 8087 menyimpan satu dari empat nilai yang berbeda, yang kemudian diterjemahkan ke dalam dua bit. Karena 8087 membutuhkan ROM dalam jumlah besar untuk mikrokode (1), dan jumlah transistor pada chip sangat terbatas, Intel menggunakan teknologi yang tidak biasa untuk menyelesaikan masalah. Pada artikel ini, saya akan menjelaskan bagaimana Intel mengimplementasikan ROM berlapis ini.
Saya membuka chip 8087 dan memotretnya dengan mikroskop, mengambil foto di bawah. Dalam foto itu, saya menunjukkan blok fungsional utama berdasarkan teknik reverse saya sendiri (Klik untuk memperbesar gambar). Matriks prosesor 8087 cukup kompleks, dengan 40.000 transistor (2). The 8087 menggunakan angka floating point 80-bit: 64 bit dicadangkan untuk mantissa, 15 bit untuk eksponen, dan bit lain yang ditandatangani. (Contoh angka dengan basis 10: antara 6.02 × 1023, 6.02 adalah mantissa dan 23 adalah eksponen). Di bagian bawah foto, kata "pemrosesan fraksi" menandai bagian dari sirkuit mantissa. Dari kiri ke kanan, ini termasuk: penyimpanan konstan, pergeseran 64-bit, 64-bit adder / subtracter, dan register stack. Sedikit lebih tinggi adalah skema untuk memproses eksponen.
Chip coprocessor matematika untuk operasi Intel 8087 floating point, dengan penunjukan blok fungsional utamaMelaksanakan instruksi pada 8087 membutuhkan beberapa langkah, dan dalam beberapa kasus lebih dari 1000. Firmware 8087 menggunakan mikrokode untuk menentukan operasi tingkat rendah pada setiap langkah: pergeseran, kenaikan, sampel memori, konstanta membaca, dll. Anda dapat melihat mikrokode sebagai program sederhana, ditulis dalam bentuk perintah mikro, di mana setiap perintah mikro menghasilkan sinyal kontrol untuk berbagai komponen chip. Foto di atas menunjukkan ROM dengan program mikrokode 8087. ROM menempati sebagian besar chip, jelas menunjukkan mengapa ROM multi-level yang kompak diperlukan. Di sebelah kiri ROM adalah "mesin" di mana program mikrokode diluncurkan, pada kenyataannya, prosesor sederhana.
8087 bekerja sebagai coprocessor dengan prosesor 8086. Ketika 8086 mendeteksi instruksi floating point khusus, prosesor mengabaikannya dan membiarkan 8087 untuk menjalankan instruksi secara paralel. Saya tidak akan menjelaskan secara rinci cara kerja bagian dalam 8087, tetapi, singkatnya, operasi floating point diimplementasikan menggunakan operasi integer add / kurangi dan shift. Untuk menambah atau mengurangi dua angka floating-point, 8087 melakukan pergeseran bitwise dari angka sampai pembatas biner (yaitu, pemisah desimal adalah koma, tetapi dalam sistem biner) adalah sama, dan kemudian menambahkan atau mengurangi mantissa. Penggandaan, pembagian dan akar kuadrat dilakukan oleh shift, penambahan atau pengurangan berulang. Operasi transendental (tan, arctan, log, power) menggunakan algoritma CORDIC, yang menggunakan shift dan penambahan konstanta khusus, memproses satu bit pada satu waktu. 8087 juga menemui banyak kasus khusus: infinity, overflow, NaN (bukan angka), angka denormalized, dan beberapa mode pembulatan. Mikrokode yang disimpan dalam ROM mengendalikan semua operasi ini.
Implementasi ROM
Chip 8087 terdiri dari matriks silikon kecil di mana silikon didoping dengan pengotor di beberapa tempat untuk mendapatkan sifat semikonduktor yang diinginkan. Polisilikon (jenis silikon khusus) diterapkan pada permukaan silikon, yang membentuk kabel dan transistor. Dan akhirnya, lapisan logam di atas silikon melengkapi rangkaian listrik yang berfungsi. Dalam foto di bawah ini, di sisi kiri, sebagian kecil chip ditunjukkan, seperti yang terlihat di bawah mikroskop, menunjukkan kabel logam kekuningan. Di sisi kanan foto, logam dihilangkan dengan asam, memperlihatkan polisilikon dan silikon. Ketika polisilikon melintasi silikon, sebuah transistor terbentuk. Area merah muda adalah silikon yang diolah, dan garis vertikal tipis adalah polisilikon. Lingkaran kecil adalah kontak antara lapisan silikon dan logam, yang menghubungkan keduanya.
Struktur ROM di Intel 8087 FPU. Lapisan logam ditampilkan di sebelah kiri, dan polisilikon dan silikon di sebelah kanan.Meskipun ada banyak cara untuk membangun ROM, cara standar adalah membuat kisi "sel" di mana setiap sel menyimpan satu bit. Setiap sel mungkin memiliki transistor (yang berarti 0 bit) atau tidak memiliki transistor, yang berarti 1 bit. Pada gambar di atas, Anda dapat melihat kisi sel dengan transistor (di mana polisilikon diterapkan pada silikon) dan transistor yang hilang (di mana ada kesenjangan dalam silikon). Untuk membaca informasi dari ROM, satu baris pemilihan kolom diaktifkan (berdasarkan alamat) untuk memilih bit yang disimpan dalam kolom ini dan mendapatkan satu bit dari setiap baris pada output. Anda dapat melihat garis pemilihan kolom vertikal (garis pilih kolom) dari polisilikon, dan baris logam horizontal pada foto di atas. Garis-garis vertikal dari silikon yang di-ground dibumikan.
Diagram di bawah ini (sesuai dengan segmen ROM 4x4) menjelaskan bagaimana fungsi ROM. Setiap sel memiliki transistor (hitam), atau tidak memiliki transistor (berwarna abu-abu). Ketika tegangan diberikan ke jalur pemilihan kolom polisilikon, transistor dalam kolom ini menghidupkan dan membumikan baris logam yang sesuai. (dalam hal ini, transistor NMOS seperti gerbang yang terbuka jika inputnya adalah 0, dan ditutup jika inputnya adalah 1.) “Baris” logam dari rangkaian menghasilkan data yang disimpan dalam “kolom” yang dipilih.
Segmen Skema 4x4 ROMSinyal pemilihan kolom dihasilkan oleh rangkaian dekoder. Karena rangkaian ini dibangun dari katup NOR, saya pertama-tama akan menjelaskan desain katup. Diagram di bawah ini menunjukkan gerbang NOR empat input yang dibangun dari empat transistor dan resistor pull-up (walaupun sebenarnya, transistor khusus melakukan fungsi resistor). Di sisi kiri rangkaian, semua input adalah 0, sehingga semua transistor dimatikan, dan resistor pull-up mempertahankan sinyal output pada level "tinggi". Di sisi kanan, 1 diterapkan ke salah satu input, menyalakan transistor. Transistor di-ground, jadi sinyal keluarannya sekarang "rendah". Jadi, jika ada input yang tinggi (1), outputnya rendah (0). Jadi sirkuit ini mengimplementasikan katup NOR.
Gerbang NOR 4 arah dibangun dari transistor NMOSRangkaian dekoder pemilihan kolom menerima bit alamat yang masuk dan mengaktifkan jalur pilihan yang sesuai. Dekoder berisi 8-input gerbang NOR untuk setiap kolom, yaitu, satu gerbang NOR untuk setiap alamat. Foto menunjukkan dua elemen NOR yang menghasilkan sinyal pemilihan kolom (untuk kesederhanaan, saya hanya akan menampilkan empat dari 8 input). Setiap kolom menggunakan kombinasi berbeda dari garis alamat dan garis alamat empuk sebagai input, memilih alamat yang berbeda. Baris alamat berada dalam lapisan logam, yang dihapus pada foto di bawah ini; garis alamat disorot dalam warna hijau. Untuk menentukan alamat yang terkait dengan kolom, lihat pin persegi yang terkait dengan setiap transistor dan catat garis alamat mana yang terhubung. Jika semua garis alamat yang terhubung ke transistor kolom berada pada level rendah (0), gerbang NOR akan memilih kolom itu.
Bagian dari decoder alamat. Dekoder alamat memilih kolom ganjil dalam ROM, dihitung dari kanan ke kiri. Angka-angka di atas menunjukkan alamat yang terkait dengan setiap output.Foto di bawah ini menunjukkan sebagian kecil dari dekoder ROM dengan semua 8 input untuk gerbang NOR. Anda dapat membaca alamat biner dengan memeriksa dengan seksama koneksi di bilah alamat. Perhatikan pola biner: a1 bergabung dengan nilai perubahan di setiap kolom, a2 bergabung bergantian setiap dua kolom, a3 bergabung setiap empat kolom, dll. A0 diperbaiki karena sirkuit dekoder ini memilih kolom ganjil; sirkuit ROM yang sama memilih alamat genap (pemisahan seperti itu diperlukan agar decoder cocok dengan chip, karena setiap kolom decoder selebar dua kali sel ROM).
Bagian dari decoder alamat untuk mikrokode ROM 8087. Dekoder mengubah alamat 8-bit menjadi sinyal pemilihan kolomKomponen terakhir dari ROM adalah seperangkat multiplexer yang mengurangi 64 saluran keluaran menjadi 8 saluran. Setiap multiplexer 8-ke-1 memilih salah satu dari 8 inputnya berdasarkan alamat. Diagram di bawah ini menunjukkan salah satu dari multiplexer jalur prosesor 8087, dibangun dari delapan transistor pass-through besar, yang masing-masing terhubung ke salah satu jalur "line". Semua transistor terhubung ke output, jadi ketika transistor yang dipilih dihidupkan, ia mentransfer inputnya ke output. Transistor multiplexer jauh, jauh lebih besar daripada transistor dalam ROM untuk mengurangi distorsi sinyal ROM. Sebuah decoder (mirip dengan yang dipertimbangkan sebelumnya, tetapi lebih kecil) menghasilkan delapan garis kontrol multiplexer dari tiga garis alamat.
Salah satu multiplexer 8-baris dalam ROM. Di sini Anda dapat melihat lapisan silikon (poli), dengan senyawa logam dicat oranyeUntuk meringkas, ROM menyimpan bit dalam kotak. Ia menggunakan delapan bit alamat untuk memilih kolom di kisi. Kemudian tiga bit alamat pilih delapan output yang diinginkan dari "garis".
ROM berlapis
Sejauh ini, saya telah menjelaskan perangkat ROM khas yang menyimpan satu bit per sel. Jadi bagaimana 8087 dapat menyimpan dua bit per sel? Jika Anda perhatikan dengan teliti, mikrokode ROM 8087 berisi empat ukuran transistor yang berbeda - jika Anda menganggap tidak adanya transistor sebagai salah satu ukuran (6). Dengan empat opsi untuk setiap transistor, satu sel dapat menyandikan dua bit, kira-kira menggandakan densitas (7). Bagian saat ini menjelaskan bagaimana empat ukuran transistor menghasilkan empat arus yang berbeda, dan bagaimana sirkuit analog dan digital dari chip mengubah arus ini menjadi dua bit.
Sebuah mikrograf ROM mikrokode 8087 menunjukkan empat ukuran transistor yang berbeda. Ini memungkinkan ROM untuk menyimpan dua bit per sel.Ukuran transistor mengendalikan arus melalui transistor (8). Faktor geometris yang penting adalah lebar silikon yang berbeda (merah muda), di mana ia bersinggungan dengan polisilikon (garis vertikal), menciptakan transistor dengan lebar gerbang yang berbeda. Karena lebar gerbang mengontrol arus melalui transistor, empat ukuran transistor menghasilkan empat arus yang berbeda: transistor terbesar melewati sebagian besar arus, dan tidak ada arus yang mengalir sama sekali jika tidak ada transistor.
Arus ROM dikonversi menjadi bit dalam beberapa langkah. Pertama, resistor pull-up mengubah arus menjadi tegangan. Kemudian, tiga pembanding membandingkan tegangan dengan tegangan referensi untuk menghasilkan sinyal digital, menentukan tegangan mana yang lebih tinggi / lebih rendah. Akhirnya, gerbang logika mengubah sinyal keluaran komparator menjadi dua bit keluaran. Pola ini diulang delapan kali, menghasilkan total 16 bit pada output.
Skema untuk membaca dua bit dari sel ROMDiagram di atas melakukan langkah-langkah konversi ini. Akibatnya, salah satu transistor ROM dipilih oleh jalur pemilihan "kolom" dan multiplexer (dibahas sebelumnya) yang menghasilkan satu dari empat arus. Kemudian, resistor pull-up (12) mengubah arus transistor menjadi tegangan, akibatnya tegangan tergantung pada ukuran transistor yang dipilih. Komparator membandingkan tegangan ini dengan tiga tegangan referensi, dan output 1 jika tegangan ROM lebih tinggi dari tegangan referensi. Komparator dan tegangan referensi memerlukan desain yang hati-hati, karena tegangan ROM dapat berbeda hanya 200 mV.
Tegangan referensi berada di tengah-tengah antara nilai tegangan yang diharapkan dari ROM, yang memungkinkan beberapa fluktuasi tegangan. Tegangan ROM "rendah" lebih rendah dari semua tegangan referensi, sehingga semua komparator akan menghasilkan 0. Tegangan ROM kedua lebih tinggi dari Ref 0, sehingga output komparator lebih rendah 1. Pada tegangan ROM ketiga, dua komparator yang lebih rendah menghasilkan 1, dan maksimum tegangan ROM pada output dari ketiga pembanding 1. Dengan demikian, tiga pembanding menghasilkan empat pola keluaran yang berbeda, tergantung pada ROM transistor. Elemen logika kemudian mengubah output komparator menjadi dua bit output (10).
Desain komparator menarik karena merupakan jembatan antara dunia analog dan digital, menghasilkan 1 atau 0 jika tegangan ROM lebih tinggi atau lebih rendah dari tegangan referensi. Setiap komparator berisi penguat diferensial yang memperkuat perbedaan antara tegangan ROM dan tegangan referensi. Output dari penguat diferensial menggerakkan gerbang yang menstabilkan output dan mengubahnya menjadi sinyal level logika. Penguat diferensial (di bawah) adalah rangkaian analog standar. Sumber saat ini (simbol di bawah) memberikan arus searah. Jika salah satu transistor memiliki tegangan input yang lebih tinggi daripada yang lain, sebagian besar arus melewati transistor ini. Penurunan tegangan melintasi resistor akan menyebabkan output yang sesuai menjadi lebih rendah dan output lainnya menjadi lebih tinggi.
Diagram yang menunjukkan operasi pasangan diferensial. Sebagian besar arus akan melewati transistor dengan tegangan input yang lebih tinggi, menghasilkan sinyal output yang lebih rendah. Simbol lingkaran ganda di bawah ini adalah sumber arus searah IFoto di bawah ini menunjukkan salah satu pembanding pada sebuah chip; lapisan logam di atas, transistor di bawahnya. Saya hanya akan mempertimbangkan poin utama skema rumit ini; Lihat catatan 12 untuk detailnya. Sinyal dari ROM dan multiplexer disuplai ke kiri. Sirkuit pull-up 12 mengubah arus menjadi tegangan. Dua transistor penguat diferensial besar membandingkan tegangan ROM dengan tegangan referensi (input dari atas). Output dari penguat diferensial pergi ke sirkuit rana (tersebar di foto); output rana berada di sudut kanan bawah. Sumber arus dari penguat diferensial dan resistor pull-up terbuat dari transistor mode penipisan. Tiga komparator output digunakan di setiap sirkuit output, memberikan total 24 komparator.
Salah satu pembanding pada 8087. Chip ini berisi 24 pembanding untuk mengubah level tegangan dari ROM bertingkat ke data binerSetiap tegangan referensi dihasilkan oleh transistor dengan ukuran yang dipilih dengan cermat dan sirkuit pull-up. Rangkaian referensi tegangan dirancang sedekat mungkin dengan sirkuit sinyal ROM, sehingga setiap perubahan dalam pembuatan chip akan mempengaruhi kedua elemen secara sama. Tegangan referensi dan sinyal ROM menggunakan sirkuit beban yang sama. Selain itu, setiap rangkaian tegangan referensi termasuk transistor yang sangat besar, identik dengan transistor multiplexer, meskipun tidak ada multiplexing di sirkuit sinyal referensi - hanya untuk memastikan "kecocokan" dari sirkuit. Tiga rangkaian tegangan referensi identik kecuali untuk ukuran transistor referensi (9).
Sebuah sirkuit menghasilkan tiga tegangan referensi. Ukuran transistor referensi berada di antara ukuran transistor ROM. Lapisan oksida tidak sepenuhnya dihapus dari bagian matriks ini, karena warna yang berputar muncul di fotoUntuk merakit seluruh puzzle, foto di bawah ini menunjukkan lokasi komponen-komponen mikrokode ROM pada chip (12). Bagian utama dari rangkaian ROM terdiri dari transistor yang menyimpan data. Rangkaian dekoder kolom terletak di atas dan di bawah data ROM. Setengah dari decoder pemilihan kolom di atas dan setengah di bawah, untuk tata letak yang lebih baik. Sirkuit output di sebelah kanan. Delapan multiplexer memotong 64 baris menjadi delapan. Kemudian delapan baris memasuki komparator, menghasilkan 16 bit pada output ROM ke kanan. Rangkaian referensi di atas komparator menghasilkan tiga tegangan referensi. Di kanan bawah, decoder garis kecil mengontrol multiplexer.
ROM firmware dari Intel 8087 FPU dilabeli dengan komponen utamaMeskipun pada awalnya mungkin tampak bahwa ROM multilevel akan setengah dari ROM konvensional, efeknya tidak begitu terlihat karena rangkaian tambahan komparator, dan karena fakta bahwa transistor itu sendiri sedikit lebih besar, karena kebutuhan untuk menggunakan beberapa ukuran. Meskipun demikian, ROM multilevel menghemat sekitar 40% dari ruang yang akan ditempati oleh ROM biasa.
Sekarang saya mengerti struktur ROM, saya bisa dengan sederhana (tapi membosankan) membaca isi ROM, hanya melihat ukuran masing-masing transistor di bawah mikroskop. Tapi, tidak mengetahui set instruksi mikrokode, isi ROM tidak berguna.
Kesimpulan
8087 « » . Intel 1981 iAPX 432.11 , 1980- . , - , , , , , , (14).
, , -. - (13). - 4 ( 16 ) , (QLC, quad-level cell). , 1980- , .
, @kenshirriff 8087. RSS-. 8087.
- 8087 1648 ( ), 16 , 26368 . , Intel .
- 8087: Intel , 40 000 , , 45 000. . , , PLA , , «» , . , .
- 8086 8087 ; . , 8087 8086 , 8087. , 8086 , . , 8087 8086 ( 8088), , 8086. , 8086, . 8087 , 8086. , 8086 8087, , . , 8087 , , . 8087 , , . 8087 8087, .
- , , , , , . , ROM, , . , 8 1/8 , 1/8 . , , (, 1 × 16) , . , «» . , Intel ; 1405 512 . , «» - 20 .
- IBM : ( , ), (link). , Xerox Alto, . , . , .
- , Hacker News , 8087 . , , .
- 1980- . Mostek : . , . Intel, ( ), . ( ) . ( ), , . Z-80 «», , , , . , , Z-80 , , , .
- . ( — .) ( , ) , . MOSFET . Wikipedia
- , -. , . , Reference 0 , . , , . : , , , . - , , , .
- : = 00, = 01, = 11, = 10. ; , , . (. «Two Bits Per Cell ROM», Stark).
- Intel iAPX 43203 (1981) , 8087. «The interface processor for the Intel VLSI 432 32 bit computer,» J. Bayliss et al., IEEE J. Solid-State Circuits, vol. SC-16, . 522-530, 1981 . 43203 - iAPX 432. Intel iAPX 432 1975 , «», Intel 1980- . iAPX 432 , Intel 8086 , 1978 . Intel 8086 , x86, iAPX 432 1986 .
- ( «Multiple-Valued ROM Output Circuits») . . (T3, T4, T5) . 4 5 , 3, ( ). ( ) T6, . ().
- - SLC ( single level cell — ), MLC (multi level cell — ), TLC (triple level cell — ) QLC (quad level cell — ). , - , , - .
- «Electronics» «Four-State Cell Doubles ROM Bit Capacity» (. 39, 9 1980 .), Intel, . Intel « » COMPCON (. 209-212, 1981 .). Intel «Multiple-valued ROM output circuits» (Proc. 14th Int. Symp. Multivalue Logic, 1984). , , — « A Survey of Multivalued Memories » («IEEE Transactions on Computers», 1986 ., . 99–106) « A review of multiple-valued memory technology » (IEEE Symposium on Multivalued Logic, 1998).
, . Apakah Anda suka artikel kami? Ingin melihat materi yang lebih menarik? Dukung kami dengan melakukan pemesanan atau merekomendasikannya kepada teman-teman Anda,
diskon 30% untuk pengguna Habr pada analog unik dari server entry-level yang kami temukan untuk Anda: Seluruh kebenaran tentang VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps dari $ 20 atau bagaimana membagi server? (pilihan tersedia dengan RAID1 dan RAID10, hingga 24 core dan hingga 40GB DDR4).
VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps 1 ,
.
Dell R730xd 2 kali lebih murah? Hanya kami yang memiliki
2 x Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 TV dari $ 249 di Belanda dan Amerika Serikat! Baca tentang
Cara Membangun Infrastruktur kelas menggunakan server Dell R730xd E5-2650 v4 seharga 9.000 euro untuk satu sen?