توسط احمد ثقفی 

13 مهر, 1399

فایل قیود کاربر در ویوادو

هر پروژه‌ای در نرم‌افزار ویوادو، اگر قرار باشد عملا روی برد پیاده‌سازی شود، حداقل به دو فایل نیاز دارد: یک فایل VHDL یا Verilog و یک فایل قیود کاربر یا XDC.

در این ویدئو، در مورد فایل XDC و نحوه تنظیم دو قید اصلی در آن که برای پیاده‌سازی هر پروژه‌ای لازم است صحبت می‌کنم.

More...

فایل XDC محلی برای اعمال قیدهای مختلف پیاده‌سازی به پروژه شما در ویوادو است. این فایل، مشابه فایل UCF در نرم‌افزار ISE است.

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

یکی از این قیود، قید مربوط به اختصاص پورت‌های مدار به پین‌های FPGA و تعیین استاندارد آنها است. 

قید بعدی، قید زمانی کلاک اصلی مدار است. این قید، مشابه قید پریود در نرم‌افزار ISE است.

در این برنامه، ضمن معرفی فایل XDC و ساختار این قیدها، نحوه اعمال آنها را از طریق نرم‌افزار به شما آموزش می‌دهم.

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

برای آشنایی با فایل UCF و نحوه اختصاص پورت‌های مدار به پین‌های FPGA این برنامه را مشاهده کنید...

برای آشنایی با ملزومات پیاده‌سازی کلاک در مدار و قید پریود، این مقاله را مطالعه کنید...

ویدئو یا متن؟

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

برای دانلود نسخه با کیفیت این ویدئو، روی دکمه زیر کلیک کنید:

در این مقاله، شما را با فایل قیود کاربر در نرم‌افزار Vivado آشنا خواهم کرد.

شما می‌توانید در این فایل انواع قیود را برای پروژه‌تان مشخص کنید.

قیدها در پیاده‌سازی دیجیتال در نرم‌افزار ویوادو، ابزاری هستند که به‌کمک آن‌ها می‌توانید مسیر و نتیجه پیاده‌سازی را با توجه به نیازتان تغییر دهید.

از میان قیدها، استفاده از دو گروه الزامی است:

  • قیدهای مربوط به pin assignment
  • قیدهای زمانی مربوط به clock

من قبلاً در برنامه‌های دیگری درباره اضافه کردن این قیدها به فایل قیود کاربر در نرم‌افزار ISE صحبت کرده‌ام.

بنابراین، در این برنامه درباره مفاهیم این دو گروه قید صحبت نمی‌کنم.

اما می‌توانید از طریق لینک‌های زیر به این برنامه‌ها دسترسی پیدا کنید:

برای آشنایی با فایل UCF و نحوه اختصاص پورت‌های مدار به پین‌های FPGA این برنامه را مشاهده کنید...

برای آشنایی با ملزومات پیاده‌سازی کلاک در مدار و قید پریود، این مقاله را مطالعه کنید...

پیشنهاد می‌کنم اگر تاکنون این برنامه‌ها را مشاهده نکرده‌اید، ابتدا به آن‌ها مراجعه کنید تا با مفاهیم این دو گروه قید آشنا شوید؛ پس از آن، می‌توانید به‌کمک آموزش‌های این مقاله، این قیدها را در نرم‌افزار ویوادو به‌کار گیرید.

فایل قیود کاربر در نرم‌افزار ویوادو، با این فایل در نرم‌افزار ISE کاملاً متفاوت است.

در نرم‌افزار ISE، پسوند این فایل UCF (مخفف User Constrains File) بود.

اما در نرم‌افزار ویوادو، پسوند فایل قیود کاربر، XDC (مخفف Xilinx Design Constrains) است.

نه تنها پسوند فایل، بلکه قیدها و syntax آن‌ها نیز در نرم‌افزار ویوادو تغییر کرده است.

اگرچه از نظر مفهومی، قیدها در نرم‌افزار ویوادو همان اثر را دارند؛ اما ظاهر و syntax آن‌ها کاملاً متفاوت است.

ابتدا در ارتباط با نحوه تخصیص پورت‌های مدار به IO‌های FPGA صحبت خواهم کرد.

تخصیص پورت‌های مدار به IO‌های FPGA

وقتی مداری را روی FPGA ایجاد می‌کنید، مدار شما دارای پورت‌های مختلفی است.

همان‌طور که در آموزش‌های قبلی تاکید کردم، این پورت‌ها، باید به‌صورت مناسبی به پین‌های FPGA متصل شوند.

برای مثال، قاعدتاً یکی از پورت‌های مدار شما، پورت کلاک است.

و حتماً اسیلاتوری روی بُرد شما وجود دارد که به یکی از پین‌های FPGA متصل است.

اکنون شما باید پورت کلاک مدارتان که درون FPGA وجود دارد را به پینی از FPGA متصل کنید که از روی بُرد به اسیلاتور متصل شده است.

به این عمل، اصطلاحاً، pin assignment یا تخصیص پورت‌ها به IO‌های مدار می‌گوییم.

همان‌طور که گفتم، شما باید این کار را در فایل UCF نرم‌افزار ISE یا در فایل XDC نرم‌افزار ویوادو انجام دهید.

اکنون سینتکس انجام این کار در نرم‌افزار ISE را یادآوری می‌کنم. سپس، معادل آن را در نرم‌افزار ویوادو آموزش خواهم داد.

سینتکس تخصیص پورت‌های مدار به IO‌های FPGA

برای مثال، اگر نام پورت کلاک در کد شما Clock بود و قرار بود این پورت به پین شماره 85 از FPGA متصل شود، باید در فایل UCF نرم‌افزار ISE کد زیر را می‌نوشتیم:

NET "Clock" LOC=p85;

اما اگر بخواهیم همین کار را در فایل XDC نرم‌افزار ویوادو انجام دهیم، باید مطابق سینتکس زیر عمل کنیم:

set_property PACKAGE_PIN R2 [get_ports Clock]

در کد بالا، R2، نام یکی از پین‌های FPGA است و Clock نیز نام پورت کلاک در کد VHDL ما است.

شما می‌توانید به این ترتیبی که گفته شد، عمل pin_assignment را در فایل XDC انجام دهید.

اما مورد دیگری که در فرایند پیاده‌سازی با نرم‌افزار ویوادو حتماً باید آن را مشخص کنیم، استانداردهای IO در FPGA هستند.

تعیین استانداردهای IO

همان‌طور که احتمالاً می‌دانید، ما در دیجیتال برای فرایند انتقال داده، استاندارهای IO متنوعی داریم.

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

نام استاندارد IO را باید از دیتاشیت قطعه استخراج کنید.

پس از استخراج نام استاندار IO قطعه جانبی، باید برای پین‌هایی از FPGA که قطعه جانبی به آن‌ها متصل شده است، همان استاندارد را تعیین کنید.

به این ترتیب، بین قطعه جانبی و FPGA، یک ارتباط صحیح دیجیتال شکل خواهد گرفت.

در FPGA‌های شرکت Xilinx، پین‌های IO می‌توانند انواع استانداردهای رایج برای ارتباط دیجیتال را پیاده‌سازی کنند.

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

مثلاً فرض کنید اگر FPGA‌ای تعداد ۱۰۰ IO داشته باشد، ممکن است ۲۵ تا از این IO‌ها در یک گروه یا در یک بانک قرار گرفته باشند. همچنین، ممکن است ۳۰ تای دیگر آن‌ها در گروهی دیگر باشند.

به این ترتیب، پایه‌ها یا پین‌های FPGA در گروه‌های مجزایی به‌نام بانک قرار گرفته‌اند.

نکته مهمی که در ارتباط با بانک‌ها وجود دارد این است که همه پین‌های هر بانک در هر لحظه می‌توانند فقط یک استاندارد IO داشته باشند.

فرض کنید یک بانک دارای ۲۵ پین است و شما مجبور هستید یک پین از این بانک را روی یک استاندارد IO، مثلاً استاندار LVCMOS 3.3 تنظیم کنید.

این به این معنی است که سایر پایه‌های این بانک نیز باید روی این استاندارد قرار بگیرند.

این یک نکته بسیار بسیار مهم به‌خصوص برای طراح بُرد FPGA است.

در واقع، فردی که در گروه شما مسئولیت طراحی بُرد را بر عهده دارد، نباید دو قطعه جانبی که دارای دو استاندارد IO متفاوت هستند را به یک بانک IO متصل کند.

یا مثلاً اگر پایه‌های یک قطعه جانبی را به دو بانک وصل کردید، یعنی، تعدادی از پایه‌های آن را به یک بانک و تعداد دیگری را به یک بانک دیگر متصل کردید، باید هر دو بانک را روی یک استاندارد IO تنظیم کنید.

در شکل زیر، می‌توانید بانک‌های IO را برای FPGA‌ای که پایه‌های آن در اطرافش قرار دارند مشاهده کنید:

پایه‌های FPGA در گروه‌هایی به‌نام بانک قرار می‌گیرند.

پایه‌های FPGA در گروه‌هایی به‌نام بانک قرار گرفته‌اند؛ بانک‌ها با رنگ‌های متفاوتی نشان داده شده‌اند.

این FPGA از چهار بانک تشکیل شده که با رنگ‌های مختلف نمایش داده شده‌اند.

پایه‌های FPGA شکل زیر به‌صورت BGA هستند؛ یعنی، پایه‌های آن به‌صورت ماتریسی در پشت FPGA قرار گرفته‌اند:

پایه‌های یک FPGA از نوع BGA

پایه‌های یک FPGA از نوع BGA؛ هر بانک با یک رنگ نمایش داده شده است.

همان‌طور که مشاهده می‌کنید، این FPGA نیز از چهار بانک تشکیل شده است.

اکنون به نحوه تعیین استانداردهای IO در نرم‌افزار ویوادو می‌پردازم.

سینتکس اعمال استانداردهای IO

ابتدا نحوه انجام این کار را در نرم‌افزار ISE مرور می‌کنم و سپس به سراغ نرم‌افزار ویوادو می‌روم.

در نرم‌افزار ISE، در فایل UCF از قیدی به‌نام IOSTANDARD استفاده می‌کردیم.

فرض کنید بخواهیم، استاندارد پورت Clock را از نوع single و با ولتاژ 3.3 ولت تعیین کنیم. نام این استاندارد، LVCMOS33 است.

برای این کار، باید در فایل UCF عبارات زیر را بنویسیم:

NET "Clock" IOSTANDARD = LVCMOS33;

ممکن است این سوال برای شما مطرح شود که چگونه نام استانداردهای IO را بیابیم؛ در یکی از دیتاشیت‌های FPGA‌ها، نام و ویژگی‌های انواع استاندارهای IO درج شده است.

از لینک زیر می‌توانید برای FPGA‌های Spartan6 و Spartan7 به این دیتاشیت دسترسی داشته باشید.


اما برای مشخص کردن استانداردهای IO در نرم‌افزار ویوادو باید به چه ترتیب عمل کنیم؟

برای این کار، باید عبارت زیر را در فایل XDC بنویسیم:

set_property IOSTANDARD LVCMOS33 [get_ports Clock]

اکنون وارد نرم‌افزار ویوادو می‌شویم تا همین عملیات را در نرم‌افزار انجام دهیم.

تنظیم قیدها در نرم‌افزار ویوادو

مشابه نرم‌افزار ISE، در نرم‌افزار ویوادو نیز برای برای تنظیم قیدها دو روش وجود دارد.

روش اول، تایپ این قیدها در فایل XDC است.

و راه ساده‌تر، استفاده از تنظیمات نرم‌افزار، برای تعیین قیدها به‌صورت گرافیکی است. در این روش، نرم‌افزار به‌صورت خودکار قیدهایی که تنظیم کرده‌ایم را در فایل XDC می‌نویسد.

در شکل زیر محیط نرم‌افزار ویوادو را ملاحظه می‌کنید:

محیط نرم‌افزار ویوادو

محیط نرم‌افزار ویوادو

من یک ماجول VHDL ساده ساخته‌ام. این ماجول، یک LED چشمک‌زن ایجاد می‌کند.

ابتدا به بررسی کد VHDL این ماجول و پورت‌های مدار می‌پردازم و سپس به سراغ pin assignment و تعیین استانداردهای IO می‌روم.

این کد، دو پورت به نام‌های Clock و LED دارد.

پورت Clock، پورت ورودی و پورت LED، یک پورت خروجی است که قرار است تبدیل به یک LED چشمک‌زن شود.

باید برای نرم‌افزار ویوادو مشخص کنیم که قصد داریم این دو پورت را به کدامیک از پایه‌های FPGA متصل کنیم.

پورت Clock را باید به پایه‌ای از FPGA که اسیلاتور به آن متصل است وصل کنیم.

همچنین پورت LED را باید به پایه‌ای از FPGA که از روی بُرد به LED متصل شده است وصل کنیم.

کد این ماجول را در زیر مشاهده می‌کنید:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity LED_Blink is
    Port (
            Clock   : in    	STD_LOGIC;
            LED     : out  		STD_LOGIC
					);
end LED_Blink;

architecture Behavioral of LED_Blink is

	signal LED_Delay    : unsigned(25 downto 0) :=	(others=>'0');
	signal LED_Int      : std_logic             := 	'0';

begin

	LED     <=      LED_Int;

  process(Clock)
	begin

		if rising_edge(Clock) then

			LED_Delay   <=  LED_Delay+1;
			LED_Int     <=  LED_Delay(25);

		end if;
	end process;
end Behavioral;

این کد، یک کد بسیار ساده است.

در خط ۱۴ از کد، یک شمارنده به‌نام LED_Delay تعریف کرده‌ام. این شمارنده ۲۶‌بیتی است.

در خط ۲۶ از کد، شمارنده LED_Delay در حال شمارش است.

در خط ۲۷، اندیس ۲۵ از شمارنده را به یک سیگنال داخلی به‌نام LED_Int منتقل کرده‌ام.

در خط ۱۹ نیز سیگنال داخلی LED_Int را به خروجی مدار که پورت LED است، ارجاع داده‌ام.

به این ترتیب، می‌توانیم یک LED چشمک‌زن به‌صورتی که سرعت چشمک زدن آن قابل مشاهده با چشم باشد ایجاد کنیم.

اکنون به‌سراغ انجام pin assignment و تعیین استاندارد IO به‌کمک فایل XDC برویم.

ایجاد فایل XDC در نرم‌افزار ویوادو

ابتدا باید یک فایل XDC ایجاد کنیم.

بنابراین، مطابق شکل زیر گزینه Add Sources را انتخاب می‌کنیم:

مراحل ساخت و افزودن فایل XDC به پروژه در نرم‌افزار ویوادو

مراحل ساخت فایل XDC در نرم‌افزار ویوادو

در پنجره‌ای که باز می‌شود، گزینه Add or Create Constrains را انتخاب کرده و سپس روی گزینه Next کلیک می‌کنیم:

مراحل ساخت و افزودن فایل XDC به پروژه در نرم‌افزار ویوادو

مراحل ساخت فایل XDC در نرم‌افزار ویوادو

سپس، مطابق شکل زیر، گزینه Create File را انتخاب می‌کنیم:

مراحل ساخت و افزودن فایل XDC به پروژه در نرم‌افزار ویوادو

مراحل ساخت فایل XDC در نرم‌افزار ویوادو

اکنون باید نامی برای این فایل XDC تعیین کنیم؛ همان‌طور که در شکل زیر مشاهده می‌کنید، من نام این فایل را LED قرار داده‌ام.

سپس، روی دکمه OK کلیک می‌کنیم:

مراحل ساخت و افزودن فایل XDC به پروژه در نرم‌افزار ویوادو

مراحل ساخت فایل XDC در نرم‌افزار ویوادو

پس از آن، گزینه Finish را انتخاب می‌کنیم:

مراحل ساخت و افزودن فایل XDC به پروژه در نرم‌افزار ویوادو

مراحل ساختفایل XDC در نرم‌افزار ویوادو

در شکل زیر ملاحظه می‌کنید که در قسمت Constrains از پنجره Sources، فایل LED.XDC ساخته شده است:

اضافه شدن فایل XDC به پروژه و دسترسی به این فایل از طریق پنجره Sources

اضافه شدن فایل XDC به پروژه و دسترسی به این فایل از طریق پنجره Sources

اگر روی این فایل دبل‌کلیک کنیم، در سمت راست تصویر باز می‌شود.

همان‌طور که در شکل بالا ملاحظه می‌کنید، این فایل خالی است.

اکنون به‌سراغ انجام pin assignment برویم.

نحوه انجام pin assignment در نرم‌افزار ویوادو

ما می‌توانیم pin assignment را در مراحل مختلف، از جمله، ‌سنتز یا پیاده‌سازی انجام دهیم.

اما نکته‌ای که وجود دارد این است که برای اینکه شما بتوانید عمل pin assignment را انجام دهید، حداقل باید مرحله RTL ANALYSIS را انجام داده باشید.

بنابراین، باید مطابق شکل زیر، از منوی سمت چپ تصویر، گزینه Open Elaborated Design را انتخاب کنیم:

انجام مرحله RTL ANALYSIS به‌عنوان پیش‌نیاز عملیات pin assignmentیش‌نیاز عملیات pin assignment

انجام مرحله RTL ANALYSIS به‌عنوان پیش‌نیاز عملیات pin assignment

سپس، گزینه OK را انتخاب می‌کنیم:

انجام مرحله RTL ANALYSIS

انجام مرحله RTL ANALYSIS

پس از آن، صبر می‌کنیم تا این عملیات انجام شود و بتوانیم وارد مرحله تنظیم قیود کاربر در فایل XDC شویم.

پنجره‌ای که به‌صورت پیش‌فرض باز می‌شود، پنجره مربوط به package است:

پنجره Package در نرم‌افزار ویوادو

پنجره Package در نرم‌افزار ویوادو

همان‌طور که در شکل بالا مشاهده می‌کنید، من از تراشه Spartan7 استفاده کرده‌ام.

حالت شماتیکی package این FPGA در شکل نشان داده شده است. این FPGA به‌صورت BGA است و پایه‌های آن به‌صورت ماتریسی و پشت آن قرار دارند.

وقتی مکان‌نما را روی پایه‌های FPGA قرار دهید، یک ناحیه انتخاب می‌شود که نشان‌دهنده یک بانک است.

به‌طور دقیق‌تر، وقتی مکان‌نما روی یک پایه قرار می‌گیرد، شماره آن پایه، نامش و بانکی که در آن قرار دارد نمایش داده می‌شود.

پس از انجام مرحله RTL ANALYSIS، چینش پنجره‌های صفحه تغییر می‌کند و پنجره‌های جدیدی ظاهر می‌شود که در عملیات pin assignment به ما کمک می‌کنند.

برای مثال، همین پنجره package، پایه‌های FPGA را نشان می‌دهد که می‌توان از آن برای pin assignment استفاده کرد.

همچنین، همان‌طور که در شکل زیر مشاهده می‌کنید، پنجره I/O Ports در پایین صفحه و در قسمت کنسول ظاهر شده است که می‌توانیم پورت‌های مدار (پورت Clock و LED) را در آن ببینیم:

پنجره I/O Ports در نرم‌افزار ویوادو

پنجره I/O Ports در نرم‌افزار ویوادو

می‌توانیم از طریق پنجره I/O Ports عمل pin assignment را انجام دهیم.

نکته‌ای که بهتر است قبل از توضیح pin assignment به آن اشاره کنم این است که در قسمت بالا سمت راست صفحه، محلی برای انتخاب layout صفحه داریم:

تعیین Layout صفحه در نرم‌افزار ویوادو

تعیین Layout صفحه در نرم‌افزار ویوادو

گزینه I/O Planning مربوط به عملیات pin assignment می‌شود.

اگر برای شما گزینه I/O Planning انتخاب نشده بود می‌توانید با انتخاب آن به‌راحتی به پنجره‌های موردنیاز برای عملیات pin assignment دسترسی پیدا کنید.

البته توجه داشته باشید که قبل از انجام مرحله RTL Analysis، گزینه I/O Planning در منوی layout وجود ندارد.

اکنون با این توضیحات به‌سراغ تشریح روش‌های مختلف انجام pin assignment برویم.

یک روش برای pin assignment این است که پورت موردنظر را از پنجره I/O Ports به‌صورت drag & drop به پایه دلخواهمان در پنجره package متصل کنیم:

عملیات pin assignment در نرم‌افزار ویوادو به روش Drag & Drop

عملیات pin assignment در نرم‌افزار ویوادو به روش Drag & Drop

ممکن است محل قرارگیری پایه موردنظرمان در FPGA را ندانیم؛ می‌توانیم نام پایه را از ستون Package Pin در پنجره I/O Ports انتخاب کنیم.

بُردی که من استفاده می‌کنم RTS7 نام دارد که روی آن یک تراشه Spartan7 وجود دارد؛ روی این برد، دو اسیلاتور قرار دارد.

این دو اسیلاتور، به دو پایه از FPGA متصل شده‌اند.

بنابراین، من می‌توانم پورت Clock را به یکی از این پایه‌ها متصل کنم.

من در این پروژه از پایه R2 استفاده می‌کنم که این پایه به اسیلاتور 100MHz روی بُرد متصل شده است (شکل زیر).

عملیات pin assignment در نرم‌افزار ویوادو

عملیات pin assignment در نرم‌افزار ویوادو

البته می‌توانید به‌جای انتخاب R2 از منوی کشویی، آن را در مربع تایپ کنید.

روی بُرد، چهار LED وجود دارد که یکی از آن‌ها به پایه E18 از FPGA متصل شده است.

بنابراین، در مقابل پورت LED و در ستون Package Pin نام E18 را تایپ می‌کنم:

عملیات pin assignment در نرم‌افزار ویوادو

عملیات pin assignment در نرم‌افزار ویوادو

به این ترتیب، عمل pin assignment را انجام دادم.

مسئله بعدی، مشخص کردن استاندارد IO پایه‌ها است.

تعیین استاندارد IO در نرم‌افزار ویوادو

استاندارد IO را می‌توان از ستون IO std در پنجره I/O Ports مشخص کرد.

من برای تعیین استاندارد IO، به دیتاشیت بُرد RTS7 مراجعه کرده‌ام.

در دیتاشیت بُرد، بیان شده است که استاندارد مربوط به کلاک 100Mhz، استانداردی به‌نام SSTL135 است.

همچنین، استاندارد مربوط به LED، استاندارد LVCMOS33 عنوان شده است.

در شکل زیرT تعیین استانداردهای IO در ستون I/O std را مشاهده می‌کنید:

تعیین استانداردهای IO در نرم‌افزار ویوادو

تعیین استانداردهای IO در نرم‌افزار ویوادو

سپس، با فشردن دکمه‌های ctrl+s از صفحه کلید کامپیوتر، قیدها را ذخیره می‌کنیم.

در پنجره‌ای که مطابق شکل زیر باز می‌شود، دکمه OK را انتخاب می‌کنیم:

ذخیره قیدهای تنظیم شده برای اعمال آن‌ها به پروژه

ذخیره قیدهای تنظیم شده برای اعمال آن‌ها به پروژه

اکنون اگر وارد فایل XDC شویم، در بالای پنجره مربوط به آن، نوار زرد رنگی ظاهر شده است که هشدار می‌دهد این فایل تغییر کرده است:

ایجاد قیدهای تنظیم شده در فایل XDC نرم‌افزار ویوادو با کلیک بر گزینه reload

ایجاد قیدهای تنظیم شده در فایل XDC نرم‌افزار ویوادو با کلیک بر گزینه Reload

با کلیک بر گزینه Reload، قیدهای مربوط به pin assignment و تخصیص استانداردهای IO، به‌صورت خودکار ایجاد می‌شوند:

قیدهایی که توسط نرم‌افزار به‌صورت خودکار در فایل XDC ایجاد شده‌اند.

قیدهایی که توسط نرم‌افزار به‌صورت خودکار در فایل XDC ایجاد شده‌اند.

قیدهایی که پیش از این، آن‌ها را در پنجره I/O Ports تعیین کردیم.

اکنون آخرین نکته در ارتباط با فایل قیود کاربر در نرم‌افزار ویوادو را بیان خواهم کرد.

تعیین قیدهای زمانی

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

اما دو گروه از این قیدها، قیدهای الزامی هستند.

در واقع، بدون این دو گروه قید، پیاده‌سازی پروژه را نمی‌توانید انجام دهید.

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

در واقع، قید pin assignment و قید مربوط به استانداردهای IO از جمله قیود الزامی هستند که آن‌ها را به پروژه اعمال کردیم.

اما گروه دیگری از قیدهای ضروری، قید زمانی است.

این قید مربوط به کلاک اصلی مدار شما می‌شود.

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

می‌توانید آن برنامه آموزشی را از لینک زیر دنبال کنید:

برای آشنایی با ملزومات پیاده‌سازی کلاک در مدار و قید پریود، این مقاله را مطالعه کنید...

یکی از قیدهای واجب در نرم‌افزار ISE، قید Period بود.

شما به‌کمک این قید، می‌توانستید به نرم‌افزار پیاده‌ساز ISE اطلاع دهید که فرکانس سیگنال کلاکی که قرار است به مدارتان اعمال شود چه مقداری دارد.

نرم‌افزار پیاده‌ساز، با اطلاع از این مقدار فرکانس می‌توانست یک پیاده‌سازی بهینه انجام دهد.

مشابه این قید را در نرم‌افزار ویوادو نیز داریم.

نام این قید، create_clock است.

 اکنون ببینیم که قید create_clock را چگونه می‌توانیم به پروژه اعمال کنیم.

سینتکس قید create_clock

ابتدا یک یادآوری در ارتباط با نحوه اعمال قید Period در نرم‌افزار ISE داشته باشیم.

قید Period را در نرم‌افزار ISE به‌صورت زیر می‌توانستیم اعمال کنیم:

NET "Clock" TNM_NET = Clock;
TIMEPEC TS_Clock = PERIOD "Clock" 50 MHz HIGH 50%;

با تایپ کردن دو خط بالا در فایل UCF، قید Period اعمال میشد.

این دو خط به این معنی هستند که فرکانس سیگنال کلاک ما 50MHz است و این سیگنال، با لبه بالارونده آغاز می‌شود؛ duty cycle آن نیز 50 درصد است.

اگر بخواهیم معادل همین قید را در نرم‌افزار ویوادو و در فایل XDC مشخص کنیم، سینتکس آن به‌صورت زیر است:

create_clock –name Clock –period 20 –waveform {0 10} [get_ports {Clock}]

همان‌طور که مشاهده می‌کنید، به‌جای کلمه period از عبارت create_clock استفاده می‌کنیم.

پس از عبارت create_clock، به‌کمک name clock-، نام clock را برای این قید انتخاب می‌کنیم.

پس از آن، به‌کمک period 20-، پریود کلاک را برابر با 20 نانو‌ثانیه مشخص می‌کنیم.

نکته‌ای که وجود دارد این است که در مشخص کردن قید Period در نرم‌افزار ISE، شما می‌توانستید یا فرکانس سیگنال کلاک یا پریود آن را تعیین کنید؛ اما در قید create_clock، شما فقط اجازه دارید پریود سیگنال کلاک را وارد کنید.

عبارت period 20-، نشان‌دهنده پریود 20 نانوثانیه و معادل فرکانس 50MHz است.

گزینه دیگری به‌نام waveform وجود دارد که استفاده از آن اختیاری است.

اگر از waveform استفاده کنید، می‌توانید چند مورد را تعیین کنید؛ یک مورد این است که سیگنال شما با لبه بالارونده آغاز می‌شود یا لبه پایین‌رونده و مورد دیگر این است که duty cycle سیگنال شما چقدر است.

عبارت waveform {0 10}- به این معنی است که سطح یک مربوط به این سیگنال، از صفر شروع می‌شود و تا ۱۰ نانو‌ثانیه ادامه دارد.

چون کل پریود این سیگنال ۲۰ نانو‌ثانیه است، بازه زمانی از صفر تا ۱۰ نانو‌ثانیه، برابر با نصف پریود است.

در واقع، سیگنال در نصف پریود در سطح یک است؛ بنابراین، در نصف دیگر پریود صفر خواهد بود.

به این‌ترتیب، به‌کمک عبارت waveform {0 10}- دو مورد را مشخص کردیم؛ هم مشخص کردیم که duty cycle این سیگنال برابر با 50 درصد است و هم تعیین کردیم که ابتدا سطح یک و سپس سطح صفر ظاهر می‌شود.

ما می‌توانستیم عبارت waveform {10 20}- را بنویسیم؛ که به این معنی است که سطح یک سیگنال کلاک از ۱۰ نانو‌ثانیه تا ۲۰ نانو‌ثانیه باشد؛ در این حالت ابتدا سطح صفر و سپس سطح یک ظاهر میشد.

در ادامه و در کروشه عبارت get_ports {Clock} را می‌نویسیم.

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

بنابراین، نحوه تعیین قید زمانی برای سیگنال کلاک در نرم‌افزار ویوادو را بررسی کردیم.

اکنون به محیط نرم‌افزار ویوادو بازمی‌گردیم تا این قید زمانی را به پروژه اعمال کنیم.

اعمال قید create_clock در نرم‌افزار ویوادو

در نرم‌افزار ویوادو می‌توانید قید زمانی را از طریق منوی سمت چپ تصویر و از طریق بخش سنتز یا پیاده‌سازی تعیین کنید.

همان‌طور که در تصویر زیر مشاهده می‌کنید، در هر دو بخش، گزینه‌ای به‌نام edit timing constrains وجود دارد:

گزینه Edit Timing Report در زیر مجموعه فرایند سنتز و پیاده‌سازی

گزینه Edit Timing Report در زیر مجموعه فرایند سنتز و پیاده‌سازی

در صورت انجام عملیات سنتز و پیاده‌سازی، این دو گزینه فعال خواهند شد.

بنابراین، ابتدا روی گزینه Run Synthesis کلیک می‌کنیم و سپس گزینه edit timing constrains را انتخاب می‌کنیم.

به این ترتیب، در tab‌ای که به‌نام timing constrains ظاهر می‌شود، می‌توانیم قید زمانی را مشخص کنیم:

مراحل تعیین قیدهای زمانی در نرم‌افزار ویوادو

مراحل تعیین قیدهای زمانی در نرم‌افزار ویوادو

همان‌طور که مشاهده می‌کنید، اولین گزینه، گزینه create_clock است.

اگر روی این گزینه دبل‌کلیک کنیم، در پنجره‌ای که مطابق شکل زیر باز می‌شود می‌توانیم این قید را تعیین کنیم:

مراحل تعیین قیدهای زمانی در نرم‌افزار ویوادو

مراحل تعیین قیدهای زمانی در نرم‌افزار ویوادو

ابتدا باید نامی برای این قید create_clock تعیین کنیم؛ من نام Clock را تایپ می‌کنم.

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

به این ترتیب، پنجره‌ای مطابق شکل زیر ظاهر می‌شود:

مراحل تعیین قیدهای زمانی در نرم‌افزار ویوادو

مراحل تعیین قیدهای زمانی در نرم‌افزار ویوادو

در این پنجره، ابتدا روی گزینه Find کلیک می‌کنیم تا نرم‌افزار پورت‌های ورودی را نمایش دهد.

سپس، روی پورت Clock دبل‌کلیک می‌کنیم تا این پورت از ستون Found به ستون Selected منتقل شود.

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

مراحل تعیین قیدهای زمانی در نرم‌افزار ویوادو

مراحل تعیین قیدهای زمانی در نرم‌افزار ویوادو

پس از آن، در پنجره create_clock می‌توانیم بخش waveform را تنظیم کنیم:

مراحل تعیین قیدهای زمانی در نرم‌افزار ویوادو

مراحل تعیین قیدهای زمانی در نرم‌افزار ویوادو

در مثالی که بررسی کردیم، پریود سیگنال کلاک را ۲۰ نانو‌ثانیه در نظر گرفتیم؛ چون می‌خواستیم با آنچه که برای نرم‌افزار ISE تنظیم کرده بودیم معادل باشد.

اما من قصد دارم سیگنال کلاک مدار را به اسیلاتور 100MHz روی بُرد متصل کنم؛ پریود معادل فرکانس 100 MHz برابر با ۱۰ نانو‌ثانیه است.

بنابراین، مقدار ۱۰ را مقابل گزینه Period می‌نویسم.

همچنین گزینه‌های Rise at و Fall at را به ترتیب برابر با ۰ و ۵ قرار می‌دهم تا در بازه زمانی صفر تا ۵ نانو‌ثانیه، سطح سیگنال کلاک، یک باشد. در این حالت، سیگنال از زمان ۵ نانو‌ثانیه تا ۱۰ نانو‌ثانیه برابر با صفر خواهد بود.

به این ترتیب، طبیعتاً duty cycle سیگنال نیز مقدار ۵۰ درصد تعیین شده است.

همان‌طور که در شکل زیر مشاهده می‌کنید، در پایین پنجره create_clock، معادل تنظیماتی که انجام دادیم، به‌صورت command‌ای که قرار است در فایل XDC نوشته شود نشان داده شده است:

تولید قید زمانی موردنظرمان در نرم‌افزار ویوادو

تولید قید زمانی موردنظرمان در نرم‌افزار ویوادو

سپس، روی گزینه OK، کلیک می‌کنیم.

اکنون دکمه‌های ctrl+s از صفحه کلید کامپیوتر را فشار می‌دهیم یا از منوی File، به قسمت Constrains می‌رویم و از آنجا گزینه Save را انتخاب می‌کنیم تا این قید به مدار ما اعمال شود:

ذخیره قیدهای تنظیم شده در نرم‌افزار ویوادو

ذخیره قیدهای تنظیم شده در نرم‌افزار ویوادو

حال اگر وارد فایل XDC شویم و روی گزینه Reload در بالای پنجره LED.xdc کلیک کنیم، قید زمانی به فایل XDC افزوده می‌شود:

اعمال قیدهای زمانی تنظیم شده به پروژه در نرم‌افزار ویوادو

اعمال قیدهای زمانی تنظیم شده به پروژه در نرم‌افزار ویوادو

 دقت داشته باشید که تقدم و تاخر پارامترهای name ،period و waveform اهمیتی ندارد.

همان‌طور که مشاهده می‌کنید در شکل بالا ابتدا پارامتر period و سپس پارامتر name آمده است.

این مقاله نیز به پایان رسید؛ امیدوارم از خواندن آن لذت برده باشید و بتوانید از نکات یاد گرفته شده، در انجام پروژه‌‌هایتان استفاده کنید.

آیا برنامه ویدئویی فایل قیود کاربر در نرم‌افزار ویوادو برای شما مفید بود؟

لطفا نظرتان را در مورد این برنامه در پایین همین پست با دیگران به اشتراک بگذارید. همچنین با کلیک روی هر کدام از دکمه‌های اشتراک گذاری ابتدای این مطلب و به اشتراک‌گذاری آن در شبکه‌های اجتماعی می‌توانید افراد بیشتری را در یادگیری این مطالب سهیم کنید.

کانال تلگرام آموزش FPGA از صفر

برای عضویت در کانال تلگرام و دسترسی به آموزش‌های بیشتر و اطلاع سریع از زمان انتشار آموزش‌ها و تخفیف‌های ویژه، روی دکمه زیر کلیک کنید:

درباره نویسنده:

احمد ثقفی

شاید به این موضوعات نیز علاقه داشته باشید:

  • {"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

    ۷ تکنیک پیشرفته کدنویسی برای FPGA

    >