فهرست مطالب:

کامپیوتر ده بیتی - VHDL: 4 مرحله
کامپیوتر ده بیتی - VHDL: 4 مرحله

تصویری: کامپیوتر ده بیتی - VHDL: 4 مرحله

تصویری: کامپیوتر ده بیتی - VHDL: 4 مرحله
تصویری: Fun with Music and Programming by Connor Harris and Stephen Krewson 2024, جولای
Anonim
کامپیوتر ده بیتی - VHDL
کامپیوتر ده بیتی - VHDL

تهیه کننده: تایلر استار و عزیددن گازالی

معرفی

این پروژه به عنوان بخشی از پروژه نهایی CPE 133 در Cal Poly SLO تکمیل شد. این یک پروژه عالی برای کسانی است که به دنبال درک نحوه عملکرد کامپیوترها در پایین ترین سطح خود و نحوه انجام وظایف خود هستند. این پروژه از رایانه 8 بیتی SAP که در کتاب الکترونیک رایانه دیجیتال آلبرت مالوینو توصیف شده است ، الگوبرداری شده است. با این حال ، ما رایانه را به 10 بیت افزایش داده ایم تا امکان اجرای کدهای بیشتر (کدهای عملیاتی) فراهم شود. کاربر می تواند با وارد کردن دستورالعمل های خاص ، کامپیوتر را برای انجام مجموعه ای از برنامه ها برنامه ریزی کند.

معماری سیستم و مدار:

رایانه به زبان VHDL نوشته شده است و بر روی برد Basys 3 از Digilent قرار داده می شود. ورودی ها بر روی کلیدهای پایین برد نقشه برداری می شوند. دو کلید لمسی برای توابع Reset و Write استفاده خواهد شد. خروجی روی صفحه نمایش 7 قسمتی صفحه نمایش داده می شود.

کامپیوتر به مدارهای کوچکتر (ماژول ها) تقسیم می شود که عملیات مختلف را انجام می دهند. در مراحل زیر هر ماژول به طور مفصل توضیح داده می شود.

مرحله 1: مواد

مواد
مواد

تنها چیزی که برای این پروژه مورد نیاز است ، برد Basys3 FPGA از Digilent و یک سیم micro USB برای اتصال برد به کامپیوتر شما است.

مرحله 2: نمودار بلوک ماژول های مدار را مسدود کنید

بلوک نمودار ماژول های مدار
بلوک نمودار ماژول های مدار
بلوک نمودار ماژول های مدار
بلوک نمودار ماژول های مدار
بلوک دیاگرام ماژول های مدار
بلوک دیاگرام ماژول های مدار

نمودارهای بلوک بالا ماژول های مختلف مدار را که کامپیوتر 10 بیتی را تشکیل می دهند نشان می دهد. در زیر توضیحات مربوط به هر یک از قسمتها/ماژولهای جداگانه نشان داده شده در نمودارهای بالا آمده است.

شمارنده برنامه

شرح ورودی ها: ورودی یک ورودی 5 بیتی برای بارگذاری یک شماره در شمارنده برنامه است. Cp وقتی شمارنده زیاد است روی سقوط لبه های ساعت حساب می کند. هنگامی که شمارنده تعداد فعلی را بالا می برد ، شمارنده را به 0 می رساند. Sp وقتی شمارنده بالا است ، شمارش را روی عدد ورودی تنظیم می کند

  • شرح خروجی ها:

    خروجی یک کپی از شمارش برای استفاده در LEDS 0-15 است. شمارش خروجی تعداد فعلی

  • مکان کلی در سیستم: این شمارنده محل حافظه ای که برنامه در آن قرار دارد را پیگیری می کند. همه برنامه ها از آدرس حافظه 00000 (0) شروع شده و تا 11111 (31) افزایش می یابد ، مگر اینکه از توقف استفاده شود. در دستورات پرش ، شمارنده برنامه همچنان از آدرسی که برنامه در حال پرش به آن است شمارش می کند.

ورودی MUX

  • شرح ورودی ها: آدرس ورودی را از کلیدهای 11 تا 15 می گیرد. MAR ورودی را از ثبت 10 بیتی که به عنوان MAR استفاده می شود ، می گیرد. برنامه کنترل می کند که کدام ورودی به مسیر خروجی باشد.
  • شرح خروجی ها: خروجی ورودی انتخاب شده را به RAM هدایت می کند.
  • مکان کلی در سیستم: این MUX تعیین می کند که آدرس را از سوئیچ ها یا گذرگاه به RAM هدایت کند. در حالت برنامه آدرس سوئیچ ها روت شده و در حالت اجرا آدرس از گذرگاه مسیریابی می شود.

ramMUX

  • توضیحات ورودی ها: userInput ورودی است که کاربر در حین حالت برنامه وارد می کند. aRegInput داده های موجود در ثبات A است ، که در حین عملیات حرکت استفاده می شود. کنترل برای این MUX انتخاب شده است.
  • شرح خروجی ها: خروجی عبارت است از ورود داده های 10 بیتی به RAM.
  • مکان کلی در سیستم: این MUX داده های ورودی 10 بیتی را که در ماژول RAM استفاده می شود ، خروجی می دهد. هنگامی که بیت کنترل زیاد است ، MUX داده هایی را که کاربر در حالت برنامه وارد کرده است ، خروجی می دهد. هنگامی که بیت کنترل کم است ، MUX داده ها را روی گذرگاه کنترل خروجی می دهد.

ramModule

  • توضیحات ورودی ها: inputData داده هایی است که در RAM ذخیره می شود. inputAddress مکانی است که داده ها در آن ذخیره می شوند. برنامه نشان می دهد که کامپیوتر در حالت برنامه یا اجرا است. readWrite نشان می دهد که آیا عملیات خواندن یا نوشتن در حال وقوع است. notCE بیت کنترل ماژول RAM است. حرکت نشان می دهد که یک حرکت در حال انجام است.
  • توضیح خروجی ها: outputDataToBus اطلاعاتی است که از RAM به گذرگاه می رود. outputData و output address داده ها و آدرسی هستند که به ثبت دستور می روند.
  • مکان کلی در سیستم: RAM اجازه می دهد تا برنامه و داده ها در حافظه قبل از اجرای برنامه ذخیره شوند. پس از اجرای برنامه ، RAM یک آدرس از MAR دریافت می کند و داده های آن آدرس را به گذرگاه ارسال می کند.

آدرس ROM

  • شرح ورودی ها: opCode ورودی حاوی آدرس کد کد است که توسط کامپیوتر انجام می شود
  • شرح خروجی ها: opCodeStart آدرس حافظه ای است که اولین مکان دستورالعمل های کوچک کد opCode مربوطه را نشان می دهد.
  • مکان کلی در سیستم: این ماژول دستورالعمل خرد شده را گرفته و محل حافظه ای را که مربوط به شروع آن دنباله دستورالعمل های خرد است ، خروجی می دهد.

ringCounter

  • شرح ورودی ها: تنظیم مجدد شمارنده را روی 100000 (اولین "حالت T") تنظیم می کند. Clk شمارنده را بر لبه ساعت در حال سقوط یک به یک افزایش می دهد. NOP نشان می دهد که وضعیت/چرخه فعلی یک چرخه "بدون عملیات" است.
  • شرح خروجی ها: شمارش خروجی شمارنده است.
  • مکان کلی در سیستم: شمارنده حلقه شمارنده قابل تنظیم اولیه را کنترل می کند و شش مرحله را در هر چرخه آموزش (T1-T6) ترسیم می کند.

preCounter

  • شرح ورودی ها: opCodeStart محل حافظه دستورالعمل های خرد برای opCode است که انجام می شود. T1 هنگامی که شمارنده بالا است 0 را تنظیم می کند. هنگامی که T3 زیاد است ، opCodeStart بارگیری می شود و شمارش از آن مکان برای 3 چرخه باقی مانده (T4-T6) ادامه می یابد. Clr شمارنده 0 را نشان می دهد. Clk در یک لبه در حال سقوط یک به یک افزایش می دهد.
  • توضیح خروجی ها: controlWordLocation محل حافظه کلمه کنترلی را که باید اجرا شود ، خروجی می دهد.
  • مکان کلی در سیستم: هر کد کد دارای 3 دستورالعمل کوچک است. شمارنده با 1 شروع از 0 برای 3 چرخه اول (چرخه واکشی) افزایش می یابد. سپس شمارنده توسط شمارنده حلقه فعال می شود تا آدرس را در opCodeStart بارگذاری کند و برای 3 چرخه باقی مانده 1 برابر افزایش می دهد. به این ترتیب preCounter دنباله ای از دستورالعمل های کوچک را که باید انجام شود کنترل می کند.

controlROM

  • شرح ورودی ها: controlWordLocation آدرس controlWord است که controlROM خروجی می دهد. NOP نشان می دهد که محل "بدون عملیات" است.
  • شرح خروجی ها: controlWord کلمه کنترلی است که ماژول های مختلف رایانه را قادر می سازد تا عملیات مورد نظر را انجام دهد.
  • مکان کلی در سیستم: این ماژول محل حافظه را از preCounter رمزگشایی می کند و برای عملیات مورد نظر ، کنترلWord را خروجی می دهد.

ALU

  • شرح ورودی ها: A و B ورودی های ثبت A و Register B هستند که ALU عملیات حسابی و منطقی را بر روی آنها انجام می دهد. وقتی تفریق فعال است ، نشان می دهد که B از A کم می شود.
  • شرح خروجی ها: نتیجه حاصل افزودن A و B ، یا تفریق B از A است. خروجیهای thanThan ، lessThan ، و equalT برای نشان دادن اگر (AB ، یا A = B) و در ماژول پرش شرطی استفاده می شود. خطا نشان دهنده سرریز یا جاری شدن در هنگام فعال بودن است.
  • مکان کلی در سیستم: ALU شامل منطق عملیات حسابی و منطقی است که توسط کامپیوتر انجام می شود. این ماژول می تواند دو عدد باینری 10 بیتی را جمع و تفریق کند. ALU همچنین می تواند A> B ، A را تعیین کند

conditionalJmp

  • توصیف ورودی ها: inputCount برای بستن تعداد فعلی استفاده می شود. inputAddress برای چسباندن آدرسی که به آن پرش می شود استفاده می شود. loadFromRegister هنگام ورود کم گیرنده ورودی آدرس loadCount هنگامی که ورودی کم قفل می شود. هنگامی که outputEnable کم است ، خروجی روی آدرسی تنظیم می شود که به go.gT ، iT و eQ تعیین می کند که کدام وضعیت در حال بررسی است. بیشترThan ، lessThan ، و equalTo ورودی های ALU هستند که نتیجه مقایسه بین A و B را نشان می دهد. در لبه ساعت Clk در حال افزایش ، inputCount و inputAddress در رجیسترها خوانده می شوند.
  • شرح خروجی ها: outputJmp آدرسی است که شمارنده برنامه در آن می خواند.
  • مکان کلی در سیستم: این ماژول پرش های مشروط و غیر شرطی را برای کامپیوتر انجام می دهد. بر اساس ورودی های gT ، iT و eQ ، ماژول تعیین می کند که برای چه شرایطی باید بررسی شود و آیا این شرط درست است یا غلط. اگر شرط صحت داشته باشد ، آدرس دستور پرش به آن را نشان می دهد ، در غیر این صورت ، شمارش دستور بعدی را نشان می دهد.

binToBCD

  • شرح ورودی ها: عدد 10 بیتی را برای تبدیل به اعشاری کد شده باینری شماره گذاری کنید.
  • شرح خروجی ها: صدها رقم در صدها عدد باینری. عدد را در محل ده ها عدد باینری قرار دهید. عدد را در یکای یک عدد باینری قرار دهید.
  • مکان کلی در سیستم: این ماژول شماره 10 بیتی را از رجیستر خروجی به BCD تبدیل می کند تا راننده صفحه نمایش چهار رقمی ما عدد را به صورت اعشاری در صفحه 7 قسمت نمایش دهد.

چهار دیجیت راننده

  • شرح ورودی ها: عدد ورودی باینری 16 بیتی است که به رمزگشایی منتقل می شود. inClk ساعت داخلی بردهای Basys است و برای تقسیم ساعت استفاده می شود. RST ساعت مورد استفاده برای هدایت ارقام را بازنشانی می کند.
  • شرح خروجی ها: آند تعیین می کند که کدام مکان رقمی روشن شود. رقم عدد ورودی رمزگشایی است.
  • مکان کلی در سیستم: این ماژول رمزگشا را هدایت می کند تا شماره BCD را به صفحه نمایش دهد.

رمزگشایی

  • توضیحات ورودی ها: inputNumber رقمی است که از درایور آمده و رمزگشایی می شود.
  • شرح خروجی ها: کاتدها تعیین می کنند که کدام کاتدها برای نمایش رقم مورد نظر روشن می شوند.
  • مکان کلی در سیستم: این ماژول رقمی را که باید در صفحه 7 بخش نمایش داده شود رمزگشایی می کند.

