یک دستگاه منطقی قابل برنامهریزی پیچیده (CPLD) یک قطعه سختافزاری ضروری در مجموعه شماست. همانطور که از نامش پیداست، میتوانید این تراشهها را برای ارائه توابع منطقی مورد نیاز خود برنامهریزی کنید. این ممکن است جایگزین تراشههای قدیمی شود یا فقط راهی برای یادگیری و امتحان کردن فناوریهای مختلف باشد. چه راهی بهتر از استفاده از CPLD و امتحان کردن آن برای یادگیری وجود دارد؟
من یک ماژول CPLD ساختم تا بتوانم آن را به خیلی چیزها، از جمله بردبوردهای بدون لحیم، وصل کنم، اما اشتباه کردم. به نظر میرسد فضای موجود برای نصب افزونه روی بردبورد بدون لحیم ۱.۱ اینچ است. من عرض ردپا را ۱ اینچ در نظر گرفتهام و جایی برای ردیف سیم در دو طرف باقی نگذاشتهام. اه.
اما بگذارید کمی به عقب برگردم و بیشتر در مورد کاری که انجام میدهم توضیح دهم، میخواهم یک مدار منطقی قابل برنامهریزی بسازم که بتوان آن را به صورت کیت ساخت، به راحتی در خانه لحیم کرد، در یک مدار برنامهریزی کرد و با ولتاژ ۳.۳ یا ۵ ولت کار کند.
برای تحقق یک کیت لحیمکاری آسان، از یک قطعه CPLD قدیمی استفاده کردم که در نسخههای ۳.۳ ولت و ۵ ولت نیز موجود است و صرف نظر از منبع تغذیه، برنامهریزی خود را حفظ میکند. خود منطق یک آیسی CPLD از سری Altera Max است که در دو نسخه موجود است و برای بردهای مدار با ۳۲ یا ۶۴ ماکروسل مناسب است. ماکروسلها بلوکهای سازنده منطقی پایه هستند که با استفاده از «اصطلاحات» منطقی برنامهریزی میشوند و سپس از طریق اتصالات قابل برنامهریزی به سایر ماکروسلها متصل میشوند.
با نگاهی به شماتیک، میتوان دید که محتوای زیادی ندارد: اساساً CPLD، مدار برنامهریزی درون مدار و نوسانسازی که منطق CPLD را هدایت میکند.
این قطعه EPM7032 و EPM7064 نامیده میشود و از یک حامل تراشه سربی پلاستیکی ۴۴ پین (PLCC) استفاده میکند که گاهی اوقات به دلیل شکل J شکل سرب، J-lead نامیده میشود. این بسته را میتوان در یک سوکت سوراخدار قرار داد یا مستقیماً به PCB لحیم کرد.
شامل یک نوسانساز داخلی است، بنابراین CPLD میتواند عملیات را به صورت وضعیتدار انجام دهد و شمارندههای سریع را به تنهایی و بدون نیاز به کلاک خارجی ایجاد کند. اگر یک کلاک خارجی در دسترس باشد، کلاک پرسرعت روی ماژول میتواند برای ایجاد یک رویداد کلاک در هر لبه بالارونده یا پایینرونده کلاک خارجی استفاده شود و همچنان از دستورالعملهای CPLD/FPGA پیروی کند، یعنی شما واقعاً باید از شبکه کلاک جهانی داخلی به جای درایوهای "آسنکرون" ورودی کلاک استفاده کنید. ولتاژ منبع تغذیه نامی این نوسانساز بین ۱.۸ تا ۵.۵ ولت است.
اگر ویدیو را تماشا کنید، خواهید دید که من در مورد ترجیح شخصیام در مورد نحوهی برخورد با پین «INH» روی نوسانساز صحبت میکنم؛ به عبارت ساده، بعد از اینکه بررسی کردم که آیا مشخصات فنی معتبر است یا خیر، معمولاً اجازه میدهم شناور باشد.
وقتی با چنین توابعی سر و کار داشتم، دلایلی که به ذهنم خطور کرد شامل عدم تمایلم به اتصال مستقیم پینهای ورودی به ریلهای تغذیه (در صورت امکان) بود. یعنی ترجیح میدهم از مقاومتهای سری برای محدود کردن جریان در حالت گذرا استفاده کنم، حتی اگر نیازی به آن نباشد.
در طول این سالها، من شاهد برخی مشکلات در تولید (تولید در حجم بالا) بودهام و گاهی اوقات مواردی مانند چرخه تغذیه باعث میشود پینهایی که مستقیماً به ریل تغذیه متصل هستند، ولتاژی بالاتر از خود تراشه داشته باشند که این موضوع بدی است. در نهایت، پین را از طریق یک مقاومت (چه برق و چه زمین) به ریل تغذیه وصل کنید، در این صورت افراد میتوانند نظر خود را تغییر داده و بعداً از پین استفاده کنند. این امر به ویژه در تجربه من با دربهای بلااستفاده صادق است، احتمالاً میدانید که این دربها هرگز نباید شناور یا بدون اتصال رها شوند. با استفاده از یک مقاومت بالاکش، میتوانید سیگنال را وصل کرده و بدون بریدن مسیرهای مسی از گیت استفاده کنید.
کانکتور ۱۰ پین و چند مقاومت، مدار برنامهریزی را تشکیل میدهند. اگر همه مقاومتها از نوع مقاومتهای پولآپ باشند، من از یک شبکه مقاومتی استفاده میکردم، اما افسوس که یکی از آنها به زمین متصل است.
برای برنامهریزی چنین CPLD مستقلی، به یک برنامهنویس اختصاصی نیاز است. گفتنش برای من آسان است، چون معمولاً چند تا از آنها را کنارم دارم، اما اگر شما ندارید، ورود به بازی خیلی سخت نخواهد بود. "Altera USB Blaster" تایید شده با قیمت 50 دلار به فروش میرسد و میتوان آن را از Digikey و جاهای دیگر خریداری کرد. من چندین کپی از Ebay دارم که یکی از آنها کپیای است که همزمان از Altera، Xilinx و Lattice پشتیبانی میکند. یک پروژه و کد در اینترنت وجود دارد که میتوانید از آن برای ساخت کپی خودتان استفاده کنید، من آن را در لیست ویدیوهای احتمالی برای پروژه ساخت کپیهای برنامهنویس قرار خواهم داد. همچنین یک طرح شیلد را نشان خواهم داد که در آن میتوان مادربرد، آردوینو، PIC و غیره را برنامهریزی کرد.
نرمافزار مورد نیاز برای کامپایل و برنامهریزی CPLD به صورت رایگان از Altera در دسترس است، اما این بخش قدیمی به نسخه قدیمی ۹.۱ نیاز دارد. خبر خوب این است که این نسخه قدیمی مورد علاقه من بود. یک تحلیلگر زمانبندی شهودی داشت، اما در نسخه بعدی حذف شد.
برد مدار چاپی (PCB) یک طراحی دو طرفه ساده است، تا زمانی که برد مدار به آن بخورد، من معمولاً از مس برای اتصال به زمین و گاهی اوقات برای منبع تغذیه استفاده میکنم. گاهی اوقات ریختن مس آنقدر شکسته میشود که ممکن است در واقع باعث ایجاد مشکل یا نتایج نهایی نامرتب شود، بنابراین ریختن مجدد مس یک ابزار است، اما باید مدیریت شود.
امروزه، بسیاری از (اگر نگوییم اکثر) بستههای نرمافزاری CAD حاوی نماهای سهبعدی از محصول نهایی هستند، اگرچه دقت تصاویر فقط به اندازه دقت مدلهای سهبعدی مورد استفاده برای نمایش قطعات است. در اینجا میتوانید ببینید که من مدل سهبعدی را برای سوکت ۴۴ پین، کانکتور برنامهنویسی و نوسانساز انتخاب کردهام. در اینجا چند بسته سهبعدی که دوست دارم استفاده کنم، آورده شده است:
بسیاری از شرکتها نیز مدلهای سهبعدی از قطعات خود دارند. Molex تنها یک نمونه از شرکتهایی است که در این زمینه عملکرد خوبی داشته است.
اشتباهی که من مرتکب شدم، نه روی عملکرد، بلکه روی ظاهر آن تأثیر میگذارد و مشکل اصلی هم نیست، یعنی برای یک بردبورد بدون لحیمکاری مناسب نیست.
وقتی فکر کردم که میتوانم طرح را با کسی به اشتراک بگذارم، فوراً از نمادهای شماتیک CPLD و پیناوت کانکتور ۴۰ پین، که مساحت کلی آن است، ناراضی شدم. من یک نماد کانکتور دو ردیفه ۴۰ پین را برداشتم و آن را روی مساحت ۱ اینچی تنظیم کردم، اما شماره پینها ۱، ۲، ۳، ۴... نیستند، بلکه مانند بسته DIP با شماره ۱ در کنار آن شمارهگذاری شدهاند... ۳، ۵، ۷... درست مانند کانکتورهای کابل روبانی. بنابراین، این یک مساحت غیرشهودی برای تعیین نحوه اتصال به ماژول و عیبیابی است.
به همین ترتیب، تخصیص پینهای CPLD کمی گیجکننده است و من از مجموعهای از ابزارهای کمکی استفاده کردم که برای ایجاد نمادها به زبان توصیف اسکن مرزی (BSDL) متکی هستند. اکثر فروشندگان اصلی، فایلهای BSDL را برای اجزای اصلی خود در دسترس دارند که به شما امکان میدهد نمادها و بستهها را به صورت (نیمه) خودکار ایجاد کنید. مانند هر اتوماسیون دیگری، باید به عنوان یک ابزار در نظر گرفته شود و ممکن است برای بهترین نتیجه به دستکاری بیشتری نیاز داشته باشد. در این مورد، اجازه دادم پینها را به ترتیب حروف الفبا فهرست کند، که هنگام ردیابی پینها روی برد تقریباً تصادفی است. فقط میتوانم بگویم که آن روز بسیار مضطرب بودم.
شما هزینه این میانبرها را در آینده پرداخت خواهید کرد. وقتی من برای تغییر این ماژول میروم، محل قرارگیری پینها را مطابق با خود قطعه تعیین و به آن میدهم، به طوری که دانستن محل قرار دادن پروب اسیلوسکوپ به آسانی نگاه کردن به نماد شماتیک باشد.
هنگام استفاده از بردهای مدار، پیشرفتهای دیگری نیز وجود دارد که عمدتاً جنبه زیباییشناختی یا کاربردی دارند. نشانگر پین ۱ باید در چندین بسته رایجتر باشد و من همیشه یک نقطه اتصال زمین ساده را برای اتصال به زمین اسیلوسکوپ یا سیم VOM ترجیح میدهم. ممکن است این کار را با اضافه کردن یک کانکتور دو پین انجام دهم تا برق و زمین بتوانند مستقیماً به برد اعمال شوند، نه اینکه به پینهای پایینی متصل شوند.
قبل از اینکه برد مدار را تغییر دهم، میخواهم مطمئن شوم که تحت مسائل فیزیکی و ظاهری به درستی کار میکند. پس از روشن کردن و تأیید صحت عملکرد نوسانساز، برنامهنویس را وصل کردم. اگرچه نسخه ۳.۳ ولتی جدیدتر از نرمافزار برنامهریزی است، اما CPLD را شناسایی کرده و آن را به عنوان یک دستگاه "ناشناس" نمایش میدهد.
در مرحله بعد، یک شمارنده در Quartus ایجاد کردم و شماره پینها را به آن اختصاص دادم. کامپایل و دانلود سریع و عملکرد شمارنده مشاهده شده توسط اسیلوسکوپ، امکانسنجی طرح را تأیید میکند.
مدار تست سریع در Verilog بسیار ساده است. کد در زیر فهرست شده است. میتوانید یک فایل ZIP حاوی شماتیک و مدار تست Verilog را به عنوان یک پروژه Quartus II (نیاز به نسخه ۹.۱) دانلود کنید.
همانطور که اشاره کردم، برای توجه بیشتر به جزئیات مورد نیاز هنگام به اشتراک گذاشتن طرح یا انجام هرگونه عیبیابی، یک بازنگری دوم روی برد مدار انجام خواهم داد. از آنجایی که باید عرض کانکتور پایینی را روی ۰.۹ اینچ یا کمتر تنظیم کنم، میتوانم آن را روی ۰.۶ اینچ تنظیم کنم که یک بسته DIP استاندارد "پهن" است. انجام این کار به این معنی است که اجازه میدهم پینهای پایینی از سطح سوکت CPLD بیرون زده باشند. من این کار را در شرایط تولید انجام نمیدادم زیرا در آن زمان با دست مونتاژ میشد، اما یکی از اهداف، ساخت یک کیت لحیم کاری دستی بود. سازش لحیم کاری دستی این است که نوسان ساز باید در یک محفظه نصب سطحی SMD باشد، نسخه سوراخ دار بسیار بزرگ است و معمولاً از محدوده ولتاژ مورد نظر من پشتیبانی نمیکند.
آیا میتوان از این ماژولها برای ساخت یک کامپیوتر ساده کامل استفاده کرد؟ فکر میکنم باید حافظه اضافه کنم.
خخخ... بله، بستگی به نوع کامپیوتر دارد. با این حال، میکروکنترلرها/میکروکامپیوترهای «واقعی» تحت تأثیر «اتصال پین» ماژول قرار میگیرند، به این معنی که نمیتوانید اصطلاحات کافی از ماژول دریافت کنید تا کار مفیدی انجام دهید.
من یک کنترلر کامل زمانبندی و حالت دوربین NTSC با اندازه ۶۴ ساختم، بنابراین به هیچ پردازندهای نیاز نیست.
وریلاگ ساختاری و HDL که در کتاب از Nand تا Tetris استفاده شدهاند، کم و بیش یکسان هستند.
چرا قطعات سوراخدار؟ جوشکاری 0805 آسان است! اکنون زمان آن رسیده است که هر تعمیرکاری این مهارت را یاد بگیرد.
اگر سوکت بالایی را طوری تنظیم کنم که پینهای لحیمشده از پایین روی هم قرار بگیرند، میتوانم از روش «۶ مرکزی» (شبیهسازی یک تراشه ۴۰ پینی) یا روش مورب و غیره استفاده کنم. این روش لحیمکاری قطعات برای لحیمکاری پایههای پایینی سوکت بالایی پشت پایهها کاملاً دستی خواهد بود.
اما لحیم کاری آن از پایین برای مبتدیان دشوار است. وقتی من هدرهای PCB برد بورد را لحیم میکنم (این بردهای آداپتور SMD ارزان که میتوانید از eBay استفاده کنید، میتوانند برای نمونهسازی استفاده شوند)، هدرها را داخل برد بورد قرار میدهم، سپس برد مدار چاپی را روی آن قرار میدهم و سپس میتوانم به راحتی لحیم کنم. این برای برد بورد بسیار مناسب است. اگر لازم باشد آن را از پایین لحیم کنید، حتی دشوارتر هم میشود.
اگر CPLD در وسط قرار دارد (که سیمکشی آن ممکن است آسانتر باشد)، میتوان آن را به صورت مورب و بدون همپوشانی نصب کرد، ۴ ردیف وجود دارد، یا CPLD میتواند در یک طرف باشد:
ممنون از راهنماییتون برای قرار دادن کانکتور داخل برد بورد قبل از لحیم کاری. مال من یه کم ناپایداره.
در مورد پینهای بردبورد با فرمت DIP در یک سر و نوع "دانگل" سوکت خود تراشه در سر دیگر چطور؟ تراشه را میتوان در انتهای بردبورد آویزان کرد. مسیر اتصال محکم خواهد بود.
|####### ******************** |. بله، من تصمیم گرفتم از نسخه «رایگان» Altera استفاده کنم، درست همانطور که Xilinx و Lattice نسخههای «رایگان» دارند. من باید چرخه را با Al Williams تمام کنم تا بفهمم که همه پشتیبانیهای باز از چه چیزهایی پشتیبانی میکنند، که باید شامل ویژگیهای خاص سری دستگاه باشد. با این حال، من با نسخه رایگان کارهای زیادی انجام دادهام.
بله، شما نشان میدهید که CPLD با پینهایی که من معتقدم همپوشانی دارد. اگر آن را به درستی دنبال کنم، ممکن است شبیه نسخه ۲ به نظر برسد. هنگام طراحی برای تولید (انبوه)، من همیشه به مرحله «مونتاژ لحیم دستی» حساسیت دارم زیرا آنها همپوشانی دارند (در واقع پینهای لحیم در سمت غیرقطعه). (در حال حاضر یک قطعه لحیم دستی است) اما این فقط یک کیت کوچک است، نه یک طراحی تولید محور. من فقط عادتهایی دارم که کنار گذاشتن آنها در سن من سخت است. 
من فکر میکنم یک برد مدار T شکل با CPLD و قطعات غیرفعال با یک قسمت T شکل پهن، وقتی روی لبه بردبورد آویزان باشد، بسیار مفید خواهد بود. چیزی شبیه به Adafruit RasPi T-Cobbler (http://www.adafruit.com/products/2028). این کار باعث میشود بیشتر فضای بردبورد در دسترس باشد.
متأسفانه، توقف تولید، استفاده از آن را در پروژههای جانبی به شدت محدود خواهد کرد، درست مانند تمام مولدهای تابع مبتنی بر XR2206 و ICL8038.
ایده جالبیه. من این دو تا چیپ رو دوست دارم. CPLD قدیمی نیست، فقط یه راه ارزونتر برای خریدنش با ولتاژ ۳.۳ ولته.
در مورد «مزخرف» شما... شما واقعاً طرح جدیدی برای قرار دادن آن روی برد بورد ایجاد نکردید. فقط ابتدا سیم را روی برد بورد قرار دهید و سپس cpld را روی سیم قرار دهید. یا اگر میتوانید نوارهای برق و زمین را از یکی از آنها جدا کنید، از دو برد بورد استفاده کنید.
درباره آلتیوم و ایگل. آیا KiCad را در نظر گرفتهاید؟ هیچ محدودیتی ندارد که شما آلتیوم را به ایگل ترجیح دهید و به طور پیشفرض برای همه پینهای متصل نشده خطای DRC ایجاد میکند. اگر واقعاً میخواهید یک پین را باز کنید، باید به آن بگویید. (شاید فقط برای ورودی، نه برای خروجی، و هنوز بررسی نشده است). یکی دیگر از ویژگیهای عالی این است که یادگیری آن بسیار آسان است. فقط یک بعد از ظهر طول کشید و دفترچه راهنمای مقدماتی عالی آن باعث شد شروع کنم.
من SMD (بخش بزرگتر) بالای سوراخ عبوری را ترجیح میدهم. استفاده از آنها آسانتر است. لازم نیست همیشه PCB را بچرخانید. (بعضی اشتباهات احمقانه به دلیل آینهکاری رخ داده است...). و لازم نیست پایه مقاومت را ببرید. هنگام اشتراکگذاری یک طرح، میتوان به راحتی چندین بسته را روی یک PCB یا یک قطعه قرار داد. مقاومت SMD TH. (این کار طرح را کمی پیچیدهتر میکند).
من از فایل "شروع کار با KiCad" با فرمت pdf استفاده کردم. نسخه قدیمی که استفاده کردم 29 صفحه و آخرین نسخه 52 صفحه دارد. میتوانید آن را در آموزشهای دیگر (از جمله لینکهای ویدیویی) پیدا کنید: http://kicad-pcb.org/help/tutorials/
میدانم که [کریس گمل] از Hackaday و The Amp Hour یک مجموعه آموزشی در Kicad ساخته است http://kicad-pcb.org/help/tutorials/
Kicad ممکن است مفید باشد، بگذارید ببینم در نسخه ۲ چه اتفاقی میافتد. از پیشنهادات شما متشکرم. ورودیهای متصل نشده برای DRC (ERC) چیز خوبی هستند، و برای کانکتورها و چیزهای دیگر که آنها را نرم یا IO نگه میدارند، معمولاً میتوان از اکثر پیامهای قطع اتصال CAD جلوگیری کرد.
یک تست سریع انجام دهید و کانکتور را در یک جدول خالی قرار دهید، annotations و DRC را اجرا کنید. برای هر پین خطای drc دریافت کردم. با این حال، علامتگذاری پینهای متصل نشده بسیار ساده است.
روی غیرفعال تنظیم شده است. من باید جستجو کنم (ویرایش کامپوننت -> ویرایش با ویرایشگر کتابخانه). ویرایشگر کتابخانه، کامپوننت شما را در یک پنجره جداگانه باز و بارگذاری میکند، میتوانید هر بخشی از کامپوننت را بررسی یا تغییر دهید. کامپوننت تغییر یافته را میتوان در شماتیک شما ذخیره یا بهروزرسانی کرد. این کار تغییر کامپوننتها را بسیار آسان میکند. من زیاد به کتابخانه اهمیت نمیدهم. به عنوان مثال، اگر از cpld استفاده میکنید، میخواهید نامهای معناداری به پینها اختصاص دهید. مهمتر از آن، رابط کاربری خوبی برای طراحی کامپوننتهای خودتان وجود دارد.
در ERC کیکد، پینهای «غیرمتصل» نوع متفاوتی از پین با «پینهای غیرفعال» هستند و همه پینهای «غیرمتصل» خطا ایجاد میکنند. نحوه کار ERC را میتوان به راحتی با تنظیمات دلخواه خود تنظیم کرد: ابزارها -> بررسیکننده قوانین الکتریکی -> گزینهها.
زمان ارسال: ۱۸ نوامبر ۲۰۲۱





