در این برنامه ویدئویی، با موضوع بسیار مهم استفاده از 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 را انتخاب میکنم. (شکل زیر)
پس از کلیک روی دکمهی Next، با پنجره زیر روبهرو میشوید. در این پنجره شما میتوانید تمام IPهایی را که نرمافزار ISE به شما ارائه میکند، ببینید.
در این پنجره، IPهای مختلفی وجود دارد که بر مبنای عملکردشان، طبقهبندی شدهاند.
مثلاً اگر شما بخواهید الگوریتمهای پردازش سیگنال را پیادهسازی کنید، IPهای بسیار زیادی در این قسمت از قبل برای شما آماده و تست شدهاند. از جمله این IPها میتوان به فیلترها، توابع مثلثاتی، توابع تبدیل FFT و DFT و بعضی از مدولاسیونهای مخابراتی اشاره کرد.
حال ما برای مثال خودمان میخواهیم square root یا جذر را استفاده کنیم. این IP را میتوانید در فولدر Math Function در زیربخش Square Root پیدا کنید.
برای پیادهسازی square root در IPای که زایلینکس به ما ارائه میدهد، از یک الگوریتم معروف به نام CORDIC استفاده شده است که ممکن است به دلیل کاربردهای فراوان این الگوریتم در پیادهسازی عملگرها و توابع ریاضی، شما نیز اسم آن را شنیده باشید.
تابع square root یا جذر، فقط یکی از انواع عملگرهایی است که میتوانید به کمک الگوریتم CORDIC پیادهسازی کنید. انواع توابع مثلثاتی مثلسینوس، کسینوس و بسیاری از عملگرهای دیگر نیز به کمک این IP قابل پیادهسازی هستند.
اجازه دهید برگردیم به موضوع اصلی و ادامه پیادهسازی را انجام دهیم.
این پنجره، پنجرهی ویزارد (Wizard) نام دارد. به ازای هر کدام از IPهای موجود در نرمافزار ISE، یک پنجرهی ویزارد مخصوص وجود دارد که به کمک آن میتوانیم پارامترهای مختلف مربوط به هر IP را تنظیم کنیم و IP را برای کاربرد مورد نظرمان اختصاصی یا اصطلاحا customized کنیم.
هر پنجره ویزارد، بسته به نوع IP میتواند از یک یا چند صفحه تشکیل شده باشد؛ مثلا برای IP جذر، سه صفحه ویزارد وجود دارد.
در این پنجره، همانطور که در شکل بالا میبینید ، بخشی به نام IP Symbol وجود دارد. در این بخش، سمبل یا نماد گرافیکی از ماجول IPی در حال تنظیم نمایش داده میشود. زمانی که شما تنظیمات مربوط به IP را اختصاصی میکنید، این نماد ، متناسب با تنظیماتی که انجام میدهید، به صورت گرافیکی تغییر میکند.
در این پنجره، یک تب دیگر به نام Implementation Details نیز وجود دارد که در آن، تخمینی از منابعی سختافزاری که برای پیادهسازی این IP در FPGA استفاده خواهد شد، نشان داده میشود.
با توجه به تصویر بالا، در این صفحه نیز تعدادی ورودی کنترلی وجود دارد که میتوانیم با توجه به نیاز، هر کدام از آنها را متناسب با عملکرد مورد نظرمان تنظیم کنیم.
مثلاً، میتوانید Clock Enable را انتخاب کنید. در این صورت میبینید که در قسمت IP Symbol، ورودی Clock Enable پررنگتر میشود. این پررنگ شدن، به معنای فعال شدن این پایه ورودی است. اما چون من این گزینه را لازم ندارم، بنابراین آن را انتخاب نمیکنم.
به این نکته توجه داشته باشید که هر چه امکانات و قابلیتهای بیشتری را به کمک تنظیمات IP به آن اضافه کنید، منابع سختافزاری بیشتری هم برای پیادهسازی آن در FPGA مورد نیاز خواهد بود.
حال اگر قسمت IP Symbol را نگاه کنید، میبینید که ورودیهای ماجول، شامل کلاک و یک ورودی هشت بیتی است که قرار است جذر آن محاسبه شود. یک خروجی پنج بیتی نیز وجود دارد که در آن، حاصل جذر ورودی هشت بیتی قرار میگیرد.
پس از انجام تنظیمات مختلف IP، کافی است روی دکمه Generate کلیک کنید تا ماجول جذر ساخته و به طور خودکار به پروژه اضافه شود.
اگر بخواهید اطلاعات بیشتری راجع به عملکرد الگوریتم CORDIC و نحوهی پیادهسازی توابعی که این الگوریتم میتواند پیادهسازی کند بدست بیاورید و همچنین در مورد این که چطور پارامترهای مختلف این ویزارد را تنظیم کنید اطلاعات دقیقتر و بیشتری بدست بیاورید، میتوانید روی دکمهی Datasheet که پایین پنجره ویزارد IP وجود دارد ، کلیک کنید تا به صورت خودکار، فایل PDF مربوط به دیتاشیت این IP باز شود.
پس از فشردن دکمهی Datasheet، با یک فایل PDF روبهرو خواهید شد که اطلاعات کامل و جامعی در رابطه با این IP در آن وجود دارد و شما با خواندن آن میتوانید از تمام قابلیتهای این IP به نحو مناسب استفاده کنید.
اکنون من دکمهی Generate را کلیک میکنم تا این 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 را انتخاب میکنم.
همانند تصویر بالا، گزینهی VHDL 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 را انتخاب میکنم و روی تستبنچ کلیک میکنم.
سپس، همانند تصویر بالا، گزینهی Simulation در بخش View را انتخاب میکنم و سپس روی تستبنچی که ساختهام کلیک میکنم.
سپس در بخش Process، از کنار عبارت ISim Simulator، علامت مثبت را انتخاب و روی گزینهی Simulate Behavioral Model دبلکلیک میکنم.
در این لحظه، نرمافزار ISim از دل نرمافزار ISE اجرا میشود و شما میتوانید حاصل این شبیهسازی را در شکل زیر ببینید.
در مقابل input، عدد ۱۶ را میتوانید مشاهده کنید. جذر ورودی، در مقابل خروجی square root نوشته شده است که همان عدد ۴ است.
برای این که این عددهای باینری را راحتتر بخوانید، میتوانید روی نام پورتها راستکلیک کنید و از منویی که باز میشود گزینه radix و سپس گزینهی Unsigned Decimal را انتخاب کنید تا این اعداد را همانند تصویر زیر، به صورت دسیمال ببینید.
جمعبندی
به عنوان جمعبندی این مقاله به نکات زیر نیز توجه کنید:
اولین نکته این است که اگر در هر بخشی در سیستم شما این قابلیت وجود داشت که آن را به کمک IP پیادهسازی کنید، حتما این کار را انجام دهید؛ چون استفاده از IP، هم در زمان و هم در هزینه برای شما باعث صرفهجویی میشود.
نکته دوم این است که شما نمیتوانید یک پروژه را کاملا به کمک IPها پیادهسازی کنید، بلکه بخشهای زیادی از پروژه وجود دارند که شما مجبورید برای آنها به طور اختصاصی کدنویسی کنید. بنابراین وجود IPها شما را از کدنویسی HDL بینیاز نمیکند.
و نکتهی آخر اینکه حتی اگر مجبور بودید گاهی برای IP پول پرداخت کنید، در بسیاری از موارد باز هم استفاده از IP برای شما به صرفه خواهد بود؛ زیرا معمولا پولی را که برای یک ماجول میپردازید، اقتصادیتر از زمان صرف شده برای توسعه و پیادهسازی کد است.
امیدوارم که این مقاله نیز برای شما مفید واقع شده باشد و بتوانید با استفاده از معلوماتی که پس از خواندن آن کسب کردید، بخشهایی از پروژهتان را با استفاده از IPها پیادهسازی کنید تا حداقل، در زمانی که برای پروژه صرف میکنید صرفهجویی شود.
آیا برنامه ویدئویی معرفی IPها در نرمافزار ISE برای شما مفید بود؟
لطفا نظرتان را در مورد این برنامه در پایین همین پست با دیگران به اشتراک بگذارید. همچنین با کلیک روی هر کدام از دکمههای اشتراک گذاری ابتدای این مطلب و به اشتراکگذاری آن در شبکههای اجتماعی میتوانید افراد بیشتری را در یادگیری این مطالب سهیم کنید.
مرسی استاد بسیار بسیار عالی بود و با این روش مطمئنا خیلی تو زمانمون صرف جویی میشه …
خواهشی که دارم اینه که لطفا در ویدئو های آینده بطور مثال یک پروژه را پیش بکشید و نحوه سرچ و پیدا کردن سولوشن آی پی مناسب را پیش بکشید . و همچنین مراجعه کنید به دیتاشیتشان و نحوه بررسی دیتا شیت از نظر اینکه آیا مطلوب پروژه ما است یا خیر را هم بیاموزید … چرا که در رابطه با موضوع آی پی بنظر میاد ساختار پیچیده ای دارن و کار کردن با یک آیپی بنظرم شباهت داره به کار با یک آی سی در الکترونیک …
بازهم سپاسگذارم از بیان شیوا و دقت بالایی که در آموزش ها بکار میبرید .
ممنون از توجه شما به این برنامه.
مطالبی که شما به اونها اشاره کردید البته بسیار مهم هستند، اما بیان اونها در ویدئوهای کوتاهی که در حال حاضر در سایت منتشر میشوند به سرعت امکانپذیر نیست. با این حال، سعی میکنم به مرور این موارد را هم در برنامههای بعدی مد نظر قرار بدم.
با سلام وقبولی طاعات و عبادات….
مطالبتون فوق العاده ست ،آیا امکان داره نحوه پیاده سازی ramتوسط ip core،طی یک ویدئو ارائه بدین ….
تشکر
سلام، ممنون از شما.
در برنامه دیگری در این مورد توضیح خواهم داد.
با سلام و عرض خسته نباشید
اول از همه جا داره از وبسایت عالی و بی نقص تون تشکر کنم که خیلی استفاده کردم
میخواستم در خواست کنم در صورت امکان در مورد Fir IP هم ویدیو یا توضیحاتی رو ارائه بفرمایین.
بنده تا اخرش جلو رفتم ولی در شبیه سازی و دادن ورودی و خروجی موندم
یعنی مشکلم این هست که ورودی فیلتر باید انالوگ باشه(یه به عبارتی انالوگ تبدیل شده به دیجیتال) و خروجی هم به همین صورت
موندم چطوری شبیه سازی رو تکمیل کنم؟
از بلوک های ADC/DAC اماده استفاده کنم یا راه حل دیگری هم وجود داره؟
ممنون میشم راهنماییم کنین
سلام،
بهترین ورودی برای فیلتر دیجیتال، ورودی پله است که اعمال آن هم بسیار ساده است. فقط کافیست ماکزیمم مقدار قابل اعمال به فیلتر را در تستبنچ بنویسید.
برای ورودیهای پیچیدهتر، میتوانید آن را در نرمافزار متلب تولید کنید و در یک فایل متنی ذخیره کنید و سپس از طریق تستبنچ به ماجول اعمال کنید.
برای آشنایی با این روش، میتوانید آموزش زیر را ببینید:
https://faradandish.com/%D8%AF%D8%B1%D8%B3%D8%AA%DB%8C%E2%80%8C%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%DB%8C-%D9%85%D8%AF%D8%A7%D8%B1-%D8%AF%DB%8C%D8%AC%DB%8C%D8%AA%D8%A7%D9%84-%D8%A8%D9%87-%DA%A9%D9%85%DA%A9-%D9%85%D8%AA%D9%84%D8%A8/
موفق باشید
با سلام و احترام
در ابتدا تشکر میکنم از آموزش های عالی و روان که در سایت قرار دادید، واقعا استفاده کردم و برایم مفید بود.
فقط یک سوال اینکه 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 ارور میده!! بازهم تشکر از سایت و مقاله های عالیتون!
4 تا کد تو مقاله هستش اولی رو حواسم نبود!! دو کد آخر عین هم هستن
ممنون از توجه شما. کد اصلی نیز در مقاله قرار داده شد.
موفق باشید.
سلام استاد
ممکنه لطفا کد نویسی الگوریتم ضرب،sin و کسینوس VHDLدرنرم افزار ISE آموزش بدید؟