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

10 خرداد, 1395

معرفی IPها در نرم‌افزار ISE

در این برنامه ویدئویی، با موضوع بسیار مهم استفاده از IPها در نرم‌افزار ISE برای طراحی دیجیتال با FPGA آشنا خواهید شد.

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

More...

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

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

در مجموعه نرم‌افزار ISE تعداد زیادی از این IPهای پرکاربرد وجود دارند که در صورت نیاز می‌توانید از آنها برای پیاده‌سازی سیستم دیجیتالی که پیاده‌سازی می‌کنید استفاده کنید.

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

به این موضوع هم توجه داشته باشید که شما نمی‌توانید یک پروژه را تماما به کمک IPها پیاده‌سازی کنید و بنابراین وجود IPها شما را از کدنویسی HDL بی‌نیاز نمی‌کند.

برنامه ویدئویی آموزش زبان VHDL

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

ویدئو یا متن؟

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

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

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

اجازه دهید با یک مثال این مشکل را شرح دهم.

فرض کنید شما یک الگوریتم دارید که در آن، عملیاتی مانند لگاریتم، جذر، سینوس و ... استفاده شده است. شما به عنوان یک مهندس به خوبی و عمیقا عملکرد هرکدام از این عملگرها را می‌شناسید، اما شاید پیاده‌سازی بعضی از این عملگرها، شما را با چالش‌هایی روبه‌رو کند و مثلا به خاطر پیچیدگی پیاده‌سازی یک عمل لگاریتم، انجام کل پروژه برای شما غیر ممکن شود یا نیاز به زمان زیادی داشته باشید.

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

اما راه‌حل چیست؟

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

اما این ابزارها دقیقا چه هستند و توسط چه کسانی آماده شده‌اند؟

IP یا Intellectual Property چیست؟

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

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

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

  • افزایش سرعت روند پیاده‌سازی سیستم‌ها
  • صرفه‌جویی در هزینه‌ی توسعه‌ی پروژه

حال سوالی که پیش می‌آید این است که چگونه از این IPها در پروژه استفاده کنیم؟

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

Top Module

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

استفاده از زیر ماژول‌ها در ماژول اصلی

نمایی از ماجول اصلی و زیرماجول‌های آن

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

در نظر بگیرید که بعضی از این ماجول­‌ها را به خاطر این که خاص هستند، شما قاعدتا باید با یک زبان توصیف سخت­‌افزار­ی مثل VHDL یا Verilog خودتان بنویسید و بعضی دیگر را اگر معادل IPی­ آن وجود داشته باشد، از یک IP در نرم‌­افزار ISE استفاده کنید و نهایتا این زیرماجول­‌ها را کنار هم قرار دهید تا ماجول کلی یا سیستم کلی­ پروژه درست شود.

اجازه دهید برای این­که بهتر با این موضوع آشنا شوید، یک مثال به صورت عملی از نرم­‌افزار ISE را بررسی کنیم تا ببینیم که این IP­ها در کدام قسمت این نرم­‌افزار قرار دارند، چطور می‌توانیم آنها را در کد استفاده کنیم و چطور می‌توانیم آن‌ها را به همراه بقیه­‌ی کد­ تست کنیم.

من برای این که این موضوع را بیشتر برای شما توضیح دهم، می‌خواهم یک IP ساده را به عنوان نمونه در یک کد استفاده کنم­.

برای این که مثال‌مان کاملا ساده باشد و بتوانیم به موضوع اصلی که مد نظرمان است بپردازیم، کد ساده زیر را برای شما آماده کرد­ه‌ام که دارای یک ورود­ی به نام Input و یک خروجی به نام Square_Root است. خروجی این ماجول، معادل جذر ورود­ی است.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity IP_Test is
    Port ( 
	 
		Clock 			: in  STD_LOGIC;
		Input 			: in  STD_LOGIC_VECTOR (7 downto 0);
		Square_Root	: out	STD_LOGIC_VECTOR (4 downto 0)
  
			  );
end IP_Test;

architecture Behavioral of IP_Test is

begin

end Behavioral;

پیاده‌سازی عملیات جذر

برای این که ماجولی را به منظور محاسبه جذر ورودی طراحی کنید، دو روش وجود دارد.

یک راه این است که بررسی کنید ببینید چه الگوریتم‌­ها­یی برای این کار وجود دارند­؛ بعد برای آن الگوریتم، کد VHDL را بنویسید و آن را تست کنید­. البته این کار ممکن است زمان زیاد­ی را از شما بگیرد.

روش دوم، استفاده از IP است. خوشبختانه­ یکی از IP­ها­یی که در نرم‌­افزار ISE وجود دارد، IPی جذر یا square root است­. بنا­بر­این­، انتخاب منطقی این است که به جا­ی صرف زمان زیاد برای آشنایی با این الگوریتم و نوشتن کد­ مربوط به آن و نهایتا تست آن، از همان ابتدا از IPای که قبلاً نوشته و تست شد­ه است استفاده کنیم­.

اضافه کردن IP در نرم‌افزار ISE

برای این که از این IP استفاده کنید، مطابق شکل زیر در بخش hierarchy راست‌کلیک کنید و گزینه­‌ی New Source را انتخاب کنید­.

سپس گزینه IP را انتخاب کنید.

اکنون باید یک اسم برای IP انتخاب کنید. من در اینجا نام sqrt را که مخفف عبارت square root است، انتخاب می‌کنم و سپس دکمه­‌ی Next را انتخاب می‌کنم. (شکل زیر)

اضافه کردن IP

ایجاد IP در نرم‌افزار ISE

پس از کلیک روی دکمه‌ی Next، با پنجره زیر رو‌به‌رو می‌شوید. در این پنجره شما می‌توانید تمام IP­ها­یی را که نرم‌­افزار ISE به شما ارائه می‌کند، ببینید.

CORDIC IP

در این پنجره، IP­ها­ی مختلفی وجود دارد که بر مبنا­ی عملکردشان، طبقه‌بندی شده‌اند.

مثلاً اگر شما بخواهید الگوریتم‌های پرداز­ش سیگنال را پیاده‌سازی کنید، IPهای بسیار زیادی در این قسمت از قبل برای شما آماده و تست شده‌اند. از جمله این IPها می‌توان به فیلترها، توابع مثلثاتی، توابع تبدیل FFT و DFT و بعضی از مدولاسیون‌های مخابراتی اشاره کرد.

حال ما برای مثال خود­مان می‌خواهیم square root یا جذر را استفاده کنیم. این IP را می‌توانید در فولدر Math Function در زیربخش Square Root پیدا کنید.

برای پیاده‌­ساز­ی square root در IP­ای که زایلینکس به ما ارائه می‌دهد، از یک الگوریتم معروف به نام CORDIC استفاده شد­ه­ است که ممکن است به دلیل کاربردهای فراوان این الگوریتم در پیاده‌سازی عملگرها و توابع ریاضی، شما نیز اسم آن را شنیده باشید.

تابع square root یا جذر، فقط یکی از انواع عملگر­هایی است که می‌توانید به کمک الگوریتم CORDIC پیاده‌سازی کنید. انواع توابع مثلثاتی مثلسینوس، کسینوس و بسیاری از عملگر­ها­ی دیگر نیز به کمک این IP قابل پیاده­‌ساز­ی هستند.

اجازه دهید برگردیم به موضوع اصلی و ادامه پیاده‌سازی را انجام دهیم.

CORDIC IP

صفحه‌ی اول ویزارد CORDIC IP

این پنجره، پنجره‌ی ویزارد (Wizard) نام دارد. به ازای هر کدام از IP­های موجود در نرم‌افزار ISE، یک پنجره­‌ی ویزارد مخصوص وجود دارد که به کمک آن می‌توانیم پارامترهای مختلف مربوط به هر IP را تنظیم کنیم و IP را برای کاربرد مورد نظرمان اختصاصی یا اصطلاحا customized کنیم.

هر پنجره ویزارد، بسته به نوع IP می‌تواند از یک یا چند صفحه تشکیل شده باشد؛ مثلا برای IP جذر، سه صفحه ویزارد وجود دارد.

در این پنجره، همان‌طور که در شکل بالا می‌بینید ، بخشی به نام IP Symbol وجود دارد. در این بخش، سمبل یا نماد گرافیکی از ماجول IPی در حال تنظیم نمایش داده می‌شود. زمانی که شما تنظیمات مربوط به IP را اختصاصی می‌کنید، این نماد ، متناسب با تنظیماتی که انجام می‌دهید، به صورت گرافیکی تغییر می‌کند.

در این پنجره، یک تب دیگر به نام Implementation Details نیز وجود دارد که در آن، تخمینی از منابعی سخت‌افزاری که برای پیاده‌سازی این IP در FPGA استفاده خواهد شد، نشان داده می‌شود.

CORDIC IP

صفحه‌ی دوم ویزارد CORDIC IP

CORDIC IP

صفحه‌ی سوم ویزارد CORDIC IP

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

مثلاً، می‌توانید Clock Enable را انتخاب کنید. در این صورت می­بینید که در قسمت IP Symbol، ورودی Clock Enable پررنگ‌تر می‌شود. این پررنگ شدن، به معنای فعال شدن این پایه ورودی است. اما چون من این گزینه را لازم ندار­م، بنا­بر­این آن را انتخاب نمی­‌کنم­.

به این نکته توجه داشته باشید که هر چه امکانات و قابلیت‌های بیشتری را به کمک تنظیمات IP به آن اضافه کنید، منابع سخت‌افزاری بیشتری هم برای پیاده‌سازی آن در FPGA مورد نیاز خواهد بود.

حال اگر قسمت IP Symbol را نگاه کنید، می‌­بینید که ورود­ی­‌ها­ی ماجول، شامل کلاک و یک ورودی هشت بیتی است که قرار است جذر­ آن محاسبه شود. یک خروجی پنج بیتی­ نیز وجود دارد که در آن، حاصل جذر ورودی هشت بیتی قرار می‎گیرد.

پس از انجام تنظیمات مختلف IP، کافی است روی دکمه Generate کلیک کنید تا ماجول جذر ساخته و به طور خودکار به پروژه اضافه شود.

اگر بخواهید اطلاعات بیشتر­ی راجع به عملکرد الگوریتم CORDIC و نحوه‌­ی پیاده‌سازی توابعی که این الگوریتم می‌تواند پیاده‌­ساز­ی کند بدست بیاورید و همچنین در مورد این که چطور­ پارامترها­ی مختلف این ویزارد را تنظیم کنید اطلاعات دقیق‌تر و بیشتر­ی بدست بیاور­ید، می‌توانید رو­ی دکمه‌­ی Datasheet که پایین پنجره ویزارد IP وجود دارد ، کلیک کنید تا به صورت خودکار، فایل PDF مربوط به دیتاشیت این IP باز شود.

پس از فشردن دکمه‌ی Datasheet، با یک فایل PDF روبه‌رو خواهید شد که اطلاعات کامل و جامعی در رابطه با این IP در آن وجود دارد و شما با خواندن آن می‌توانید از تمام قابلیت‌های این IP به نحو مناسب استفاده کنید.

اکنون من دکمه­‌ی Generate را کلیک می‌کنم تا این IP ساخته شود و به پروژه‌­ام اضافه شود­.

ایجاد IP در نرم‌افزار ISE

اضافه شدن IP به ماژول اصلی

همان‌طور که در تصویر بالا می‌­بینید، IPی مورد نظر به پروژه­‌ی من اضافه شده است و با علامت لامپ روشن در نرم‌افزار نمایش داده شده است.

حال باید این IP را به کد اصلی، که اسم آن IP_Test است اضافه کنم­.

این کار، شامل دو مرحله است. مرحله‌­ی اول این است که IP مورد نظر را به ماجول اصلی معرفی یا اصطلاحا declare کنیم­.

از مقالات قبلی حتما به یاد دارید که محل معرفی سیگنال­‌ها و ماجول‌­ها یا همان declaration سیگنال‌­ها و ماجول­‌ها قبل از کلمه کلیدیbegin  در بخش architecture است.

سپس باید یک نمونه از این IP را در سیستم جاگذاری یا اصطلاحا instant کنیم.

در حین instant کردن، عمل دیگری به نام port map نیز باید­ انجام شود.

port map کرد­ن یعنی این که مشخص کنیم که ورود­ی-خروجی‌­ها­ی IP یا ماجولی که به سیستم اضافه می‌کنیم، باید به کجا وصل شوند.

-- The following code must appear in the VHDL architecture header:

------------- Begin Cut here for COMPONENT Declaration ------ COMP_TAG
COMPONENT SQRT
  PORT (
    x_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
    x_out : OUT STD_LOGIC_VECTOR(4 DOWNTO 0);
    clk : IN STD_LOGIC
  );
END COMPONENT;
-- COMP_TAG_END ------ End COMPONENT Declaration ------------

-- The following code must appear in the VHDL architecture
-- body. Substitute your own instance name and net names.

------------- Begin Cut here for INSTANTIATION Template ----- INST_TAG
your_instance_name : SQRT
  PORT MAP (
    x_in => x_in,
    x_out => x_out,
    clk => clk
  );
-- INST_TAG_END ------ End INSTANTIATION Template ------------

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

کاری که در این مرحله باید انجام دهید این است که ابتدا فقط بخش اول کد را کپی کرده و به قبل از کلمه Begin در بخش Architecture منتقل کنید­.

 برای instant کرد­ن نیز می‌توانید خیلی ساده، بخش دوم کد را کپی کرده و به بعد از کلمه Begin در بخش  Architecture منتقل کنید­.

تنها یک کار کوچک دیگر مانده است تا انجام دهیم و نهایتا پس از انجام این کار، عملکرد IP را تست کنیم.

بخشی که مربوط به Component Declaration می‌شود نیاز به هیچ تغییری ندارد. اما­ بخشی که مربوط به instant و port map کرد­ن است چند تغییر کوچک لازم دارد­.

این بخش با عبارتی به نام label­ شروع می‌شود که قبل از علامت ­“:” قرار دارد. بهتر است نام پیش‌فرض آن را تغییر دهید و یک اسم اختصاصی برای آن انتخاب کنید.

من اسم آن را sqrt0­ انتخاب می‌کنم.

بعد­ از label، اسم IP موردنظر و در ادامه، کلمه کلید­ی port map نوشته می‌شود. در قسمت پایین کلمه کلیدی port map، محلی است که ما باید عمل port map را انجام دهیم.

من می‌خواهم ورودی-خروجی‌­ها­ی این IP را به ورودی-خروجی‌­ها­ی ماجولی که خود­م از قبل نوشته بود­م متصل کنم­. بنا­بر­این، ابتدا clock را به clk بلوک sqrt متصل می‌­کنم. سپس، ورودی­ ماژول اصلی را که با نام Input مشخص کرده بودم و هشت بیتی بود، به ورود­ی هشت بیتی ماجول sqrt وصل می­کنم و در نهایت، خروجی ماجول اصلی را با نام square root که شش بیتی است، به خروجی ماجول sqrt متصل می‌کنم.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity IP_Test is
    Port ( 
				Clock 								: in  	STD_LOGIC;
				Input 								: in  	STD_LOGIC_VECTOR (7 downto 0);
				Square_Root 		: out  	STD_LOGIC_VECTOR (4 downto 0)
				
			);
end IP_Test;

architecture Behavioral of IP_Test is

COMPONENT SQRT
  PORT (
    x_in 		: IN 	STD_LOGIC_VECTOR(7 DOWNTO 0);
    x_out 	: OUT STD_LOGIC_VECTOR(4 DOWNTO 0);
    clk 			: IN 	STD_LOGIC
  );
END COMPONENT;

begin

sqrt0 : SQRT
  PORT MAP (
    x_in 			=> Input,
    x_out 		=> Square_Root,
    clk 				=> Clock
  );

end Behavioral;

ساخت Test Bench برای شبیه‌سازی

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

اولین مرحله در فرآیند شبیه‌سازی، ساخت تست‌بنچ است.

برای این کار، ابتدا در بخش hierarchy راست‌کلیک می‌­کنم و گزینه‌ی New Source را انتخاب می‌­کنم­.

Test Bench

ایجاد فایل تست‌بنچ (Test Bench) در نرم‌افزار ISE

همانند تصویر بالا، گزینه­‌ی VHDL Test Bench را انتخاب می‌­کنم و یک اسم برای تست‌بنچ انتخاب می‌کنم­.

Test Bench

انتخاب فایل تست‌بنچ برای ماجول‌ها

حال باید مشخص کنیم که قرار است تست‌بنچ را برای چه ماجولی ایجاد کنیم. ماجول مورد نظر ما، یعنی ماجولی که قرار است به کمک تست‌بنچ شبیه‌سازی شود، ماجول IP_Test است.روی آن کلیک می‌کنم و سپس گزینه‌­ی Next و بعد از آن گزینه‌­ی Finish را انتخاب می‌کنم.

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

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
 
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--USE ieee.numeric_std.ALL;
 
ENTITY IP_Test_tb IS
END IP_Test_tb;
 
ARCHITECTURE behavior OF IP_Test_tb IS 
 
    -- Component Declaration for the Unit Under Test (UUT)
 
    COMPONENT IP_Test
    PORT(
         Clock : IN  std_logic;
         Input : IN  std_logic_vector(7 downto 0);
         Square_Root : OUT  std_logic_vector(4 downto 0)
        );
    END COMPONENT;
    

   --Inputs
   signal Clock : std_logic := '0';
   signal Input : std_logic_vector(7 downto 0) := (others => '0');

 	--Outputs
   signal Square_Root : std_logic_vector(4 downto 0);

   -- Clock period definitions
   constant Clock_period : time := 10 ns;
 
BEGIN
 
	-- Instantiate the Unit Under Test (UUT)
   uut: IP_Test PORT MAP (
          Clock => Clock,
          Input => Input,
          Square_Root => Square_Root
        );

   -- Clock process definitions
   Clock_process :process
   begin
		Clock <= '0';
		wait for Clock_period/2;
		Clock <= '1';
		wait for Clock_period/2;
   end process;
 

   -- Stimulus process
   stim_proc: process
   begin		
      -- hold reset state for 100 ns.
      wait for 100 ns;	

      wait for Clock_period*10;

      -- insert stimulus here 
		Input		<=	"00010000";

      wait;
   end process;

END;

همانطور که از برنامه‌­ی مربوط به شبیه­‌ساز­ی به یاد دارید، می‌­توانم در قسمت insert stimulus here در کد بالا، به ورود­ی‌­ها (در اینجا تنها ورود­ی­ Input است) مقدار دلخواه را ارجاع بدهم. من مقدار ۱۶ را وارد می‌­کنم و تست‌بنچ را Save می‌­کنم­. سپس گزینه­‌ی Simulation را انتخاب می­‌کنم و رو­ی تست­‌بنچ کلیک می­‌کنم­.

نرم‌افزار Isim

اضافه شدن فایل تست‌بنچ به پروژه

سپس، همانند تصویر بالا، گزینه‌­ی Simulation در بخش View را انتخاب می­‌کنم و سپس رو­ی تست‌بنچی که ساخته‌ام کلیک می‌­کنم.

­سپس در بخش Process، از کنار عبارت ISim Simulator، علامت مثبت را انتخاب و روی گزینه­‌ی Simulate Behavioral Model دبل‌کلیک می‌کنم­.

در این لحظه، نرم‌­افزار ISim از دل نرم­‌افزار ISE اجرا می‌شود و شما می‌توانید حاصل این شبیه­‌ساز­ی را در شکل زیر ببینید­.

نرم‌افزار Isim

شبیه‌سازی در نرم‌افزار ISim 

