อ่าน 3 นาที
การจำลองวงจรภายใน
การจำลองวงจรภายใน (In-circuit emulationหรือICE ) คือการใช้ฮาร์ดแวร์หรือตัวจำลองวงจรภายในเพื่อดีบักซอฟต์แวร์ของระบบฝังตัวโดยทำงานโดยใช้โปรเซสเซอร์ที่มีความสามารถเพิ่มเติมในการรองรับ...
การจำลองวงจรภายใน
การจำลองวงจรภายใน (In-circuit emulationหรือICE ) คือการใช้ฮาร์ดแวร์หรือตัวจำลองวงจรภายในเพื่อดีบักซอฟต์แวร์ของระบบฝังตัวโดยทำงานโดยใช้โปรเซสเซอร์ที่มีความสามารถเพิ่มเติมในการรองรับการดีบัก รวมถึงการทำงานหลักของระบบด้วย โดยเฉพาะอย่างยิ่งสำหรับระบบรุ่นเก่าที่มีโปรเซสเซอร์จำกัด วิธีนี้มักเกี่ยวข้องกับการแทนที่โปรเซสเซอร์ชั่วคราวด้วยตัวจำลองฮาร์ดแวร์ ซึ่งเป็นรุ่นที่มีประสิทธิภาพมากกว่าแต่มีราคาแพงกว่า ในอดีตนั้นอยู่ในรูปแบบของโปรเซสเซอร์แบบแยกส่วน (bond-out processor)ซึ่งมีสัญญาณภายในจำนวนมากที่ต่อออกมาเพื่อวัตถุประสงค์ในการดีบัก สัญญาณเหล่านี้ให้ข้อมูลเกี่ยวกับสถานะของโปรเซสเซอร์
เมื่อไม่นานมานี้ คำนี้ยังครอบคลุมถึงฮาร์ดแวร์ดีบักเกอร์แบบJTAG ซึ่งให้การเข้าถึงที่เทียบเท่ากันโดยใช้ฮาร์ดแวร์ ดีบักบนชิปกับชิปมาตรฐานที่ใช้ในการผลิต การใช้ชิปมาตรฐานแทนชิปที่ออกแบบพิเศษทำให้เทคโนโลยีนี้แพร่หลายและมีต้นทุนต่ำ และขจัดความแตกต่างส่วนใหญ่ระหว่างสภาพแวดล้อมการพัฒนาและการทำงาน ในกรณีทั่วไปนี้ คำว่า "อินเซอร์กิตอีมูเลเตอร์"จึงเป็นคำที่ไม่ถูกต้องบางครั้งก็ทำให้เกิดความสับสน เพราะการจำลองไม่ได้เกี่ยวข้องอีกต่อไปแล้ว
ระบบฝังตัวก่อให้เกิดปัญหาพิเศษสำหรับโปรแกรมเมอร์ เนื่องจากโดยทั่วไปแล้วระบบเหล่านี้มักขาดแป้นพิมพ์จอภาพดิสก์ไดรฟ์และส่วนติดต่อผู้ใช้แบบอื่นๆ ที่มีอยู่ในคอมพิวเตอร์ ข้อจำกัดเหล่านี้ทำให้เครื่องมือดีบักซอฟต์แวร์แบบอินเซอร์กิตมีความสำคัญอย่างยิ่งสำหรับงานพัฒนาทั่วไปหลายอย่าง
การทำงาน
ตัวจำลองวงจรภายใน (ICE) ทำหน้าที่เป็นหน้าต่างสู่ระบบฝังตัว โปรแกรมเมอร์ใช้ตัวจำลองนี้เพื่อโหลดโปรแกรมเข้าไปในระบบฝังตัว รันโปรแกรม ค่อยๆ ทำงานที ละ ขั้นตอนและดูและเปลี่ยนแปลงข้อมูลที่ซอฟต์แวร์ของระบบใช้งาน
โปรแกรมจำลอง (Emulator)ได้ชื่อมาจากการที่มันจำลอง (เลียนแบบ) หน่วยประมวลผลกลาง (CPU) ของคอมพิวเตอร์ระบบฝังตัว (Embedded System) โดยทั่วไปแล้วจะมีปลั๊กที่เสียบเข้ากับซ็อกเก็ตที่ ปกติแล้วจะเป็นที่วางชิป วงจรรวม ( CPU ) แต่ระบบสมัยใหม่ส่วนใหญ่ใช้ CPU ของระบบเป้าหมายโดยตรง โดยใช้การเข้าถึงการดีบักแบบพิเศษผ่าน JTAG การจำลองโปรเซสเซอร์ หรือการเข้าถึง JTAG โดยตรง ช่วยให้ ICE สามารถทำทุกอย่างที่โปรเซสเซอร์ทำได้ แต่ภายใต้การควบคุมของนักพัฒนาซอฟต์แวร์
ICE (Integrated User Interface) คืออุปกรณ์ที่เชื่อมต่อเทอร์มินัลคอมพิวเตอร์หรือคอมพิวเตอร์ส่วนบุคคล (PC) เข้ากับระบบฝังตัว เทอร์มินัลหรือ PC นี้จะทำหน้าที่เป็นส่วนติดต่อผู้ใช้ แบบโต้ตอบ สำหรับโปรแกรมเมอร์ในการตรวจสอบและควบคุมระบบฝังตัว ตัวอย่างเช่น เป็นเรื่องปกติที่จะมีดีบัก เกอร์ระดับซอร์สโค้ด พร้อมส่วนติดต่อผู้ใช้แบบกราฟิกที่สื่อสารผ่านอะแดปเตอร์ JTAG (อีมูเลเตอร์) ไปยังระบบเป้าหมายฝังตัวซึ่งไม่มีส่วนติดต่อผู้ใช้แบบกราฟิก
ที่น่าสังเกตคือ เมื่อโปรแกรมล้มเหลว ระบบฝังตัวส่วนใหญ่จะใช้งานไม่ ได้เลย ระบบฝังตัวมักขาดฟังก์ชันพื้นฐานในการตรวจจับสัญญาณความล้มเหลวของซอฟต์แวร์เช่นหน่วยจัดการหน่วยความจำ (MMU) เพื่อตรวจจับข้อผิดพลาดในการเข้าถึงหน่วยความจำ หากไม่มี ICE การพัฒนาระบบฝังตัวอาจทำได้ยากมาก เพราะโดยปกติแล้วไม่มีวิธีใดที่จะบอกได้ว่าอะไรผิดพลาดไป ด้วย ICE โปรแกรมเมอร์มักจะสามารถทดสอบส่วนของโค้ด จากนั้นแยกความผิดพลาดไปยังส่วนของโค้ดที่เฉพาะเจาะจง แล้วตรวจสอบโค้ดที่ล้มเหลวและเขียนใหม่เพื่อแก้ไขปัญหาได้
ในการใช้งาน ICE จะช่วยให้โปรแกรมเมอร์สามารถตั้งจุดหยุดการทำงาน(breakpoints ) แสดงและตรวจสอบหน่วยความจำ และควบคุมการรับส่งข้อมูล (input/output control) ได้ นอกจากนี้ ICE ยังสามารถตั้งโปรแกรมให้ค้นหาเกณฑ์ที่ตรงกันในช่วงใดก็ได้เพื่อหยุดการทำงาน ในความพยายามที่จะระบุต้นกำเนิดของความล้มเหลว
ไมโครคอนโทรลเลอร์สมัยใหม่ส่วนใหญ่ใช้ทรัพยากรที่มีให้ในเวอร์ชันที่ผลิตของไมโครคอนโทรลเลอร์สำหรับการเขียนโปรแกรมอุปกรณ์ การจำลอง และคุณสมบัติการดีบัก แทนที่จะต้องใช้เวอร์ชันการจำลองพิเศษอีกเวอร์ชันหนึ่ง (นั่นคือ การเชื่อมต่อ) ของไมโครคอนโทรลเลอร์เป้าหมาย[ 1 ]แม้ว่าจะเป็นวิธีการที่คุ้มค่า เนื่องจากหน่วย ICE ทำหน้าที่จัดการการจำลองแทนที่จะจำลองไมโครคอนโทรลเลอร์เป้าหมายจริง ๆ จึงต้องมีการประนีประนอมเพื่อให้ราคาต่ำในระหว่างการผลิต ในขณะเดียวกันก็ต้องมีคุณสมบัติการจำลองที่เพียงพอสำหรับแอปพลิเคชันการจำลอง (ซึ่งมีจำนวนค่อนข้างน้อย)
ข้อดี
ระบบฝังตัวเกือบทั้งหมดมีส่วนประกอบฮาร์ดแวร์และส่วนประกอบซอฟต์แวร์ ซึ่งแยกจากกันแต่พึ่งพาซึ่งกันและกันอย่างแน่นหนา ICE ช่วยให้สามารถเรียกใช้และทดสอบส่วนประกอบซอฟต์แวร์บนฮาร์ดแวร์ที่จะใช้งานได้ แต่ยังคงอำนวยความสะดวกให้แก่โปรแกรมเมอร์เพื่อช่วยแยกแยะโค้ดที่ผิดพลาด เช่นการดีบักระดับซอร์สโค้ด (ซึ่งแสดงโปรแกรมตามที่เขียนไว้แต่แรก) และ การเรียกใช้โปรแกรม ทีละขั้นตอน (ซึ่งช่วยให้โปรแกรมเมอร์เรียกใช้โปรแกรมทีละขั้นตอนเพื่อค้นหาข้อผิดพลาด)
ICE ส่วนใหญ่ประกอบด้วยหน่วยอะแดปเตอร์ที่อยู่ระหว่างคอมพิวเตอร์โฮสต์ ICE และระบบที่จะทดสอบ ชุดหัวต่อพินและสายเคเบิลเชื่อมต่ออะแดปเตอร์เข้ากับซ็อกเก็ตที่หน่วยประมวลผลกลาง (CPU) หรือไมโครคอนโทรลเลอร์ จริง ติดตั้งอยู่ภายในระบบฝังตัว ICE รุ่นใหม่ๆ ช่วยให้โปรแกรมเมอร์สามารถเข้าถึงวงจรดีบักบนชิปที่รวมอยู่ใน CPU ผ่าน JTAG หรือ อินเทอ ร์เฟซโหมดดีบักพื้นหลัง (BDM) เพื่อดีบักซอฟต์แวร์ของระบบฝังตัว ระบบเหล่านี้มักใช้ชิป CPU เวอร์ชันมาตรฐาน และสามารถเชื่อมต่อกับพอร์ตดีบักบนระบบการผลิตได้โดยตรง บางครั้งเรียกว่าตัวดีบักในวงจรหรือ ICD เพื่อแยกแยะข้อเท็จจริงที่ว่าไม่ได้จำลองการทำงานของ CPU แต่ควบคุม CPU มาตรฐานที่มีอยู่แล้ว เนื่องจากไม่จำเป็นต้องเปลี่ยน CPU จึงสามารถทำงานบนหน่วยการผลิตที่ CPU ถูกบัดกรีไว้และไม่สามารถเปลี่ยนได้ บน x86 Pentium ICE จะใช้ 'โหมดโพรบ' พิเศษเพื่อช่วยในการดีบัก[ 2 ]
ในบริบทของระบบฝังตัว ICE ไม่ได้จำลองฮาร์ดแวร์ แต่เป็นการให้สิทธิ์การเข้าถึงการดีบักโดยตรงไปยัง CPU จริง ระบบที่กำลังทดสอบอยู่ภายใต้การควบคุมอย่างสมบูรณ์ ทำให้ผู้พัฒนาสามารถโหลด ดีบัก และทดสอบโค้ดได้โดยตรง
ระบบโฮสต์ส่วนใหญ่เป็นคอมพิวเตอร์เชิงพาณิชย์ทั่วไปที่ไม่เกี่ยวข้องกับซีพียูที่ใช้ในการพัฒนา ตัวอย่างเช่น พีซีที่ ใช้ลินุกซ์อาจถูกใช้ในการพัฒนาซอฟต์แวร์สำหรับระบบที่ใช้ ชิป Freescale 68HC11ซึ่งเป็นโปรเซสเซอร์ที่ไม่สามารถรันลินุกซ์ได้
โดยปกติแล้ว โปรแกรมเมอร์จะแก้ไขและคอมไพล์โค้ดของระบบฝังตัวบนระบบโฮสต์ด้วยเช่นกัน ระบบโฮสต์จะมีคอมไพเลอร์พิเศษที่สร้างโค้ดที่สามารถเรียกใช้งานได้สำหรับระบบฝังตัว ซึ่งเรียกว่าครอสคอมไพเลอร์หรือ ครอสแอสเซมเบลอร์
การดีบักบนชิป
การดีบักบนชิปเป็นอีกทางเลือกหนึ่งนอกเหนือจากการจำลองในวงจร โดยใช้วิธีการที่แตกต่างกันเพื่อบรรลุเป้าหมายที่คล้ายคลึงกัน
การดีบักบนชิป หรือที่เรียกกันอย่างไม่เป็นทางการว่าJoint Test Action Group (JTAG) นั้น ใช้การจัดเตรียมอินเทอร์เฟซดีบักเพิ่มเติมสำหรับฮาร์ดแวร์ที่ใช้งานจริงในระบบการผลิต โดยมีคุณสมบัติเช่นเดียวกับการดีบักในวงจร เช่น การตรวจสอบสถานะภายในหรือตัวแปร และอาจมีความสามารถในการตั้งจุดตรวจสอบ จุดหยุด และจุดเฝ้าดู ความแตกต่างคือ ฟังก์ชันเหล่านี้ถูกจัดเตรียมโดยซิลิคอนเพิ่มเติมภายในโปรเซสเซอร์ที่ใช้ในการผลิต แทนที่จะเปลี่ยนโปรเซสเซอร์เป็นตัวจำลองการดีบักภายนอก ด้วยเหตุนี้ ฟังก์ชันบางอย่างของ ICE จึงเปลี่ยนแปลงไปตามข้อกำหนดของโปรเซสเซอร์ อินเทอร์เฟซ JTAG เพิ่มเติมจะถูกเพิ่มเข้าไปในบอร์ดควบคุม และจำเป็นต้องมีในทุกระบบการผลิต แต่เนื่องจากต้องการเพียงไม่กี่พินสัญญาณ ต้นทุนเพิ่มเติมจึงน้อยมาก อินเทอร์เฟซ JTAG ได้รับการพัฒนาขึ้นมาเพื่อใช้ในการทดสอบเมื่อสิ้นสุดการผลิต และยังคงมีประโยชน์อยู่จนถึงปัจจุบัน
อินเทล
เพื่อรองรับการดีบักอีมูเลเตอร์แบบอินเซอร์กิต (ICE) บน Intel 286จึงมีพินเพิ่มเติมอีก 5 พินบนโปรเซสเซอร์ ได้แก่ พินอินพุต 1 พินสำหรับบังคับเบรกพอยต์ ICE จากภายนอก ( ICEBP#) และพินเอาต์พุต 2 คู่ทางเลือกสำหรับเลือกการทำงานผ่านบัส ICE แทนหน่วยความจำผู้ใช้[ 3 ] บน 80286 มีคำสั่ง 2 คำสั่ง ( 0F 04, 0F 05) สำหรับดัมพ์/กู้คืนสถานะ CPU ทั้งหมดไปยังออฟเซ็ตหน่วยความจำ 0x800 พร้อมด้วยคำนำหน้าการแทนที่ไบต์เดียว ( F1) เพื่อเปิดใช้งานโหมด ICE เพื่อเข้าถึงหน่วยความจำผู้ใช้
ดูเพิ่มเติม
ลิงก์ภายนอก
- บทความ "มุมสำหรับผู้เริ่มต้น" โดย Jack Ganssle
- วิธีการเลือกอีมูเลเตอร์แบบอินเซอร์กิต โดย โจนาธาน เฮคเตอร์
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การจำลองวงจรภายใน
การจำลองวงจรภายใน (In-circuit emulationหรือICE ) คือการใช้ฮาร์ดแวร์หรือตัวจำลองวงจรภายในเพื่อดีบักซอฟต์แวร์ของระบบฝังตัวโดยทำงานโดยใช้โปรเซสเซอร์ที่มีความสามารถเพิ่มเติมในการรองรับ...
การทำงาน
ตัวจำลองวงจรภายใน (ICE) ทำหน้าที่เป็นหน้าต่างสู่ระบบฝังตัว โปรแกรมเมอร์ใช้ตัวจำลองนี้เพื่อโหลดโปรแกรมเข้าไปในระบบฝังตัว รันโปรแกรม ค่อยๆ ทำงานที ละ ขั้นตอน และดูและเปลี่ยนแปลงข้อมูลที่ซอฟต์แวร์ของระบบใช้งาน
ข้อดี
ระบบฝังตัวเกือบทั้งหมดมีส่วนประกอบฮาร์ดแวร์และส่วนประกอบซอฟต์แวร์ ซึ่งแยกจากกันแต่พึ่งพาซึ่งกันและกันอย่างแน่นหนา ICE ช่วยให้สามารถเรียกใช้และทดสอบส่วนประกอบซอฟต์แวร์บนฮาร์ดแวร์ที่จะใช้งานได้...
การดีบักบนชิป
การดีบักบนชิป เป็นอีกทางเลือกหนึ่งนอกเหนือจากการจำลองในวงจร โดยใช้วิธีการที่แตกต่างกันเพื่อบรรลุเป้าหมายที่คล้ายคลึงกัน