آموزش FPGA قسمت هفتم: ساختار ارجاع انتخابی

0
707
ساختار ارجاع انتخابی
ساختار ارجاع انتخابی

ساختار ارجاع انتخابی

در قسمت ششم از مجموعه آموزشی FPGA با ساختار ارجاع شرطی آشنا شدیم، سپس یک ALU را بااستفاده‌از این ساختار توصیف، و درنهایت برای صحت عملکرد ALU موردنظر، یک فایل Test Bench ساختیم و در نرم‌افزار ALU ،ISIM را شبیه‌سازی کردیم.

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

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

مالتی‌پلکسر چیست؟

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

شماتیک
شماتیک

 

ساختار ارجاع انتخابی

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

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

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

entity MUX is
Port (
I0 : in STD_LOGIC;
I1 : in STD_LOGIC;
I2 : in STD_LOGIC;
I3 : in STD_LOGIC;
S : in unsigned (1 downto 0);
Y : out STD_LOGIC
);
end MUX;

architecture Behavioral of MUX is

begin

with S select
Y <= I0 when "00",
I1 when "01",
I2 when "10",
I3 when others;

end Behavioral;

 

در کد بالا، چهار ورودی تک‌بیتی، از نوع std_logic برای ورودی‌های مالتی‌پلکسر و همچنین یک ورودی ۲بیتی نیز از نوع unsigned برای پوشش‌دادن چهارحالت ورودی مالتی‌پلکسر درنظر گرفتیم. درنهایت یک خروجی تک‌بیتی از نوع std_logic برای اینکه یکی‌از ۴ورودی انتخاب‌شده به خروجی منتقل‌شود نیز درنظرگرفتیم.

پس‌از اینکه پورت‌های ورودی-خروجی را انتخاب‌کردیم، نوبت به توصیف مالتی‌پلکسر بااستفاده‌از همین پورت‌ها می‌رسد. اگر دقت‌کنید سیگنالی که قرار است به‌عنوان سیگنال شرط عمل‌کند بین دو کلمه کلیدی with و select قرار می‌گیرد. در خطوط بعد، همان ورودی که قرار است با شرط خاصی، به خروجی منتقل‌شود را می‌نویسیم و به خروجی ارجاع می‎‌دهیم. پس‌از آن با‌استفاده‌از کلمه کلیدی when، مقدار شرط مورد‌نظر را می‌نویسیم. به‌همین‌ترتیب تا آخر برای بقیه‌ی ورودی‌ها نیز شرط‌های موردنظر را می‌نویسیم.

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

هر سیگنال std_logic می‌تواند ۹مقدار مختلف داشته‌باشد. از این ۹مقدار، فقط مقادیر ۰ و ۱ و Z قابل پیاده‌سازی هستند و درنهایت می‌توانند سنتز شوند.

وقتی سیگنالی همانند سیگنال S در ک بالا، ۲بیتی باشد، در مجموع می‌تواند ۸۱حالت مختلف داشته‌باشد. اما همانطورکه گفتیم همه‌ی این حالت‌ها در پیاده‌سازی استفاده نمی‌شوند.

در کد بالا ما روی سیگنال شرط (S)، سه حالت مختلف را تعریف‌کردیم. برای توصیف مالتی‌پلکسر یک حالت دیگر، یعنی حالت “۱۱” باقی می‌ماند. برای این حالت از when استفاده‌نکردیم، بلکه از when others استفاده‌شده‌است. با‌توجه‌به توضیحات بالا، when others به ۷۸حالت باقی‌مانده اشاره می‌کند که یکی‌از این حالات، حالت “۱۱” می‌باشد.

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

مقایسه ساختار ارجاع شرطی با ساختار ارجاع انتخابی

  • در ساختار ارجاع انتخابی، فقط روی یک سیگنال می‌توانیم شرط بگذاریم.
  • درحالیکه در ساختار ارجاع شرطی، روی چندین سیگنال متفاوت می‌توانیم شرط بگذاریم و شرط‌ها را بااستفاده‌از عملگرهای AND, OR, XOR و … ترکیب کرد.
  • در ساختار ارجاع انتخابی، فقط از شرط مساوی‌بودن می‌توانیم استفاده‌کنیم.
  • درحالی که در ساختار ارجاع شرطی، از انواع شرط‌ها، ازجمله مساوی‌بودن، بزرگتربودن، کوچکتربودن و… می‌توان استفاده‌کرد.

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

در قسمت هشتم با مدارات ترتیبی و محیط Sequential آشنا خواهیم شد. پس با ما همراه باشید.

 

منبع: سیسوگ

مطلب قبلیآموزش FPGA قسمت ششم: شبیه‌سازی ساختار ارجاع شرطی در ISIM
مطلب بعدیآموزش قدم به قدم راه اندازی +NRF24L01

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید