ช่องว่างที่อยู่ใน PCIe


19

มีช่องว่างที่อยู่สี่ช่องใน PCI Express:

  • หน่วยความจำแมป
  • I / O ที่แมป
  • พื้นที่การกำหนดค่า
  • ข่าวสาร

ใครช่วยอธิบายความสำคัญของที่อยู่แต่ละแห่งได้บ้าง

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

พื้นที่นี้มี BAR (การลงทะเบียนที่อยู่ฐาน) การลงทะเบียนนี้จะถูกใช้เพื่อระบุที่อยู่ที่มีอยู่ในปลายทาง PCIe หรือไม่

ฉันใหม่สำหรับ PCIe และพยายามเรียนรู้ ฉันหมายถึงข้อมูลจำเพาะพื้นฐาน แต่ฉันคิดว่ามันเขียนไว้สำหรับผู้อ่านที่มีความรู้ก่อนหน้านี้เกี่ยวกับ PCI และ PCIe

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

คำตอบ:


31

มันไม่นานมานี้ตั้งแต่ถูกถาม แต่ฉันเกลียดคำถามกำพร้า :)

อันดับแรกให้ลดความซับซ้อนของแพลตฟอร์ม x86 ที่ทันสมัยและแสร้งทำเป็นว่ามีพื้นที่ที่อยู่ 32 บิตจาก 0x00000000 ถึง 0xFFFFFFFF เราจะเพิกเฉยต่อพื้นที่พิเศษ / ที่สงวนไว้ทั้งหมด TOLUD (ด้านบนของ DRAM ที่ใช้งานได้ต่ำกว่า, Intel parlance) รูเป็นต้นเราจะเรียกแผนที่หน่วยความจำระบบนี้

ประการที่สอง PCI Express ขยาย PCI จากมุมมองของซอฟต์แวร์พวกเขาคล้ายกันมาก

ฉันจะข้ามไปยังหมายเลขที่ 3 ของคุณ - พื้นที่การกำหนดค่า - ก่อน ที่อยู่ใด ๆ ที่ชี้ไปยังพื้นที่กำหนดค่าจะถูกจัดสรรจากแผนที่หน่วยความจำระบบแผนที่หน่วยความจำระบบอุปกรณ์ PCI มีพื้นที่กำหนดค่า 256 ไบต์ - ซึ่งขยายเป็น 4KB สำหรับ PCI Express พื้นที่ 4KB นี้ใช้ที่อยู่หน่วยความจำจากแผนที่หน่วยความจำระบบ แต่โดยทั่วไปค่า / บิต / เนื้อหาที่แท้จริงจะถูกนำไปใช้ในการลงทะเบียนบนอุปกรณ์ต่อพ่วง ตัวอย่างเช่นเมื่อคุณอ่าน ID ผู้ขายหรือ ID อุปกรณ์อุปกรณ์ต่อพ่วงเป้าหมายจะส่งคืนข้อมูลแม้ว่าที่อยู่หน่วยความจำที่ใช้จะมาจากแผนที่หน่วยความจำระบบ

คุณระบุว่าสิ่งเหล่านี้ "จัดสรรเป็น RAM" - ไม่จริงองค์ประกอบบิต / สถานะที่แท้จริงอยู่ในอุปกรณ์ต่อพ่วง อย่างไรก็ตามพวกเขาจะถูกแมปลงในแผนที่หน่วยความจำระบบ ถัดไปคุณถามว่าเป็นชุดทะเบียนทั่วไปในอุปกรณ์ PCIe ทั้งหมดหรือไม่ - ใช่และไม่ใช่ วิธีการทำงานของพื้นที่ปรับแต่ง PCI นั้นจะมีตัวชี้ที่ส่วนท้ายของแต่ละส่วนที่ระบุว่ามี "สิ่ง" ให้อ่านเพิ่มเติมหรือไม่ มีขั้นต่ำเปล่าที่อุปกรณ์ PCIe ทั้งหมดต้องใช้งานและจากนั้นอุปกรณ์ขั้นสูงสามารถใช้งานได้มากขึ้น สำหรับประโยชน์ที่ได้รับสำหรับการใช้งานได้ดีและจำเป็นอย่างมาก :)

ตอนนี้คำถามของคุณเกี่ยวกับ BARs (การลงทะเบียนที่อยู่พื้นฐาน) เป็นพื้นที่ที่ดีในการแบ่งพื้นที่หน่วยความจำและพื้นที่ I / O สเปคช่วยให้สเปคของขนาดบาร์นอกเหนือไปจากประเภทนี้ สิ่งนี้อนุญาตให้อุปกรณ์ร้องขอ BAR ที่แมปหน่วยความจำปกติหรือ IO space BAR ซึ่งกินพื้นที่ I / O 4K จำนวนหนึ่งที่เครื่อง x86 มี คุณจะสังเกตเห็นว่าในเครื่อง PowerPC แถบพื้นที่ I / O นั้นไม่มีค่า

บาร์นั้นเป็นวิธีที่อุปกรณ์บอกโฮสต์ว่าต้องการหน่วยความจำเท่าใดและเป็นประเภทใด ถ้าฉันถามว่าพื้นที่หน่วยความจำแมป 1MB, BIOS อาจกำหนดฉันที่อยู่ 0x10000000 ถึง 0x10100000 นี่ไม่ใช่การใช้ RAM จริงเพียงแค่กำหนดพื้นที่ (คุณเห็นไหมว่าทำไมระบบ 32- บิตจึงมีปัญหาเกี่ยวกับการ์ดเอ็กซ์แพนชันเช่น GPU ระดับสูงที่มี RAM ขนาด GB?) ขณะนี้หน่วยความจำเขียน / อ่านเพื่อบอกว่า 0x10000004 จะถูกส่งไปยังอุปกรณ์ PCI Express และนั่นอาจเป็นการลงทะเบียนแบบไบท์ที่เชื่อมต่อกับไฟ LED ดังนั้นถ้าฉันเขียน 0xFF ไปยังที่อยู่หน่วยความจำกายภาพ 0x10000004 นั่นจะเปิด 8 LEDs นี่คือขั้นพื้นฐานของหน่วยความจำที่แมป I / O

พื้นที่ I / Oทำงานในทำนองเดียวกันยกเว้นว่าทำงานในพื้นที่หน่วยความจำแยกต่างหากคือพื้นที่ x86 I / O ที่อยู่ 0x3F8 (COM1) มีอยู่ทั้งในพื้นที่ I / O และพื้นที่หน่วยความจำและมีสองสิ่งที่แตกต่างกัน

คำถามสุดท้ายของคุณข้อความหมายถึงกลไกการขัดจังหวะแบบใหม่การขัดจังหวะการส่งสัญญาณข้อความหรือ MSI สั้น ๆ อุปกรณ์ PCI แบบดั้งเดิมมีหมุดขัดจังหวะสี่อัน INTA, INTB, INTC, INTD โดยทั่วไปแล้วสิ่งเหล่านี้เกิดขึ้นอย่างรวดเร็วในหมู่สล็อตเช่นที่ INTA ไปที่ INTA บนสล็อต 0 จากนั้น INTB ในสล็อต 1 จากนั้น INTC บนสล็อต 2, INTD บนสล็อต 3 และจากนั้นกลับไปที่ INTA บนสล็อต 4 เหตุผลสำหรับสิ่งนี้คือ PCI ส่วนใหญ่ อุปกรณ์ที่นำมาใช้เท่านั้น INTA และโดยการ swizzling มันมีสามอุปกรณ์แต่ละตัวจะจบลงด้วยสัญญาณขัดจังหวะของตัวเองเพื่อควบคุมขัดจังหวะ MSI เป็นวิธีการส่งสัญญาณการขัดจังหวะโดยใช้เลเยอร์โปรโตคอล PCI Express และ PCIe root complex (โฮสต์) ดูแลการขัดจังหวะ CPU

คำตอบนี้อาจจะสายเกินไปที่จะช่วยคุณ แต่บางทีมันอาจจะช่วยให้ Googler / Binger ในอนาคต

ในที่สุดฉันขอแนะนำให้อ่านหนังสือเล่มนี้จาก Intelเพื่อรับการแนะนำที่ดีและมีรายละเอียดเกี่ยวกับ PCIe ก่อนที่คุณจะไปต่อ อ้างอิงอีกจะเป็นไดรเวอร์ของอุปกรณ์ Linux เป็น ebook ออนไลน์จาก LWN


โพสต์มีประโยชน์มาก ฉันใหม่มากสำหรับ PCIe เพื่อให้กระบวนการนับจำนวนเกิดขึ้น (การจัดสรรพื้นที่และการจับคู่การกำหนดค่า COnfiguration) เราต้องการการสนับสนุนไดรเวอร์หรือไม่หรือสามารถเริ่มต้นโดย Os
kamlendra

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

โปรดทราบว่าเฉพาะหน่วยความจำทำเครื่องหมายว่าก่อน fetchable สามารถโอนอีกกว่า DWORD เดียวต่อการทำธุรกรรม; ช่องว่างอื่น ๆ ทั้งหมดสามารถโอนได้เพียง DWORD เดียวต่อการทำธุรกรรม ขนาดของการระเบิดจะ จำกัด ที่ MAX_PAYLOAD_SIZE (ค้นพบระหว่างการแจงนับ)
ปีเตอร์สมิ ธ

สวัสดี. ฉันยังใหม่กับ PCI และต้องการคำตอบที่ชัดเจน คุณระบุว่าการกำหนดพื้นที่ 256b / 4k ไบต์มีการแมปลงในหน่วยความจำระบบ จากการสอนตัวเองของฉันฉันคิดว่าการเข้าถึงพื้นที่การกำหนดค่าได้รับการจัดการผ่านคอนโทรลเลอร์ PCI ซึ่งถูกแมปแบบคงที่ในหน่วยความจำระบบ คอนโทรลเลอร์นี้มีการลงทะเบียนไม่กี่ (สำหรับการระบุอุปกรณ์ / ฟังก์ชั่น, ชดเชยในพื้นที่ที่อยู่, ที่อยู่ผลลัพธ์) ที่ทำหน้าที่เป็นอินเทอร์เฟซขนาดเล็กในพื้นที่การกำหนดค่า ดังนั้นผลจะมีการสงวนไว้ประมาณ 5 - 10 ไบต์เท่านั้นสำหรับคอนโทรลเลอร์ PCI ถูกต้องไหม ???
Cerezo

ดังนั้นเมื่อโฮสต์ (CPU) เขียนลงทะเบียนที่ที่อยู่ 0x10000004 ค่า 0xFF คอมแพครูต PCI จะดึงข้อมูลนี้ (อาจเป็นโพลเสมอสำหรับข้อมูลที่ที่อยู่ใด ๆ จาก 0x10000000 ถึง 0x10100000) และจะเขียนตามที่อยู่ 0x04 ที่จุดปลาย (อุปกรณ์ PCIe) ความเข้าใจนี้ถูกต้องหรือไม่
AlphaGoku
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.