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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

حمایت از سپهر

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

0 نفر

پــــســنــدیـده انـد

توجه

دیدگاه ها

2 دیدگاه

  • maryam
    ۱ آبان ۱۳۹۹

    مطالبتون بسیار عالی بود و حتی از استاد هم کامل تر گفتین خیلی ممنون

    • Kamin Jalili
      ۱ آبان ۱۳۹۹

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

      سپاس از لطفی که به من دارید. موفق باشید.

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

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

Zeus ‌ Zeus ‌
  • 9 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

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

Zeus ‌ Zeus ‌
  • 1 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 2 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک