การตรวจสอบ CPU อ่อน


18

ขณะนี้ฉันกำลังอยู่ระหว่างการออกแบบ CPU อย่างง่ายใน VHDL โดยใช้ Xilinx ISE และ ISIM ส่วนการออกแบบเป็นไปอย่างน่าทึ่ง แต่ฉันไม่สามารถหาวิธีการตรวจสอบในลักษณะที่สอดคล้องกัน

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

ฉันคิดเกี่ยวกับการพัฒนาชุดทดสอบที่กว้างขวาง แต่ปัญหาคือสถานะที่เป็นไปได้ของส่วนวัตถุประสงค์ทั่วไปเนื่องจาก CPU นั้นมีขนาดใหญ่มากเมื่อเปรียบเทียบกับส่วนประกอบทั่วไปที่น้อยกว่า

ฉันกำลังมองหาวิธีที่ช่วยให้ฉันสามารถออกแบบและทดสอบในลักษณะที่ควบคุมได้มากกว่า ฮาร์ดแวร์ TDD บางประเภทถ้าคุณต้องการ สิ่งนั้นมีอยู่จริงหรือไม่? สามารถนำไปใช้กับชิ้นส่วนที่ใช้งานทั่วไปเช่น CPU ได้อย่างง่ายดายหรือไม่?

คำตอบ:


16

ปัญหาทั้งหมดของการตรวจสอบ CPU นั้นใหญ่และยากมาก มีคนที่สร้างอาชีพจากสิ่งนี้ ฉันจะให้ภาพรวม ...

  1. เขียนโปรแกรมภาษาแอสเซมบลีที่ทดสอบการเรียนการสอนและรายละเอียดเล็ก ๆ ของการสอนทั้งหมด ตัวอย่างเช่นเมื่อทดสอบคำสั่ง ADD คุณอาจทดสอบด้วยตัวเลขที่มีทั้งบวกลบและหนึ่งในแต่ละ (สองครั้ง) จากนั้นคุณจะทดสอบการพกพาการตั้งค่าสถานะเป็นศูนย์ ฯลฯ คุณสมบัติพิเศษอื่น ๆ ของ CPU (เช่นการคาดคะเนสาขาเป็นต้น) จะมีส่วนพิเศษของตนเองในการทดสอบนี้

  2. เขียนโดยใช้ C / C ++ หรือรูปแบบของ CPU ของคุณ นี่คือ CPU เสมือนของคุณ นี่เป็น "โกลเด้นซีพียู" ของคุณซึ่งหมายความว่านี่คือซีพียูที่ทุกอย่างเปรียบเทียบ โดยหลักการแล้วคนที่เขียน VHDL นั้นไม่ใช่คนเดียวกับที่เขียนแบบ C / C ++

  3. เขียน / สร้างระบบที่คุณสามารถรันโมเดล C / C ++ และโมเดล VHDL เคียงข้างกันและเปรียบเทียบผลลัพธ์บนพื้นฐานแบบหมุนเวียนตามวัฏจักร รันโปรแกรมการประกอบของคุณจากขั้นตอนที่ 1 และตรวจสอบให้แน่ใจว่าทั้งสองรุ่นตรงกัน

  4. รันทั้งสองแบบของคุณด้วย "คำแนะนำ" แบบสุ่ม โดยทั่วไปให้กรอก "ram" ด้วยข้อมูลแบบสุ่มและดำเนินการข้อมูลแบบสุ่มราวกับว่ามันเป็นคำแนะนำจริง เรียกใช้ข้อมูลสุ่มแบบเดียวกันทั้งในรุ่น VHDL และ C / C ++ และเปรียบเทียบผลลัพธ์ รุ่น C / C ++ นี้จะทำงานบนเวิร์กสเตชันและ / หรือเซิร์ฟเวอร์บางตัว (ไม่ใช่ CPU ตัวใหม่)

  5. ตั้งค่าเครื่องหรือหลายเครื่องเพื่อทำซ้ำขั้นตอนที่ 4 อย่างถาวร แม้ว่า CPU ของคุณจะ "เสร็จสิ้น" และอยู่ระหว่างการผลิตเป็นเวลาหนึ่งปีหรือมากกว่านั้นคุณจะยังคงใช้การทดสอบนี้อยู่

  6. ทำซ้ำขั้นตอนเหล่านี้เมื่อใดก็ตามที่มีการจำลองเพิ่มเติม ตัวอย่างเช่นคุณจะเรียกใช้งานบน VHDL หลังการเดินทางพร้อมกำหนดเวลาเมื่อมีให้บริการ

ไม่มีการรับประกันว่าการเปรียบเทียบรุ่น VHDL และ C / C ++ จะจับข้อผิดพลาดทุกครั้ง - แต่ไม่มีวิธีที่ดีกว่าจริงๆ และการทดสอบ CPU บนคำแนะนำแบบสุ่มต้องใช้เวลา แต่นั่นก็มีประโยชน์มาก ทางเลือกเดียวที่แท้จริงคือการจ้างคนจำนวนมากเพียงแค่เขียนโค้ดทั้งวันเพื่อทดสอบส่วนต่าง ๆ ของ CPU และ บริษัท ใหญ่ ๆ ก็ทำเช่นนี้ แต่พวกเขาก็ทำข้อมูลแบบสุ่มด้วยเช่นกัน

สำหรับคนที่เขียนโค้ด VHDL มักเป็นเพียงขั้นตอน # 1 ที่ทำ แต่ถ้าคุณจะขายซีพียูอย่างน้อยก็ควรทำขั้นตอนอื่น ๆ (และจริง ๆ แล้วคุณควรทำทั้งหมด)


คำตอบที่ยอดเยี่ยมขอบคุณ! มันสมเหตุสมผลมาก "Golden CPU" เป็นชิ้นส่วนของปริศนาที่หายไปซึ่งช่วยให้คุณทำการตรวจสอบแบบวนต่อรอบเมื่อทำการทดสอบ เนื่องจากนี่เป็นโครงการของเล่นส่วนใหญ่ฉันคิดว่าฉันจะทำตามประโยคแรกของย่อหน้าสุดท้ายและทำตามขั้นตอนที่ 1 แต่การรู้ว่าสิ่งที่ฉันควรทำคือสิ่งมีค่า
drxzcl

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

นอกจากนี้ให้เรียกใช้การครอบคลุมโค้ด (เพื่อตรวจสอบว่าคุณได้ออกกำลังกายทั้งหมด) และครอบคลุมการทดสอบ (เพื่อตรวจสอบการทดสอบทั้งหมดที่ได้รับการทดสอบสำหรับ pas และล้มเหลว)
Martin Thompson

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