อ่าน 7 นาที
อินเทล 8087
Intel 8087 ซึ่งประกาศในปี 1980 เป็น โคโปรเซสเซอร์ จุดลอยตัว ตัวแรก สำหรับตระกูลไมโครโปรเซสเซอร์ 8086 [ 4 ] [ 5 ] [ 6 ] วัตถุประสงค์ของชิปนี้คือเพื่อเร่งความเร็ว การดำเนินการ...
อินเทล 8087
| ข้อมูลทั่วไป | |
|---|---|
| เปิดตัว | 1980 |
| ทำการตลาดโดย | อินเทล , ไอบีเอ็ม[ 1 ] |
| ออกแบบโดย | อินเทล |
| ผู้ผลิตทั่วไป | |
| ผลงาน | |
| ความเร็วสัญญาณนาฬิกาCPU สูงสุด | 4 เมกะเฮิร์ตซ์ ถึง 10 เมกะเฮิร์ตซ์ |
| ข้อกำหนดทางกายภาพ | |
| ทรานซิสเตอร์ |
|
| บรรจุุภัณฑ์ |
|
| สถาปัตยกรรมและการจำแนกประเภท | |
| โหนดเทคโนโลยี | 4.5->3 ไมโครเมตร |
| ชุดคำสั่ง | x87 ( ส่วนขยาย โคโปรเซสเซอร์ของx86-16 ) |
| ประวัติศาสตร์ | |
| ผู้มาก่อน | 8231/8232 |
| ผู้สืบทอด | 80287 |
Intel 8087ซึ่งประกาศในปี 1980 เป็นโคโปรเซสเซอร์จุดลอยตัว ตัวแรก สำหรับตระกูลไมโครโปรเซสเซอร์8086 [ 4 ] [ 5 ] [ 6 ]วัตถุประสงค์ของชิปนี้คือเพื่อเร่งความเร็ว การดำเนินการ ทางคณิตศาสตร์จุดลอยตัวเช่นการบวกการลบการ คูณ การหารและรากที่สองนอกจากนี้ยังคำนวณฟังก์ชันอดิศัยเช่นการ คำนวณ เลขชี้กำลังลอการิทึมหรือตรีโกณมิติ การเพิ่มประสิทธิภาพ มีตั้งแต่ประมาณ 20% ถึงมากกว่า 500% ขึ้นอยู่กับแอปพลิเคชันเฉพาะ 8087 สามารถทำงานได้ประมาณ 50,000 FLOPS [ 5 ]โดยใช้พลังงานประมาณ 2.4 วัตต์[ 6 ]
8087 เป็นวงจรรวมขั้นสูงที่ผลักดันขีดจำกัดของเทคโนโลยีการผลิตในยุคนั้น การดำเนินการพื้นฐานบน 8087 เช่น การบวกและการลบอาจใช้เวลามากกว่า 100 รอบการทำงานของเครื่อง และคำสั่งบางอย่างใช้เวลามากกว่า 1000 รอบการทำงาน[ 7 ]ชิปนี้ไม่มีตัวคูณฮาร์ดแวร์และใช้การคำนวณโดยใช้อัลกอริทึมCORDIC [ 8 ]
ยอดขายของ 8087 เพิ่มขึ้นอย่างมากเมื่อมีการเพิ่มซ็อกเก็ตโคโปรเซสเซอร์ลงใน เมนบอร์ด IBM PC ปี 1981 การพัฒนา 8087 นำไปสู่ มาตรฐาน IEEE 754-1985สำหรับการคำนวณเลขจุดลอยตัว ความเร็วที่มีให้เลือกคือ 4.77 (5), 8 และ 10 MHz [ 9 ] ต่อมามี โคโปรเซสเซอร์ x87สำหรับโปรเซสเซอร์80186 , 80286 , 80386 , 80386SXและ80486SXเริ่มต้นด้วย80486DX โปรเซสเซอร์ Intel x86มีโคโปรเซสเซอร์เลขจุดลอยตัวแบบรวม ฟังก์ชันเลขจุดลอยตัวถูกรวมเข้ากับโปรเซสเซอร์ โปรเซสเซอร์ Intel 486SX มีหน่วยประมวลผลเลขจุดลอยตัวที่ถูกปิดใช้งานหรือไม่มีอยู่ แต่มี 80487 แยกต่างหาก ซึ่งในความเป็นจริงแล้วก็คือ 486DX ที่มีพินพิเศษทำให้สามารถปิดใช้งาน CPU ที่มีอยู่ได้
ตัวแปร
| หมายเลขรุ่น[ 10 ] | ความถี่ | ชื่อรุ่น | ราคา[รายการที่ 1 ] |
|---|---|---|---|
| 8087 | 5 เมกะเฮิร์ตซ์ | กล่อง 8087 | 142 ดอลลาร์สหรัฐ |
| 8087-2 | 8 เมกะเฮิรตซ์ | กล่อง 8087-2 | 205 ดอลลาร์สหรัฐ |
| 8087-1 | 10 เมกะเฮิร์ตซ์ | กล่อง 8087-1 | 270 ดอลลาร์สหรัฐ |
- ^ราคาต่อหน่วยที่แนะนำ
การออกแบบและการพัฒนา
ก่อนหน้านี้ Intel ได้ผลิตหน่วยประมวลผลเลขคณิต8231 และหน่วยประมวลผลจุดลอยตัว8232ซึ่งออกแบบมาเพื่อใช้กับ โปรเซสเซอร์ 8080หรือโปรเซสเซอร์ที่คล้ายกัน และใช้บัสข้อมูล 8 บิต โดยเชื่อมต่อกับระบบโฮสต์ผ่านทาง I/O ที่ตั้งโปรแกรมไว้หรือตัวควบคุมDMA [ 11 ]
ชิป 8087 นั้นได้รับการคิดค้นขึ้นครั้งแรกโดย บิล โพลแมน ผู้จัดการฝ่ายวิศวกรรมของอินเทล ซึ่งดูแลการพัฒนาชิป 8086 บิลได้ดำเนินการเพื่อให้แน่ใจว่าการออกแบบชิป 8086 สามารถรองรับชิปคำนวณทางคณิตศาสตร์ที่ยังไม่ได้รับการพัฒนาขึ้นในขณะนั้นได้
ในปี 1977 Pohlman ได้รับอนุญาตให้ออกแบบชิปคณิตศาสตร์ 8087 โดย Bruce Ravenel ได้รับมอบหมายให้เป็นสถาปนิก และ John Palmer ได้รับการว่าจ้างให้เป็นสถาปนิกร่วมและนักคณิตศาสตร์สำหรับโครงการนี้ ทั้งสองได้คิดค้นการออกแบบที่ปฏิวัติวงการด้วยแมนทิสซา 64 บิตและเลขชี้กำลัง 16 บิตสำหรับจำนวนจริงรูปแบบที่ยาวที่สุด พร้อมด้วย CPU สถาปัตยกรรมสแต็กและรีจิสเตอร์สแต็ก 80 บิตแปดตัว พร้อมด้วยชุดคำสั่งที่มีความสามารถในการคำนวณสูง[ 12 ] การออกแบบนี้ได้แก้ปัญหาสำคัญบางประการที่ทราบกันดีในการคำนวณเชิงตัวเลขและซอฟต์แวร์เชิงตัวเลข ได้แก่ ปัญหาข้อผิดพลาดในการปัดเศษสำหรับตัวดำเนินการ 64 บิต และการแปลงโหมดตัวเลขสำหรับตัวเลข 64 บิตทั้งหมด Palmer ยกย่องงานเขียนของWilliam Kahan เกี่ยวกับจุดลอยตัวว่าเป็นอิทธิพลสำคัญในการออกแบบของพวกเขา [ 13 ] [ 14 ]
การออกแบบ 8087 ในช่วงแรกได้รับการตอบรับที่ไม่ค่อยดีนักในซานตาคลาราเนื่องจากการออกแบบที่ก้าวร้าว ในที่สุด การออกแบบนี้ถูกมอบหมายให้ Intel Israel และ Rafi Nave ได้รับมอบหมายให้เป็นผู้นำในการพัฒนาชิป Palmer, Ravenel และ Nave ได้รับสิทธิบัตรสำหรับการออกแบบนี้[ 15 ] Robert Koehler และ John Bayliss ยังได้รับสิทธิบัตรสำหรับเทคนิคที่คำสั่งบางคำสั่งที่มีรูปแบบบิตเฉพาะถูกถ่ายโอนไปยังโคโปรเซสเซอร์[ 16 ]
8087 มีทรานซิสเตอร์ 65,000 ตัว และผลิตเป็น วงจร HMOS แบบ depletion-load ขนาด 4.5 μm (ต่อมาลดขนาดเหลือ 3 μm) เพื่อลดขนาดของชิปซิลิคอน ไมโครโค้ดของโคโปรเซสเซอร์ถูกนำไปใช้ในROM แบบหลายระดับโดยแต่ละตำแหน่งจะเก็บข้อมูล 2 บิตโดยใช้กระแสไฟฟ้า 1 ใน 4 กระแสที่เป็นไปได้[ 17 ]อุปกรณ์นี้ทำงานร่วมกับ 8086 หรือ 8088 และแนะนำคำสั่ง ใหม่ประมาณ 60 คำ สั่ง คำสั่งแอสเซมบลีส่วนใหญ่ของ 8087 ขึ้นต้นด้วยFเช่นFADD, FMUL, FCOMและอื่นๆ ทำให้สามารถแยกแยะได้ง่ายจากคำสั่ง 8086 การเข้ารหัสไบนารีสำหรับคำสั่ง 8087 ทั้งหมดขึ้นต้นด้วยรูปแบบบิต 11011 เลขฐานสิบ 27 เหมือนกับอักขระASCII ESCแม้ว่าจะอยู่ในบิตลำดับสูงกว่าของไบต์ก็ตามคำนำหน้าคำสั่ง ที่คล้ายกันนี้ บางครั้งก็เรียกว่า " รหัสหลบหนี " ตัวย่อคำสั่งที่ Intel กำหนดสำหรับคำสั่งโคโปรเซสเซอร์เหล่านี้คือESC. โปรเซสเซอร์ 8087 มีราคาแพงและผลิตยาก มีอัตราผลผลิตต่ำ นอกจากนี้ยังร้อนมาก ทำให้ Intel ต้องใช้แพ็คเกจเซรามิกที่มีราคาแพงกว่าเพื่อการระบายความร้อนที่ดีขึ้น
เมื่อซีพียู 8086 หรือ 8088 ประมวลผลESCคำสั่ง หากไบต์ที่สอง (ไบต์ ModR/M) ระบุตัวถูกดำเนินการในหน่วยความจำ ซีพียูจะประมวลผลรอบการทำงานของบัสเพื่ออ่านข้อมูลหนึ่งเวิร์ดจากตำแหน่งหน่วยความจำที่ระบุในคำสั่ง (โดยใช้โหมดการกำหนดแอดเดรสใดๆ ของ 8086) แต่จะไม่เก็บค่าที่อ่านได้ลงในรีจิสเตอร์ของซีพียูหรือดำเนินการใดๆ กับค่าดังกล่าว โปรเซสเซอร์ร่วม 8087 จะสังเกตบัสและถอดรหัสกระแสคำสั่งให้ทำงานประสานกับ 8086 โดยจะจดจำคำสั่งของโปรเซสเซอร์ร่วมที่มุ่งไปยังตัวมันเอง สำหรับคำสั่ง 8087 ที่มีตัวถูกดำเนินการในหน่วยความจำ หากคำสั่งนั้นต้องการให้อ่านตัวถูกดำเนินการ โปรเซสเซอร์ร่วม 8087 จะรับข้อมูลเวิร์ดที่อ่านได้จากซีพียูหลักจากบัสข้อมูล หากตัวถูกดำเนินการที่จะอ่านมีความยาวมากกว่าหนึ่งเวิร์ด โปรเซสเซอร์ร่วม 8087 จะคัดลอกแอดเดรสจากบัสแอดเดรสด้วย จากนั้น หลังจากเสร็จสิ้นรอบการอ่านข้อมูลที่ขับเคลื่อนโดย CPU แล้ว 8087 จะใช้ DMA ทันทีเพื่อควบคุมบัสและถ่ายโอนไบต์เพิ่มเติมของตัวถูกดำเนินการเอง หากคำสั่ง 8087 ที่มีตัวถูกดำเนินการในหน่วยความจำต้องการให้เขียนตัวถูกดำเนินการนั้น 8087 จะละเว้นคำที่อ่านได้บนบัสข้อมูลและคัดลอกที่อยู่ จากนั้นร้องขอ DMA และเขียนตัวถูกดำเนินการทั้งหมดในลักษณะเดียวกับที่มันจะอ่านส่วนท้ายของตัวถูกดำเนินการแบบขยาย ในลักษณะนี้ CPU หลักจะรักษาการควบคุมบัสและจังหวะเวลาของบัสโดยทั่วไป ในขณะที่ 8087 จัดการด้านอื่นๆ ทั้งหมดของการดำเนินการคำสั่งโคโปรเซสเซอร์ ยกเว้นช่วงเวลา DMA สั้นๆ เมื่อ 8087 จะเข้าควบคุมบัสเพื่ออ่านหรือเขียนตัวถูกดำเนินการไปยัง/จากรีจิสเตอร์ภายในของตัวเอง ด้วยเหตุนี้ 8087 จึงสามารถประมวลผลได้เฉพาะตัวถูกดำเนินการที่ดึงมาจากหน่วยความจำหรือจากรีจิสเตอร์ของตัวเองเท่านั้น และการแลกเปลี่ยนข้อมูลใดๆ ระหว่าง 8087 กับ 8086 หรือ 8088 จะทำผ่าน RAM เท่านั้น
โปรแกรมหลักของ CPU ยังคงทำงานต่อไปในขณะที่ 8087 ประมวลผลคำสั่ง จากมุมมองของ CPU หลัก 8086 หรือ 8088 คำสั่งของโคโปรเซสเซอร์ใช้เวลาเพียงเท่ากับเวลาประมวลผลของโอเปอเรเตอร์โค้ดและรอบการทำงานของหน่วยความจำ (2 รอบสัญญาณนาฬิกาสำหรับไม่มีโอเปอเรเตอร์ 8 รอบสัญญาณนาฬิกาบวก เวลาคำนวณ EA [5 ถึง 12 รอบสัญญาณนาฬิกา] สำหรับโอเปอเรเตอร์ในหน่วยความจำ [บวกอีก 4 รอบสัญญาณนาฬิกาบน 8088] เพื่อถ่ายโอนไบต์ที่สองของคำโอเปอเรเตอร์) หลังจากนั้น CPU จะเริ่มประมวลผลคำสั่งถัดไปของโปรแกรม ดังนั้น ระบบที่มี 8087 จึงสามารถประมวลผลแบบขนานได้อย่างแท้จริง โดยทำการคำนวณหนึ่งในหน่วยคำนวณเลขคณิตจำนวนเต็มของ CPU หลัก ในขณะเดียวกันก็ทำการคำนวณเลขทศนิยมในโคโปรเซสเซอร์ 8087 ไปพร้อมกัน เนื่องจาก 8086 หรือ 8088 ควบคุมการไหลของคำสั่งและจังหวะเวลาแต่เพียงผู้เดียว และไม่มีสิทธิ์เข้าถึงสถานะภายในของ 8087 โดยตรง และเนื่องจาก 8087 สามารถประมวลผลคำสั่งได้ครั้งละหนึ่งคำสั่งเท่านั้น โปรแกรมสำหรับระบบ 8086/8087 หรือ 8088/8087 ที่รวมกันจึงต้องตรวจสอบให้แน่ใจว่า 8087 มีเวลาเพียงพอที่จะประมวลผลคำสั่งสุดท้ายที่ได้รับก่อนที่จะได้รับคำสั่งถัดไปWAITคำสั่ง (ของ CPU หลัก) ถูกจัดเตรียมไว้เพื่อจุดประสงค์นี้ และแอสเซมเบลอร์ส่วนใหญ่จะยืนยันWAITคำสั่งโดยปริยายก่อนแต่ละอินสแตนซ์ของคำสั่งโคโปรเซสเซอร์จุดลอยตัวส่วนใหญ่ (ไม่จำเป็นต้องใช้WAITคำสั่งก่อนการทำงานของ 8087 หากโปรแกรมใช้วิธีอื่นเพื่อให้แน่ใจว่ามีเวลาเพียงพอระหว่างการออกคำสั่ง 8087 ที่ไวต่อเวลา เพื่อให้ 8087 ไม่สามารถรับคำสั่งดังกล่าวได้ก่อนที่จะเสร็จสิ้นคำสั่งก่อนหน้า นอกจากนี้ หากWAITใช้คำสั่ง ก็ไม่จำเป็นต้องให้คำสั่งนั้นอยู่ก่อนคำสั่ง 8087 ถัดไปทันที) คำWAITสั่งดังกล่าวรอให้ขาอินพุต −TEST ของ 8086/8088 ถูกตั้งค่าเป็นค่าต่ำ (low) และขานี้เชื่อมต่อกับขา BUSY ของ 8087 ในทุกระบบที่มี 8087 (ดังนั้น TEST จะถูกตั้งค่าเป็นค่าต่ำเมื่อ BUSY ถูกตั้งค่าเป็นค่าต่ำ)
เนื่องจากคิวการดึงคำสั่งล่วงหน้าของ 8086 และ 8088 ทำให้เวลาที่คำสั่งถูกประมวลผลไม่ตรงกับเวลาที่ดึงคำสั่งนั้นมาเสมอไป โคโปรเซสเซอร์ เช่น 8087 จึงไม่สามารถระบุได้ว่าคำสั่งใดเป็นคำสั่งถัดไปที่จะถูกประมวลผลสำหรับตัวมันเองโดยการตรวจสอบบัสของ CPU เพียงอย่างเดียว 8086 และ 8088 มีสัญญาณสถานะคิวสองสัญญาณที่เชื่อมต่อกับโคโปรเซสเซอร์เพื่อให้สามารถซิงโครไนซ์กับเวลาการประมวลผลภายในของ CPU จากคิวการดึงคำสั่งล่วงหน้าได้ 8087 มีคิวการดึงคำสั่งล่วงหน้าของตัวเองที่เหมือนกัน ซึ่งมันจะอ่านรหัสการทำงานของโคโปรเซสเซอร์ที่มันประมวลผลจริง เนื่องจากคิวการดึงคำสั่งล่วงหน้าของ 8086 และ 8088 มีขนาดและอัลกอริธึมการจัดการที่แตกต่างกัน 8087 จึงระบุประเภทของ CPU ที่มันเชื่อมต่ออยู่โดยการสังเกตสายบัสของ CPU บางสายเมื่อระบบถูกรีเซ็ต และ 8087 จะปรับคิวคำสั่งภายในของมันตามนั้น การทำซ้ำฮาร์ดแวร์คิวพรีเฟตช์ในซีพียูและโคโปรเซสเซอร์นั้นไม่มีประสิทธิภาพในแง่ของการใช้พลังงานและพื้นที่ชิปโดยรวม แต่ทำให้ส่วนต่อประสานโคโปรเซสเซอร์ใช้ขาไอซีเฉพาะน้อยมาก ซึ่งเป็นสิ่งสำคัญ ในช่วงเวลาที่เปิดตัว 8086 ซึ่งเป็นตัวกำหนดส่วนต่อประสานโคโปรเซสเซอร์นั้น แพ็คเกจไอซีที่มีขามากกว่า 40 ขาหายาก ราคาแพง และประสบปัญหาต่างๆ เช่น ความจุของสายนำที่มากเกินไป ซึ่งเป็นปัจจัยจำกัดที่สำคัญสำหรับความเร็วในการส่งสัญญาณ
รหัสการทำงานของโคโปรเซสเซอร์ถูกเข้ารหัสด้วย 6 บิต กระจายใน 2 ไบต์ โดยเริ่มต้นด้วยลำดับการหลีกเลี่ยง (escape sequence):
┌──────────┬───────────┐ │ 1101 1xxx │ mmxx xrrr │ └───────────┴───────────┘
บิต "x" สามบิตแรกคือบิตสามบิตแรกของรหัสปฏิบัติการจุดลอยตัว จากนั้นบิต "m" สองบิต จากนั้นบิตสามบิตครึ่งหลังของรหัสปฏิบัติการจุดลอยตัว ตามด้วยบิต "r" สามบิต บิต "m" และ "r" ระบุข้อมูลโหมดการกำหนดที่อยู่[ 18 ]
ต้องเขียนโปรแกรมแอปพลิเคชันเพื่อใช้คำสั่งจุดลอยตัวพิเศษ ในระหว่างการทำงาน ซอฟต์แวร์สามารถตรวจจับโคโปรเซสเซอร์และใช้สำหรับการดำเนินการจุดลอยตัว เมื่อตรวจไม่พบ โคโปรเซสเซอร์จะต้องคำนวณฟังก์ชันจุดลอยตัวที่คล้ายกันในซอฟต์แวร์ หรือสามารถจำลองโคโปรเซสเซอร์ทั้งหมดในซอฟต์แวร์เพื่อความเข้ากันได้เชิงตัวเลขที่แม่นยำยิ่งขึ้น[ 19 ]
ทะเบียน