در مقابل input، عدد ۱۶ را می‌توانید مشاهده کنید. جذر ورودی، در مقابل خروجی square root نوشته شد­ه است که همان عدد ۴ است.

نرم‌افزار Isim

تغییر فرمت نمایش اعداد

برای این که این عدد­ها­ی باینری را راحت‌­تر بخوانید، می‌توانید روی نام پور‌ت‌­ها راست‌کلیک کنید و از منویی که باز می‌شود گزینه radix و سپس گزینه‌­ی Unsigned Decimal را انتخاب کنید تا این اعداد را همانند تصویر زیر، به صورت دسیمال ببینید­.

نرم‌افزار Isim

شبیه‌سازی در نرم‌افزار ISim 

جمع‌بندی

به عنوان جمع‌بندی این مقاله به نکات زیر نیز توجه کنید:

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

نکته دو­م این است که شما نمی‌توانید یک پروژه را کاملا به کمک IP­ها پیاده­‌ساز­ی کنید، بلکه بخش­‌ها­ی زیاد­ی از پروژه وجود دار­ند که شما مجبور­ید برای آن‌ها به طور اختصاصی کدنویسی کنید­. بنا­بر­این وجود IPها شما را از کدنویسی HDL بی­‌نیاز نمی‌کند­.

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

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

آیا برنامه ویدئویی معرفی IPها در نرم‌افزار ISE برای شما مفید بود؟

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

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

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

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

احمد ثقفی

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

  • مرسی استاد بسیار بسیار عالی بود و با این روش مطمئنا خیلی تو زمانمون صرف جویی میشه …
    خواهشی که دارم اینه که لطفا در ویدئو های آینده بطور مثال یک پروژه را پیش بکشید و نحوه سرچ و پیدا کردن سولوشن آی پی مناسب را پیش بکشید . و همچنین مراجعه کنید به دیتاشیتشان و نحوه بررسی دیتا شیت از نظر اینکه آیا مطلوب پروژه ما است یا خیر را هم بیاموزید … چرا که در رابطه با موضوع آی پی بنظر میاد ساختار پیچیده ای دارن و کار کردن با یک آیپی بنظرم شباهت داره به کار با یک آی سی در الکترونیک …
    بازهم سپاسگذارم از بیان شیوا و دقت بالایی که در آموزش ها بکار میبرید .

    • ممنون از توجه شما به این برنامه.

      مطالبی که شما به اونها اشاره کردید البته بسیار مهم هستند، اما بیان اونها در ویدئوهای کوتاهی که در حال حاضر در سایت منتشر می‌شوند به سرعت امکان‌پذیر نیست. با این حال، سعی می‌کنم به مرور این موارد را هم در برنامه‌های بعدی مد نظر قرار بدم.

  • با سلام وقبولی طاعات و عبادات….
    مطالبتون فوق العاده ست ،آیا امکان داره نحوه پیاده سازی ramتوسط ip core،طی یک ویدئو ارائه بدین ….
    تشکر

  • با سلام و عرض خسته نباشید
    اول از همه جا داره از وبسایت عالی و بی نقص تون تشکر کنم که خیلی استفاده کردم
    میخواستم در خواست کنم در صورت امکان در مورد Fir IP هم ویدیو یا توضیحاتی رو ارائه بفرمایین.
    بنده تا اخرش جلو رفتم ولی در شبیه سازی و دادن ورودی و خروجی موندم
    یعنی مشکلم این هست که ورودی فیلتر باید انالوگ باشه(یه به عبارتی انالوگ تبدیل شده به دیجیتال) و خروجی هم به همین صورت
    موندم چطوری شبیه سازی رو تکمیل کنم؟
    از بلوک های ADC/DAC اماده استفاده کنم یا راه حل دیگری هم وجود داره؟
    ممنون میشم راهنماییم کنین

  • با سلام و احترام
    در ابتدا تشکر میکنم از آموزش های عالی و روان که در سایت قرار دادید، واقعا استفاده کردم و برایم مفید بود.
    فقط یک سوال اینکه IP های غیر فعال در برنامه ISE رو باید از کجا تهیه کرد؟ امکان تهیه رایگان وجود داره؟

    • سلام،

      برای استفاده از این IPها باید لایسنس آن را از شرکت Xilinx خریداری کنید. اما بیشتر این IPها در نرم‌افزار VIVADO به صورت رایگان وجود دارند.

      موفق باشید

  • سلام خسته نباشید…
    ببخشید من همین ip شما رو نوشتم ولی وقتی روی viwe HDL instantation template کلیک می کنم صفحه ای که میاد مثل مال شما نیست و اون قسمت هایی که شما از اون پنجره قبل و بعد begin کپی کردید رو نداره.
    میشه بگید مشکل کار من کجاست؟
    خیلی ممنون

    • سلام،

      شما احتمالا در هنگام ساخت پروژه، بخش Preferred Language را Verilog انتخاب کردید. اگر این بخش را روی VHDL تنظیم کنید، همان مواردی که در ویدئو مشاهده کردید ظاهر خواهند شد.

      موفق باشید

  • سلام
    ببخشید من دقیقا مراحل شما رو طی کردک ولی وقتی میخوام simulate رو برای test Bench انجام بدم میگه خروجی ۶ المنت داره که انتظار میره ۵ تا باشه
    عوضش که میکنم میگه ارور مشابه میده…همه جوره خروجی رو تغییر دادم درست نشد
    میشه لطف کنید بگید چکار کنم؟
    خیلی ممنون

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

        Started : “Simulate Behavioral Model”.

        Determining files marked for global include in the design…
        Running fuse…
        Command Line: fuse -intstyle ise -incremental -lib secureip -o E:/Xilinx/IP/IP_Test_tb_isim_beh.exe -prj E:/Xilinx/IP/IP_Test_tb_beh.prj work.IP_Test_tb {}
        Running: E:Xilinx14.7ISE_DSISEbinnt64unwrappedfuse.exe -intstyle ise -incremental -lib secureip -o E:/Xilinx/IP/IP_Test_tb_isim_beh.exe -prj E:/Xilinx/IP/IP_Test_tb_beh.prj work.IP_Test_tb
        ISim P.20131013 (signature 0x7708f090)
        Number of CPUs detected in this system: 4
        Turning on mult-threading, number of parallel sub-compilation jobs: 8
        Determining compilation order of HDL files
        Parsing VHDL file “E:/Xilinx/IP/ipcore_dir/SQRT.vhd” into library work
        Parsing VHDL file “E:/Xilinx/IP/IP_Test.vhd” into library work
        Parsing VHDL file “E:/Xilinx/IP/IP_Test_tb.vhd” into library work
        Starting static elaboration
        ERROR:HDLCompiler:1566 – “E:/Xilinx/IP/IP_Test.vhd” Line 54: Expression has 6 elements ; formal x_out expects 5
        ERROR:Simulator:777 – Static elaboration of top level VHDL design unit ip_test_tb in library work failed

        Process “Simulate Behavioral Model” failed
        چگونه این ارور را برطرف نمایم استاد

        • سلام،

          با تشکر از شما و دوست دیگری که به این موضوع اشاره کرده بودند. در top module این پروژه، پورت Square_Root به اشتباه ۶ بیتی تعریف شده بود که در حال حاضر این خطا برطرف شده است.

          موفق باشید.

  • خیلی عالی بود فقط یه سوال، در این مقاله 3 تا کد قرار دادید که کد دوم و سوم هر دو عین هم و مربوط به tb هستن، بجای کد دوم امکانش هست کد اصلی برنامه رو قرار بدید(ن tb)!! من به مشکل میخورم در simulation، تو قسمت check syntax مشکلی نداره ولی در simulate behavioral model ارور میده!! بازهم تشکر از سایت و مقاله های عالیتون!

  • سلام استاد
    ممکنه لطفا کد نویسی الگوریتم ضرب،sin و کسینوس VHDLدرنرم افزار ISE آموزش بدید؟

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

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

    >