หัวใจของ ARM7 คือ Instruction pipeline โดยมีการทำ pipeline รวมทั้งหมด 3 ขั้น
โดยเป็นการทำ Pipeline แบบธรรมดา ซึ่งไม่สามารถแก้ไขการเกิด Hazards บางอย่าง (เช่น Read-before-write) ได้เหมือนแบบที่มีขั้นของ Pipeline มากกว่า โดยขั้นของ Pipeline นั้นจะทำงานอิสระต่อกันคือ เมื่อคำสั่งแรกเข้าไปยังขั้น Execute คำสั่งที่สองและที่สามก็จะเข้าไปยังขั้น Decode และ Fetch ได้ตามลำดับ ซึ่งเป็นการไปเพิ่มความเร็วให้กับการทำงานของ Processor จากการที่มีจำนวนคำสั่งเข้าไปทำงานได้เพิ่มขึ้นด้วย Pipeline ที่ต่างขั้นกันจึงทำให้มีประสิทธิภาพ
ในการทำงานเพิ่มขึ้นตามไปด้วย โดยเฉพาะ Linear code (โค้ดเชิงเส้น -ไม่มีความซับซ้อน)
สำหรับการ Branch ก็เช่นเดียวกัน Pipeline จะถูก Flush (ล้าง) ข้อมูลที่ถูกใช้ก่อนหน้า และ Refill (เติมกลับ) ข้อมูลที่กำลังจะถูกใช้ลงไป ก่อนที่จะกลับทำงานที่ตำแหน่งต่อจากการ Branch นั้น ซึ่งเราจะเห็นว่าชุดคำสั่งของ ARM นั้นมีคุณสมบัติที่น่าสนใจ ซึ่งช่วยให้การ Branch ไปยังตำแหน่งต่างๆของ Code ทำงานได้ราบรื่น แม้ว่าจะทำงานด้วย Pipeline ก็ตาม
เนื่องจาก Pipeline นั้นอยู่ภายใน Processor, นักพัฒนาจึงไม่ค่อยให้ความสนใจ แต่ Pipeline นั้นกลับเป็นส่วนที่สำคัญ เพราะอย่าลืมว่า PC (Program counter) นั้นทำงานที่ 8 byte ซึ่งเทียบกับตำแหน่งของคำสั่งปัจจุบันที่กำลังถูกทำงานอยู่ เราจึงต้องเลือก Offset ที่ใช้กับ PC ให้เหมาะสมด้วย
เช่น
0x4000 LDR PC, [PC, #4]
ซึ่งจะทำการเอาค่าตำแหน่งที่ PC + 4 มาใส่ยัง PC แต่ว่า PC นั้นทำงานที่ 8 byte ด้วยจึงทำให้ตำแหน่งที่เคลื่อนไปกลายเป็น 0x400C [0x4000 + #8 + #4] แทนที่จะเป็น 0x4004
ไม่มีความคิดเห็น:
แสดงความคิดเห็น