ตระกูล x87 ไม่ได้ใช้ ชุด รีจิสเตอร์ ที่สามารถเข้าถึงได้โดยตรง เหมือนกับรีจิสเตอร์หลักของโปรเซสเซอร์ x86 แต่รีจิสเตอร์ x87 จะสร้างโครงสร้างสแต็ก แบบลึกแปดระดับ [ 20 ]ตั้งแต่st0ถึง โดย st7ที่st0คือระดับบนสุด คำสั่ง x87 ทำงานโดยการผลัก คำนวณ และดึงค่าออกจากสแต็กนี้ อย่างไรก็ตาม การดำเนินการแบบไดอะดิก เช่นFADD, FMUL, FCMP, และอื่นๆ อาจใช้ระดับบนสุดโดยปริยายst0หรือst1อาจใช้st0ร่วมกับตัวถูกดำเนินการหน่วยความจำหรือรีจิสเตอร์ที่ระบุอย่างชัดเจนst0ดังนั้นรีจิสเตอร์จึงสามารถใช้เป็นตัวสะสม (เช่น เป็นปลายทางและตัวถูกดำเนินการด้านซ้ายรวมกัน) และยังสามารถแลกเปลี่ยนกับรีจิสเตอร์สแต็กทั้งแปดตัวได้โดยใช้คำสั่งที่เรียกว่า(รหัส D9C8–D9CF h ) ทำให้สแต็ก x87 สามารถใช้งานได้เป็นรีจิสเตอร์ที่สามารถเข้าถึงได้อย่างอิสระเจ็ดตัวบวกกับตัวสะสม สิ่งนี้ใช้ได้กับ โปรเซสเซอร์ x86 แบบซู เปอร์สเกลาร์โดยเฉพาะ ( Pentiumปี 1993 และรุ่นต่อมา) ซึ่งคำสั่งแลกเปลี่ยนเหล่านี้ได้รับการปรับให้เหมาะสมจนไม่มีค่าปรับนาฬิกาเลย FXCH stX
มาตรฐานเลขทศลอย IEEE
เมื่อ Intel ออกแบบ 8087 เป้าหมายคือการสร้างรูปแบบจุดลอยตัวมาตรฐานสำหรับการออกแบบในอนาคต แง่มุมที่สำคัญของ 8087 จากมุมมองทางประวัติศาสตร์คือมันกลายเป็นพื้นฐานของ มาตรฐานจุดลอยตัว IEEE 754 8087 ไม่ได้นำมาตรฐาน IEEE 754 มาใช้ในรายละเอียดทั้งหมด เนื่องจากมาตรฐานยังไม่เสร็จสมบูรณ์จนถึงปี 1985 แต่80387ทำได้ 8087 มีชนิดข้อมูลจุดลอยตัวพื้นฐาน 32/64 บิตสองชนิดและรูป แบบชั่วคราวภายในแบบ ขยาย 80 บิตเพิ่มเติม (ซึ่งสามารถจัดเก็บในหน่วยความจำได้เช่นกัน) เพื่อปรับปรุงความแม่นยำในการคำนวณขนาดใหญ่และซับซ้อน นอกเหนือจากนี้ 8087 ยัง มีรูปแบบ BCD ( เลขฐานสิบเข้ารหัสไบนารี ) แบบ แพ็ค 80 บิต/18 หลักและชนิดข้อมูลจำนวนเต็ม 16, 32 และ 64 บิต[ 20 ]
| 7 9 | ... | 7 1 | ... | 6 7 | ... | 6 3 | ... | 5 0 | ... | 3 1 | ... | 2 2 | ... | 1 5 | ... | 0 0 | (ตำแหน่งบิต) |
| ± | เลขชี้กำลัง | เศษส่วน | เลขทศนิยมความแม่นยำสูง 80 บิต | ||||||||||||||
| ± | เลขชี้กำลัง | เศษส่วน | เลขทศนิยมสองเท่า 64 บิต | ||||||||||||||
| ± | เลขชี้กำลัง | เศษส่วน | เลขทศนิยมความแม่นยำเดี่ยว 32 บิต | ||||||||||||||
| ± | จำนวนเต็ม BCD | จำนวนเต็มทศนิยม 18 หลัก | |||||||||||||||
| ± | จำนวนเต็ม | จำนวนเต็มไบนารี 64 บิต | |||||||||||||||
| ± | จำนวนเต็ม | จำนวนเต็มไบนารี 32 บิต | |||||||||||||||
| ± | จำนวนเต็ม | จำนวนเต็มไบนารี 16 บิต | |||||||||||||||
อินฟินิตี้
โปรเซสเซอร์ 8087 จัดการ ค่า อนันต์โดยใช้การปิดแบบแอฟฟินหรือการปิดแบบโปรเจคทีฟ (เลือกโดยรีจิสเตอร์สถานะ) ด้วยการปิดแบบแอฟฟิน ค่าอนันต์บวกและลบจะถูกมองว่าเป็นค่าที่แตกต่างกัน ด้วยการปิดแบบโปรเจคทีฟ ค่าอนันต์จะถูกมองว่าเป็นการแสดงค่าที่ไม่มีเครื่องหมายสำหรับจำนวนที่เล็กมากหรือใหญ่มาก[ 21 ]วิธีการจัดการค่าอนันต์ทั้งสองวิธีนี้ถูกรวมเข้าไว้ในร่าง มาตรฐานจุดลอยตัว IEEE 754อย่างไรก็ตาม การปิดแบบโปรเจคทีฟ ( ระบบจำนวนจริงที่ขยายแบบโปรเจคทีฟ ) ถูกตัดออกจากการออกมาตรฐาน IEEE 754-1985 อย่างเป็นทางการในภายหลัง โปรเซสเซอร์ 80287 ยังคงใช้การปิดแบบโปรเจคทีฟเป็นตัวเลือก แต่โปรเซสเซอร์ 80387 และโปรเซสเซอร์จุดลอยตัวรุ่นต่อมา (รวมถึง 80187) รองรับเฉพาะการปิดแบบแอฟฟินเท่านั้น
อินเทอร์เฟซโคโปรเซสเซอร์
หน่วยประมวลผลร่วม 8087 แตกต่างจากหน่วยประมวลผลร่วมของ Intel รุ่นต่อมาตรงที่มันเชื่อมต่อโดยตรงกับบัสแอดเดรสและบัสดาต้า 8087 จะค้นหาคำสั่งที่ขึ้นต้นด้วยลำดับ "11011" และดำเนินการตามคำสั่งนั้น โดยจะร้องขอ DMA จาก CPU หลักทันทีเมื่อจำเป็น เพื่อเข้าถึงตัวดำเนินการในหน่วยความจำที่ยาวกว่าหนึ่งเวิร์ด (16 บิต) จากนั้นจึงปล่อยการควบคุมบัสกลับไปยัง CPU หลักทันที หน่วยประมวลผลร่วมจะไม่หยุดการทำงานของโปรแกรมจนกว่าคำสั่งของหน่วยประมวลผลร่วมจะเสร็จสมบูรณ์ และโปรแกรมจะต้องซิงโครไนซ์หน่วยประมวลผลทั้งสองอย่างชัดเจน ดังที่ได้อธิบายไว้ข้างต้น (ในส่วน " การออกแบบและการพัฒนา ") อาจเกิดปัญหาการทำงานผิดพลาดได้หากคำสั่งของหน่วยประมวลผลร่วมไม่สามารถถอดรหัสเป็นคำสั่งที่หน่วยประมวลผลร่วมเข้าใจได้ หน่วยประมวลผลร่วมรุ่นต่อมาของ Intel ไม่ได้เชื่อมต่อกับบัสในลักษณะเดียวกัน แต่รับคำสั่งผ่านพอร์ต I/O ของหน่วยประมวลผลหลัก ซึ่งทำให้เสียเวลาในการประมวลผล แต่ปัญหาการทำงานผิดพลาดที่อาจเกิดขึ้นนั้นถูกหลีกเลี่ยงได้ เนื่องจากหน่วยประมวลผลหลักจะเพิกเฉยต่อคำสั่งหากหน่วยประมวลผลร่วมปฏิเสธที่จะยอมรับ ไมโครคอนโทรลเลอร์ 8087 สามารถตรวจจับได้ว่าเชื่อมต่อกับ 8088 หรือ 8086 โดยการตรวจสอบบัสข้อมูลระหว่างรอบการรีเซ็ต
8087 สามารถทำงานพร้อมกันได้ในขณะที่ 8086/8 ประมวลผลคำสั่งเพิ่มเติม อย่างไรก็ตาม มีโอกาสที่โปรแกรมจะล้มเหลวหากโคโปรเซสเซอร์ออกคำสั่งใหม่ก่อนที่คำสั่งสุดท้ายจะเสร็จสมบูรณ์ แอสเซมเบลอร์จะแทรกFWAITคำสั่งโดยอัตโนมัติก่อนโอเปอเรเตอร์โค้ดของโคโปรเซสเซอร์เกือบทุกตัว บังคับให้ 8086/8 หยุดการทำงานจนกว่า 8087 จะส่งสัญญาณว่าได้ดำเนินการคำสั่งก่อนหน้าเสร็จสิ้นแล้วและพร้อมที่จะดำเนินการคำสั่งถัดไป[ 22 ]ข้อจำกัดนี้ถูกลบออกจากการออกแบบในภายหลัง
ผู้สืบทอด
เช่นเดียวกับโปรเซสเซอร์ 8088 และ 8086 ที่ถูกแทนที่ด้วยชิ้นส่วนรุ่นใหม่กว่า โปรเซสเซอร์ 8087 ก็ถูกแทนที่เช่นกัน โปรเซสเซอร์ร่วมอื่นๆ ของ Intel ได้แก่80287 (จริงๆ แล้ว คือ 80C287เนื่องจาก Intel เปลี่ยนไปใช้กระบวนการ CMOS ในเวลานั้น) 80387และ80187เริ่มตั้งแต่ 80486 โปรเซสเซอร์ Intel รุ่นหลังๆ ไม่ได้ใช้โปรเซสเซอร์ร่วมสำหรับการคำนวณจุดลอยตัวแยกต่างหาก โปรเซสเซอร์ 80486DX , Pentiumและรุ่นต่อๆ มามีฟังก์ชันการคำนวณจุดลอยตัวอยู่ในชิปประมวลผลหลัก ข้อยกเว้นที่สำคัญคือ 80486SX ซึ่งเป็น 80486DX ที่ได้รับการดัดแปลงโดยปิดใช้งาน FPU ที่จริงแล้ว 80487 คือชิป 80486DXแบบเต็มรูปแบบ(มีขาเพิ่มอีกหนึ่งขา) ซึ่งเมื่อติดตั้งแล้วจะปิดใช้งานและแทนที่ CPU 80486SX
บรรณานุกรม
- ซานเชซ, ฮูลิโอ; แคนตัน, มาเรีย พี. (2007). โซลูชันซอฟต์แวร์สำหรับวิศวกรและนักวิทยาศาสตร์ . สำนักพิมพ์ CRC. ISBN 978-1-4200-4302-0.
ลิงก์ภายนอก
- ตัวประมวลผลร่วมทางคณิตศาสตร์ Intel 80x87 ที่ cpu-collection.de
- Coprocessor.info: ข้อมูลประวัติและรูปภาพของตัวประมวลผลร่วมทางคณิตศาสตร์ 8087
- เอกสารข้อมูลจำเพาะของหน่วยประมวลผลร่วมทางคณิตศาสตร์ Intel 8087
- Shirriff, Ken (พฤษภาคม 2020). "การวิเคราะห์ชิปของตัวเลื่อนบิตเร็วของตัวประมวลผลร่วมทางคณิตศาสตร์ 8087 "
- Shirriff, Ken (ธันวาคม 2025). "วงจรเรียงซ้อนของชิปคำนวณจุดลอยตัว Intel 8087 ที่ได้จากการวิศวกรรมย้อนกลับ" .
- Shirriff, Ken (ธันวาคม 2025). "เงื่อนไขในไมโครโค้ดของชิปจุดลอยตัว Intel 8087" .
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ อินเทล 8087
Intel 8087 ซึ่งประกาศในปี 1980 เป็น โคโปรเซสเซอร์ จุดลอยตัว ตัวแรก สำหรับตระกูลไมโครโปรเซสเซอร์ 8086 [ 4 ] [ 5 ] [ 6 ] วัตถุประสงค์ของชิปนี้คือเพื่อเร่งความเร็ว การดำเนินการ...
ตัวแปร
หมายเลขรุ่น [ 10 ] ความถี่ ชื่อรุ่น ราคา [ รายการที่ 1 ] 8087 5 เมกะเฮิร์ตซ์ กล่อง 8087 142 ดอลลาร์สหรัฐ 8087-2 8 เมกะเฮิรตซ์ กล่อง 8087-2 205 ดอลลาร์สหรัฐ 8087-1 10 เมกะเฮิร์ตซ์ กล่อง 8087-1 270 ดอลลาร์สหรัฐ ^ ราคาต่อหน่วยที่แนะนำ
การออกแบบและการพัฒนา
ก่อนหน้านี้ Intel ได้ผลิต หน่วยประมวลผลเลขคณิต 8231 และ หน่วยประมวลผลจุดลอยตัว 8232 ซึ่งออกแบบมาเพื่อใช้กับ โปรเซสเซอร์ 8080 หรือโปรเซสเซอร์ที่คล้ายกัน และใช้บัสข้อมูล 8 บิต โดยเชื่อมต่อกับระบบโฮสต์ผ่านทาง I/O ที่ตั้งโปรแกรมไว้หรือตัวควบคุม DMA [ 11 ]
ทะเบียน
ตระกูล x87 ไม่ได้ใช้ ชุด รีจิสเตอร์ ที่สามารถเข้าถึงได้โดยตรง เหมือนกับรีจิสเตอร์หลักของโปรเซสเซอร์ x86 แต่รีจิสเตอร์ x87 จะสร้างโครงสร้าง สแต็ก แบบลึกแปดระดับ [ 20 ] ตั้งแต่ st0 ถึง โดย st7 ที่ st0 คือระดับบนสุด คำสั่ง x87 ทำงานโดยการผลัก คำนวณ...