เหตุใด MIPS จึงรวม shamt และแยกความแตกต่างหน้าที่ / opcode


15

ฉันสับสนว่าทำไมนักออกแบบ MIPS จึงรวม 5 บิตไว้สำหรับการเลื่อนและมี opcode และบิตการทำงานแยกต่างหาก

เพราะ MIPS นั้น RISC ฉันคิดว่าการขยับจะทำได้ในไม่กี่คำสั่งดังนั้น 5 บิตเหล่านั้นจึงดูเหมือนว่าพวกเขากำลังสูญเสียพื้นที่เมื่อพวกเขาสามารถวางในทันที ฉันคิดว่า opcodes และฟังก์ชั่นนั้นแยกต่างหากสำหรับการแยกคำสั่ง R- และ I- ชนิด แต่สามารถทำได้โดยขยาย opcode ด้วย 1 บิต ด้วยคำแนะนำ R-type ทั้งสองนี้อาจมีความยาว 22 บิต สิ่งนี้จะไม่ทำงานหากคำแนะนำประเภท I และ J-type ต้องการเก็บไว้ทันทีและที่อยู่ แต่ทั้งคู่ก็ไม่จำเป็น

คำตอบ:


10

มีการแลกเปลี่ยนที่แตกต่างกันเล็กน้อยเกิดขึ้นที่นี่

ก่อนอื่นเราต้องการคำแนะนำให้คงความกว้าง (32- บิต) สิ่งนี้รับประกันว่าคำแนะนำจะบล็อกแคชและจัดหน้าซึ่งช่วยลดความแคชและสถานะของหน้าและการตรวจสอบสิทธิ์

ประการที่สองเราต้องการให้ฟิลด์คำสั่งต่างๆ ( opcode/ source regs/ immediates) เป็นความกว้างคงที่และตำแหน่งคงที่ นี่ทำให้พวกมันเร็วขึ้น / น้อยลงในการถอดรหัสและพวกมันก็จำเป็นในช่วงแรกของการวางท่อ ( destinationไม่จำเป็นต้องลงทะเบียนจนกว่าจะสิ้นสุดของไปป์ไลน์ดังนั้นจึงสามารถอยู่ในสถานที่ต่าง ๆ ในRและIคำแนะนำ) ตำแหน่งและความกว้างของfunctionฟิลด์มีความสำคัญน้อยกว่าเพราะจำเป็นต้องควบคุมการทำงานของ ALU แต่นั่นคือ ในขั้นตอนที่สามดังนั้นคุณมีเวลาเล็กน้อยที่จะทำงานกับมันหากจำเป็น

IJJ228228Iคำแนะนำนี้ยังดีสำหรับนักเขียนคอมไพเลอร์ / ลิงเกอร์ (บน SPARC ที่สนามทันทีมีเพียง 12 บิตพวกเขาจะต้องเพิ่มload-highคลาสการเรียนการสอนพิเศษทั้งหมดด้วยทันที 20 บิต)

26=64JRI

แต่นั่นก็ทำให้ห้องเลื้อยมีRคำแนะนำ นอกเหนือจาก opcode 6 บิตแล้วสิ่งเหล่านี้ต้องการเพียง 15 บิตเพิ่มเติมสำหรับข้อมูลจำเพาะการลงทะเบียนซึ่งเหลือ 11 บิตสำหรับ opcode เพิ่มเติมและ / หรือ shift-amount

คุณควรนึกถึงfunctionสนามว่าเป็น opcode เพิ่มเติมสำหรับRคำแนะนำ มีRopcode คำสั่งเพียงคำเดียวเท่านั้นแต่มี 64 แตกต่างกันfunctionsที่Rคำสั่งนั้นสามารถทำได้

ตกลง. เรามีIคำแนะนำที่แตกต่างกัน 60 คำและ 64 Rคำสั่งที่แตกต่างกันดังนั้นเราควรวางคำแนะนำการเปลี่ยนทันทีที่ใด

ไม่เพียง แต่จะมีIคำแนะนำน้อยลงเท่านั้น แต่ยังมีวิธีอื่น ๆ อีกมากมายที่เราต้องการทำกับI คำแนะนำ โปรดจำไว้ว่าคำสั่งสาขาทั้งหมดจำเป็นต้องมีIคำแนะนำเนื่องจากมีออฟเซ็ตแบบสัมพัทธ์ (ทันที) คำแนะนำในการโหลดและการจัดเก็บทั้งหมดเป็นIรูปแบบใน MIPS และในที่สุดเราก็ต้องมีคำสั่งโหลดบนทันทีเพื่อเป็นIคำสั่ง ไม่เพียงแค่นั้น แต่Rคำแนะนำยังคงมีบิตที่ไม่ได้ใช้เพิ่มอีก 5 บิต (ซึ่งเป็นสิ่งที่เราต้องการสำหรับการเปลี่ยนทันทีในสถาปัตยกรรมนี้) ดังนั้นสิ่งนี้จะให้แรงจูงใจเพิ่มเติมในการทำให้กะ - เปลี่ยนเป็นRคำสั่งพิเศษ (แปลก) .

การตัดสินใจเหล่านี้จำนวนมากเป็นศิลปะมากกว่าวิทยาศาสตร์ แต่มีตรรกะพื้นฐานที่สามารถแยกแยะได้ เป้าหมายสำคัญไม่ได้ทำให้จำนวนคำสั่งน้อยที่สุดเท่าที่จะเป็นไปได้เพื่อให้มีประสิทธิภาพสูงไปป์ไลน์พอดีกับชิปตัวเดียว (เพื่อให้ บริษัท เล็ก ๆ อย่าง MIPS และ Sun อยู่ในช่วงทศวรรษ 1980 สามารถแข่งขันกับ IBM และ DEC) (ชื่อ RISC ที่คิดค้นโดย David Patterson ค่อนข้างโชคร้ายมันติดอยู่เพราะมันน่ารักไม่ใช่เพราะ "คำแนะนำที่ลดลง" เป็นคำอธิบายที่ถูกต้องเกี่ยวกับสิ่งที่สถาปัตยกรรม MIPS และ SPARC พยายามทำจริงๆ) ดังนั้นคุณจึงต้องการ คำแนะนำความกว้างคงที่ (และค่อนข้างเล็กเพื่อให้คุณได้พฤติกรรม I-cache ที่ดีขึ้น) เพื่อทำการดึงข้อมูลเพจและถอดรหัสง่ายขึ้นและเร็วขึ้น คุณต้องการชิ้นส่วนของคำสั่งที่ต้องถอดรหัสก่อนopcodeแหล่งที่มาของการลงทะเบียนทั้งสองและการขยายสัญญาณทันที) เป็นความกว้างคงที่และอยู่ในตำแหน่งคงที่ คุณต้องการให้นานที่สุดเท่าที่จะเป็นไปได้ทันทีและคุณต้องการคำแนะนำที่แตกต่างกันมากพอที่จะรับได้เนื่องจากข้อ จำกัด อื่น ๆ เหล่านั้นทั้งหมด


ขอบคุณสำหรับการตอบกลับโดยเฉพาะอย่างยิ่งส่วนที่เกี่ยวกับเป้าหมายของนักออกแบบสถาปัตยกรรม ฉันคิดว่ามันน่าสนใจที่จะเปรียบเทียบ MIPS กับ MOS 6502 เพราะถ้าฉันเข้าใจถูกต้อง 6502 จะไม่เคยแชม (ฉันยังคงพยายามที่จะเข้าใจรูปแบบการสอน)
qwr

1
6502 เป็น microprocessor รุ่นแรกที่ออกแบบ (pre-CISC) แม้ว่าจะคาดว่าจะมีการวางท่อในการที่จะทำการลงทะเบียน writeback ในเวลาเดียวกันกับที่มันโหลดคำสั่งต่อไป 6502 มีไบต์ opcodes เช่น micros 8 บิตส่วนใหญ่ สถาปัตยกรรมอีกอย่างที่ต้องพิจารณาคือ ARM ซึ่งออกแบบโดยวิศวกรอิเล็กทรอนิกส์ระดับสูงที่อ่านเอกสาร Berkeley RISC และเยี่ยมชมโรงงาน MOS และตัดสินใจว่า "เฮ้เราสามารถทำเช่นนั้นได้"
นามแฝง

ฉันสงสัยว่าผลกระทบจะเกิดขึ้นหากมีรูปแบบบิต shamt ซึ่งหมายความว่า "ไม่เรียกใช้คำสั่งต่อไปนี้ แต่ใช้ 32 บิตที่ได้รับการดึงมาเป็นตัวถูกดำเนินการต้นทางสำหรับคำสั่งนี้"? อีกทางเลือกหนึ่งหรือนอกจากนี้ฉันสงสัยว่ามันจะเป็นประโยชน์หรือไม่ที่จะมีพื้นที่ว่างของ opcode ที่เป็นธรรมสำหรับคู่ของคำสั่ง uninterruptable ที่เรียบง่าย - แนวคิดที่ค่อนข้างคล้าย Thumb แต่สามารถสลับได้อย่างอิสระกับคำสั่ง 32 บิตและไม่มีความสามารถ ข้ามไปยังคำสั่งที่สองของคำโดยตรงหรือไม่
supercat

5

เพื่อให้เข้าใจรูปแบบการสอนของ MIPS I คุณต้องเข้าใจ MIPS ไปป์ไลน์และคิดย้อนกลับไปที่เทคโนโลยีการใช้งาน CPU ประมาณปี 1985 หากคุณดูที่แผนภาพ (คุณรู้จัก) คุณจะเห็นว่าการอ่านไฟล์ลงทะเบียนอยู่ใน ID stage หลังจาก IF

สำหรับวัตถุประสงค์ของการเรียนการสอนชนิด R ระยะ ID ต้องทำงานต่อไปนี้:

  1. ตรวจสอบว่าจริง ๆ แล้วมันคือคำสั่งประเภท R
  2. ถ้าเป็นเช่นนั้นให้บอกไฟล์ register เพื่อโหลดค่าจาก register

สำหรับวัตถุประสงค์ของการสนทนานี้เป็นงานแรกที่คุณต้องพิจารณา หากมีการถอดรหัสงานสอนจำนวนมากที่คุณต้องทำเพื่อทำงานให้สำเร็จหากคุณต้องการค่าใด ๆ จากการลงทะเบียนสิ่งนี้จะเพิ่มความล่าช้าก่อนที่คุณจะสามารถเริ่มอ่านการลงทะเบียน นอกจากนี้ยังเพิ่มความซับซ้อนของเวที ID ด้วยการจอง opcode เพียงครั้งเดียวสำหรับคำแนะนำประเภท R ทั้งหมดคุณจะต้องรักษาความซับซ้อนให้น้อยที่สุด

มันดูแปลก ๆ นิดหน่อยที่คุณอุทิศห้าบิตเพื่อเปลี่ยน ฉันนึกถึงคำอธิบายที่เป็นไปได้สองสามข้อ หนึ่งในนั้นคือทำให้การกำหนดเส้นทางง่ายขึ้น (ห้าบิตเหล่านั้นถูกป้อนเข้าสู่ไฟล์ลงทะเบียนโดยตรงเสมอห้าบิตเหล่านั้นถูกป้อนเข้าสู่กระบอกเปลี่ยนตลอดเวลาทั้งหกบิตจะถูกส่งไปยัง ALU เพื่อกำหนดฟังก์ชันที่จะทำงาน)

พวกเขาอาจกำลังคิดที่จะแนะนำคำแนะนำการเปลี่ยนจากซ้ายและเพิ่มแบบผสมในอนาคต นี่คงจะเป็นรูปแบบ:

$d = $s + ($t << shamt)

2s+1s

วันนี้เราอาจไม่คิดว่าการมีขั้นตอนการถอดรหัสที่ซับซ้อนมากขึ้นโดยเฉพาะอย่างยิ่งเนื่องจากการเข้าถึงการลงทะเบียนไฟล์มีแนวโน้มที่จะเกิดขึ้นในภายหลังในขั้นตอนการทำงานของซีพียูซูเปอร์คาร์ทั่วไป ซีพียูที่ทันสมัยมากแม้กระทั่งทำบางคำแนะนำหยาบถอดรหัสในเวลาที่การเรียนการสอนจะแทรกอยู่ในแคช L1 คุณทำให้ I-cache มีเส้นกว้างขึ้นสองสามบิตเพื่อเก็บข้อมูลเพิ่มเติม (จากกฎของ Moore คุณมีทรานซิสเตอร์จำนวนมากที่ต้องเสียไป) เพื่อให้การถอดรหัสคำสั่ง "เหมาะสม" ง่ายขึ้นและเร็วขึ้น

เหตุผลหนึ่งที่พวกเขาอาจต้องการให้ฟิลด์ opcode มีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้เพื่อที่จะไม่ลงโทษคำแนะนำประเภท J อย่างไม่เหมาะสม อย่างที่คุณอาจทราบแล้วคำแนะนำประเภท J ใช้การกำหนดแอดเดรสแบบหลอกโดยตรง เพื่อประโยชน์ของทุกคนที่เล่นที่บ้านฉันจะอธิบายสั้น ๆ

ฟิลด์แอดเดรสของคำสั่ง J-type คือ 26 บิต เนื่องจากคำแนะนำอยู่ในแนวตั้ง 4 ไบต์เสมอคุณไม่จำเป็นต้องเก็บบิตสองบิตที่สำคัญน้อยที่สุดซึ่งหมายความว่าคุณมีที่อยู่ 28 บิตอย่างมีประสิทธิภาพ อย่างไรก็ตามพื้นที่ที่อยู่ใน MIPS I คือ 32 บิต ดังนั้นตำแหน่งกระโดดสี่บิตแรกสุดจะถูกนำมาจากตัวนับโปรแกรม

ซึ่งหมายความว่าคุณไม่สามารถข้ามไปยังตำแหน่งที่ตำแหน่งสี่บิตที่สำคัญที่สุดของพีซีนั้นแตกต่างกันได้โดยตรง คุณจะต้องทำการกระโดดข้ามคำสั่งสามครั้งที่มีราคาแพงกว่าแทนการลงทะเบียน:

lui $r,target >> 16
    ori $r,$r,target & 0xFFFF
    jr $r

นั่นไม่ได้เลวร้ายเกินไปในวันนี้ แต่ในปี 1985 มันมีวงจรนาฬิกามาก

การขโมยสักเล็กน้อยจากเขตข้อมูลที่อยู่จะช่วยลดช่วงของการกระโดดโดยตรงได้มากยิ่งขึ้น คุณสามารถดูว่านี่อาจเป็นราคาที่จ่ายสูงเกินไป


"คำสั่ง shift-left-and-add แบบรวม" ของประเภทที่เห็นใน ARM ภายหลังหรือไม่
Damian Yerrick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.