مدارات دیجیتال به طور کلی به سه دسته تقسیم میشوند: ترکیبی، ترتیبی سنکرون، و ترتیبی آسنکرون.
فکر میکنید کدامیک از این نوع مدارات را میتوان در FPGA پیادهسازی کرد؟
بله، هر سه نوع.
اما در عمل کدام نوع مدار را در FPGA پیادهسازی میکنیم؟
فقط مدارات ترتیبی سنکرون!
چرا؟
More...
چون مداری که به صورت کاملا سنکرون پیادهسازی شود…
- منابع سختافزاری کمتری از FPGA را اشغال میکند؛
- کارایی و سرعت آن بیشتر میشود؛
- فرآیند طراحی و پیادهسازی آن راحتتر میشود؛
- و دارای قابلیت اطمینان بیشتری در بلند مدت است.
اما مهمترین نیازمندی یک مدار سنکرون چیست؟
برای آشنایی با نحوه پیادهسازی کاملا سنکرون در FPGA این برنامه ویدئویی را ببینید…
برای عملکرد صحیح یک مدار سنکرون، خصوصا وقتی با مدار بزرگی سر و کار دارید، یک سیگنال کلاک با کیفیت میتواند مهمترین نقش را ایفا کند.
خوشبختانه تمهیدات بسیار زیادی برای پیادهسازی کلاک در FPGA از قبل در نظر گرفته شده است.
اما برای استفاده درست از این تمهیدات، نیاز به رعایت نکاتی است که در این مقاله به مهمترین آنها اشاره میکنم.
اینها نکاتی هستند که اگر در هنگام پیادهسازی مدار در FPGA به آنها توجه نکنید، به طور قطع مدار شما مدار قابل اتکا و مطمئنی نخواهد بود و در بسیاری از موارد ممکن است در عمل با اشکالات جدی مواجه شود.
برای دانلود فایل PDF این مقاله، روی دکمه زیر کلیک کنید:
۱) استفاده از بلوک DCM
اولین نکته مهم برای پیادهسازی کلاک در FPGA این است که همواره از بلوک DCM استفاده کنید. بلوک DCM همانطور که میدانید، یکی از منابع سختافزاری موجود در FPGAهای شرکت Xilinx است که میتواند یک کلاک با یک فرکانس مشخص را به عنوان ورودی دریافت کند و در خروجی، یک یا چند کلاک جدید با فرکانسهای متفاوت تولید کند.
به کمک این بلوک شما میتوانید فرکانس اسیلاتور روی برد را که به FPGA وارد میشود، به فرکانس کلاک مورد نظر خودتان برای استفاده در مدار تغییر دهید.
مزایای استفاده از DCM
استفاده از این بلوک، به جز تغییر فرکانس اسیلاتور، دارای مزایای بسیار دیگری هم هست و به همین دلیل توصیه میشود در تمام پیادهسازیها از آن استفاده شود.
کاهش جیتر کلاک ورودی
بلوک DCM میتواند جیتر کلاک ورودی را کاهش دهد. اما منظور از جیتر چیست؟
معمولا شما از یک اسیلاتور به عنوان کلاک مدارتان در FPGA استفاده میکنید. فرض کنید روی اسیلاتور عدد ۱۰۰ مگاهرتز به عنوان فرکانس خروجی آن نوشته شده است. اما در عمل، فرکانسی که اسیلاتور فرضی ما تولید میکند ۱۰۰ مگاهرتز نیست، بلکه مقداری نزدیک به ۱۰۰ مگاهرتز است. یعنی فرکانس خروجی اسیلاتور همواره در حال تغییر در نزدیکی ۱۰۰ مگاهرتز است. به این تغییر فرکانس در اصطلاح جیتر گفته میشود.
یکی از مهمترین مزایای بلوک DCM این است که میتواند تا حد زیادی جیتر کلاک حاصل از اسیلاتور را کاهش دهد.
تصحیح Duty Cycle کلاک ورودی
مزیت دیگر استفاده از بلوک DCM، تصحیح duty cycle است. منظور از duty cycle همانطور که حتما میدانید، نسبت مدت زمان یک بودن سیگنال مربعی به پریود آن است. مثلا فرض کنید که شما انتظار دارید duty cycle اسیلاتور روی برد، 50 درصد باشد. با این حال ممکن است مقداری خطا در duty cycle وجود داشته باشد. شما به کمک بلوک DCM میتوانید این خطا در duty cycle را تصحیح کنید.
استفاده خودکار از بافرهای مخصوص کلاک
در FPGA بافرهای مخصوصی وجود دارند که باید در مسیر کلاک یا کلاکهای ورودی قرار داده شوند. به عبارت دیگر، برای استفاده از تمام تمهیداتی که برای کلاک در FPGA وجود دارد، شما حتما باید سیگنال کلاک مدار را به محض ورودی به FPGA، از این بافرها عبور دهید. در غیر این صورت، سیگنال کلاک در مسیرهای از پیش تعبیه شده برای آن قرار نمیگیرد و شما نمیتوانید انتظار یک کلاک با کیفیت را در مدار درون FPGA داشته باشید.
به طور معمول، شما باید این بافرها را به صورت مستقیم در مدار قرار دهید (= instant کنید.) اما اگر از بلوک DCM استفاده کنید، تمام بافرهای کلاک لازم در مدار شما به صورت خودکار قرار داده میشوند و دیگر لازم نیست شما این کار را انجام دهید.
بنابراین بلوک DCM به جز تغییر فرکانس، کارهای مفید دیگری هم انجام میدهد. به دلیل همین مزایا، توصیه میشود حتی اگر نیازی به تولید فرکانس جدید برای کلاک ندارید، یعنی مثلا اگر اسیلاتور روی برد شما ۱۰۰ مگاهرتز است و فرکانس کلاک مورد نیاز شما هم ۱۰۰ مگاهرتز است، باز هم از DCM برای پیادهسازی کلاک در FPGA استفاده کنید. یعنی سیگنال کلاک ۱۰۰ مگاهرتز را به ورودی DCM اعمال کنید و در خروجی آن هم ۱۰۰ مگاهرتز را دریافت کنید تا بتوانید از مزایای زیادی که استفاده از DCM ایجاد میکند و میتواند برای طرح شما بسیار مفید باشد، استفاده کنید.
مزایای استفاده از بلوک DCM برای پیادهسازی کلاک در FPGA:
- تغییر فرکانس کلاک مدار
- کاهش جیتر کلاک ورودی
- تصحیح duty cycle کلاک ورودی
- استفاده خودکار از بافرهای مخصوص کلاک
۲) حتما از قید Period استفاده کنید
نکته بسیار مهم دیگر در ارتباط با پیادهسازی کلاک در FPGA این است که حتما از قید period در فایل UCF استفاده کنید. اما قید period چیست و چرا باید از آن در پیادهسازی استفاده کرد؟
به احتمال زیاد، شما تا به حال از این قید استفاده نکردهاید. البته بدون این قید هم میتوان مدارات را پیادهسازی کرد و احتمالا خیلی از آنها هم به درستی کار میکنند. اما مداری که بدون قید period پیادهسازی شود، بهینه و قابل اعتماد نیست.
وقتی مداری را پیادهسازی میکنید، نرمافزار پیادهسازی اطلاعی در مورد فرکانس کلاکی که شما قرار است به آن اعمال کنید ندارد. بنابراین، با توجه به قیدهای دیگری که به صورت پیشفرض در نرمافزار پیادهسازی تنظیم شدهاند، پیادهسازی را انجام میدهد. در این حالت ممکن است مدار شما بعد از پیادهسازی به فرکانس کلاک مورد نظر شما نرسد و همچنین ممکن است به فرکانس کلاکی بیش از فرکانس مورد نیاز شما برسد.
در هر دو صورت، پیادهسازی بهینهای انجام نشده است. شما به کمک قید period به نرمافزار پیادهسازی از پیش اعلام میکنید که قرار است چه فرکانس کلاکی را بعدا به مدارتان اعمال کنید. بنابراین، نرمافزار با اطلاع از فرکانسی که قرار است به عنوان کلاک به مدار اعمال شود، بهینهترین پیادهسازی را انجام میدهد. به همین دلیل، توصیه اکید شرکت Xilinx این است که حتما از قید period استفاده کنید و در حقیقت، استفاده از قید period در مدارات یک “باید” است.
نحوه استفاده از قید Period
اجازه دهید نحوه استفاده از قید period در مدار را هم به شما نشان دهم تا بتوانید به نحو مناسب از این روش در پیادهسازیهای بعدی خودتان استفاده کنید.
محل اعمال قید period در نرمافزار ISE فایل UCF است. بنابراین ابتدا باید وارد فایل UCF شوید. در فایل UCF قبل از اعمال قید period روی کلاک ورودی، باید عمل pin assignment را انجام دهید، یعنی مشخص کنید که پورت کلاک مدارتان باید به کدام یک از پینهای FPGA متصل شود.
برای آشنایی با نحوه اختصاص پورتهای مدار به پینهای FPGA این برنامه ویدئویی را ببینید…
در برد آموزش FPGA فراد ۱، اسیلاتور روی برد به پین شماره 85 از FPGA متصل شده است. بنابراین به کمک عبارت زیر، به نرمافزار اطلاع میدهیم که این پورت را در هنگام پیادهسازی به پین شماره 85 یعنی P85 متصل کند.
;NET "Clock" LOC = p85
برای اعمال قید period به این پورت کلاک، دو سطر زیر را در ادامه فایل UCF بنویسید.
;NET "Clock" TNM_NET = Clock
;TIMESPEC TS_Clock = PERIOD "Clock" 300 MHz HIGH 50%
در این عبارت، شما میتوانید فرکانس کلاکی را که قرار است از طریق پین P85 به مدار داخل FPGA اعمال شود مشخص کنید.
فرض کنید که یک اسیلاتور۱۰۰ مگاهرتز روی برد وجود دارد که به یکی از پینهای FPGA (در اینجا پین P85) وصل شده است. بنابراین در این حالت در عبارت مربوط به قید period مینویسیم ۱۰۰ مگاهرتز.
کلمه High به این معنا است که کلاک ما حساس به لبه بالارونده است و عدد ۵۰ درصد که در انتهای عبارت دیده میشود، مقدار duty cycle مورد انتظار ما است.
به این ترتیب، شما به نرمافزار پیادهسازی اطلاع میدهید که فرکانس کلاکی که بعدا قرار است به مدارتان اعمال کنید، ۱۰۰ مگاهرتز است و نرمافزار با این آگاهی میتواند بهینهترین طراحی را برای شما انجام دهد.
۳) سیگنال کلاک را فقط به پایههای مخصوص کلاک متصل کنید
نکته سوم برای پیادهسازی کلاک در FPGA این است که دقت کنید سیگنال کلاک حتما از پایههای مخصوص کلاک به FPGA وارد شوند. در FPGAها تعداد زیادی IO وجود دارد، ولی از میان این تعداد IOی زیاد، فقط تعداد کمی از آنها مخصوص ورود کلاک هستند.
در FPGAهای شرکت Xilinx شما در نام این پایهها میتوانید کلمهی GCLK یا CC را ببیند. CC مخفف Clock Capable است و اگر این عبارت (CC) در نام یک پین وجود داشته باشد، به این معنی است که شما میتوانید سیگنال کلاک (یعنی اسیلاتور روی برد) را به این پایه متصل کنید تا وارد FPGA شود.
در FPGAهای قدیمیتر، مثلا در Spartanها، به جای عبارت CC شما عبارت GCLK را در نام پایههای مخصوص کلاک میبینید و در FPGAهای جدیدتر، مثل انواع Virtex، عبارت CC را میبینید. شما مجاز هستید که سیگنال کلاک روی برد را فقط به یکی از این پایههای مخصوص کلاک وصل کنید.
رعایت نکاتی که در این مقاله به آنها اشاره کردم، کمک میکند بتوانید از امکانات و تمهیدات بسیار مفصلی که برای پیادهسازی کلاک در FPGAهای شرکت Xilinx وجود دارد به نحو صحیح استفاده کنید.
بسیاری از ایراداتی که در مرحله تست عملی در عملکرد FPGA دیده میشود مربوط به در نظر نگرفتن این نکات در پیادهسازی است. بنابراین پیشنهاد میکنم حتما تمام این موارد را در هر نوع پیادهسازی که از این به بعد انجام میدهید اعمال کنید.
آیا مقاله ملزومات پیادهسازی کلاک در FPGA برای شما مفید بود؟
لطفا نظرتان را در مورد این برنامه در پایین همین پست با دیگران به اشتراک بگذارید. همچنین با کلیک روی هر کدام از دکمههای اشتراک گذاری ابتدای این مطلب و به اشتراکگذاری آن در شبکههای اجتماعی میتوانید افراد بیشتری را در یادگیری این مطالب سهیم کنید.
سلام،
خیلی متشکرم برای آموزش های کاربردی که در سایت برای استفاده عموم قرار می دهید.
سلام،
خواهش میکنم. خوشحالم که مورد توجه شما قرار گرفته.
موفق باشید.
سلام – لطفا یک مثال در خصوص این آموزش در وبسایت قرار دهید.
سلام،
سعی میکنم در برنامههای بعدی این کار را انجام دهم.
موفق باشید.
سلام اقای مهندس
من این پست رو خوندم اما نظرم مربوط به این پست نیست.
میخواستم بگم اگر ممکنه یک ویدئو آموزشی از نحوه نصب، کرک و کار با نرم افزار Vivado هم درست کنید و مثل بقیه ویدئوهای آموزشی این سایت برای فروش بذارید.
واقعا تو اینترنت وقتی میگردیم ویدئو اموزشی از vivado خیلی کمه.
سلام،
در حال حاضر آموزش ویوادو منتشر شده است و برای افرادی که در دوره آنلاین طراحی دیجیتال با FPGA شرکت کردهاند قابل دسترسی است.
علاوه بر آن، چندین آموزش رایگان بسیار کاربردی هم در این زمینه منتشر کردهام که در بخش آموزشهای رایگان برای همه قابل دسترسی است.
موفق باشید.
سلام و خدا قوت خدمت استاد گرامی
برای تقسیم فرکانس اصلی چند روش وجود دارد؟
سلام،
اگر منظور شما از این تقسیم، تولید کلاک جدید است، راه صحیح آن استفاده از DCM است.
موفق باشید.
سلام برای ایجاد چند کلاک با شیفت فاز مشخص از کلاک ورودی نیز میتوان از واحد dcm استفاده کرد؟ مثلا ایجاد ۱۶ کلاک با شیفت فاز ۴۵ درجه
سلام،
بله میتوان. البته تعداد خروجیهای DCM محدود است و احتمالا مجبور خواهید بود از چند DCM استفاده کنید.
موفق باشید.