FourDigitDisplay

  • شرح ورودی ها: عددی است که باید در صفحه 7 قسمت نمایش داده شود. خطا نشان می دهد که صفحه باید "Err" را بخواند. Clk سیگنال ساعت است که صفحه نمایش روی آن کار می کند. این سیگنال باید حدود 60 هرتز باشد تا صفحه نمایش بتواند همه مکانهای 4 رقمی را به طور همزمان نشان دهد.
  • شرح خروجی ها: آند تعیین می کند که کدام مکان رقمی فعال باشد. cathode تعیین می کند که کدام کاتدها برای نمایش رقم مورد نظر فعال می شوند.
  • مکان کلی در سیستم: این ماژول یک عدد را در صفحه 7 بخش نمایش می دهد. برای اطلاع از نحوه فعالسازی کاتد و آند جهت استفاده از صفحه نمایش ، به دفترچه راهنمای برد Basys 3 مراجعه کنید. وقتی بیت خطا زیاد است ، صفحه نمایش "Err" را نشان می دهد.

خروجی MUX

  • شرح ورودی ها: progModeInput تعیین می کند که led ها در حالت برنامه نویسی روشن شوند. runModeInput تعیین می کند که led ها در حالت اجرا روشن باشند. modeSelect بیت انتخاب یا کنترل MUX است.
  • شرح خروجی ها: ledOutput نشان می دهد که led ها روشن خواهند شد.
  • مکان کلی در سیستم: بسته به حالت رایانه (برنامه یا رم) ، MUX چراغ های مختلف LED را روشن می کند. در حالت برنامه (modeSelect '0' است) ، MUX چراغ ها را روشن می کند تا شبیه به حافظه ای باشد که کامپیوتر در آن قرار دارد و آنچه در آن قرار دارد. در حالت اجرا (modeSelect '1' است) ، MUX برای اشکال زدایی استفاده می شود اما می تواند تنظیم شود تا هر چیز دیگری را نمایش دهد.

clockDivider

  • شرح ورودی ها: توقف خواندن پنج بیت MSB از گذرگاه برای تشخیص دستور توقف ('11111') و ساعت را متوقف می کند. inputClk سیگنال ساعت داخلی برد Basys 3 است.
  • شرح خروجی ها: ouputClk ساعت جدیدی است که سرعت آن کاهش یافته است.
  • مکان کلی در سیستم: این ساعت برای کند کردن سرعت رایانه استفاده می شود تا کاربر بتواند آنچه را که در حال رخ دادن است تعیین کند. ساعت می تواند بسیار سریعتر کار کند ، با این حال ، در حال حاضر روی 2 هرتز تنظیم شده است.

triStateBuffer

  • توضیح ورودی ها: Din عبارت است از ورودی 5 بیتی که در بافر وارد می شود. Ep بیت کنترل است.
  • توضیح خروجی ها: Dout خروجی 5 بیتی بافر است
  • مکان کلی در سیستم: هنگامی که بیت کنترل Ep فعال است ، بافر ورودی را خروجی می دهد. وقتی بیت کنترل فعال نباشد ، بافر هیچ چیزی را خروجی نمی دهد.

tenBitDRegister

  • شرح ورودی ها: Dbus ورودی است که ثبات در آن قرار دارد. Clk به رجیستر اجازه می دهد تا داده ها را در یک لبه ساعت در حال افزایش بخواند. ARST ثبت نام 0 را به صورت نا همزمان تنظیم می کند. هنگامی که outputEnable کم است ، محتویات رجیستر خروجی هستند. هنگامی که readIn کم است ، ثبات Dbus را در لبه ساعت بالا می آورد.
  • شرح خروجی ها: Qbus خروجی ثبات است
  • مکان کلی در سیستم: ثبت چندین بار در سراسر رایانه استفاده می شود و برای ذخیره اطلاعات هنگام انجام عملیات استفاده می شود.

پنج بیت رجیستر

  • شرح ورودی ها: Dbus ورودی است که ثبات در آن قرار دارد. Clk به رجیستر اجازه می دهد تا داده ها را در لبه ساعت در حال افزایش بخواند. ARST ثبات را به صورت ناهمزمان روی 0 تنظیم می کند. هنگامی که outputEnable کم است ، محتویات رجیستر خروجی هستند. هنگامی که readIn کم است ، ثبات Dbus را در لبه ساعت بالا می آورد.
  • شرح خروجی ها: Qbus خروجی ثبات است.
  • مکان کلی در سیستم: ثبت چندین بار در سراسر کامپیوتر استفاده می شود و برای ذخیره اطلاعات هنگام انجام عملیات استفاده می شود.

مرحله 3: کد

در زیر یک پوشه حاوی محدودیت ها و فایل های منبع برای رایانه 10 بیتی است.

مرحله 4: کد نمایشی و نمونه

ویدئوی بالا نحوه برنامه نویسی کامپیوتر 10 بیتی روی برد Basys 3 FPGA را نشان می دهد. پی دی اف حاوی کد op و نمونه برنامه نیز در زیر ضمیمه شده است.

توصیه شده: