فهرست مطالب:

طراحی یک کنترل کننده حافظه پنهان ساده در VHDL: 4 مرحله
طراحی یک کنترل کننده حافظه پنهان ساده در VHDL: 4 مرحله

تصویری: طراحی یک کنترل کننده حافظه پنهان ساده در VHDL: 4 مرحله

تصویری: طراحی یک کنترل کننده حافظه پنهان ساده در VHDL: 4 مرحله
تصویری: Fun with Music and Programming by Connor Harris and Stephen Krewson 2024, ژوئن
Anonim
طراحی یک کنترل کننده حافظه پنهان ساده در VHDL
طراحی یک کنترل کننده حافظه پنهان ساده در VHDL

من این را به صورت آموزشی می نویسم ، زیرا برای یادگیری و شروع به طراحی یک کنترل کننده حافظه پنهان ، دریافت کد مرجع VHDL کمی مشکل بود. بنابراین من خودم یک کنترل کننده حافظه پنهان را از ابتدا طراحی کردم و آن را با موفقیت روی FPGA آزمایش کردم. من یک کنترل کننده کش ساده نقشه برداری مستقیم را در اینجا ارائه کرده ام ، و همچنین یک سیستم کامل پردازنده-حافظه را برای آزمایش Cache Controller مدل سازی کرده ام. امیدوارم به نظر شما این دستورالعمل به عنوان مرجعی برای طراحی کنترلرهای کش خود مفید باشد.

مرحله 1: مشخصات

مشخصات فنی
مشخصات فنی

اینها مشخصات اصلی Cache Controller است که قصد داریم طراحی کنیم:

  • نقشه مستقیم (اگر به دنبال کنترل کننده کش Associated Mapped هستید به این پیوند بروید)
  • تک بانکی ، مسدود کردن حافظه پنهان.
  • سیاست نوشتن از طریق نوشتن بازدیدها.
  • No-Write تخصیص داده یا Policy Around در نوشتن خطاهای نوشتاری بنویسید.
  • بدون نوشتن بافر یا بهینه سازی های دیگر.
  • آرایه برچسب گنجانده شده است.

علاوه بر این ، ما یک حافظه پنهان و یک سیستم حافظه اصلی نیز طراحی می کنیم.

مشخصات پیش فرض (قابل تنظیم) حافظه پنهان:

  • حافظه پنهان تک بانکی 256 بایت.
  • 16 خط کش ، هر خط کش (بلوک) = 16 بایت.

مشخصات حافظه اصلی:

  • حافظه خواندن/نوشتن همزمان.
  • حافظه چند بانکی Interleaved - چهار بانک حافظه.
  • حجم هر بانک = هر کدام 1 کیلوبایت بنابراین ، حجم کل = 4 کیلوبایت.
  • حافظه آدرس پذیر Word (4 بایت) با گذرگاه آدرس 10 بیتی.
  • پهنای باند بیشتر برای خواندن عرض داده = 16 بایت را در یک چرخه ساعت بخوانید.
  • نوشتن عرض داده = 4 بایت

توجه: اگر به دنبال طراحی کنترل کننده کش 4 طرفه هستید ، بررسی کنید

مرحله 2: نمای RTL کل سیستم

نمای RTL کل سیستم
نمای RTL کل سیستم

نمایش کامل RTL ماژول بالا در شکل (به استثنای پردازنده) نشان داده شده است. مشخصات پیش فرض اتوبوس ها عبارتند از:

  • همه گذرگاه های داده باس های 32 بیتی هستند.
  • Bus Bus = گذرگاه 32 بیتی (اما فقط 10 بیت در اینجا با حافظه قابل آدرس دهی است).
  • بلوک داده = 128 بیت (گذرگاه پهنای باند گسترده برای خواندن).
  • همه اجزا توسط یک ساعت حرکت می کنند.

مرحله 3: آزمایش محیط

ماژول بالا با استفاده از یک Bench Test آزمایش شد که به سادگی یک پردازنده بدون لوله را مدل می کند (زیرا طراحی کل پردازنده به هیچ وجه آسان نیست !!). میز تست درخواست های خواندن/نوشتن داده را به طور مکرر در حافظه ایجاد می کند. این دستورالعمل های معمولی "بار" و "ذخیره" را که در همه برنامه های اجرا شده توسط پردازنده رایج است به سخره می گیرد. نتایج آزمایش عملکرد Cache Controller را با موفقیت تأیید کرد. در زیر آمار آزمون مشاهده شده است:

  • همه خواندن/نوشتن سیگنال های Miss و Hit به درستی ایجاد شد.
  • همه عملیات خواندن/نوشتن داده ها با موفقیت انجام شد.
  • هیچ مشکل ناسازگاری/ناسازگاری داده ها تشخیص داده نشد.
  • زمان طراحی با موفقیت برای Maxm تأیید شد. فرکانس ساعت = 110 مگاهرتز در برد Xilinx Virtex-4 ML-403 (کل سیستم) ، 195 مگاهرتز تنها برای Cache Controller.
  • RAM های بلوک برای حافظه اصلی استنباط شد. همه آرایه های دیگر بر روی LUT اجرا شد.

مرحله 4: فایل های پیوست شده

فایلهای زیر در اینجا با این وبلاگ ضمیمه شده است:

  • . VHD فایل های Cache Controller ، Cache Data Array ، Main Memory System.
  • نیمکت آزمون.
  • مستندات مربوط به Cache Controller

یادداشت:

  • برای درک کامل مشخصات Cache Controller که در اینجا ارائه شده است ، اسناد را مرور کنید.
  • هرگونه تغییر در کد به سایر ماژول ها وابسته است. بنابراین ، تغییرات باید با دقت انجام شود. به همه نظرات و سرفصل هایی که من گفتم توجه کنید.
  • اگر به هر دلیلی ، Block RAM ها برای حافظه اصلی استنباط نمی شوند ، اندازه حافظه را کاهش دهید و به دنبال آن در عرض گذرگاه آدرس در فایلها و غیره تغییر دهید. به طوری که همان حافظه را می توان در LUT یا RAM توزیع شده پیاده سازی کرد. این باعث صرفه جویی در زمان و منابع می شود. یا ، به اسناد خاص FPGA بروید و کد سازگار برای Block RAM را بیابید و کد را متناسب با آن ویرایش کنید و از مشخصات عرض عرض گذرگاه آدرس استفاده کنید. تکنیک مشابه برای Altera FPGA.

توصیه شده: