آموزش VHDL

خب در ادامه‌ی آموزش‌های FPGA به آموزش VHDL می‌پردازیم. در این جلسه موضوع مورد بحث ما مفاهیم ساده و پیشرفته‌ی VHDL است. بنابراین هم افراد مبتدی می‌توانند از آن استفاده کنند و قدم به قدم با آن پیش بروند و هم افرادی که خود پیشینه‌ای قبلی درباره‌ی این مفاهیم دارند اما علاقه‌مند هستند که اطلاعاتشان را تکمیل کننند. عناوینی که به ترتیب بررسی می‌کنیم از این قرار هستند.

  • HDL چیست؟
  • VHDL چیست؟
  • Verilog چیست؟
  • تفاوت‌های VHDL و Verilog چیست؟
  • تاریخچه‌ی VHDL
  • چرا باید از VHDL استفاده کنیم؟
  • مزایای VHDL
  • معایب VHDL
  • المان‌های پایه‌ای زبان VHDL
  • انواع روش‌های مدل‌سازی در VHDL
  • VHDL آبجکت‌ها (Objects)
  • انواع داده‌ها در VHDL
  • انواع عملگرها در VHDL
  • آموزش نصب Xilinx IDE
  • ایجاد یک پروژه‌ی VHDL با استفاده از Xilinx IDE
  • مقایسه‌ی VHDL با زبان C

پیش‌نیاز‌های مفید آموزش VHDL

قبل از یادگیری VHDL اگر علاقمند بودید مطالب زیر می‌تونن براتون مفید واقع بشن.

HDL چیست؟

HDL خلاصه‌شده‌ی عبارت Hardware Description Language به معنای زبان توصیف سخت‌افزار است. به طور دقیق‌تر؛ HDL زبانی است که از آن برای توصیف، سیمولیشن و ساخت ورژن سخت‌افزاری از مدارهای دیجیتال (ICS) استفاده می‌شود.

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

امروزه، HDLهای مختلفی در بازار عرضه می‌شوند اما محبوب‌ترین زبان‌های توصیف سخت‌افزار VHDL و Verilog هستند.

VHDL چیست؟

VHDL برگرفته از عبارت Very High-Speed Integration Circuit HDL؛ به معنای زبان توصیف سخت‌افزاری برای ICهای سرعت بالا است. این زبان توسط IEEE (موسسه بین‌المللی مهندسی برق و الکترونیک) استاندارد شده است و از آن برای شبیه‌سازی رفتار مدارهای دیجیتالی پیچیده استفاده می‌شود.

اگر بخواهیم به چند نمونه از مشهورترین کدهای پرکاربرد که با کمک زبان VHDL نوشته شده‌اند اشاره کنیم، می‌توانیم مواردی چون Odd Parity Generator ،Pulse Generator ،Priority Encoder ،Behavioral Model for 16 words ،8bit RAM را نام ببریم.

زبان VHDL از ویژگی‌های زیر برخوردار است.

  • انواع متدهای طراحی و ویژگی‌های آن
  • طراحی رخداد وقایع به صورت ترتیبی و یا همزمان
  • امکان تبادل طراحی با نرم‌افزارهای مختلف
  • استانداردسازی
  • مستندسازی
  • خوانایی زبان طراحی
  • طراحی در مقیاس گسترده (Large scale)
  • قابلیت‌های وسیع در توصیف مدارها

Verilog چیست؟

وریلاگ هم یک زبان توصیف سخت‌افزاری (HDL) دیگر است که از آن در توصیف مدارها و سیستم‌های الکترونیکی استفاده می‌شود. این زبان هم در سیمولیشن و هم در سنتز کاربرد دارد. از مثال‌های پرکاربرد آن می‌توان سوییچ‌های شبکه، میکروپروسسورها، حافظه‌ها، فلیپ‌ فلاپ‌ها و … را نام برد.

تفاوت‌های VHDL و Verilog

آموزش VHDL

تاریخچه‌ی VHDL

VHDL نخستین بار در سال 1980 و توسط وزارت دفاع آمریکا معرفی شد و توسعه پیدا کرد.

  • سال 1980: وزارت دفاع تصمیم گرفت برای طراحی مدارها یک روش خود-استناد (self-documentig) ایجاد کند.
  • سال 1983: زبانVHDL با همکاری مشترک سه شرکت IBM ،Texas Instruments و Intermetrics توسعه پیدا کرد.
  • سال 1985 (VHDL v 7.2): در قراردادی با دولت، نسخه‌ی نهایی چیزی که توسعه یافته بود عرضه شد.
  • سال 1987: وزارت دفاع اجازه داد که از VHDL در مقاصد تجاری نیز استفاده شود و به این ترتیب این زبان برای نخستین بار استاندارد IEEE دریافت کرد. (1076-1987)
  • سال 1993: پس از بازنگری‌ها به منظور رفع اشکالات و بهبود، نسخه‌ی به روزتری از VHDL استاندارد سازی شد.
  • سال 1996: پکیجی از ابزارهای سنتز مدار با زبان VHDL استاندارد 1076 IEEE مطرح شد.
  • سال 1999: اضافه شدن افزونه‌ی VHDL-AMS به آن.
  • سال 2008: استاندارد IEEE 1076-2008 با به روزترین تغییرات و اضافه شدن ویژگی‌هایی جدید، به زبان VHDL اختصاص یافت.

چرا باید از VHDL استفاده کنیم؟

از VHDL برای موارد زیر استفاده می‌کنیم.

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

مزایای VHDL

لیستی از مزیت‌های این زبان را در اینجا با هم مرور می‌کنیم.

  • این زبان از متدهای مختلف طراحی مثلا روش Top-down یا Bottom-up یا … پشتیبانی می‌کند.
  • در توصیف سخت‌افزارها زبانی بسیار منعطف است.
  • موجب می‌شود مدیریت یک طراحی بهتر انجام شود.
  • امکان پیاده‌سازی دقیق‌تر و جزئی‌تر را فراهم می‌کند.
  • باعث می‌شود درکی چند لایه از مدار داشته باشیم.
  • موجب می‌شود میان سطوح پایین طراحی با سطوح بالاتر همبستگی معناداری ایجاد شود.
  • با تمام ابزارهای CAD سازگار است.
  • می‌توان کدهای آن را در ابزارهای دیگر به اشتراک گذاشت و از کدهای دیگر در آن استفاده کرد.

معایب VHDL

برخی از معایب زبان VHDL از این قرار هستند.

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

المان‌های پایه‌ای زبان VHDL

زبان VHDL دارای سه جزء تشکیل دهنده‌ی اساسی است.

1. Entity

منظور از entity در این زبان، پورت‌های ورودی و خروجی یک مدار است. هر entity معمولا دارای یک یا تعداد بیشتری پورت است که می‌توانند ورودی (in)، خروجی (out)، ورودی-خروجی (inout) و یا بافر باشند.

البته در مواردی نیز منظور از entity می‌تواند مجموعه‌ای از مقادیر و پارامترهای عمومی باشد که برای تعیین مشخصات مدار به کار می‌روند.

چگونگی تعریف Entity

برای مشخص کردن اینکه یک entity چیست، می‌توان از سینتکس زیر استفاده نمود.

  • روش سینتکس ساده شده
     entity entity_name is  

ort (  

port_1_name : mode data_type;  

ort_2_name : mode data_type;  

                 .......  

                 Port_n_name : mode data_type  

                 );  

    end entity_name;

مثال:

entiy orgate is  

   port (  

                a : in   std_logic;  

                b : in   std_logic;  

                c : out  std_logic  

             );  

end orgate;
  • روش تعریف پارامترهای عمومی (generics)

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

مطلب پیشنهادی:  دانلود فایل های آموزش FPGA

سینتکس:

entity entity_name is  

    generic (  

                  generic_1_name : data_type;  

                  generic_2_name : data_type;  

                   ........  

                  generic_n_name : data_type  

                   );  

 port (  

             port_1_name : mode data_type;  

              port_2_name : mode data_type;  

              ........  

              Port_n_name : mode data_type  

               );  

     end entity_name;

مثال:

  entity Logic_Gates is  

generic (Delay : Time := 10ns);  

port (  

       Input1 : in std_logic;  

       Input2 : in std_logic;  

       Output : out std_logic  

       );  

end Logic_Gates;

قوانینی برای نام‌گذاری پورت‌ها:

  • نام پورت‌ها می‌تواند شامل حروف الفبا، اعداد و آندرلاین ( _ ) باشد.
  • همیشه باید با یک حرف الفبا شروع بشود.
  • بزرگ یا کوچک بودن حروف استفاده شده، نام‌ها را از هم متمایز نمی‌کند.

مودهای مختلفی که پورت‌ها می‌توانند داشته باشند:

  • In: پورت ورودی
  • Out: پورت خروجی
  • Inout: پورت دوطرفه
  • Buffer: پورت خروجی بافر شده

2. معماری

معماری قسمت اصلی توصیف یک طراحی است. یعنی توضیح اینکه یک مدار چگونه قرار است کار کند. این معماری می‌تواند هم شامل توصیف انجام کارها به صورت ترتیبی (sequential) باشد و هم انجام کارها به صورت همزمان (concurrent).

چگونگی تعریف معماری

این کار را می‌توان با استفاده از سینتکسی به صورت زیر انجام داد.

architecture architecture_name of entity_name is  

begin  

   (concurrent statements )  

end architecture_name;

مثال:

architecture synthesis of andgate is  

begin  

          c <= a AND b;  

end synthesis;

3. پیکربندی

در بخش کانفیگوریشن (configuration) مشخص می‌کنیم که قسمت‌های مختلف یک طراحی چگونه با هم ارتباط پیدا می‌کنند. هم‌چنین چگونگی ارتباطات میان بخش معماری و قسمت entityها را نیز در اینجا تعریف می‌کنیم.

چگونگی تعریف کانفیگ‌ها

configuration configuration_name of entity_name is  

--configuration declarations  

for architecture_name  

  for instance_label : component_name  

     use entity library_name.entity_name(architecture_name);  

end for;  

--  

end for;  

end [configuration] [configuration_name];

مثال:

configuration demo_config of even_detector_testbench is  

    for tb_archi  

       for uut : even_detector  

          use entity work.even_detector (sop_archi);  

        end for;  

    end for;  

end demo_config;

انواع روش‌های مدل‌سازی در VHDL

در VHDL برای مدل‌ کردن معماری‌ها چهار روش داریم.

  1. مدل‌سازی با روش جریان داده (طراحی معادلات)

در این روش مدل سازی را براساس عبارت‌های بولین انجام می‌دهند و به کمک این عبارت‌ها نشان می‌دهند روالی که داده‌ها برای رسیدن از ورودی به خروجی طی می‌کنند به چه صورت است. این روش برای معماری‌های اجرا همزمان (Concurrent) قابل استفاده است.

  1. مدل‌سازی به روش رفتاری (behavioral)

در این روش تلاش می‌کنیم سیستم را با توصیف مرحله‌ به مرحله‌ی رفتار آن مدل کنیم. یعنی به صورت ترتیبی و سلسله‌وار (sequential) تعریف می‌کنیم که هر بار چه عبارت‌هایی اجرا می‌شوند. به این ترتیب رفتار کلی سیستم بر اساس این جملات و ترتیب اجرای آنها مشخص می‌شود.

عبارت‌ها و جملاتی که در این روش استفاده می‌شوند، می‌توانند شامل عبارت‌های پردازشی (Process statements)، ترتیب اجرای عملیات (Sequential statements)، تخصیص سیگنال (Signal assignment) و یا کنترلی (wait statements) باشند.

  1. مدل‌سازی به روش ساختاری (استفاده از زیرماژول‌ها (sub-modules)‌ و اتصال دادن آنها به هم)

این روش مدل‌سازی برای توصیف ساختار یک مدار و کاربرد آن استفاده می‌شود. این روش شامل تعریف سیگنال‌ها (signal declarations)، نمونه‌گیری از تمام اجزا مدار (component instances) و تعیین نقشه‌ی پورت‌ها (port map) در هرکدام از این نمونه‌هاست.

VHDL آبجکت‌ها

در زبان VHDL ما سه نوع آبجکت داریم.

  1. ثابت‌ها

آبجکت‌های که تنها می‌توانند یک مقدار را بپذیرند و این مقدار در تمام طول برنامه تغییر نمی‌کند.

مثال:

constant number_of_bytes integer:=8;

  1. متغیرها

این آبجکت‌ها نیز تنها یک مقدار را می‌پذیرند اما تفاوت آنها با آبجکت‌های ثابت، در این است که این مقدار می‌تواند در طول اجرا یا شبیه‌سازی برنامه از طریق اپراتورهای تخصیص مقدار (assignment operator) تغییر داده شود. از متغیرها می‌توانیم در زیربرنامه‌ها و پردازش‌ها استفاده کنیم و برای تخصیص دادن هر مقداری که باید به آنها داده شود؛ از اپراتور «=:» استفاده می‌کنیم.

مثال:

 variable index: integer :=0;

  1. سیگنال‌ها

سیگنال‌ها را می‌توان در بخش معماری تعریف کرد و هرکجا که لازم باشد در آن بخش از آنها استفاده کرد. برای اینکه مقداری را به آنها تخصیص بدهیم از اپراتور«=>» استفاده می‌کنیم.

مثال:

Signal sig1: std_logic;

Sig1 <= ‘1’

انواع داده‌ها در VHDL

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

  1. داده های از نوع اسکالر یا عددی

  • Integer: این نوع داده‌ها متعلق به مجموعه‌ی تمام اعداد مثبت یا منفی هستند.
  • Floating point: داده‌های متعلق به مجموعه‌ی تمام اعداد اعشاری مثبت یا منفی.
  • Enumeration: داده‌های شمارشی داده‌هایی هستند که از آنها استفاده می‌کنیم تا کدهای ما خواناتر شوند.
  • Physical: داده‌هایی که از نوع فیزیکال باشند، معرف آبجکت‌ها براساس واحد پایه‌ی آنها، یا مجموعه‌هایی از واحدهای پایه و یا محدوده‌هایی مشخص هستند.
  1. داده‌های مرکب یا کامپوزیت

  • آرایه‌ها (Arrays): از آرایه‌ها استفاده می‌کنیم تا تعدادی متغیر از یک نوع را در کنار هم و با یک شناسه تعریف و ذخیره کنیم.
  • Record: از نوع داده‌ی رکورد برای مشخص کردن یک یا تعداد بیشتری المان که هرکدام نام و نوع متفاوتی دارد، استفاده می‌کنیم.

انواع عملگرها در VHDL

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

  1. عملگرهای منطقی

عملگرهایی برای کنترل جریان برنامه. اگر این عملگرها را در کنار سیگنال‌ها یا متغیرها استفاده ‌کنیم؛ آنگاه منطق ترکیبی (combinational logic) خواهیم داشت. عملگرهای منطقی زبان VHDL عبارات زیر هستند.

And, or, nand, Nor, xor, xnor, Not

  1. عملگرهای مقایسه‌ای

از عملگرهای مقایسه‌ای برای مقایسه میان دو متغیر که از یک نوع داده هستند استفاده می‌شود. خروجی و نتیجه‌ی این عملگرها همواره از نوع بولین است. عملگرهای مقایسه ای زبان VHDL را در زیر مشاهده می‌کنید.

برابری

= Equal to

نابرابری

/= Not Equal to

کوچک‌تر بودن

< Less than

بزرگ‌تر بودن

> Greater than

کوچک‌تر یا مساوی بودن

<= Less than or equal to

بزرگ‌تر یا مساوی بودن

>= Greater than or equal to

  1. عملگرهای ریاضیاتی

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

جمع

+ Addition

تفریق

– Subtraction

ضرب

* Multiplication

تقسیم

/ Division

الحاق کردن

& Concatenation

محاسبه‌ی باقی‌مانده‌ی تقسیم  (با قاعده‌ی هم‌نهشتی)

mod Modulus

محاسبه‌ی باقی‌مانده‌ی تقسیم (با روش معمولی)

rem Remainder

محاسبه‌ی قدر مطلق اعداد

abs Absolute Value

توان رسانی

** Exponentiation

  1. عملگرهای جابه‌جایی یا انتقال

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

مطلب پیشنهادی:  آموزش FPGA: بورد Mojo و مقدمات FPGA‌ها – قسمت دوم بخش اول
شیفت منطقی به چپ

Sll: shift logical left

شیفت منطقی به راست

Srl: shift logical right

شیفت ریاضیاتی به چپ

Sla: shift arithmetic left

شیفت ریاضیاتی به راست

Sra :shift arithmetic right

چرخاندن بیت‌ها یک واحد به سمت چپ

Rol: rotate left

چرخاندن بیت‌ها یک واحد به سمت راست

Ror: rotate right

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

آموزش VHDL

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

آموزش نصب Xilinx IDE

برای نصب Xilinx ISE باید مراحل زیر را قدم به قدم طی کنیم.

مرحله اول

بر روی لینک زیر کلیک کنید تا Xilinx ISE tool دانلود شود.

نکه مهم: شما میتوانید به جای Xilinx ISE از Xilinx Vivado هم برای نوشتن کد‌های VHDL استفاده کنید. مقاله آموزش نرم افزار Vivado را در این راستا مطالعه کنید.

مرحله دوم

پس از دانلود به ISE Design suite – 14.7 Full Product Installation بروید و از آنجا مانند تصویر زیر سومین گزینه یعنی Full Installer for Windows 7/XP server (TAR/GRIP – 6.18 GB) را بزنید.

آموزش VHDL

مرحله سوم

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

آموزش VHDL

مرحله چهارم

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

آموزش VHDL

مرحله پنجم

پس از آنکه Create Account را زدید، پنجره‌ای مانند تصویر زیر باز خواهد شد.

آموزش VHDL

مرحله ششم

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

مرحله هفتم

با کلیک بر روی لینک، پنجره‌ای برای فعال‌سازی حساب باز خواهد شد. در آنجا باید username و password را بزنید و وارد شوید.

آموزش VHDL

مرحله هشتم

حالا برای تایید نام و آدرس، بر روی لینک زیر کلیک کنید.

https://www.xilinx.com/member/forms/download/xef.html?filename=Xilinx_ISE_DS_Win_14.7_1015_1.tar

مرحله نهم

پس از تایید فرم verification، با زدن next به مرحله بعدی بروید.

آموزش VHDL

مرحله دهم

در این مرحله می‌بینید که فایل Xilinx_ISE tar شروع به دانلود شدن می‌کند.

آموزش VHDL

مرحله یازدهم

هنگامی که دانلود شد آن را از حالت فشرده خارج کنید.

مرحله دوازدهم

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

آموزش VHDL

مرحله سیزدهم

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

آموزش VHDL

آموزش VHDL

مرحله چهاردهم

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

آموزش VHDL

مرحله پانزدهم

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

آموزش VHDL

مرحله شانزدهم

دایرکتوری مقصد برای نصب برنامه را انتخاب کنید و به مرحله بعدی بروید.

آموزش VHDL

مرحله هفدهم

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

آموزش VHDL

مرحله هجدهم

می‌بینید که فرآیند نصب در جریان است.

آموزش VHDL

مرحله نوزدهم

زمانی که فرآیند به پایان رسید و گزینه finish ظاهر شد، آن را بزنید.

آموزش VHDL

مرحله بیستم

در این مرحله باید Project Navigator ،iMPACT و License Manager را تنظیم کنیم.

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

  1. به مسیر C:\Xilinx\14.7\ISE_DS\ISE\lib\nt64 بروید و در آنجا فایل dll را پیدا کنید و نام آن را به lib.Portability.dll.orig تغییر دهید.
  2. فایل dll را هم در همان آدرس کپی کنید و نام آن را به libPortability.dll تغییر دهید.
  3. dll را در مسیر C:\Xilinx\14.7\ISE_DS\common\lib\nt64 کپی کنید.
  4. به مسیر C:\Xilinx\14.7\ISE_DS\common\lib\nt64 بروید و در آنجا فایل dll را به libPortability.dll.orig تغییر نام دهید.
  5. به مسیر C:\Xilinx\14.7\ISE_DS\common\lib\nt64 بروید و در آنجا فایل dll را به libPortability.dll تغییر نام دهید.

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

مرحله بیست‌و‌یکم

حالا می‌توانید ببینید که آیکون IDE Design Suite روی صفحه ظاهر می‌شود. اگر بر روی آن دبل کلیک کنید، پنجره‌ی زیر باز خواهد شد.

آموزش VHDL

مرحله بیست‌و‌دوم

پس از آن پنجره‌های زیر در مقابل شما خواهند بود. در پنجره‌ی pop-up، اکی را بزنید تا بسته شود.

آموزش VHDL

مرحله بیست‌و‌سوم

زمانی که بر روی Licence کلیک می‌کنید، پنجره‌ای مانند تصویر زیر باز خواهد شد که در آن باید گزینه‌ی Get My Purchased Licence (s) را انتخاب کنید و به مرحله‌ی بعد بروید.

آموزش VHDL

مرحله بیست‌و‌چهارم

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

آموزش VHDL

مرحله بیست‌و‌پنجم

یک صفحه‌ی XILINX جدید باز می‌شود که در آن باید نام کاربری و پسورد را وارد کنید و sign in را بزنید.

آموزش VHDL

مرحله بیست‌و‌ششم

پس از وارد شدن، صفحه‌ای مانند تصویر زیر باز خواهد شد.

آموزش VHDL

مرحله بیست‌و‌هفتم

پس از اینکه فایل مد نظر را انتخاب کنید، به همان ایمیلی که در ابتدای ایجاد حساب وارد کرده بودید، یک ایمیل ارسال می‌شود که محتوی یک فایل Xilinx.lic است. آن را دانلود کنید.

بر روی load Licence کلیک کنید و این فایل لایسنسی که همین حالا دانلود کردید را در اینجا آپلود کنید.

مطلب پیشنهادی:  آموزش FPGA و Verilog - سیمولیشن یا شبیه‌سازی

آموزش VHDL

مرحله بیست‌و‌هشتم

زمانی که آپلود شدن تکمیل شد، یک پنجره‌ی pop-up با پیغام موفقیت‌آمیز بودن نصب لایسنس باز می‌شود. در آن پنجره بر روی Ok و سپس بر روی close بزنید.

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

آموزش VHDL

مرحله بیست‌و‌نهم

حالا همه چیز آماده است که بتوانید در Xilinx tool پروژه بسازید.

آموزش VHDL

ایجاد یک پروژه‌ی VHDL با استفاده از Xilinx IDE

برای ایجاد یک پروزه در Xilinx IDE، مراحل زیر را به ترتیب انجام می‌دهیم.

قدم اول: ساخت یک پروژه جدید

برای این کار به مسیر Select File -> New Project بروید. پس از آن پنجره‌ی مربوط به یک پروژه‌ی جدید بر روی دسکتاپ باز خواهد شد.

آموزش VHDL

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

آموزش VHDL

نکته: حتما دقت کنید که Top-level source type را HDL انتخاب کنید و نه شماتیک یا EDIF و یا stuff.

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

آموزش VHDL

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

آموزش VHDL

قدم دوم: ساخت یک VHDL source

برای این کار، در project Wizard به قسمت New Source بروید. و یا از این مسیر، Project -> New Source

آموزش VHDL

نام فایل را بنویسید و محل آن را مشخص کنید. در قسمت source type هم VHDL Module را بزنید. مطمئن شوید که تیک گزینه‌ی Add to Project را هم زده باشید. سپس به مرحله بعد بروید.

آموزش VHDL

قدم سوم: تعیین پورت‌های VHDL source ساخته شده

خب، فرض کنید می‌خواهیم یک Half Adder بسازیم. پورت‌هایی که لازم داریم را می‌توانیم مانند زیر نام‌گذاری کنیم.

A, b, sum, cout

که a و b را به عنوان پورت‌های ورودی می‌گیریم. پس از منویی که در روبه‌روی آنها قرار دارد (مانند تصویر زیر)، گزینه‌ی in به معنای ورودی را انتخاب می‌کنیم. دو پورت دیگر را هم به عنوان خروجی گرفته‌ایم پس از منوی مقابلشان گزینه out را می‌زنیم.

آموزش VHDL

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

آموزش VHDL

قدم چهارم: وارد کردن یا ویرایش کردن کد VHDL

در تصویر بعدی می‌بینیم که کد Half Adder به صورت اتوماتیک تولید شده است.

آموزش VHDL

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

آموزش VHDL

قدم پنجم: سنتز کردن کد

زمانی که فایل سورس شما تکمیل شد، باید سینتکس‌های مدار طراحی شده را بررسی کنید. برای این کار باید از فرآیند Synthesize-XST استفاده کنیم. پس بر روی Check syntax دبل کلیک کنید.

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

آموزش VHDL

برای دیدن طراحی اولیه‌ای که پس از کامپایل شدن کد، برای مدار Half adder در نظر گرفته شده است، کافی است بر روی RTL Schematic دبل کلیک کنید.

آموزش VHDL

پس از آن پنجره‌ی زیر باز خواهد شد که باید Ok را بزنید.

آموزش VHDL

 در قسمت create RTL Schematic، پروژه‌ای که می‌خواهید را از لیست موجود انتخاب کنید. سپس دکمه‌ی Add را بزنید تا از لیست سمت چپ به لیست سمت راست اضافه شود. سپس Create Schematic را بزنید.

آموزش VHDL

حالا می‌توانید طراحی  خارجی (بلک باکس) مدار در نظر گرفته شده برای Half adder را ببینید.

آموزش VHDL

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

آموزش VHDL

قدم ششم: شبیه‌سازی یا سیمولیشن مدل رفتاری (ISE Simulator)

برای چک کردن مدل رفتاری مدار نیم-جمع‌کننده‌ای که ساخته‌ایم، به مسیر Implementation-> Half_Adder- Behavioral (Half_Adder.vhd) بروید و از آنجا بر روی Simulate Behavioral Model کلیک کنید.

آموزش VHDL

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

آموزش VHDL

برای مقداردهی به متغیرها، بر روی مقدار فعلی آنها (U) راست کلیک کنید و Force Constant را انتخاب کنید. دقیقا مانند تصویر زیر.

آموزش VHDL

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

آموزش VHDL

در چند حالت رفتار مدار را بررسی می‌کنیم.

حالت اول: اگر ورودی‌ها را a=0 و b=0 بدهیم، می‌بینیم که خروجی sum=0 و cout=0 می‌شود.

آموزش VHDL

حالت دوم: اگر ورودی‌ها را a=0 و b=1 بدهیم؛ می‌بینیم که خروجی sum=1 و cout=0 می‌شود.

آموزش VHDL

حالت سوم: اگر ورودی‌ها را a=1 و b=0 بدهیم؛ می‌بینیم که خروجی sum=1 و cout=0 می‌شود.

آموزش VHDL

حالت چهارم: اگر ورودی‌ها را a=1 و b=1 بدهیم؛ می‌بینیم که خروجی sum=0 و cout=1 می‌شود.

آموزش VHDL

مقایسه‌ی VHDL با زبان C

آموزش VHDL

  • منبع: ترجمه از سایت javatpoint.com
  • منبع: عکس شاخص از سایت udemy.com

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

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

2 دیدگاه

  1. ممنونم شما رو دعا کردم

  2. بهنام عباسلو

    با سلام و عرض ادب خیلی لطف فرمودین شکر میکنم که انسان‌هایی مثل جنابعالی وجود دارید