طراحی مدارهای منطقی سخت افزاری می تواند سرگرم کننده باشد. روش مدرسه قدیمی برای انجام این کار با گیت های NAND، روی یک تخته نان، سیم کشی شده با سیم های جامپر بود. این هنوز امکان پذیر است، اما قبل از اینکه تعداد دروازه ها از کنترل خارج شود، زمان زیادی طول نمی کشد. گزینه جدیدتر استفاده از FPGA (Field Programmable Gate Array) است. این تراشهها میتوانند خودشان را دوباره سیمکشی کنند تا به هر مدار منطقی دیجیتالی که میتوانید طراحی کنید تبدیل شوند، اما ارزان نیستند و به راحتی در دسترس نیستند. من نشان خواهم داد که چگونه می توان این FPGA را با یک تراشه ارزان قیمت Atmega از Arduino UNO جایگزین کرد و به طور موثر مدار دیجیتال را در یک بسته DIP قرار داد، که بسیار سازگار با تخته نان است.
![](https://duino4projects.com/wp-content/uploads/2022/01/Arduino-As-a-Cheap-Breadboard-FPGA.jpg)
مرحله 1: مداری را طراحی کنید که "FPGA" نشان دهنده آن است
![](https://duino4projects.com/wp-content/uploads/2022/01/Design-the-Circuit-That-the-FPGA-Will-Represent.jpg)
من یک جمع کننده 2 بیتی + 2 بیتی خواهم ساخت. دو جفت پین ورودی منطقی می گیرد و یک سه قلو پین خروجی را خروجی می دهد.
برای انجام این کار با گیت های NAND، شماتیک را در تصویر ببینید. به 14 گیت NAND نیاز دارد. من از 4 تراشه NAND gate TTL چهارگانه استفاده کردم و آنها را روی تخته نان وصل کردم.
من چند ال ای دی اضافه کردم (مقاومت های محدود کننده جریان را فراموش نکنید) تا نشان دهند چه زمانی پین های ورودی و خروجی روشن هستند (بالا) و چه زمانی خاموش هستند (کم). برای راه اندازی پین های ورودی، آنها را به ریل زمین یا ریل برق مثبت پرش کردم.
این مدار کار میکند، اما در حال حاضر 4 تراشه TTL را اشغال میکند و لانهای از سیم است. اگر تکه های بیشتری مورد نیاز بود، تخته های نان بیشتر و جامپرهای بیشتری وجود داشت. خیلی سریع اندازه مدار از کنترل خارج می شد.
در یک نکته جانبی، هنگام کار با گیت های TTL، آنها دقیقاً 0 ولت یا 5 ولت را همانطور که انتظار می رود خروجی نمی دهند. آنها اغلب حدود 3 ولت برای "بالا" خروجی دارند، اما ولتاژ دقیق در محدوده بسیار وسیعی است. همان مداری که از تراشههای معادل CMOS استفاده میکند، نوسانهای دقیقاً 0 تا 5 ولت بهتری دارد.
مرحله 2: FPGA را وارد کنید
![](https://duino4projects.com/wp-content/uploads/2022/01/Enter-the-FPGA.jpg)
یک FPGA یک تراشه خارقالعاده است که به معنای واقعی کلمه میتواند به هر ترکیبی از گیتهای منطقی تبدیل شود که در هر ترکیبی به هم متصل شوند. یکی "مدار" را به زبان طراحی سخت افزاری (HDL) طراحی می کند. چندین چنین زبان وجود دارد که یکی از آنها Verilog نام دارد. فایل .v در تصویر معادل Verilog جمع کننده دو بیتی است. فایل pch. در زیر آن نیز برای تخصیص پین های ورودی و خروجی نامگذاری شده در فایل verilog به پین های سخت افزاری واقعی روی تراشه مورد نیاز است.
در این مورد من از یک برد توسعه iCEstick Lattice Semiconductors (http://www.latticesemi.com/icestick) استفاده می کنم. تراشه FPGA واقعی یک iCE40HX-1k است، با کمی بیش از 1000 گیت که هر کدام می توانند به هر گیت منطقی تبدیل شوند. این بدان معناست که هر گیت می تواند یک گیت NAND، یا یک گیت OR، NOT gate، NOR، XOR و غیره باشد. علاوه بر این، هر گیت می تواند بیش از دو ورودی را مدیریت کند. این مخصوص هر سازنده است، اما در iCE40 هر گیت می تواند 4 ورودی را اداره کند. بنابراین هر گیت نسبت به 2 گیت ورودی NAND توانایی بسیار بیشتری دارد.
من مجبور شدم 4 پایه ورودی و 3 پایه خروجی را به ترتیب به پایه های فیزیکی 91، 90، 88، 87، 81، 80 و 79 اختصاص دهم. این مربوط به تراشه fpga و برد شکستهای است که روی آن قرار دارد و نحوه اتصال آن پینها به پورت PMOD. این در دیتاشیت های این برد FPGA موجود است.
Lattice زنجیره ابزار خود را برای سنتز (FPGA معادل کامپایل برای CPU) مدارهای Verilog فراهم می کند، اما من از ابزار منبع باز رایگان زنجیره ای icestorm (http://www.clifford.at/icestorm/) استفاده کردم. دستورالعمل نصب در آن سایت موجود است. با نصب icestorm و فایل verilog و pcf، دستورات بارگذاری این مدار بر روی FPGA عبارتند از: