ไมโครโค้ดคืออะไรและแตกต่างจากเฟิร์มแวร์อย่างไร


50

ตราบเท่าที่คำศัพท์"microcode"คืออะไรและหากสามารถปรับปรุงได้มันจะแตกต่างจากเฟิร์มแวร์อย่างไร

คำถามนี้ไม่ได้ซ้ำกับคำถามนี้ (เท่าที่ฉันสามารถบอกได้) ซึ่งฉันได้ถามเกี่ยวกับการแก้ไขไมโครโค้ดด้วย ที่นี่ฉันอยากรู้วิธีใช้ข้อกำหนดเหล่านี้อย่างถูกต้อง

ปรับปรุง

ฉันได้รับคำตอบที่เลือก แต่ฉันไม่พอใจโดยเฉพาะอย่างยิ่ง ฉันได้รับคำตอบมากมายและฉันพบว่าคำตอบเหล่านั้นมากมายไม่พอใจเท่ากัน ขอผมนำเสนอคุณสองเฟรม

  1. "ไมโครโปรเซสเซอร์ของโปรเซสเซอร์คล้ายกับเฟิร์มแวร์ของโปรเซสเซอร์" เมื่อฉันอ่านสิ่งนี้มากขึ้นเรื่อย ๆ นั่นเป็นวิธีที่ฉันทำ "Microcode" อยู่ในบริบทนี้เป็นเพียงการทำการตลาดผ่าน "เฟิร์มแวร์โปรเซสเซอร์" อดทนกับฉัน ..
  2. หรือฉันผิดและฉันรู้ว่ามันเกิดขึ้น! ในกรณีนี้ฉันต้องการความคิดที่ละเอียดมากขึ้นว่าทำไมฉันถึงผิด ในคำตอบนั้นที่ฉันอ่านเพื่อชี้ให้เห็นว่าฉันผิดฉันกำลังดิ้นรนทำความเข้าใจพวกเขา
    • "Execution vs data" คำตอบมากมายใช้กระบวนทัศน์นี้ แต่สำหรับ CPU ที่ไม่สมเหตุสมผลกับฉัน ยืนยันเฟิร์มแวร์บางตัวถูกดำเนินการ แต่โดยอะไร เมื่อพูดถึง CPU คำสั่งของโปรแกรมหรือข้อมูลมีอะไรบ้าง
    • หากเฟิร์มแวร์เชื่อมซอฟต์แวร์และฮาร์ดแวร์ (อ่าน: สิ่งที่เกี่ยวกับวิศวกรรมไฟฟ้าของเหล่าทวยเทพ) แสดงว่าไมโครโค้ดนั้นไม่พอใจกับความแตกต่างดังกล่าว
    • "การตีความ" เมื่อเวลาผ่านไปสิ่งนี้ยิ่งมีความหมายน้อยลง การแปลว่า "คำแนะนำฮาร์ดแวร์แปลว่า" ด้วย Microcode หมายความว่าอะไร ถ้ามันเป็นเรื่องจริงสิ่งที่จะเป็นนักแสดงถ้ามันไม่ได้ตีความ แต่ถูกคอมไพล์ไปยังคำแนะนำฮาร์ดแวร์ที่แตกต่างกันและเพียงแค่ "ดำเนินการ"? นอกจากนี้ General MIDI ไม่ตีความในแง่เดียวกันอย่างไร เป็นภาษาที่ตีความโดย "MIDI microcode" และทำงานบนฮาร์ดแวร์ หรือเทอร์มินัลโง่ที่แปลคำสั่งทางไกลสำหรับการแสดงผลภาพ?
    • "microcode" นำไปใช้กับรหัสที่ทำงานบนการ์ดเสียงและการ์ดวิดีโอ (GPU)หรือไม่

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

คำว่า Microcode หมายถึงความจริงที่ว่ามันใช้ / รองรับคำสั่ง CPU„ code“ จำนวนมาก โดยพื้นฐานแล้วมันจะบอก CPU ถึงวิธีเลียนแบบคำสั่งและคุณสมบัติต่างๆ ดังนั้นมันชื่อ จากจุดของเจ้าของคอมพิวเตอร์มันเป็นอีกชุดของรหัสที่จัดส่งโดยผู้จำหน่ายฮาร์ดแวร์ดังนั้นจึงสามารถสรุปได้ว่าเป็นเฟิร์มแวร์
eckes

IMO คำตอบที่ง่ายที่สุดคือ "ทุกครั้งที่ตัวประมวลผลประมวลผลคำสั่งมันกำลังประมวลผลโปรแกรมไมโครโค้ด" สิ่งที่คุณคิดว่าเป็นคำสั่งตัวประมวลผลเดียวคือลำดับของคำสั่งไมโครโค้ดคือ 'โปรแกรมไมโครโค้ด' แต่ละคำสั่งมีโปรแกรมไมโครโค้ดเป็นของตัวเอง คำแนะนำไมโครโค้ดแต่ละตัวจะเปิด / ปิด / etc บิตภายในต่างๆของโปรเซสเซอร์
Ethan Reesor

คำตอบ:


57

ที่มาของคำว่าเฟิร์มแวร์คือจุดกึ่งกลางระหว่างฮาร์ดแวร์และซอฟต์แวร์ - ซอฟต์แวร์ที่ฝังอยู่ในฮาร์ดแวร์ มันหมายถึงซอฟต์แวร์ที่เก็บไว้ในหน่วยความจำแบบไม่ลบเลือนบนอุปกรณ์ฮาร์ดแวร์ ตัวอย่างคือ EEPROM และหน่วยความจำแฟลชที่ฝังอยู่ในอุปกรณ์ฮาร์ดแวร์เมื่อถูกใช้เพื่อจัดเก็บรหัสที่อุปกรณ์นั้นทำงาน

มันกลายเป็นเรื่องธรรมดามากขึ้นในฮาร์ดแวร์บางประเภทเพื่อให้ "เฟิร์มแวร์" ของมันถูกเก็บไว้ในซอฟต์แวร์ไดรเวอร์และโหลดลงบนอุปกรณ์เมื่อทำการบูท / เริ่มต้นแทนที่จะปล่อยไว้อย่างถาวรบนอุปกรณ์ ยกตัวอย่างเช่นในทุกวันนี้การเก็บรหัสเฟิร์มแวร์ไม่กี่ร้อย KB ลงในไดรเวอร์ซอฟแวร์นั้นได้ถูกโหลดลงบนโฮสต์ระบบปฏิบัติการและส่งลงไปยังอุปกรณ์ตามที่ผู้ใช้เตรียมเริ่มต้น

สิ่งนี้มักจะถูกเรียกว่า "เฟิร์มแวร์" แม้ว่าจะขึ้นอยู่กับคำจำกัดความของเฟิร์มแวร์ที่คุณยอมรับคุณอาจไม่ได้พิจารณาทางเทคนิคว่าเฟิร์มแวร์เพราะมันไม่ได้อยู่ในฮาร์ดแวร์ (ถ้าคุณถอดฮาร์ดแวร์ออกและใส่ไว้ในระบบอื่น จะไม่รักษา "เฟิร์มแวร์" รุ่นนั้นไว้)

Microcode เป็นส่วนย่อยของ "เฟิร์มแวร์" ประเภทหลังนี้ Microcode ไม่ใช่คำศัพท์ทั่วไปสำหรับ "เฟิร์มแวร์" ทั้งหมดที่โหลดลงในอุปกรณ์เมื่อบู๊ต แต่จะเฉพาะเจาะจงกับซีพียูโดยที่ไมโครโค้ดจะสร้างเลเยอร์การแปลขึ้นมาระหว่างคำสั่งซีพียูมาตรฐานระดับสูงกว่าและการปฏิบัติการระดับล่างเฉพาะซีพียูนั้น มันถูกโหลดลงบนซีพียูตอนบู๊ตโดยไบออส แต่สามารถถูกแทนที่ในภายหลังในช่วงบูตโดยระบบปฏิบัติการเช่นกัน

การอัปเดตเป็นไมโครโค้ดสามารถอนุญาตให้พฤติกรรมระดับต่ำของ CPU ได้รับการแก้ไขเพื่อแก้ไขข้อบกพร่องบางอย่างที่ยังไม่ถูกค้นพบโดยไม่จำเป็นต้องเปลี่ยนฮาร์ดแวร์ของ CPU ไมโครโค้ดมักจะมีการแม็พที่มีประสิทธิภาพมากที่สุดจากคำสั่งระดับสูงถึงต่ำที่สุดเท่าที่จะเป็นไปได้เพื่อความเร็วและประสิทธิภาพการใช้พลังงานที่ดีที่สุดดังนั้นบางครั้งเมื่อจำเป็นต้องเปลี่ยนไมโครโค้ดเพื่อแก้ไขข้อผิดพลาดบางอย่าง

โปรดทราบว่า Meltdown (ช่องโหว่ที่ส่งผลกระทบต่อชิป Intel เท่านั้น) ไม่สามารถแก้ไขได้ด้วยการอัปเดตไมโครโค้ดเพียงอย่างเดียวและต้องมีการเปลี่ยนแปลงการทำงานของระบบปฏิบัติการหลักซึ่งอาจลดประสิทธิภาพการทำงานต่อไป Specter (ช่องโหว่ที่มีผลต่อชิป Intel, AMD และ ARM) อาจสามารถแก้ไขได้ด้วยการอัปเดตไมโครโค้ดเพียงอย่างเดียว


ในการตอบคำถามเฉพาะของคุณตั้งแต่การแก้ไข:

  1. ใช่ไมโครโค้ดนั้นเป็นเฟิร์มแวร์ที่ใช้กับโปรเซสเซอร์ คำว่า "ไมโครโค้ด" เป็นพิเศษหมายถึงเฟิร์มแวร์ของโปรเซสเซอร์ที่มีพิมพ์เขียวสำหรับการแปลจากภาษาเครื่องมาตรฐานไปเป็นคำสั่งของโปรเซสเซอร์ระดับต่ำ ดังนั้นจึงเป็นคำเฉพาะเจาะจงมากกว่าเฟิร์มแวร์

    โปรดทราบว่าเมื่อฉันพูดถึงข้างต้นมันไม่ได้ถูกเก็บไว้ใน CPU ในขณะที่มันปิด แต่โหลดลงบนมันทุกครั้งที่คุณบู๊ตดังนั้นในแง่ที่ว่ามันไม่ทำงานเหมือนเฟิร์มแวร์ดั้งเดิม อย่างไรก็ตามฮาร์ดแวร์จำนวนมากทำสิ่งนี้ในขณะนี้และยังเรียกว่า "เฟิร์มแวร์" ดังนั้นการเรียกมันว่าเฟิร์มแวร์นั้นเป็นที่ยอมรับ

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

    คำว่า "microcode" มักจะใช้กับซีพียูหลักและไม่ใช่กราฟิกการ์ดหรือฮาร์ดแวร์อื่น ๆ แม้ว่าอุปกรณ์อื่น ๆ เหล่านั้นอาจมีโค้ดที่โหลดลงไปในทางเดียวกัน


1
ประโยคที่สองของคุณไม่ถูกต้อง เฟิร์มแวร์รวมถึงซอฟต์แวร์ที่เก็บไว้ใน ROM กาลครั้งหนึ่งเฟิร์มแวร์ส่วนใหญ่อยู่ใน ROM ก่อนที่ทางเลือกจะกลายเป็นราคาที่ไม่แพง
แฮร์รี่จอห์นสตัน

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

@Evan อุปกรณ์ส่วนใหญ่ได้รับคำแนะนำทางอ้อมส่งมาจากรหัสที่ใช้งานบน CPU มีเพียงซีพียูเท่านั้นที่กำลังประมวลผลรหัสที่ผู้ใช้ให้โดยตรง นอกจากนี้ให้พิจารณาด้วยว่าอุปกรณ์ส่วนใหญ่มีซีพียูในตัวซึ่งจัดเรียงเฟิร์มแวร์และซีพียูนั้นอาจมีไมโครโค้ดเป็นของตัวเอง ความแตกต่างอาจมีความสำคัญกับนักออกแบบฮาร์ดแวร์และโปรแกรมเมอร์เคอร์เนลเท่านั้น
Harry Johnston

"อุปกรณ์ส่วนใหญ่มีซีพียูในตัวบางตัวที่รันเฟิร์มแวร์และซีพียูนั้นอาจมีไมโครโค้ดของตัวเอง" นั่นคือสิ่งที่ฉันหมายถึง ดังนั้นรหัสที่ประมวลผลกระแส midi บนการ์ดเสียงจึงเป็น "microcode" ด้วย? หรือรหัสที่ดึง / แสดงผลแสดงอักขระบนเทอร์มินัลโง่?
Evan Carroll

ไม่รหัสที่ทำงานบนการ์ดเสียงเพื่อประมวลผลสตรีม MIDI เป็นเพียงเฟิร์มแวร์ธรรมดา รหัสที่ประมวลผลรหัสที่ทำงานบนการ์ดเสียงเพื่อประมวลผลสตรีม MIDI จะเป็นไมโครโค้ด (ในทางปฏิบัติฉันไม่แน่ใจว่า CPU ที่ฝังตัวในสิ่งที่เรียบง่ายเหมือนกับการ์ดเสียงจะต้องใช้ไมโครโค้ดในตอนแรก แต่ที่อยู่ด้านข้าง) สิ่งสำคัญคือสตรีม MIDI หรือตัวละครที่ถูกส่งไปยัง เทอร์มินัลโง่ไม่ใช่รหัส มันเป็นแค่ข้อมูล
แฮร์รี่จอห์นสตัน

23

https://wiki.debian.org/Microcode

CPU Microcode

ไมโครโค้ดตัวประมวลผลคล้ายกับเฟิร์มแวร์ของโปรเซสเซอร์ เคอร์เนลสามารถอัปเดตเฟิร์มแวร์ของโปรเซสเซอร์โดยไม่จำเป็นต้องอัปเดตผ่านการอัปเดต BIOS การอัปเดตไมโครโค้ดจะถูกเก็บไว้ในหน่วยความจำชั่วคราวดังนั้น BIOS / UEFI หรือเคอร์เนลจะอัปเดตไมโครโค้ดระหว่างการบู๊ตทุกครั้ง

โปรเซสเซอร์จาก Intel และ AMD อาจต้องมีการอัพเดตไมโครโค้ดเพื่อให้ทำงานได้อย่างถูกต้อง การอัปเดตเหล่านี้แก้ไขข้อบกพร่อง / ข้อผิดพลาดที่อาจทำให้เกิดสิ่งใด ๆ จากการประมวลผลที่ไม่ถูกต้องจนถึงรหัสและข้อมูลเสียหายและการล็อคระบบ

BIOS (หรือ UEFI) จะอัปเดตไมโครโค้ด CPU ระหว่างการบู๊ตอย่างไรก็ตามส่วนใหญ่ผู้ผลิตแผงวงจรหลักจะไม่ออกอัพเดต BIOS / UEFI บ่อยครั้งหรือผู้ใช้จะไม่ติดตั้งการอัปเดตดังกล่าว ด้วยเหตุผลเหล่านี้โปรเซสเซอร์ระบบจึงมีแนวโน้มที่จะรันด้วยไมโครโค้ดที่ล้าสมัยในระบบจำนวนมาก

ตัวอย่าง:

https://www.win-raid.com/t3355f47-Intel-AMD-amp-VIA-CPU-Microcode-Repositories.html


9
ไม่ใช่เรื่องง่าย: Microcode คือ "เทคนิคที่เรียกล่ามระหว่างฮาร์ดแวร์และระดับสถาปัตยกรรมของคอมพิวเตอร์" ด้วยเหตุนี้ไมโครโค้ดจึงเป็นเลเยอร์ของคำแนะนำระดับฮาร์ดแวร์ที่ใช้คำสั่งรหัสเครื่องระดับสูงกว่าหรือการจัดลำดับเครื่องรัฐภายในในองค์ประกอบการประมวลผลดิจิตอลจำนวนมาก ที่มา: en.wikipedia.org/wiki/Microcode

17
รอสักครู่ ... "เรือ" เป็นเพียง "ยานพาหนะ" ชนิดใด? ช่างเป็นคำที่ไร้ประโยชน์! :-)
Harry Johnston

4
@HarryJohnston ดีฉันคิดว่ามันค่อนข้างมีประโยชน์ในการแยก "เรือ" ออกจากยานพาหนะประเภทอื่นในบริบทบางอย่าง ... และ "microcode" เป็น "บางอย่าง" ที่เฉพาะเจาะจงซึ่งมีอยู่ในซีพียูสมัยใหม่หลายรุ่น ... ( ดังนั้นจึงเป็นการดีที่จะมีคำศัพท์สำหรับมัน)
Radovan Garabík

4
@ RadovanGarabík: นั่นคือจุดที่แฮร์รี่ทำด้วยการเสียดสี
Peter Cordes

4
ฉันไม่เข้าใจ หาก "เคอร์เนลสามารถอัปเดตเฟิร์มแวร์ของโปรเซสเซอร์โดยไม่จำเป็นต้องอัปเดตผ่านการอัปเดต BIOS" ดังนั้นทำไมข้อเท็จจริงที่ว่า "ผู้จำหน่ายแผงวงจรหลักจะไม่ออกอัพเดต BIOS / UEFI บ่อย" หมายความว่า "โปรเซสเซอร์ระบบคือ มีแนวโน้มที่จะทำงานด้วยไมโครโค้ดที่ล้าสมัยในระบบจำนวนมากมาย "หรือไม่? เหตุใดเคอร์เนลจึงไม่เพียง แต่แก้ไขไมโครโค้ด เหตุใดจึงต้องพึ่งพา BIOS หาก BIOS ไม่ได้รับการอัปเดตและมีทางเลือกที่อัปเดตบ่อยกว่าหรือไม่
Ajedi32

6

การปรับปรุง "เฟิร์มแวร์ microcode" ของ Intel นั้นแท้จริงแล้วเป็นการ "เฟิร์มแวร์" ในแง่ที่ว่าพวกเขาอัพเดทมากกว่าหน่วยการแปลไมโครโค้ดของโปรเซสเซอร์

การอัพเดตแพ็คเกจตัวประมวลผลแบบรวมที่เราเรียกว่า "การอัปเดตไมโครโค้ด" สำหรับ Intel ยังอัปเดตไมโครคอนโทรลเลอร์แบบ on-die อื่น ๆ (เช่น PMU และแกนการจัดการพลังงาน) เช่นเดียวกับตารางพารามิเตอร์หลายตัวสำหรับระบบย่อย ค่อนข้างซับซ้อน

ข้อมูลนี้มีอยู่ในสิทธิบัตรของ Intel หลายตัวที่เกี่ยวข้องกับการอัปเดตไมโครโค้ดและไมโครโค้ด


4

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

อนึ่งแนวคิดของไมโครโค้ดกลับไปที่มอริซวิลก์สในปี 1951 หลายทศวรรษก่อนที่ตัวประมวลผลคอมพิวเตอร์จะถูกฝังในซิลิคอน


3

เฟิร์มแวร์มักจะอ้างถึงรหัสสำหรับอุปกรณ์ที่มี CPU ไม่ใช่ CPU เช่นเฟิร์มแวร์สำหรับโทรศัพท์ Android

Microcode เป็นเลเยอร์การแปลระหว่างชุดคำสั่งที่ซับซ้อน (เช่น 486, 686, AMD-64, ect) และคำสั่งระดับล่างที่ผู้ผลิตชิปออกแบบซิลิคอนสำหรับ ดังนั้นคำสั่งจำนวนหนึ่งในชุดคำสั่ง CPU จึงไม่ได้ถูกนำมาใช้ในซิลิคอน แต่แปลผ่านไมโครโค้ดเป็นคำสั่งหลายอย่างที่ใช้ในซิลิคอน


แต่นั่นไม่ใช่ความจริงของเฟิร์มแวร์ทั้งหมด คำแนะนำ ABIs ที่สามารถนำไปใช้ในซิลิคอน แต่ไม่ใช่และสามารถอัปเดตผ่านซอฟต์แวร์ได้หรือไม่
Evan Carroll

1
อินเทล "การอัปเดตเฟิร์มแว" สามารถทำอะไรมากไปกว่าการปรับเปลี่ยนคำแนะนำวิธี microcoded ถอดรหัส เช่นพวกเขาสามารถปิดการใช้งานบัฟเฟอร์บัฟเฟอร์ (ใน Skylake เพื่อแก้ไข SKL150 erratum) เพราะเมื่อเป็นไปได้ CPU ถูกออกแบบมาเพื่อทำให้สิ่งนี้เป็นไปได้ในกรณีที่พบข้อบกพร่องของฮาร์ดแวร์
Peter Cordes

3

"Microcode" เป็นคำดั้งเดิมและอ้างถึงคำแนะนำที่ใช้ในการใช้ล่ามสำหรับชุดคำสั่ง "สาธารณะ" ของโปรเซสเซอร์

แต่เมื่อเวลาผ่านไปด้วยรูปแบบต่าง ๆ ในแผนการใช้งานความแตกต่างเช่นเดิมมีความคลุมเครือมากขึ้น ครั้งแรกที่มีแนวนอน vs ไมโครโค้ดแนวตั้งจากนั้นก็มีรูปแบบต่าง ๆ สำหรับการเขียน "ไมโครโค้ด" (เพื่อนำไปใช้พูดคำสั่ง I / O) ในชุดคำสั่ง "หลัก" ของโปรเซสเซอร์ จากนั้นมีความจำเป็นที่จะต้องแยกแยะความแตกต่างระหว่างโค้ดที่โหลดได้ง่ายผ่านการทำงานปกติของโปรแกรม "รัน" vs รหัส (สำหรับไบออสเช่น) ซึ่งถูกบันทึกไว้ใน ROM หรือที่เก็บข้อมูลที่ได้รับการป้องกันและไม่เปลี่ยนรูปแบบ ดังนั้นคำว่า "เฟิร์มแวร์" ถูกประดิษฐ์ขึ้นเพื่ออ้างถึงคำแนะนำเหล่านี้ซึ่งทำให้ถาวรมากขึ้น (และสามารถเข้าถึงได้น้อยสำหรับการปรับเปลี่ยนผู้ใช้) ในการจัดเก็บ

แต่สิ่งต่าง ๆ ได้แปรเปลี่ยนและบิดหลายต่อหลายครั้งตั้งแต่สร้างความแตกต่างครั้งแรกและข้อกำหนดอีกต่อไปสามารถนิยามได้ด้วยความแม่นยำภายในโปรเซสเซอร์และสภาพแวดล้อมระบบปฏิบัติการ


+1, กุญแจสำคัญในที่นี้คือมีความหมายมากมายของคำว่า "ไมโครโค้ด" และฉันคิดว่า OP ต้องการทราบเกี่ยวกับ "ไมโครโค้ดอัปเดต" ไม่ใช่ความหมายอื่น ๆ
Peter Cordes

3

[หมายเหตุ: คำตอบนี้มีจุดประสงค์เพื่อแก้ไขการแก้ไขล่าสุดและไม่ได้เพิ่มคำตอบที่เป็นเสียงหลายคำที่โพสต์ไว้แล้ว]

ดังนั้นเพื่อย้ำ: ไมโครโค้ด (อย่างน้อยถึงการประมาณแรก) เป็นเฟิร์มแวร์ชนิดหนึ่งโดยเฉพาะ

"Microcode" อยู่ในบริบทนี้เป็นเพียงการทำการตลาดผ่าน "เฟิร์มแวร์โปรเซสเซอร์"

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

หากคุณออกแบบมาเธอร์บอร์ดหรือเขียนระบบปฏิบัติการคุณอาจใช้ "microcode update" เป็นชวเลขสำหรับการปรับปรุงเฟิร์มแวร์ CPU ที่ไม่คุ้นเคยและไม่คุ้นเคย การอัพเดตเฟิร์มแวร์ของ CPU ส่วนใหญ่ส่งผลกระทบต่อไมโครโค้ดเป็นหลักดังนั้นจึงใกล้เคียงกับสิ่งเดียวกัน คุณอาจรู้ถึงความแตกต่าง แต่คุณไม่จำเป็นต้องสนใจมัน

ผู้ใช้ไม่จำเป็นต้องรู้หรือสนใจเกี่ยวกับความแตกต่างและในโลกอุดมคติจะไม่ได้ยินคำว่า "ไมโครโค้ด" เลย

ฉันเดาว่ามันมาถึงความสนใจของคุณในการรายงานข่าวของช่องโหว่การดำเนินการเก็งกำไรล่าสุดแม้ว่าคุณอาจเคยได้ยินมาก่อนหน้านี้ในบริบทที่ทำให้มันชัดเจนมากขึ้นว่าคุณไม่จำเป็นต้องดูแล ช่องโหว่เหล่านี้เผยแพร่เร็วกว่าที่วางแผนไว้ซึ่งอาจส่งผลให้มีการรายงานข่าวน้อยกว่าที่ควรจะเป็น จากมุมมองของผู้ใช้คุณต้องติดตั้งการอัปเดต BIOS อัปเดตระบบปฏิบัติการและในบางกรณีการอัปเดตแอปพลิเคชัน คุณไม่จำเป็นต้องรู้และไม่สนใจซึ่งหากมีสิ่งเหล่านี้รวมถึงไมโครโค้ดใหม่


ดังนั้นถึงแม้จะรู้ตัวว่าคุณไม่จำเป็นต้องรู้หรือสนใจคุณก็ยังอาจสนใจความอยากรู้: คุณจะแยกไมโครโค้ดออกจากเฟิร์มแวร์ตัวอื่นได้อย่างไร?

สิ่งแรกที่ต้องจดจำคือไม่จำเป็นต้องมีคำจำกัดความที่ยากและรวดเร็วเพียงอย่างเดียว แต่มันเป็นสถานการณ์ของBleggs และ Rubesมากกว่า ยังมีบางสิ่งที่เราสามารถพูดเกี่ยวกับไมโครโค้ด:

  • โดยทั่วไปแล้วไมโครโค้ดจะทำงานภายใน CPU แทนที่จะเป็นซีพียู นั่นคือมุมมองระดับสูง

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

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

  • โดยทั่วไปแล้วไมโครโค้ดจะแปลหรือช่วยในการใช้สถาปัตยกรรมชุดคำสั่งสาธารณะเช่นจะรันโค้ดเครื่องที่ผู้ออกแบบระบบปฏิบัติการและโปรแกรมเมอร์ใช้ เพิ่มเติมเกี่ยวกับเรื่องนี้ในส่วนถัดไป


"Execution vs data" คำตอบมากมายใช้กระบวนทัศน์นี้

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

ไดรฟ์ SATA ทำตามคำแนะนำจากคอมพิวเตอร์ซึ่งอยู่ในแนวของ "อ่านข้อมูลจากภาค 5,123" และ "เขียนข้อมูลนี้ลงในเซกเตอร์ 1,321" เฟิร์มแวร์ของไดรฟ์มีหน้าที่ในการทำให้ฮาร์ดแวร์เกิดขึ้นและโดยทั่วไปจะเป็นรหัสธรรมดาที่ทำงานบนซีพียูในตัวบางประเภท คำแนะนำของไดรฟ์มาตามลำดับแม้ว่าอาจไม่ได้รับการประมวลผลตามลำดับที่มาถึง คำแนะนำเหล่านี้ไม่ใช่โปรแกรมพวกเขาถูกส่งโดยโปรแกรมที่ทำงานบน CPU หลัก โดยเฉพาะอย่างยิ่งไม่มีการไหลของการควบคุมคือไม่มีคำแนะนำในการบอกไดรฟ์ SATA ซึ่งคำแนะนำในการทำงานต่อไป

ซีพียูอยู่ในความดูแลของคอมพิวเตอร์ เมื่อเสร็จสิ้นการเริ่มต้นมันจะทำงานตามคำแนะนำ ("รหัสเครื่อง") ที่ได้รับจากเมนบอร์ด (BIOS ซึ่งเป็นเฟิร์มแวร์ประเภทอื่น) ซึ่งสั่งให้เรียกใช้รหัสเครื่องที่ระบบปฏิบัติการกำหนดให้เรียกใช้รหัสเครื่องที่ให้ไว้ โดยผู้ขายแอปพลิเคชัน CPU เองจะเรียกคืนรหัสเครื่องจาก EEPROM (ในกรณีของ BIOS) หรือ RAM (ในกรณีของระบบปฏิบัติการและแอพพลิเคชั่น) โดยเฉพาะอย่างยิ่งรหัสเครื่องมีการควบคุมอย่างต่อเนื่อง: รหัสเครื่องจะบอก CPU ว่ารหัสเครื่องใดที่จะต้องดำเนินการต่อไป คุณสามารถวนซ้ำรหัสเครื่องเดิมซ้ำ ๆ คุณสามารถเรียกใช้บิตของรหัสที่แตกต่างกันขึ้นอยู่กับข้อมูลที่รหัสกำลังทำงานอยู่ - คำแนะนำในภาษาอินเทอร์เฟซอุปกรณ์เช่นรหัส SATA สามารถทำชุดง่าย ๆ ได้ แต่รหัสเครื่องสามารถ ทำสิ่งใด (ดูเพิ่มเติมที่ทัวริงครบถ้วน )

เราสามารถเขียนสัญลักษณ์แสดงหัวข้อย่อยสุดท้ายด้านบนเป็น: ไมโครโค้ดมักจะใช้ภาษาทัวริงที่สมบูรณ์; เฟิร์มแวร์ธรรมดามักจะไม่


การแปลว่า "คำแนะนำฮาร์ดแวร์แปลว่าอะไร" ด้วยไมโครโค้ดหมายความว่าอย่างไร

จริง แต่อาจสับสน จุดสำคัญคือความแตกต่างระหว่างรหัสเครื่องซึ่งมีโฟลว์ควบคุมและ Turing Complete และคำแนะนำที่กำหนดโดยส่วนต่อประสานอุปกรณ์เช่น SATA ซึ่งทำไม่ได้และไม่ใช่


"microcode" ใช้กับรหัสที่ใช้กับการ์ดเสียงหรือไม่

ไม่การ์ดเสียงรับคำแนะนำไม่ใช่รหัสเช่นเดียวกับไดรฟ์ SATA คำแนะนำอาจเป็น "play a sharp" หรือ "ตีความข้อมูลนี้เป็นรูปแบบของคลื่นและเล่น" ยังง่ายมาก

และการ์ดแสดงผล (GPU)?

การ์ดแสดงผลแบบเก่า (ที่ไม่มี GPU) จะเหมือนกับไดรฟ์ SATA คำแนะนำเช่น "ตั้งค่าพิกเซลนี้เป็นสีนี้" หรือ "เขียน A ไปยังตำแหน่งนี้"

... GPUs ซับซ้อนและอยู่ระหว่างโลกทั้งสองที่ฉันเคยพยายามอธิบายข้างต้น มันอาจจะง่ายที่สุดในการคิดว่ามันเป็นคอมพิวเตอร์เฉพาะที่อยู่ในคอมพิวเตอร์หลักซึ่งมีซีพียูของตัวเอง มันเป็นความจริงที่อุปกรณ์เช่นไดรฟ์ SATA ยังมีซีพียูในตัว แต่ความแตกต่างก็คือซีพียูในตัวในไดรฟ์ SATA จะรันโค้ดที่ผู้ผลิตไดรฟ์ให้เท่านั้นในขณะที่ GPU ยังใช้โค้ดที่จัดทำโดยระบบปฏิบัติการและ / หรือผู้จำหน่ายแอปพลิเคชัน จริง ๆ นี่เป็นคำถามแยกต่างหากทั้งหมด


TL; DR: ไมโครโค้ดเป็นเฟิร์มแวร์ชนิดหนึ่งซึ่งช่วยให้ฮาร์ดแวร์ใช้ชุดคำสั่ง Turing Complete


1

Microcode ( "ร้านค้าควบคุม" ) เป็นข้อมูลที่อยู่ในหน่วยความจำที่ระเหยได้หรือไม่ลบเลือน - โดยทั่วไปเป็นหน่วยความจำที่ค่อนข้างเล็ก แต่กว้างมากซึ่งสัญญาณข้อมูลที่ส่งออกจะถูกส่งไปยังอินพุตสัญญาณควบคุมของหน่วยการทำงานของฮาร์ดแวร์ อินพุตแอดเดรสของหน่วยความจำ microcode จัดทำโดยเครื่องสถานะซึ่งดำเนินการผ่านคำของหน่วยความจำ ("คำสั่ง microprogram") ในแต่ละครั้งเพื่อจัดลำดับสัญญาณควบคุมอย่างมีประสิทธิภาพของบล็อกฮาร์ดแวร์หนึ่งหรือหลายบล็อก ฮาร์ดแวร์มัลติเพล็กซ์เวลานี้และช่วยให้การดำเนินการที่ซับซ้อนมีการใช้ตรรกะแบบสุ่มน้อยลงอย่างมีนัยสำคัญ

ในไมโครโปรเซสเซอร์สมัยใหม่อาจมีลำดับชั้นของไมโครโค้ด / หน่วยการจัดลำดับที่จำเป็นต่อการสรุปซิลิกอนไมโครฟิสิคัลสถาปัตยกรรมให้กับตระกูลสถาปัตยกรรมทั่วไปที่มีอินเทอร์เฟซ "รหัสเครื่อง" ทั่วไป ตัวอย่างเช่นอาจมีหลายชั้นของไมโครโค้ด / การเรียงลำดับเพื่อใช้ตัวถอดรหัสคำสั่งและหน่วยจุดลอย

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

ไมโครโค้ดอาจนำไปใช้ในเฟิร์มแวร์ / เฟิร์มแวร์อาจมีไมโครโค้ด แต่ไม่เหมือนกัน


1
ซีพียู x86 ที่ทันสมัยนั้นมีสายฮาร์ดมากกว่าที่คุณอธิบาย ดูเหมือนว่าคุณกำลังอธิบาย 386 ที่ไม่ผ่านท่อไม่ใช่ Haswell / Skylake อินเทล "การอัปเดตเฟิร์มแว" สามารถทำอะไรมากไปกว่าการปรับเปลี่ยนคำแนะนำวิธี microcoded ถอดรหัส เช่นพวกเขาสามารถปิดการใช้งานบัฟเฟอร์บัฟเฟอร์ (ใน Skylake เพื่อแก้ไข SKL150 erratum) เพราะเมื่อเป็นไปได้ CPU ถูกออกแบบมาเพื่อทำให้สิ่งนี้เป็นไปได้ในกรณีที่พบข้อบกพร่องของฮาร์ดแวร์
Peter Cordes

@PeterCordes 1) สถาปัตยกรรม x86 ไม่เกี่ยวข้องกับการนำเสนอแนวคิดของไมโครโค้ด 2) หากคุณเข้าใจคำตอบของฉันแล้วเราเห็นด้วยกับข้อตกลงที่ว่ามันเรียงลำดับสัญญาณควบคุมตามที่คุณพูดถึง

1
ไม่ Intel uops ไม่ได้ควบคุมสัญญาณจริงๆ พวกเขาไม่ได้เขียนโปรแกรมหน่วยตรรกะโดยตรงเช่นใน MIPS ไปป์ไลน์ uops ถูกอ่านโดยตัวกำหนดตารางเวลาที่ไม่อยู่ในลำดับเพื่อพิจารณาว่า uops ใดที่มีการพึ่งพาข้อมูลที่ uops อื่น ๆ นี่เป็นโมเดลภายในที่แตกต่างจากรุ่น 6502 ซึ่งมีหลายขั้นตอนในการดำเนินการคำสั่งเดียวที่อ่านได้จากการถอดรหัส ROM สิ่งที่คุณอธิบายคือความหมายทางประวัติศาสตร์ของคำว่าไมโครโค้ด แต่ไม่ใช่ "การอัพเดทไมโครโค้ด" สำหรับซีพียูสมัยใหม่
Peter Cordes

ฉัน (หรือคำถามเกี่ยวกับเรื่องนั้น) พูดถึง Intel หรือ x86 micro-Operations ได้ที่ไหน (ซึ่งไม่เหมือนกับ "microprogram" ใน control-store) นอกจากนี้สิ่งใดก็ตามที่มีให้จากที่เก็บควบคุมคือสัญญาณควบคุมไม่ว่าสัญญาณนั้นจะเรียงตามลำดับหรือคงที่ตรรกะหรือสายไฟ สิ่งที่ฉันอธิบายคือคำจำกัดความที่แท้จริงของไมโครโค้ด "ไมโครโค้ดอัปเดต" เช่นกัน คุณกำลังวางสายในการเรียงลำดับของคำตอบของฉันเพราะสัญญาณที่กล่าวในแฮสจะคงที่ สำหรับเร็กคอร์ดนั้นมีหลายซีเควนซ์การเรียงลำดับไม่ได้เกิดจากการวางท่อหรือ OoOE

1
ดังนั้นคุณตอบคำถาม"คำสั่ง microcoded"อย่างถูกต้องคืออะไรแต่ "microcode update" สำหรับ CPU นั้นไม่มีความหมายทางเทคนิคเดียวกันกับคำว่า "microcode" นี่เป็นจุดสำคัญที่ควรทำอย่างชัดเจนเนื่องจากเป็นสาเหตุของความสับสนของ OP ที่ฉันคิดว่า
Peter Cordes

0

เฟิร์มแวร์คือรหัสที่สามารถเรียกใช้งานได้ซึ่งอยู่ใน ROM หรือหน่วยความจำไม่ลบเลือนอื่น ๆ

วัตถุประสงค์ดั้งเดิมและที่สำคัญของเฟิร์มแวร์คือจะอยู่ที่นั่นเมื่อ CPU เริ่มทำงานดังนั้นจึงมีรหัสเพื่อเรียกใช้เพื่อเริ่มหรือบูตระบบใดก็ตามที่ CPU เป็นส่วนหนึ่ง ในกรณีของพีซีเฟิร์มแวร์ยังใช้เพื่อให้บริการแก่ระบบปฏิบัติการที่กำลังทำงานและยังมีรหัสสำหรับตัวควบคุมแบบฝังที่ควบคุมพัดลมพลังงานและสิ่งอื่น ๆ และรหัสสำหรับ ME / PSP ที่ทำงานในพื้นหลัง .

อุปกรณ์ต่อพ่วงที่ใช้เฟิร์มแวร์เช่นฮาร์ดไดรฟ์อุปกรณ์ USB ฯลฯ มีซีพียูในตัว


Microcodeไม่ใช่รหัสที่ปฏิบัติการได้ แต่เป็นรหัสที่ใช้โดยเครื่องมืออำนวยความสะดวกภายในของอุปกรณ์

มันบรรจุลงใน CPU ของ Intel หรือ AMD พร้อมกับคำสั่ง WRMSR การโหลดเฟิร์มแวร์ลงในอุปกรณ์นั้นเกี่ยวข้องกับการเขียนโปรแกรม ROM หรือแฟลชขนาดกลางหรือใช้โปรแกรมโหลดเดอร์ขนาดเล็กที่มีอยู่ในอุปกรณ์เพื่อรับเฟิร์มแวร์

การอัปเดตเฟิร์มแวร์และไมโครโค้ดอยู่ในหมวดหมู่ที่คล้ายกัน - สิ่งที่คุณต้องทำเพื่อให้ฮาร์ดแวร์ทำงานได้และอาจต้องอัปเดตเป็นครั้งคราว - แต่มันต่างกันมาก

คำแนะนำที่ซับซ้อนในซีพียูจำนวนมากนั้นไม่ได้เชื่อมต่อโดยตรงกับฮาร์ดแวร์ แต่ "ดำเนินการ" โดยอุปกรณ์ที่คล้าย CPU ในซีพียูหลัก ไมโครโค้ดควบคุมการทำงานเหล่านี้ สิ่งนี้กลับไปเป็นอย่างน้อย Motorola 68000 ซึ่งมีไมโครโค้ด "ที่มีไมโครโค้ด"

ไม่มีใครอื่นนอกจากโปรเซสเซอร์ของ Intel หรือ AMD ที่รู้ว่าไมโครโค้ดควบคุมหรือทำอะไรจริงๆเนื่องจากไม่มีการเปิดเผยรายละเอียด มีความพยายามที่จะแฮกมัน การอ้างอิง

ในทางปฏิบัติแล้วการอัปเดตไมโครโค้ดส่วนใหญ่จะใช้เพื่อปิดการใช้งานคำสั่งที่ก่อให้เกิดปัญหากับรุ่น / สเต็ปปิ้งที่รู้จักของซีพียูและซีพียูล่าสุดจาก Intel มักจะต้องการการอัปเดตไมโครโค้ดอย่างน้อยหนึ่งครั้ง


มุมมองบางประการเกี่ยวกับสิ่งที่ไมโครโค้ด CPU สามารถทำได้ / จริง ๆ แล้วจะได้รับถ้าคุณอ่านเกี่ยวกับ6502 PLA ถอดรหัส ROM - 6502 เป็นซีพียู 8 บิตแบบเก่าและคำแนะนำของมันถูกเรียงลำดับ / ควบคุมโดย PLA ภายใน โดยทั่วไปแล้ว PLA จะบอกว่าส่วนใดของชิปที่เกี่ยวข้องในแต่ละขั้นตอนของแต่ละคำสั่ง (6502 คำสั่งมีตั้งแต่ 2 ถึง 7 รอบ) สิ่งนี้ไกลไปไกลก่อนที่จะมีสิ่งต่าง ๆ เช่นแคชสถาปัตยกรรม superscalar การคาดคะเนสาขา ฯลฯ ไม่แน่ใจว่าไมโครโค้ดในซีพียูสมัยใหม่จะควบคุมบางสิ่งเช่น PLA หรือไม่


1
อินเทล "การอัปเดตเฟิร์มแว" สามารถทำอะไรมากไปกว่าการปรับเปลี่ยนคำแนะนำวิธี microcoded ถอดรหัส เช่นพวกเขาสามารถปิดการใช้งานบัฟเฟอร์บัฟเฟอร์ (ใน Skylake เพื่อแก้ไข SKL150 erratum) เพราะเมื่อเป็นไปได้ CPU ถูกออกแบบมาเพื่อทำให้สิ่งนี้เป็นไปได้ในกรณีที่พบข้อบกพร่องของฮาร์ดแวร์
Peter Cordes

1
จุดที่น่าสนใจเกี่ยวกับ 6502 PLA แต่ซีพียูที่ถูกวางสายจะต้องมีสายแบบแข็งกว่านั้น Classic MIPS ใช้ฟิลด์คำสั่งต่าง ๆ เพื่อควบคุมตรรกะภายในโดยตรงในลักษณะที่ค่อนข้างคล้ายกัน แต่แน่นอนว่าซีพียู pipelined มีคำแนะนำหลายอย่างในการบินซึ่งอาจเป็นหนึ่งสำหรับแต่ละขั้นตอนไปป์ไลน์หากไม่มีแผงลอย (หรือสำหรับ superscalar, 2 หรือมากกว่าในแต่ละขั้นตอนไปป์ไลน์และสำหรับการออกคำสั่งมันซับซ้อนมากขึ้น) จำนวนมากของซีพียูสมัยใหม่ภายในมีสายแข็ง แต่ด้วยลูกบิดที่อัปเดตไมโครโค้ดสามารถปรับแต่งได้
Peter Cordes

0

คำศัพท์

ฉันจะตอบคำถามนี้ด้วยตัวเองโดยใช้บริบทเฉพาะในไฟล์ PDFนี้

  • เฟิร์มแวร์ - ไมโครโค้ดได้รับการอัพเดตผ่านเส้นทางที่จัดทำโดยเฟิร์มแวร์ของ CPU

    "โดยทั่วไปแพทช์ไมโครโค้ดจะถูกอัปโหลดไปยังซีพียูโดยเฟิร์มแวร์มาเธอร์บอร์ด (เช่น BIOS หรือ UEFI) หรือระบบปฏิบัติการในระหว่างขั้นตอนการบู๊ตตอนแรก"

  • Microcode - เป็นข้อมูลที่ใช้โดย "Instruction Decode Unit (IDU)" IDU สามารถเดินสายหรือmicrocodedได้ Microcoded ในบริบทนี้หมายถึงโปรแกรม ALSOหมายถึง"ส่วนใหญ่ของไมโครโค้ด" IDU

    IDU มีบทบาทสำคัญในชุดควบคุมและสร้างสัญญาณควบคุมตามเนื้อหาของการลงทะเบียนคำสั่ง

  • คำสั่งมาโครหนึ่งคำสั่งที่ส่งไปยัง IDU เพื่อถอดรหัสอาจส่งคืนจำนวนไมโครคำสั่งใด ๆ

  • คำสั่งขนาดเล็กหนึ่งคำสั่งล่วงหน้า "คำควบคุม" ทั้งหมดของรัฐและคำแนะนำในการดำเนินการสำหรับหนึ่งรอบนาฬิกา ส่งไปยัง CPU ในการสร้างสัญญาณควบคุม

ดังนั้นในบริบทนี้คุณจะต้องอัปเดตไมโครโค้ดด้วยเฟิร์มแวร์ คุณจะส่งคำสั่งแมโครไปที่ microcoded IDU เพื่อแก้ไขคำสั่งแมโครเป็น "คำสั่งขนาดเล็ก" สำหรับการดำเนินการกับ CPU ซึ่งเปลี่ยนให้เป็นสัญญาณควบคุม

ฉันอ่านสิ่งนี้

Microcode เป็นข้อมูลแต่การอัปเดตไมโครโค้ดนั้นทำได้ผ่านเฟิร์มแวร์ และสับสนเพราะคุณกำลังพูดถึงจำนวนเงินที่สำคัญในตารางการค้นหาภายในแน่นอนว่ามันเองก็เป็นเฟิร์มแวร์ที่มันถูกเก็บไว้ในชิปและใช้ในการดำเนินการของชิป ฉันคิดว่าคุณสามารถโต้แย้งได้ว่า General MIDI, ฮาร์ดแวร์ PostScript และสัญญาณควบคุมสำหรับเทอร์มินัลโง่ก็ถูกตีความในลักษณะเดียวกันในฮาร์ดแวร์และสิ่งที่ต้องใช้คำสั่งและสร้าง"สัญญาณควบคุม"ในกระบวนการตีความบางอย่างในที่สุด .

ดูเหมือนว่าเรามีชื่อพิเศษสำหรับกระบวนการและส่วนประกอบเหล่านี้ภายใน CPU: "IDU" บน CPU และชื่อสำหรับตารางอินพุตเฉพาะที่ IDU ใช้ซึ่งถือ "microinstructions": "microcode" ทั้งหมด ข้อมูลเกี่ยวกับกระบวนการนั้นเป็นกรรมสิทธิ์และปิด ฉันคิดว่ามันคล้ายกับเทคโนโลยีอื่น ๆ จากโมเด็ม (กับ ATDT และเช่นเดียวกับโมเด็ม Hayes) ถึงการ์ด MIDI แต่เราไม่ได้ตั้งชื่อตารางการค้นหาเฉพาะ "ไมโครโค้ด" แทนการใช้เฟิร์มแวร์ "ร่ม" แทน กระบวนการกระพริบและเพย์โหลดทั้งหมดที่เก็บไว้บนชิป


2
Linux (และ Windows) สามารถอัปเดตไมโครโค้ด CPU โดยไม่ขึ้นกับเฟิร์มแวร์เมนบอร์ดที่คุณกำลังพูดถึง เฟิร์มแวเมนบอร์ดจะมีเฟิร์มแว CPU ใหม่ล่าสุดและกลไกในการใช้มันก่อนรหัสใด ๆ จะถูกโหลดจากดิสก์ แต่ถ้าคุณยังไม่ได้ปรับปรุงเฟิร์มแว mobo คุณในขณะที่คุณยังคงสามารถมีเฟิร์มแว CPU ล่าสุดโดยซอฟต์แวร์เพียงการปรับปรุง คุณทำข้อตกลงที่ใหญ่เกินไปจากการเชื่อมต่อระหว่าง mobo เฟิร์มแวร์และซีพียูไมโครโค้ด มีประโยชน์ที่จะให้เฟิร์มแวร์อัปเดตไมโครโค้ดทุกครั้งที่บูต แต่ไม่จำเป็น (ยกเว้นเพื่อความเสถียรในบางครั้ง)
Peter Cordes

2
นอกจากนี้คำสั่งแมโครทั้งหมด x86 ไม่ได้รับการถอดรหัสด้วยการค้นหาในไมโครซีเควนเซอร์ ROM บน CPU ของ Intel คำสั่งที่ถอดรหัสเป็น 4 หรือน้อยกว่า uops (micro-ops) ถูกฮาร์ดโค้ดลงในเครื่องถอดรหัส คำแนะนำส่วนใหญ่ไม่ได้เป็น"รหัสไมโคร"ในความหมายของคำนี้ Integer Division คือ ( divและidiv) แต่แม้กระทั่งการแบ่ง FP ก็เป็น uop เดียว (เพราะมันมีประสิทธิภาพที่สำคัญยิ่งขึ้นตรรกะซ้ำหลายขั้นตอนจะทำในหน่วยการหารแทนที่จะเป็น microcoded uops)
Peter Cordes

@PeterCordes คุณเป็นคนที่จะเขียนคำตอบนี้รู้สึกแก้ไขคำตอบของฉันเพื่อให้ถูกต้องทางเทคนิคมากขึ้น คุณมีบลานช์ตามสั่ง แม้ว่าฉันจะพยายามย้อนการเปลี่ยนแปลงเหล่านั้นในคืนนี้หากคุณไม่ทันเวลา
Evan Carroll

หากฉันได้รับมันฉันจะเขียนคำตอบที่ฉันเริ่ม สำหรับตอนนี้คำตอบของแฮร์รี่จอห์นสตันน่าจะเป็นคำตอบที่ดีที่สุดเท่าที่ฉันคิดว่าคุณต้องการทราบจริง ๆ (ซึ่งเป็นสิ่งที่ "การอัพเดตไมโครโค้ด" อัพเดตจริงๆ) ซึ่งไม่เหมือนกับสิ่งที่ "ไมโครซีพียู CPU" ทำ เพราะมันเป็นชื่อที่ง่ายกว่าที่เป็นอยู่ร่วมกันกับสิ่งที่ทางเทคนิคที่ต้องการชื่อหนึ่งคำประชาชนทั่วไปสามารถติดตาม).
ปีเตอร์ Cordes

0

ฉันเรียนหลักสูตรพื้นฐานการออกแบบ ISA โดยส่วนใหญ่เป็นการศึกษาและออกแบบโปรเซสเซอร์ RISC ที่จำลองแนวคิด MIPS นี่คือสิ่งที่ฉันจำได้

เพื่อความเข้าใจของฉันบล็อกพื้นฐานของหน่วยประมวลผลเช่นรีจิสเตอร์, ALUs, มัลติเพล็กเซอร์และโมดูลหน่วยความจำต้องใช้สัญญาณบางอย่างเพื่อให้สามารถทำงานได้ คุณจะเรียกสัญญาณเหล่านี้ว่า "ยืนยัน" สัญญาณของคุณเนื่องจากเป็นสัญญาณที่จำเป็นในการใช้งานบล็อกเหล่านี้ ซีพียูในสาระสำคัญเป็นบล็อกปาเก็ตตี้ของ ALUs โมดูลหน่วยความจำการลงทะเบียนและฮาร์ดแวร์อื่น ๆ ความหมาย CPU แต่ละตัวจะต้องยืนยันลำดับสัญญาณควบคุมที่แน่นอนเพื่อให้ทำงานได้ (ฉันหมายถึงคำแนะนำพื้นฐานเช่น ANDI, ORI, JMP, BNE, BEQ เป็นต้น) ฉันมีความรู้สึกผสมปนเปเมื่อฉันต้องยืนยันสัญญาณด้วยตัวเอง (ตามคำแนะนำของ MIPS ทั้งหมด) ในระหว่างการทดสอบและการดีบักชุดคำสั่งเนื่องจากจังหวะของหลักสูตรไม่ได้สอนฉันเกี่ยวกับหน่วยควบคุมในเวลานั้น

ในทางกลับกันภาษาแอสเซมเบลอร์จะไหลลงมาที่ opcodes และตัวถูกดำเนินการในคำสั่ง (โดยทั่วไปคือความกว้างของดาต้าบัสของคุณ) ในแง่ของ MIPS คำ 6 คำแรกของคุณคือ opcode ของคุณ โดยการตรวจสอบทางคณิตศาสตร์เพียงอย่างเดียวคุณไม่สามารถ "ยืนยัน" ALU ของคุณลงทะเบียนหน่วยความจำ muxes .. โดยทั่วไปส่วนที่เหลือของฮาร์ดแวร์ของคุณด้วย 6 บิตเพียงอย่างเดียว

ไม่เว้นแต่คุณจะมี ... ถอดรหัสคำแนะนำ ตัวถอดรหัสคำสั่งนั้นใช้ opcode ของคุณและสร้างสัญญาณ "assertion" ทั้งหมดที่จำเป็นในการใช้งานฮาร์ดแวร์ของคุณ อย่างไรก็ตามตัวถอดรหัสการเรียนการสอนแตกต่างกันในการใช้งานระหว่างสถาปัตยกรรมและในบางกรณีสามารถตั้งโปรแกรม ไมโครโค้ดส่งผลกระทบต่อส่วนที่โปรแกรมได้ของตัวถอดรหัสคำสั่ง

ฉันเชื่อว่าเฟิร์มแวร์เป็นคำทั่วไปสำหรับข้อมูลใด ๆ ที่ฝังอยู่ในฮาร์ดแวร์ ในบางกรณีมันจะอ้างถึงไมโครโค้ดเนื่องจากบิตสตรีมสามารถเข้ารหัสและเก็บไว้ในฮาร์ดแวร์เช่น EEPROM และหน่วยความจำแฟลช อย่างไรก็ตามส่วนใหญ่มันเป็นโค้ดที่รวบรวม asm หรือแม้แต่ VHDL / Verilog bitstreams ที่ใช้ใน FPGA ไมโครโค้ดสำหรับฉันดูเหมือนว่าซีแมนทิกส์ใช้สำหรับระบุ "สัญญาณการยืนยัน" ในตัวประมวลผลที่เลือก


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