สารบัญ:

การออกแบบตัวควบคุมแคชอย่างง่ายใน VHDL: 4 ขั้นตอน
การออกแบบตัวควบคุมแคชอย่างง่ายใน VHDL: 4 ขั้นตอน

วีดีโอ: การออกแบบตัวควบคุมแคชอย่างง่ายใน VHDL: 4 ขั้นตอน

วีดีโอ: การออกแบบตัวควบคุมแคชอย่างง่ายใน VHDL: 4 ขั้นตอน
วีดีโอ: การใช้งาน VHDL ลง FPGA ครั้งแรกบน Cyclone IV 2024, พฤศจิกายน
Anonim
การออกแบบตัวควบคุมแคชอย่างง่ายใน VHDL
การออกแบบตัวควบคุมแคชอย่างง่ายใน VHDL

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

ขั้นตอนที่ 1: ข้อมูลจำเพาะ

ข้อมูลจำเพาะ
ข้อมูลจำเพาะ

นี่คือข้อกำหนดหลักของ Cache Controller ที่เราจะออกแบบ:

  • แมปโดยตรง (ไปที่ลิงค์นี้หากต้องการค้นหา Associative Mapped Cache Controller)
  • ธนาคารเดียว บล็อกแคช
  • นโยบายการเขียนผ่านเกี่ยวกับการเขียนฮิต
  • No-Write จัดสรรหรือเขียนรอบนโยบายเกี่ยวกับการเขียนพลาด
  • ไม่มีบัฟเฟอร์การเขียนหรือการเพิ่มประสิทธิภาพอื่นๆ
  • Tag Array เป็น Incorporated

นอกจากนั้น เราจะออกแบบหน่วยความจำแคชและระบบหน่วยความจำหลักด้วย

ข้อกำหนดเริ่มต้น (กำหนดค่าได้) ของหน่วยความจำแคช:

  • แคชธนาคารเดียว 256 ไบต์
  • 16 Cache Lines แต่ละ Cache Line (Block) = 16 Bytes

ข้อมูลจำเพาะของหน่วยความจำหลัก:

  • หน่วยความจำอ่าน/เขียนแบบซิงโครนัส
  • Multi-banked Interleaved Memory - สี่หน่วยความจำ
  • แต่ละธนาคารขนาด = 1 kB แต่ละอัน ดังนั้น ขนาดรวม = 4 kB
  • หน่วยความจำแอดเดรส Word (4 ไบต์) พร้อมแอดเดรสบัส 10 บิต
  • แบนด์วิดธ์ที่สูงขึ้นสำหรับการอ่าน อ่านความกว้างของข้อมูล = 16 ไบต์ในรอบนาฬิกาหนึ่งรอบ
  • เขียนข้อมูลความกว้าง = 4 ไบต์

หมายเหตุ: ตรวจสอบคำแนะนำที่ใหม่กว่าของฉันหากคุณกำลังมองหาการออกแบบตัวควบคุมแคชที่เชื่อมโยง 4 ทาง

ขั้นตอนที่ 2: มุมมอง RTL ของทั้งระบบ

มุมมอง RTL ของทั้งระบบ
มุมมอง RTL ของทั้งระบบ

การแสดง RTL ที่สมบูรณ์ของ Top Module จะแสดงในรูป (ไม่รวมโปรเซสเซอร์) ข้อกำหนดเริ่มต้นสำหรับรถโดยสารคือ:

  • Data Buses ทั้งหมดเป็นบัส 32 บิต
  • แอดเดรสบัส = บัส 32 บิต (แต่หน่วยความจำสามารถระบุแอดเดรสได้เพียง 10 บิตที่นี่)
  • Data Block = 128 บิต (ไวด์แบนด์วิดท์บัสสำหรับการอ่าน)
  • ส่วนประกอบทั้งหมดขับเคลื่อนด้วยนาฬิกาเดียวกัน

ขั้นตอนที่ 3: ทดสอบสภาพแวดล้อม

Top Module ได้รับการทดสอบโดยใช้ Test Bench ซึ่งจำลองโปรเซสเซอร์ที่ไม่ใช่แบบไปป์ไลน์ (เพราะการออกแบบโปรเซสเซอร์ทั้งหมดนั้นไม่ง่ายเลย !!) Test Bench สร้างคำขออ่าน/เขียนข้อมูลไปยังหน่วยความจำบ่อยครั้ง สิ่งนี้เลียนแบบคำสั่ง "โหลด" และ "จัดเก็บ" ทั่วไป ซึ่งพบได้ทั่วไปในโปรแกรมทั้งหมดที่ดำเนินการโดยโปรเซสเซอร์ ผลการทดสอบได้ตรวจสอบการทำงานของ Cache Controller เรียบร้อยแล้ว ต่อไปนี้เป็นสถิติการทดสอบที่สังเกตได้:

  • สัญญาณการอ่าน/เขียน Miss และ Hit ทั้งหมดถูกสร้างขึ้นอย่างถูกต้อง
  • การดำเนินการอ่าน/เขียนข้อมูลทั้งหมดสำเร็จ
  • ไม่พบปัญหาความไม่ต่อเนื่องของข้อมูล/ความไม่สอดคล้องกัน
  • การออกแบบได้รับการตรวจสอบเวลาสำหรับ Maxm เรียบร้อยแล้ว ความถี่สัญญาณนาฬิกาของการทำงาน = 110 MHz ในบอร์ด Xilinx Virtex-4 ML-403 (ทั้งระบบ), 195 MHz สำหรับ Cache Controller เพียงอย่างเดียว
  • บล็อกแรมถูกอนุมานสำหรับหน่วยความจำหลัก อาร์เรย์อื่นๆ ทั้งหมดถูกนำไปใช้กับ LUT

ขั้นตอนที่ 4: ไฟล์แนบ

ไฟล์ต่อไปนี้แนบมากับบล็อกนี้:

  • ไฟล์. VHD ของ Cache Controller, Cache Data Array, ระบบหน่วยความจำหลัก
  • ม้านั่งทดสอบ
  • เอกสารเกี่ยวกับ Cache Controller

หมายเหตุ:

  • อ่านเอกสารประกอบเพื่อทำความเข้าใจข้อกำหนดของ Cache Controller ที่นำเสนอที่นี่
  • การเปลี่ยนแปลงใดๆ ในโค้ดจะขึ้นอยู่กับโมดูลอื่นๆ ดังนั้น การเปลี่ยนแปลงควรทำอย่างรอบคอบ ให้ความสนใจกับความคิดเห็นและส่วนหัวทั้งหมดที่ฉันได้ให้ไว้
  • หากด้วยเหตุผลใดก็ตาม Block RAM จะไม่ถูกอนุมานสำหรับหน่วยความจำหลัก ลดขนาดของหน่วยความจำ ตามด้วยการเปลี่ยนแปลงความกว้างของแอดเดรสบัสในไฟล์ และอื่นๆ เพื่อให้สามารถใช้หน่วยความจำเดียวกันได้ทั้งบน LUT หรือ RAM แบบกระจาย วิธีนี้จะช่วยประหยัดเวลาและทรัพยากรในการกำหนดเส้นทาง หรือไปที่เอกสาร FPGA เฉพาะและค้นหาโค้ดที่เข้ากันได้สำหรับ Block RAM และแก้ไขโค้ดตามนั้น และใช้ข้อกำหนดความกว้างของบัสแอดเดรสเดียวกัน เทคนิคเดียวกันสำหรับ Altera FPGA

แนะนำ: