نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی
  • خانه
  • ویندوز 10
  • مدارهای مجتمع قابل برنامه ریزی Plis - اولین قدم های من

مدارهای مجتمع قابل برنامه ریزی Plis - اولین قدم های من

اخیراً من هنوز اولین قدم خود را به سمت FPGA برداشتم و با شما تماس گرفتم که مرا دنبال کنید. سرگرمی متعصبانه من برای FPGA و این ایده که FPGA ها بهترین پلتفرم برای ایجاد هر دستگاهی هستند، خصلت مذهبی به خود گرفته است. فرقه FPGA من رد کامل میکروکنترلرها را موعظه می کند، و یک شاخه افراطی به خصوص رد نه تنها پردازنده های نرم، بلکه به طور کلی محاسبات متوالی را موعظه می کند!

مثل همیشه، حل مشکلات واقعی به درک حقایق کمک کرد. در خطبه امروز می خواهم در مورد آزمایشاتی که برای یک راننده جوان FPGA رخ داد صحبت کنم. با غلبه بر آزمایش ها، حقیقت را درک می کنیم. اما هنوز سوالاتی وجود دارد که من پاسخی برای آنها پیدا نکرده ام. بنابراین، من بسیار دوست دارم که برادران خابروویتی - FPGA با تجربه در بحث شرکت کنند و به برادران کوچکتر خود کمک کنند.

این مقاله برای مبتدیان است. در آن، من مشکلات معمولی، سوالات، تصورات غلط، خطاهایی را که ممکن است در همان ابتدای آموزش ظاهر شوند (به دلیل اینکه در من ظاهر شد) را شرح خواهم داد. با این حال، زمینه مقاله با این واقعیت محدود می شود که توسعه بر روی FPGA از Altera در محیط Quartus به زبان Verilog انجام می شود.

زندگی بدون انجام کاری سخت است، اما از سختی ها نمی ترسیم!

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

اما در پیشرفت هایم، به این نتیجه رسیدم که در مرحله نهایی توسعه، زمانی که باید پروژه را "در سخت افزار" آزمایش کنم، به یک FPGA واقعی نیاز دارم. نکته این است که من بیشتر وقتم را صرف اشکال زدایی کدم با استفاده از شبیه سازها می کنم.

بنابراین توصیه من این است: فقدان FPGA دلیلی برای بیکار ماندن نیست. ماژول های FPGA را در شبیه سازها بنویسید و اشکال زدایی کنید!

شبیه ساز برای Verilog

بنابراین، چه کاری می توانید انجام دهید تا خود را با روزهای کاری طولانی خسته کننده سرگرم کنید (در صورت وجود)؟ البته ما بر FPGA ها مسلط خواهیم شد! اما چگونه می توانید یک محیط توسعه کامل را از Altera به کار بیاورید اگر وزن آن 3 محدودیت کار ماهانه اینترنتی باشد؟ می توانید آن را روی یک USB بیاورید! اما اگر موضوع مطالعه Verilog باشد، می توانید خود را به یک دفترچه یادداشت، کامپایلر IcarusVerilog محدود کنید و نتیجه را در GTK Wave تماشا کنید.

الآن امتحانش کن

برای شروع کار در ویندوز، فقط فایل نصب iverilog-20130827_setup.exe را از لینک http://bleyer.org/icarus/ دانلود کنید (تصویر فوری توسعه)

نصب مشکلی ایجاد نمی کند. حالا بیایید کمی جلوتر اجرا کنیم: یک پوشه برای پروژه ایجاد کنید و در آن چند فایل با محتوایی که هنوز قابل درک نیست ایجاد کنید:

فایل ماژول با کد تست ماژول ها - bench.v

`میزان تست ماژول 1 ثانیه / 100 ثانیه مقیاس زمانی (); reg clk; شروع اولیه نمایش $ ("شروع")؛ $ dumpfile ("test.vcd"); $ dumpvars (0، testbench)؛ clk<= 0; repeat (100) begin #10; clk <= 1; #10; clk <= 0; end $display("finish"); end


ماژول تست testbench در فایل bench.v توضیح داده شده است، یک منبع سیگنال آزمایشی clk (meander) در آن ایجاد شده است. ماژول های دیگر در فایل های جداگانه ایجاد می شوند یا می توان منطق را ابتدا در این ماژول آزمایش کرد و سپس به یک ماژول جداگانه منتقل کرد. سپس نمونه‌هایی از این ماژول‌ها به ماژول testbench اضافه می‌شوند، جایی که سیگنال‌های تست را به ورودی‌های آن‌ها ارسال می‌کنیم و نتایج را از آن‌ها دریافت می‌کنیم. ما می توانیم از ماژول ها یک سلسله مراتب بسازیم، فکر می کنم این برای همه روشن است.

فایل BAT که ماژول اصلی را کامپایل و شبیه سازی می کند و ماژول های دیگری را از پوشه فعلی اضافه می کند - makev.bat

iverilog -o test -I./ -y./ bench.v vvp تست مکث


پس از اجرای این فایل، متن مشخص شده در نمایشگر $ را روی صفحه می بینیم (این خروجی دیباگ است)، مقادیر سیگنال ها و رجیسترهای مدار در فایل test.vcd قرار می گیرند. روی فایل کلیک کنید و برنامه را برای مشاهده انتخاب کنید - GTKWave (در مورد من D: \ iverilog \ gtkwave \ bin \ gtkwave.exe). چند کلیک دیگر و ما clk خود را خواهیم دید.



عملا، من هر یک از ماژول های جدید خود را در notepad ایجاد می کنم و IcarusVerilog را اشکال زدایی می کنم. پس از چنین اشکال زدایی، مرحله بعدی بررسی ماژول ها در Quartus است. اگرچه Quartus نیز شبیه ساز خود را دارد، اما من کمتر از آن استفاده می کنم. دلیل آن سادگی به روز رسانی کد و مشاهده نتیجه در IcarusVerilog است: تغییرات را در فایل ذخیره کرد، BAT را راه اندازی کرد، دکمه "به روز رسانی" را در GTKWave فشار داد - همین! در ModelSim، این به حرکت کمی بیشتر نیاز دارد، اما بد نیست، به خصوص در مورد داده های ساختارهای پیچیده.

پس از شبیه سازی، نوبت به راه اندازی Quartus می رسد. اما هنوز برای بارگذاری سیستم عامل در FPGA خیلی زود است. ما باید مطمئن شویم که ماشین محاسباتی الهی به درستی درک کرده است که ما می خواهیم چه طرحی را بدست آوریم و افکار خود را در قالب Verilog بیان کنیم.

تفاوت بین شبیه سازی و کار در سخت افزار واقعی

در ابتدا من مانند یک بچه گربه نابینا، سرم را به تیرهای در کوبیدم. کد به ظاهر صحیح اصلا کار نمی کند یا آنطور که انتظار می رود کار نمی کند. یا فقط کار کرد، اما حالا ناگهان متوقف شد!

یک بچه گربه کنجکاو شروع به جستجوی رابطه بین اعمال خود و نتیجه می کند ("خرافات کبوتر").

بزرگترین درام
در زیر لیستی از موارد عجیب و غریب، اما اولین درامی که من با آن روبرو شده ام، آمده است: تمام ساختارهای Verilog را نمی توان در آهن سنتز کرد... این به دلیل این واقعیت است که Verilog نه تنها منطق سخت افزاری را توصیف می کند، که در ماژول ها ترکیب شده و در سخت افزار کار می کند. در همان Verilog، ماژول‌های آزمایشی توضیح داده شده‌اند که ماژول‌های آزمایش‌شده را ترکیب می‌کنند، سیگنال‌های آزمایشی را به ورودی‌های آن‌ها اعمال می‌کنند و به طور کلی، فقط برای آزمایش روی رایانه وجود دارند. تغییر در مقادیر سیگنال در طول زمان توسط ساختارهای حاوی علامت "#" در متن Verilog مشخص می شود. چنین علامتی به معنای تاخیر در زمان است. در مثال بالا، به این ترتیب سیگنال CLK تولید می شود. و من فکر کردم که این یک چیز گناه است که به همین ترتیب، در داخل یک FPGA واقعی، می توانید مثلاً یک دنباله از بیت ها را برای ارسال پیام از طریق RS232 ایجاد کنید. به هر حال، سیگنالی از یک ژنراتور 50 مگاهرتز به ورودی FPGA تغذیه می شود! شاید او به نوعی توسط او هدایت می شود. همانطور که معلوم شد، من تنها کسی نیستم که به معجزه امیدوار است:،،،،. واقعیت، مثل همیشه، شدیدتر به نظر می رسد: یک FPGA مجموعه ای از منطق است و یک تاخیر زمانی در آن می تواند هنگام استفاده از شمارنده ظاهر شود، که مقدار آن در چرخه های ساعت از مولد به یک مقدار معین افزایش می یابد. یا به روش دیگری (اما همیشه در سخت افزار).
لیست موارد عجیب و غریب پیدا شد
با این حال، چیزهای شگفت انگیزی، خواندن کتاب ها این شیطان را روشن می کند. علاوه بر این، فیض یافت می شود.
اگر reg را تعیین کنید، این یک واقعیت نیست که ایجاد خواهد شد
چگونه به مشکل رسیدم؟ فرض کنید یک ماژول وجود دارد که باید یک مقدار (بر اساس نوع پارامتر) به ورودی آن وارد کنم. در آینده، این پارامتر باید در طول زمان بسته به برخی رویدادهای خارجی تغییر کند. بنابراین، مقدار باید در یک ثبات (reg) ذخیره شود. اما پیاده سازی دریافت رویدادهای خارجی هنوز اجرا نشده است، بنابراین من رجیستر را تغییر نمی دهم، بلکه آن را به مقدار اولیه خود تنظیم می کنم که در آینده تغییری نمی کند.

// تنظیم رجیستر 8 بیتی val; // آن را با مقدار اولیه مقداردهی اولیه کنید<= 8"d0240; //wire к которому подключим выход из модуля wire out_data; //неведомый модуль, называется bbox //экземпляр этого модуля называется bb_01 //будем считать, что в модуле есть входной порт in_data и выходной out_data //во входной порт подаем значение с регистра val, а выход подключаем к wire - out_data bbox bb_01(.in_data(val), .out_data(out_data));
به نظر می رسد شکار چیست؟ در PL امری، ما اغلب متغیرها را به عنوان ثابت تنظیم می کنیم و سپس هرگز آنها را تغییر نمی دهیم و همه چیز کار می کند. در غده چه می بینیم؟


اول، ما ثبت نام را نمی بینیم. ثانیاً به جای d0240 8 اینچی ما 8 hFF به ورودی ماژول وارد می شود! و این در حال حاضر کافی است تا این طرح آنطور که ما برنامه ریزی کرده بودیم کار نکند. اینکه هیچ ثبتی وجود ندارد طبیعی است. در Verilog، می‌توانید منطق را به روش‌های مختلف توصیف کنید، در عین حال، سینت سایزر همیشه اجرای سخت‌افزار را بهینه می‌کند. حتی اگر یک بلوک همیشه بنویسید و با ثبات ها در آن کار کنید، اما مقدار خروجی همیشه با مقدار ورودی تعیین می شود، در این صورت استفاده از ثبات در اینجا اضافی خواهد بود و سینت سایزر آن را تامین نمی کند. و بالعکس، اگر برای برخی از مقادیر داده های ورودی، مقدار خروجی تغییر نکند، هیچ راهی برای بدون ثبت لچ وجود ندارد و سینت سایزر آن را ایجاد می کند. (کتاب 1 ص 88-89). چه چیزی از این نتیجه می گیرد؟ اگر ما شروع به تغییر مقدار ثبات کنیم، برای مثال، بسته به فشار دادن دکمه، آنگاه gerist از قبل ایجاد می شود و همه چیز همانطور که باید کار می کند. اگر معلوم شد که دکمه ها چیزی را تغییر نمی دهند، سینت سایزر دوباره آن را بیرون می اندازد و دوباره همه چیز خراب می شود. با ثابت چه کنیم؟ شما باید آن را مستقیماً به ورودی ماژول ارسال کنید:

Bbox bb_01 (.in_data (8 "d0240)، .out_data (out_data));
اکنون مقدار صحیح را در ورودی ماژول داریم:

این یک راز باقی می ماند که چرا وقتی ثبات کاهش می یابد، مقدار اولیه آن در ورودی ماژول جایگزین نمی شود.

بهتر است ابعاد سیم را خودتان تنظیم کنید.
هنگام توسعه در محیط Quartus، مجاز است از قبل خطوط سیم را تعریف نکنید. در این صورت به صورت خودکار ایجاد می شوند اما در این مورد اخطار داده می شود. مشکل این است که عرض سیم 1 بیتی خواهد بود و اگر عرض پورت ها بیش از 1 بیت باشد، مقدار آن ارسال نمی شود.

Bbox bb_01 (.in_data (8 "d0240)، .out_data (int_data)); other_bbox bb_02 (.in_data (int_data)، .out_data (out_data));
هشدار
هشدار (10236): هشدار شبکه ضمنی Verilog HDL در test.v (15): ایجاد شبکه ضمنی برای "int_data"
نتیجه:

همانطور که می بینید، یک بیت متصل است و 7 بیت باقی مانده متصل نیستند (NC). برای جلوگیری از چنین مشکلی، باید خودتان سیم را ایجاد کنید. بیهوده نیست که کامپایلر IcarusVerilog در صورتی که سیم از قبل مشخص نشده باشد، اخطار صادر نمی کند.

سیم int_data; bbox bb_01 (.in_data (8 "d0240)، .out_data (int_data)); other_bbox bb_02 (.in_data (int_data)، .out_data (out_data));

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

خروجی تابع منطقی نمی تواند به عنوان سیگنال ساعت استفاده شود
گاهی اوقات در یک پروژه لازم است فرکانس ساعت کاهش یابد یا یک تاخیر زمانی N سیکل ساعت معرفی شود. یک مبتدی می تواند از یک شمارنده و یک طرح اضافی برای تعیین اینکه آیا شمارنده به مقدار معینی رسیده است (طرح مقایسه) استفاده کند. با این حال، اگر مستقیماً از خروجی مدار مقایسه به عنوان ساعت استفاده کنید، ممکن است مشکلاتی ایجاد شود. این به این دلیل است که مدتی طول می کشد تا مدار منطقی خروجی خود را روی یک مقدار پایدار تنظیم کند. این تأخیر لبه سیگنال عبوری از قسمت های مختلف مدار منطقی را نسبت به ساعت جابجا می کند و در نتیجه مسابقه، فراپایداری، ناهمزمانی ایجاد می شود. من حتی فرصتی داشتم که یک بار در مورد این نکته به عنوان انتقاد از FPGA ها بشنوم: "با FPGA مشکلات دائمی وجود دارد - مسابقه سیگنال".

اگر حداقل چند مقاله را بخوانید:
فراپایداری و هماهنگ سازی بین چرخه ای را تحریک می کند
چند کلمه در مورد خطوط لوله در FPGA

نحوه توسعه دستگاه های مبتنی بر FPGA مشخص می شود: کل کار به بلوک های سخت افزاری تقسیم می شود و داده های بین آنها در امتداد خطوط لوله حرکت می کند و مطابق سیگنال ساعت به طور همزمان در رجیسترها قرار می گیرد. بنابراین، سینت سایزر با دانستن فرکانس کل ساعت، حداکثر فرکانس کاری همه مدارهای ترکیبی را محاسبه می کند، تعیین می کند که آیا سرعت آنها با دوره چرخه مطابقت دارد یا خیر و نتیجه می گیرد که آیا مدار در FPGA کار می کند یا خیر. همه اینها در مرحله سنتز اتفاق می افتد. اگر مدارها در پارامترها قرار می گیرند، می توانید FPGA را فلش کنید.

بنابراین، برای توسعه دهندگان دستگاه های مبتنی بر FPGA، تمام متدولوژی های لازم ایجاد شده است و اگر به آنها پایبند باشید، هیچ مشکلی وجود نخواهد داشت.

اگر بخواهم خلاف نظام بروم چه؟
ترتیب توسعه و رفتار یک سینت سایزر مدار ما را به این نتیجه می رساند که دقیقاً FPGA در سطح سخت افزار چیست. اینها مدارهای سنکرون هستند. بنابراین، از جمله اهداف سینت سایزر، حفظ فواصل زمانی است. برای انجام این کار، به عنوان مثال، او عبارات منطقی را ساده می کند، قطعاتی از مدارها را که توسط مدارهای دیگر استفاده نمی شود و به پین ​​های فیزیکی FPGA گره نمی خورد، از سنتز خارج می کند. راه‌حل‌های ناهمزمان و ترفندهای آنالوگ منع می‌شوند، زیرا کار آن‌ها می‌تواند غیرقابل پیش‌بینی باشد و به هر چیزی (ولتاژ، دما، فناوری فرآیند، دسته‌ای، تولید FPGA) بستگی دارد و بنابراین یک نتیجه تضمین‌شده، قابل تکرار و قابل حمل ارائه نمی‌دهد. اما همه به یک نتیجه پایدار و رویکردهای کلی برای طراحی نیاز دارند!

اما اگر با نظر سینتی سایزر مبنی بر اینکه باید رجیسترهای تغییرناپذیر را بیرون انداخت و مدارهای منطقی را کاهش داد، موافق نیستید، چه باید کرد؟ اگر بخواهید مدارهایی با منطق ناهمزمان بسازید چطور؟ نیاز به یک ترفند دارید؟ یا شاید خودتان می خواهید مداری را با استفاده از اجزای FPGA سطح پایین جمع کنید؟ آسان! با تشکر از توسعه دهندگان Altera برای این فرصت و مستندات دقیق!

چگونه انجامش بدهیم؟ می توانید یک ویرایشگر شماتیک گرافیکی را امتحان کنید. شاید شنیده باشید که Quartus به شما اجازه ترسیم نمودار را می دهد؟ شما می توانید بلوک های ساختمانی را خودتان انتخاب کنید و آنها را به هم وصل کنید. اما این راه حل نیست! حتی مدار ترسیم شده نیز در صورت امکان توسط سینت سایزر بهینه می شود.

در نتیجه به حقیقت قدیمی می رسیم: اگر همه چیز شکست خورد، دستورالعمل ها را بخوانید... برای مثال کتاب راهنمای Alteraقسمت با عنوان گزینه های سنتز Quartus II.

برای شروع، با توصیف معماری در Verilog به روشی خاص، می توانید به نتیجه خاصی برسید. در اینجا چند نمونه کد برای دریافت فلیپ فلاپ RS همزمان و ناهمزمان آورده شده است:

// ماژول ماشه همزمان RS rs (clk, r, s, q); سیم ورودی clk, r, s; خروجی reg q; همیشه @ (posedge clk) اگر (r) q شروع شود شروع می شود<= 0; end else if (s) begin q <= 1; end end endmodule
در این مورد، شما یک ماشه همزمان دریافت می کنید.

بدون توجه به سیگنال ساعت و سوئیچینگ بسته به هرگونه تغییر در r و s، نتیجه یک عنصر با مقدار تنظیم ناهمزمان - یک چفت است.

// مثال ماژول ماشه ناهمزمان RS ModuleTester (clk, r, s, q); سیم ورودی clk, r, s; خروجی reg q; همیشه @ (r یا s) شروع می شود اگر (r) q شروع شود<= 0; end else if (s) begin q <= 1; end end endmodule

Module ModuleTester (clk, r, s, q); سیم ورودی clk, r, s; خروجی reg q; DLATCH lt (.q (q)، .clrn (~ r)، .prn (~ s)); ماژول پایانی

در نتیجه، کل "کیت بدنه" در ورودی قفل که سینت سایزر آن را ضروری می دانست ناپدید می شود و دقیقاً همان چیزی را که می خواستیم به دست خواهیم آورد:

لیستی از اولیه های موجود را می توان در وب سایت Altera مشاهده کرد.

و اکنون یک مثال کوچک در مورد ناهمزمانی و کاهش. من فکر کردم، برای مثال، یک ژنراتور را طبق همان اصل که قبلاً مرسوم بود، بسازم، اما فقط در FPGA:

اما برای افزایش دوره، 4 عنصر را انتخاب می کنم، اما تنها یکی از آنها معکوس می شود:

ماژول ModuleTester (q); سیم خروجی q; سیم a، b، c، d; اختصاص a = b; اختصاص b = c; اختصاص c = d; اختصاص d = ~ a; اختصاص q = a; ماژول پایانی

اما به نظر می رسد کاهش است (1 عنصر به جای چهار). که منطقی است. اما پس از آن ما یک خط تاخیر را تصور کردیم.

اما اگر این شرط را روی سینت سایزر قرار دهیم که خطوط a، b، c، d بریده نشوند، آنگاه به چیزی که در ذهن داریم می رسیم. دستورالعمل ها برای تحریک سینت سایزر استفاده می شوند. یکی از راه های مشخص کردن متن در نظر است:

ماژول ModuleTester (q); سیم خروجی q; سیم a، b، c، d / * سنتز نگه دارید * /; // ^^^ --- این یک دستورالعمل سینت سایزر است که a = b; اختصاص b = c; اختصاص c = d; اختصاص d = ~ a; اختصاص q = a; ماژول پایانی
و در اینجا نتیجه است - زنجیره ای از چهار عنصر:

و این تمام نیست! من آن را به لذت مطالعه مستقل واگذار می کنم: کار با case و دستورالعملی برای پیاده سازی آن به عنوان RAM / ROM یا مدار منطقی. کار با بلوک های حافظه داخلی (RAM / ROM)؛ انتخاب اجرای ضرب - یک ضرب سخت افزار یا یک مدار منطقی.

با توسعه ریزمدارهای دیجیتال، تناقضی بین درجه احتمالی یکپارچگی و نامگذاری ریز مدارهای تولید شده به وجود آمد. از نظر اقتصادی تولید ریزمدارهای یکپارچه متوسط، مانند، توجیه اقتصادی داشت. مدارهای پیچیده تری باید از این گره ها ایجاد می شد. قرار دادن یک مدار پیچیده تر روی یک کریستال نیمه هادی مشکلی نبود، اما این امر یا با سری بسیار زیاد تجهیزات و یا با هزینه تجهیزات (نظامی، هوانوردی یا فضایی) توجیه می شد. ریز مدارهای سفارشی نمی توانستند نیاز نوظهور به کوچک سازی تجهیزات را برآورده کنند. تنها یک راه حل می تواند وجود داشته باشد - ارائه به توسعه دهندگان سخت افزار با توانایی تغییر ساختار داخلی میکرو مدار (برنامه).

تاریخچه توسعه مدارهای مجتمع منطقی قابل برنامه ریزی (FPGA) با ظهور دستگاه های حافظه قابل برنامه ریزی فقط خواندنی آغاز می شود. در ابتدا، رام‌های قابل برنامه‌ریزی منحصراً برای ذخیره داده‌ها مورد استفاده قرار می‌گرفتند، اما به زودی از آنها برای پیاده‌سازی دستگاه‌های ترکیبی دیجیتال با جدول حقیقت دلخواه استفاده می‌شد. به عنوان نقطه ضعف این راه حل، باید توجه داشت که پیچیدگی دستگاه بسته به تعداد ورودی ها به طور تصاعدی افزایش می یابد. افزودن یک ورودی اضافی به یک دستگاه دیجیتال، تعداد سلول های حافظه ROM مورد نیاز را دو برابر می کند. این اجازه اجرای چند ورودی را نمی دهد.

برای پیاده سازی دستگاه های ترکیبی دیجیتال با تعداد زیادی ورودی، ماتریس های منطقی قابل برنامه ریزی (PLM) توسعه یافته اند. در ادبیات خارجی به آنها آرایه های منطقی برنامه پذیر (PLA) می گویند. این آرایه های منطقی قابل برنامه ریزی هستند که می توانند اولین مدارهای مجتمع منطقی قابل برنامه ریزی (Programmable Logic Devices - PLDs) در نظر گرفته شوند. PLMها به عنوان اولین ریزمدارهای جهانی با یکپارچگی بزرگ گسترده شدند.

طبقه بندی FPGA

در حال حاضر، مدارهای مجتمع منطقی قابل برنامه ریزی در چندین جهت در حال توسعه هستند، بنابراین لازم است به نحوی بین این ریزمدارها تمایز قائل شویم. طبقه بندی مدارهای مجتمع منطقی قابل برنامه ریزی (FPGA) در شکل 1 نشان داده شده است.


شکل 1. طبقه بندی مدارهای مجتمع منطقی قابل برنامه ریزی (FPGA)

آیا منتظر نشانه ای بوده اید؟ ایناهاش!

برای چندین سال من جرات نداشتم برنامه نویسی FPGA را شروع کنم، زیرا دشوار، گران و دردناک است (همانطور که به نظر من می رسید). اما وقتی دوستانی هستند که به شما کمک می کنند قدم اول را بردارید خوب است. و حالا من یک چیز را نمی فهمم - چرا اینقدر صبر می کنم؟

حالا من به شما کمک می کنم تا قدم اول را هم بردارید!

چرا به آن نیاز دارم؟

آیا از خواندن مداوم اسکله های MK خود یا داشتن یک سری اطلاعات در ذهن خود خسته شده اید. شما همه چیز را در asm بازنویسی کردید، اما سرعت هنوز کافی نیست. شما دو دستگاه خارجی را به MK خود وصل کردید، سومی را وصل کردید، اما وقفه‌های شما تمام شد، آن ماژول‌هایی که قبلاً کار می‌کردند کار نمی‌کنند. شما یک MK دیگر، قدرتمندتر از همان خط می گیرید، اما باز هم دفترچه راهنما، ثبت پرچم، بیت ها... جهنم. شما پلتفرم را تغییر می‌دهید: به MK دیگری تغییر می‌دهید و دانش خود را در پلت فرم قبلی به سطل زباله می‌اندازید. هر کاری بکنید سخت است. شما یک پلتفرم محبوب پیدا می کنید که در آن می توانید به راحتی یک پروژه را از اجزای سازنده جمع آوری کنید، اما هنوز نمی توانید از محدودیت های سخت افزاری این MC فراتر بروید ... جایی در لبه آگاهی، گاهی اوقات این فکر به ذهن خطور می کند که در FPGA قطعاً به سرعت کار می کند. و به موازات آن، "دقیقاً وظیفه ای است که باید در plis حل شود"، اما من پیر / احمق / مشغول / غیره هستم تا بتوانم / شروع به انجام این کار کنم.

آیا می خواهید بالاخره آزادانه نفس بکشید؟ برو جلو!

لذت توسعه FPGA

روز کاری سختی داشتم. از یک کار به شغل دوم رسیدم، سپس به خانه مسکونی، در شب کارهای خانه، مشق شب، بعد خانواده تماشای فیلم، و فقط در ساعت 23 کاملاً آزاد بودم! اینکه بگویم خسته بودم، چیزی نگفتم. اما در این حالت، با یک هدف ثابت پشت لپ‌تاپ نشستم: ساختن یک مولد موج مربعی با فرکانس 440 هرتز. 20 دقیقه طول کشید و من قبلاً آن را در هدفونم شنیدم. به گوش هایم باور نمی کردم! 15 دقیقه دیگر طول کشید تا PWM را بسازم و صدا را تغییر دهم. در آن زمان، من فقط یک هفته با FPGA تخته داشتم و قبل از آن فقط چند کتاب را در Verilog ورق زده بودم.

آن شب متوجه شدم: ایناهاش!این پلتفرمی است که در آن می توانم به سرعت و به راحتی افکارم را به سخت افزار واقعی تبدیل کنم!

چرا اینطور است؟

من مزایایی را که در مطالعه و کاربرد FPGA وجود دارد، توضیح خواهم داد، اگرچه همه قبلاً آنها را می‌دانند:
  • جهانی بودن دانش- هنگام تغییر مدل MK، باید داک ها را بخوانید. هنگام تغییر سازنده MK، باید اسناد را بخوانید. شما باید مدام اسکله ها را بخوانید، دائماً اطلاعات زیادی را در ذهن خود نگه دارید. هنگام توسعه بر روی FPGA، اگر Verilog یا VHDL را می شناسید، نه تنها می توانید هر FPGA را از خط تولید کننده ای برنامه ریزی کنید، بلکه اگر می خواهید به دیگری تغییر دهید (Altera، Xilinx). اگرچه لحظاتی با توسعه یک محیط توسعه متفاوت، مشکلات سخت افزاری ظریف وجود خواهد داشت، ماهیت رویکرد طراحی دستگاه HDL از این تغییر نخواهد کرد.
  • از ایده تا سخت افزار- هنگام توسعه یک پروژه، اگر یک میکرون برای شما کافی نیست، باید دیگری را انتخاب کنید. در اصل، شما می توانید فرضیاتی داشته باشید که آیا این MC با پروژه کنار می آید یا خیر. یا MK خاصی وجود دارد و شما سعی می کنید پروژه را در آنجا جا دهید. این اغلب مورد است. این برای من تا حدودی یادآور رویکرد پدربزرگم است که از آنچه در سوله است نردبان می سازد. اگرچه می توانید یک راه پله طراحی کنید، تابلوهایی را بخرید که مناسب ... از ایده گرفته تا اتو، نه برعکس.
  • سهولت استفاده از پیشرفت های دیگران- می توانید ماژول شخص دیگری را بگیرید و آن را در پروژه خود اعمال کنید. از روی کد می توانید بفهمید که چگونه کار می کند. حتی اگر برای xilinx باشد و شما آن را تحت altera انجام دهید. گاهی اوقات این sarzu جواب نمی دهد، اما ساده تر از اضافه کردن فایل های باینری به یک پروژه c ++ / Qt است.
  • استقلال را مسدود می کند.بلوک ها در HDL، مانند توابع خالص در JP. آنها فقط به سیگنال های ورودی بستگی دارند. ماژول توسعه یافته و اشکال زدایی شده بدون توجه به رشد پروژه به درستی به کار خود ادامه می دهد. هیچ چیز در خارج با نحوه عملکرد آن از داخل تداخل نخواهد داشت. به هر حال، می توانید فراموش کنید که چگونه کار می کند - این یک جعبه سیاه است. علاوه بر این، بلوک ها کار می کنند موازی.

مشکل انتخاب

سوالات مربوط به اینکه چه چیزی را انتخاب کنید: Altera / Xilinx، Verilog / VHDL، چه برد اشکال زدایی را انتخاب کنید. اما اول از همه.

شرکت تولید کننده

من انتخاب میکنم آلترا... چرا؟ خوب، من و دوستم تصمیم گرفتیم، اگرچه نام Xilinx برای من زیباتر است. ولی. اگر اکنون نمی توانید انتخاب کنید، من آن را برای شما انجام خواهم داد. شما به Altera نیاز دارید! چرا؟ نمی دانم. اکنون مهمتر است که یک قدم برداریم: انتخاب کردن. من Altera را انتخاب کردم و هنوز پشیمان نشده ام.



زبان

می گیریم Verilog - زیرا... خوب، می فهمی.

تابلوی اشکال زدایی

بیشترین زمان برای انتخاب تابلوی اشکال زدایی طول کشید. واضح است که بردها در میکرو مدار نصب شده FPGA متفاوت هستند. و تراشه های FPGA از نظر تعداد عناصر با یکدیگر تفاوت دارند. اما اصلاً مشخص نیست که چه تعداد برای پروژه های آزمایشی شما مورد نیاز است. بنابراین، بیشتر وقتم را صرف جستجوی انواع پروژه های FPGA کردم تا بفهمم آنها چقدر منابع FPGA را مصرف می کنند.

در خانواده Altera با قیمت مناسب می توانیم بردهایی با CPLD MAX II برای عناصر 240، 570 و 1270 یا تراشه های قدیمی FPGA که Cyclone 1، 2، 3، 4 با حداکثر 10000 سلول یا بیشتر هستند، خریداری کنیم. چگونه انتخاب می کنید؟

حتی بر اساس 240 سلول، پروژه مریخ نورد فقط تعداد زیادی پروژه را انجام می دهد. اکیداً توصیه می‌کنم که با خود آشنا شوید تا ایده‌ای تقریبی از پیچیدگی پروژه‌هایی داشته باشید که می‌توانند در 240 سلول قرار بگیرند. از سوی دیگر، پروژه هایی وجود دارند که به طور کامل برای کپی سخت افزاری یک رایانه شخصی خاص، از جمله پردازنده و تمام منطق اطراف آن (NES، Speccy، Orion، UT-88 و غیره) برنامه ریزی شده اند. این در حال حاضر به پنج، ده یا بیش از هزار سلول نیاز دارد. به علاوه، این تخته ها حاوی دستگاه های خارجی اضافی هستند.

بنابراین، من به شما توصیه می کنم که بسته به بودجه موجود، چیزی در حد وسط بین 240 تا 10000 سلول بگیرید، با ترجیح برای افزایش. در صفحه اشکال زدایی، سلول های اضافی کار مهمی نیستند و اگر کافی نباشند، نمی توان کاری برای آن انجام داد. سپس، هنگامی که دستگاه اشکال زدایی می شود، مشخص می شود که چند سلول مورد نیاز است، به مقدار لازم، بدون "کیت بدنه" غیر ضروری، ارزان تر خریداری کنید و در دستگاه تمام شده رها کنید.

تفاوت MAX و Cyclones، جدای از تعداد سلول ها، در موارد زیر است:
1) سری MAX هیچ PLL در داخل ندارد. هر برد توسعه دارای یک ژنراتور است که معمولاً 50 مگاهرتز است. این برای بسیاری از پروژه ها کافی خواهد بود. تمام همگام سازی ها با تقسیم 50 مگاهرتز بر مقداری انجام می شود. یا، می‌توانید یک ژنراتور خارجی بگیرید و آن را روی یک ورودی FPGA جداگانه اعمال کنید. اگر به فرکانس بالاتر از 50 مگاهرتز نیاز دارید چه؟ من نتوانستم ژنراتورهای بالاتر از 50 مگاهرتز را در حال پرواز پیدا کنم. اما در اینجا PLL به کمک می آید که در Cyclones ساخته شده است. می تواند فرکانس را به عنوان مثال تا 100 مگاهرتز ضرب کند.
2) سری Cyclone دارای واحدهای ضرب سخت افزار داخلی است. تعداد آنها به مدل خاص بستگی دارد - در اینجا می توانید "همه به دستورالعمل ها نگاه کنید" تا تعداد آنها را بدانید. اگر قصد انجام نوعی DSP را دارید، آنها مفید خواهند بود: سلول ها را ذخیره می کنند، سرعت را افزایش می دهند. از طرف دیگر، اگر ضرب کننده وجود نداشته باشد، می توان آنها را سنتز کرد، اما یک FPGA کوچک ممکن است منابع کافی برای این کار نداشته باشد.

از همه جهات دیگر، معیار من "مناسب / مناسب نیست" است. اشکال زدایی روی تخته ای که به وضوح بزرگتر از نیاز است، و به دنبال آن ریختن حداقل های لازم برای این کار.

چقدر پول لازم است؟


برنامه نویس
من معتقدم که وقت لحیم کردن برنامه نویسان شل را ندارم.

300 روبل. من مال خودم را در ebee گرفتم، شبیه این است:

تابلوی اشکال زدایی
بسته به مقدار پول، انتخاب گسترده است.

سطح اول 350 - 550 روبل. اینها تخته هایی روی MAX II (یا سلول ها) هستند. آنها می توانند برای آشنایی اولیه و اتصال بیشتر به دستگاه های نهایی مناسب باشند. برد دارای یک ژنراتور، یک جفت دکمه، یک جفت LED است که 80 پین باقی مانده به اختیار شما است.

منبع تغذیه
باید باشد، اما همیشه شامل نمی شود. شما به یک PSU 5 ولت و جریان 2 آمپر نیاز دارید.

سطح متوسط از 900 تا 1500 روبل. اینها تخته های Cyclone 1، 2، 3، 4 هستند که عمدتاً در تعداد سلول ها متفاوت هستند.
به این صورت مشخص شده است:
EP 2 سی 5 T144 - سیکلون 2 تقریباً 5k سلول
EP 4 CE 6 E22C8N - سیکلون 4 تقریباً 6k سلول
EP 2 سی 8 Q208C8N - سیکلون 2 تقریباً 8k سلول

ممکن است متوجه شوید که سیکلون 3 می تواند سلول های بیشتری نسبت به سیکلون 4 داشته باشد.

در اینجا چند گزینه وجود دارد:

835 روبل.
ALTERA FPGA CycloneII EP2C5T144 حداقل برد سیستم برای یادگیری خوب

880 روبل
Altera CycloneII EP2C5T144 FPGA Mini Development Learn Core Board E081

1265 روبل
EP2C8 EP2C8Q208C8N ALTERA Cyclone II ارزیابی هسته توسعه FPGA

تابلوهای پیشرفته ... اینها تخته هایی هستند که روی آنها ماژول های اضافی (UTP، USB، AUDIO)، کانکتورها (SD، VGA)، دکمه ها، سوئیچ ها، LED ها، نشانگرهای هفت بخش و غیره نصب شده اند. یا ممکن است یک تخته پایه وجود داشته باشد، و ممکن است به طور جداگانه با تخته های توسعه همراه باشد.

من مجموعه زیر را دارم - برد + برد توسعه:
Altrea EP4CE10E22 FPGA CORE برد + برد دستگاه USB / صدا / اترنت / کارت SD / VGA
2760 روبل

اینجا تابلوی اصلی است. دارای 2 ال ای دی، 2 دکمه، 4 سوئیچ، نشانگر هفت بخش و تراشه رم.

تخته توسعه. SD، VGA، و همچنین کنترلرهای USB (تراشه USB2.0 با سرعت بالا: CY7C68013A)، AUDIO (کارت صدا تا 96 کیلوهرتز / 32 بیت ADC / DAC: WM8731S)، UTP (رابط اترنت 100M: DM9000A):

این کارت ها به سادگی در یکدیگر قرار می گیرند، اما من هنوز آن را در جعبه دارم. برای کاردستی‌هایم، یک تخته نان دارم که با حلقه‌ای که در کیت می‌آید به آن متصل می‌شوم. همچنین یک منبع تغذیه 5 ولت نیز موجود است.

رفقای من که خیلی خوب (خیلی بهتر از من) کنترلرها را می فهمند و هر جا که می روند از آنها استفاده می کنند مجبور شدم این مقاله را بنویسم. با این وجود، زمانی که استفاده از FPGA ها نه تنها توجیه پذیر است، بلکه منجر به ساده سازی قابل توجه سیستم و بهبود پارامترهای آن می شود، تعداد زیادی از برنامه ها وجود دارد. من فوراً رزرو می کنم: در این مقاله و احتمالاً مقالات بعدی، FPGA ها را فقط از Xilinx در نظر می گیرم، نه به این دلیل که آنها به من پول می دهند و نه حتی به این دلیل که بهترین هستند، فقط از نظر تاریخی اتفاق افتاده است که من تقریباً به طور انحصاری با آنها کار می کنم. آنها

پس بیایید با کمی تئوری شروع کنیم. FPGAبه دو گروه اصلی تقسیم می شوند: CPLD (دستگاه منطقی برنامه ریزی شده پیچیده) و FPGA (آرایه دروازه برنامه ریزی شده میدانی). CPLD- این معمولاً یک FPGA کلاس "اقتصادی" است، یعنی. قیمت پایین و منابع نسبتاً ناچیز دارند، این امر به ویژه در محرک ها قابل توجه است. FPGAمعمولاً گران تر است، حاوی منابع بیشتری است (منطق ساده - محرک ها ...) و از همه مهمتر، اخیراً بلوک های "دشوار" اضافی مانند ضرب کننده ها، حافظه بلوک، لوازم رابط (اترنت، PCI-express ...) و حتی PowerPC هسته های پردازنده به طور جداگانه می توان به سری Zinq از Xilinx اشاره کرد - به طور کلی هسته های ARM در آنجا فشرده شده بودند. تفاوت اصلی بین FPGA و CPLD نیاز به بارگذاری پیکربندی در هنگام روشن شدن و بر این اساس، رام خارجی با پیکربندی است. حتی خانواده SPARTAN-3AN یک رام داخلی روی برد دارد که از آن بارگذاری می شود.

اکنون مهمترین چیز: تفاوت FPGAها با کنترلر و زمان استفاده از آنها. همه چیز در اینجا بسیار ساده است: FPGAها (ما آنهایی را بدون زنگ و سوت می گیریم) در واقع کیسه ای از منطق روی یک تراشه است که می تواند خودسرانه به هم متصل شود: همان محرک ها، AND، OR و موارد اولیه مشابه، به عنوان مثال. ، در سری K155 یا 74ns. کنترلر یک پردازنده آماده (البته با تعداد کمی دستورالعمل)، حافظه داخلی، گذرگاه های داده و فرمان، تجهیزات جانبی و غیره است. به طور کلی، شما می توانید یک کنترلر کوچک از یک FPGA بزرگ بسازید، اما این ایده حداقل احمقانه است. بنابراین، کنترل کننده برای اجرای زنجیره های طولانی دستورات، تکرار چرخه ای آنها، جابجایی از یک زنجیره به زنجیره دیگر و غیره تیز می شود و FPGA برای انجام عملیات ساده منطقی و مهمتر از آن تعداد زیادی به طور همزمان تیز می شود (و حتی در فرکانس های ساعت مختلف) ...

بیایید از تئوری به عمل برویم. برای شروع، ما به یک تراشه CPLD نیاز داریم. منابع کمی وجود دارد، اما برای توسعه بیشترین است. من XC95288XL را در قاب TQ144 می گیرم (دوباره، اتفاقاً در انبار موجود بود)، به طور کلی توصیه می کنم چیز تازه تری بگیرید، مثلاً از سری CoolRunner 2. برای به دست آوردن یک محصول نهایی (حتی اگر حداقل با یک LED چشمک بزند)، باید: سخت افزار را لحیم کنید (امیدوارم در اینجا مشکلی وجود نداشته باشد، اما تفاوت های ظریف را ذکر خواهم کرد)، سیستم عامل را "نوشتن" کنید ( در مورد ما، به جای آن، بکشید) و سیستم عامل را به ریز مدار بدوزید. به طور کلی، ما به نرم افزار تولید سیستم عامل و برنامه نویس نیاز داریم. نرم افزار (Xilinx ISE Webpack) را از سایت رسمی دانلود می کنیم (البته درخواست ثبت نام می کنند)، لایسنس وب پک رایگان است. برنامه نویس را می توان طبق طرح شکل 1 (برای پورت LPT) ساخت یا یک USB-shny کارخانه ای خریداری کرد (در فروشگاه های آنلاین چینی آن را با قیمت حدود 50 دلار دیدم، اما خودم آن را نخریدم) . بیشتر.

برنج. یکی

پس از لحیم کردن FPGA به برد برد، لحیم کردن یا خرید یک برنامه نویس، دانلود و نصب ISE Webpack (من نسخه 13.2) را دارم، Project Navigator را راه اندازی کرده و یک پروژه جدید ایجاد کنید. برای ایجاد یک پروژه، File -> New Project را انتخاب کنید، نام پروژه و محل ذخیره آن را مشخص کنید، همچنین نوع منبع TOP-LEVEL را مشخص کنید (شکل 2). واقعیت این است که برای FPGA ها نیازی به کشیدن مدار از تریگرها و اتصالات آنها نیست، به عنوان مثال می توانید به زبان های سطح بالا (VHDL، Verilog) بنویسید و اصلاً لازم نیست از یک چیز استفاده کنید. در داخل همان پروژه تا اینجای کار فقط در تمام سطوح از Schematic استفاده می کنیم.


برنج. 2
(عکس برای بزرگنمایی قابل کلیک است، در یک پنجره جدید باز می شود)

در پنجره بعدی (شکل 3)، میکرو مدار خود را انتخاب کنید (در ابتدا بقیه را لمس نکنید). در پنجره ای که پس از کلیک بر روی دکمه "بعدی" ظاهر می شود، پارامترهای پروژه ایجاد شده را تحسین می کنیم، روی "پایان" کلیک می کنیم - و کار شما تمام شد: پروژه ایجاد شده است.


برنج. 3

اکنون باید در واقع یک نمودار رسم کنیم: روی پنجره با پروژه و منبع جدید کلیک راست کنید (شکل 4.)، نام این کد منبع را بگذارید (این نام طرح ما است، می تواند تعداد زیادی از آنها وجود داشته باشد. در پروژه)، دوباره شماتیک را انتخاب کنید، روی "بعدی" کلیک کنید، پارامترهای فایل جدید ایجاد شده را تحسین کنید، روی "پایان" کلیک کنید و یک طرح تمیز دریافت کنید.


برنج. 4
(عکس برای بزرگنمایی قابل کلیک است، در یک پنجره جدید باز می شود)

جالب ترین چیز شروع می شود: در پانل سمت چپ (نه از لبه)، دکمه "افزودن نماد" را فشار دهید (شکل 5).


برنج. 5
(عکس برای بزرگنمایی قابل کلیک است، در یک پنجره جدید باز می شود)

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

به عنوان مثال، مشکل زیر را در نظر بگیرید: باید زمان تاخیر بین لبه‌های جلویی 2 پالس که روی سیم‌های مختلف ظاهر می‌شوند را تا حد امکان دقیق تعیین کنید و این مقدار را از طریق رابط SPI در کنترل‌کننده ادغام کنید. هرگونه شباهت مشکل با موضوع "افزایش فرکانس کاری MK" در یکی از انجمن های رباتیک عمدی است. بنابراین، در ورودی دستگاه 2 سیم برای پالس و 3 سیم برای کنترلر SPI وجود دارد. ورودی ساعت دیگری را اضافه می کنیم (در حالی که نمی دانیم در چه فرکانسی است، فقط می توانیم فرض کنیم که حداقل 70 مگاهرتز است). ما شروع به ترسیم سفت‌افزار می‌کنیم: ما به محرک‌هایی نیاز داریم که پالس‌ها را "گیر" می‌کنند، یک شمارنده زمان، یک ثبت تغییر (نیازی به ایجاد آنها نداریم، آنها کتابخانه‌ای هستند). من توضیح نمی دهم که محرک ها و شمارنده ها چیست، امیدوارم خوانندگان "در موضوع" باشند و مشکلی پیش نیاید، در غیر این صورت باید چند مقاله دیگر بنویسید. ما دقیقاً چنین مداری گرفتیم (شکل 6)، همانطور که می بینید، لازم نیست سیم را از خروجی نماد به ورودی بکشید، فقط باید مدار را نام ببرید. برای تعیین ورودی ها و خروجی های خارجی، از دکمه "افزودن نشانگر I/O" استفاده کنید.


برنج. 6
(عکس برای بزرگنمایی قابل کلیک است، در یک پنجره جدید باز می شود)

وقتی مدار آماده شد، به تب Design بروید و روی Implement Design دوبار کلیک کنید - همه انواع فرآیندها شروع می شوند (برای شروع، مهم نیست کدام یک - نکته اصلی این است که همه چیز با هم فرآیند تقطیر است. منبع در میان افزار). وقتی همه چیز درست شد، به خطاها با وارنینگ نگاه می کنیم: همه چیز مهم را برطرف می کنیم، بقیه را رها می کنیم. به عنوان مثال، ما به خروجی های SEO و TS شمارنده نیازی نداریم و 15 بیت باقی مانده از خروجی موازی شیفت رجیستر نیز مورد نیاز نیست، اما با varnings سوگند می خورد. اگر با پاک کن قسم بخورد که ما این را می خواهیم، ​​یعنی چیزی را اشتباه می خواهیم. اگر همه چیز برای ما مناسب است (و سینت سایزر)، ما بیشتر گزارش ها را تحسین می کنیم: چه تعداد منابع مصرف شده است، چه فرکانس های ساعت در دسترس است ... اگر همه چیز دوباره خوب است، پس وقت آن است که مدار را شبیه سازی کنید و مطمئن شوید که آن در واقع با توجه به وظیفه در دست کار می کند. من پیشنهاد می کنم شبیه سازی را پس از بررسی زمان بندی ها انجام دهید زیرا گاهی اوقات کل مدار باید تکان داده شود تا فرکانس کلاک مورد نظر به دست آید که البته می تواند بر نتیجه ...

بنابراین، شبیه سازی: در تب Design (در سمت چپ)، شبیه سازی را انتخاب کنید (شکل 7).


برنج. 7
(عکس برای بزرگنمایی قابل کلیک است، در یک پنجره جدید باز می شود)

در زیر، در فرآیندها، به جای فرآیندهای سنتز و مسیریابی، فرآیند شبیه سازی مدل رفتاری ظاهر شد، روی آن دوبار کلیک کنید - شبیه ساز شروع می شود، که در آن سیگنال های خود را می بینیم (نه تنها ورودی-خروجی، بلکه میانی) (شکل 8).


برنج. هشت
(عکس برای بزرگنمایی قابل کلیک است، در یک پنجره جدید باز می شود)

نشانگر ماوس را روی دکمه ها ببرید، نظرات روی دکمه ها را بخوانید. ما زمان گام شبیه سازی (شکل 9) و مقادیر اولیه سیگنال های ورودی را تنظیم می کنیم، بلافاصله سیگنال های ساعت را تنظیم می کنیم (ما هر 5 ns ساعت را شبیه سازی و تغییر نمی دهیم).


برنج. 9
(عکس برای بزرگنمایی قابل کلیک است، در یک پنجره جدید باز می شود)

با گام برداشتن در زمان با دستکاری ورودی ها و (در صورت لزوم) با مرحله شبیه سازی، یک نمودار زمان بندی به دست می آوریم (شکل 10).


برنج. 10
(عکس برای بزرگنمایی قابل کلیک است، در یک پنجره جدید باز می شود)

ما مطمئن می شویم که همه چیز همانطور که در نظر گرفته شده است کار می کند (یا به اشکال زدایی مدار ادامه می دهیم) و به مرحله بعدی می رویم - خروجی ها و ورودی ها را در امتداد پایه های ریز مدار توزیع می کنیم. برای انجام این کار، یک فایل منبع دیگر (شکل 11) به نام Implementation Constraints File اضافه کنید.


برنج. یازده
(عکس برای بزرگنمایی قابل کلیک است، در یک پنجره جدید باز می شود)

ما "پایه ریز مدار" را تجویز می کنیم (شکل 12)، در اینجا الزامات فرکانس های ساعت را تجویز می کنیم. و اکنون به تفاوت های ظریف مرتبط با سیگنال های ساعت می رسیم. واقعیت این است که سیگنال های ساعت باید به خطوط به اصطلاح جهانی بیایند - خطوطی که از کل ریزمدار عبور می کنند، بقیه خطوط ماهیت محلی دارند و از بلوک به بلوک از منطق سوئیچینگ عبور می کنند. تراشه XC95288XL در پکیج TQ144 دارای 3 خط است که به پایه های 30، 32، 38 متصل می شوند. بقیه سیگنال ها را می توان به هر پایه I/O متصل کرد.


برنج. 12
(عکس برای بزرگنمایی قابل کلیک است، در یک پنجره جدید باز می شود)

دوباره روی Implement Design دوبار کلیک کنید، منتظر بمانید، نظرات مربوط به هشدارهای دارای خطا را بخوانید و به گزارش‌های مربوط به pinout (شکل 13) و زمان‌بندی (شکل 14) بروید. ما مطمئن می شویم که همه چیز برای ما مناسب است و شادی را در قالب فایل% project_name% .jed داریم.


برنج. سیزده
(عکس برای بزرگنمایی قابل کلیک است، در یک پنجره جدید باز می شود)


برنج. 14
(عکس برای بزرگنمایی قابل کلیک است، در یک پنجره جدید باز می شود)

فایل سیستم عامل آماده است. فرض کنید دستگاه هم همینطور است. کابل JTAG را به کامپیوتر وصل می کنیم و روی Configure Target Device دوبار کلیک می کنیم. ابزار سیستم عامل (Impact.exe) شروع می شود، در واقع، هنگام ساخت چندین دستگاه برای فلش یک سری، می توانید خود را به راه اندازی تنها یکی از آن محدود کنید. ما یک پروژه جدید ایجاد می کنیم (این یک پروژه برای یک برنامه سیستم عامل است)، اجازه می دهیم به طور خودکار برنامه نویس و ریزمدار متصل را پیدا کند، فایل سیستم عامل را نشان داده و روی برنامه کلیک کنید. ما چند ده ثانیه منتظریم، کتیبه ای را می بینیم که همه چیز خوب است - دستگاه آماده است.


مزرعه کاشته شده با آرایه های دروازه های قابل برنامه ریزی

ما دوره ای از سخنرانی ها را در مورد اینکه منطق قابل برنامه ریزی چیست و چگونه شروع به استفاده از آن به نفع خود و همسایگانمان کنیم شروع می کنیم ...

FPGA- در زبان روسی به IT اینگونه گفته می شود. پقابل برنامه ریزی Lمنطقی وانتگرال باهما
به روشی بورژوازی، کمی متفاوت به نظر می رسد - FPGA - افبازده از پ rogrammable جیخورد آپرتوها این به معنای واقعی کلمه به عنوان "مزرعه کاشته شده با آرایه هایی از دروازه های قابل برنامه ریزی" ترجمه می شود.
برای کمی جدی تر، می توانیم آن را "ماتریس دروازه قابل برنامه ریزی" بنامیم.

دریچه چیست؟
خیلی درسته، تو زیرزمین یه جورایی روی لوله آب هست که اگه پیچش کنی کل خونه بدون آب می مونه. خلاصه آن چیزی است که می توان آن را بسته و باز کرد.

بنابراین، بگذارید برای شما یک مکاشفه باشد، اما هر ریزمدار از دروازه تشکیل شده است. درست است، آنها کاملاً شبیه آنچه من و شما در زیرزمین داریم نیستند. اما آنها همین کار را می کنند - باز و بسته می شوند.

شیر فلکهجزء اصلی هر ریزمدار دیجیتال است.

حتی پیچیده‌ترین ابرپردازنده‌ها نیز از گیت‌ها تشکیل شده‌اند. تعداد بسیار زیادی از آنها در آن وجود دارد، فقط یک دریا. طبیعتاً در هر ریزمدار، گیت ها به روش خاصی به هم متصل می شوند. در واقع، عملکرد میکرو مدار بستگی به نحوه اتصال آنها دارد.

در ریز مدارهای معمولی، طرح اتصال سوپاپ در حین ساخت تنظیم می شود و متعاقباً دیگر نمی توان آن را تغییر داد.
FPGA به ما این امکان را می دهد که خودمان این مدار را تنظیم کنیم و آن را همانطور که می خواهیم تغییر دهیم، از قبل در طول "عمر" ریزمدار. کافی است مداری را روی کامپیوتر رسم کنید و از یک برنامه نویس برای فلش آن در یک ریزمدار FPGA استفاده کنید.

این به طور کلی است.

در واقع، همه چیز بسیار پیچیده تر است :) به تصویر نگاه کنید


این یک ماکروسل است - ماکروسل در زبان آنها.
هر ریزمدار FPGA از چنین ماکروسل هایی تشکیل شده است. همانطور که از نمودار ماکروسل می بینید، از یک جدول جستجو تشکیل شده است ( LUT) - "جدول جستجو"، و همچنین، ماشهبا ورودی های همزمان و ناهمزمان و مقداری منطق در ورودی های ماشه. در واقع، فقط LUT برنامه ریزی شده است. همانطور که مشاهده می کنید دارای 4 ورودی و یک خروجی می باشد. این خروجی می تواند مستقیماً به خروجی ماکروسل (Q0) یا ورودی داده همزمان فلیپ فلاپ (D) اعمال شود.

LUT چیزی بیش از یک رام با 16 سلول 1 بیتی نیست. هنگامی که ترکیب خاصی از سیگنال های دیجیتال به ورودی های LUT اعمال می شود (D0 ... D3)، آنها را به عنوان یک آدرس درک می کند و محتوای سلول را در این آدرس خروجی می دهد.

به طور کلی، هر مدار منطقی که دارای 4 ورودی (یا کمتر) و یک خروجی باشد را می توان با یک جدول صدق 16 خطی توصیف کرد. به عنوان مثال، بیایید چنین طرح ساده ای را در نظر بگیریم و یک جدول حقیقت برای آن بنویسیم:

جدول صدق سطح منطقی خروجی مدار (Q) را برای تمام ترکیبات ممکن سیگنال در ورودی ها (D0… D3) توصیف می کند. به طور مشابه، در LUT، هر ترکیبی از سیگنال های ورودی (خواندن - هر آدرس ROM) سیگنال خروجی خود را دارد. یعنی جدول حقیقت مداری که می خواهیم در جای خود ببینیم به LUT دوخته شده است. ساده است!

اگر مدار دارای بیش از 4 ورودی یا بیش از 1 خروجی باشد، از LUT های چندین ماکروسل استفاده می شود.

clear = "همه">

اما مهمترین چیز ماشه است. از این گذشته، همانطور که می دانید (یا شاید هنوز نمی دانید)، همه رجیسترها، شمارنده ها و بسیاری دیگر از عناصر فناوری دیجیتال از محرک ها تشکیل شده اند. بنابراین، تعداد ماکروسل‌ها در تراشه FPGA، تعداد محرک‌ها را تعیین می‌کند. و بالعکس :) بنابراین، هنگام انتخاب یک ریزمدار برای هر پروژه، ابتدا باید تخمین بزنید که چند ماشه در مدار خواهد بود و با یک حاشیه ...

شکل زیر بلوک دیاگرام تراشه های سری EPM7000 شرکت Altera را نشان می دهد. بنابراین، دو رقم آخر نام دقیقاً تعداد ماکروسل‌های موجود در ریزمدار را نشان می‌دهد.


همانطور که از نمودار می بینید، ماکروسل ها در "بلوک های آرایه های منطقی" (LAB - Logic Array Block) ترکیب می شوند.
این بلوک ها از طریق یک آرایه اتصال قابل برنامه ریزی (PIA) به هم متصل می شوند.
علاوه بر این، LAB ها از طریق بلوک های کنترل I/O به پین ​​های ریزمدار متصل می شوند.

هنگام چشمک زدن، هر یک از بلوک ها اطلاعات خود را "دوخته شده" دارند:
- LUT ها در ماکروسل ها برنامه ریزی شده اند،
- اطلاعات مربوط به اتصالات داخلی به PIA دوخته شده است،
- اطلاعات مربوط به اتصالات به پایه های ریز مدار به بلوک کنترل I / O دوخته می شود.

به طور جدی، "سیستم افزار" FPGA "بارگذاری پیکربندی" نامیده می شود.

به نظر شما از چه چیزی برای بارگذاری تنظیمات استفاده خواهیم کرد ؟؟؟
خوب، البته، با بایت بلستر قدیمی خوب! :) یک بایت بلستر یک چیز جهانی است :) من در اینجا نحوه ساخت آن را با جزئیات بیشتر توضیح دادم

مقالات مرتبط برتر