در قسمت دوازدهم از مجموعه آموزشی FPGA مفصلا در رابطه با عناصر حافظه در سیستمهای دیجیتال صحبتکردیم و به تشریح جزئیات آنها پرداختیم، در ادامه بیانکردهبودیم که این عناصر به ۲دسته کلی با نامهای لچ و فلیپفلاپ تقسیم میشوند. نهایتا به شما توصیه کرده بودیم که در تمامی پیادهسازیها از فلیپفلاپ بهجای لچ استفادهکنید و همچنین برای اولینبار مدارات ترتیبی در محیط Sequential را پیادهسازی کردیم.
در این قسمت قصد داریم بحث توصیف عناصر حافظه با فلیپفلاپ را که در قسمت قبل ناتمام گذاشتیم، ازسرگرفته و توضیح بدهیم که چگونه کدی که در همان قسمت قبل نوشتیم در درون FPGA تبدیل به یک فلیپفلاپ شد؟
اگر بهخاطر داشتهباشید، در قسمتهای اولیه آموزش FPGA گفته بودیم که سیگنالها تحت شرایطی درون FPGA تبدیل به سیم و تحت شرایط دیگری تبدیل به رجیستر میشوند، و به شما قول دادهبودیم که بعدا در این مورد بهطورکامل صحبتکنیم. پس با دقت به توضیحاتزیر توجهکنید تا یکبار برای همیشه متوجهشوید که سیگنالها چهموقع تبدیل به سیم و چهموقع تبدیل به رجیستر میشوند.
در قسمتهای قبل، سیگنال را تعریفکردیم و همچنین در مثالی از کاربرد آن بهره بردیم، پس شما الان بهخوبی میدانید که سیگنال چیست و در کجا میتوایم از آن استفادهکنیم. اما نکتهای که هنوز نمیدانید این است که سیگنال چهموقع تبدیل به سیم و چهموقع تبدیل به رجیستر میشود!؟
اگر در محیط Concurrent، به سیگنالی ارجاع داده شود، آن سیگنال تبدیل به سیم، و اگر در محیط Sequential، به سیگنالی ارجاع داده شود، آن سیگنال تبدیل به رجیستر میشود. بهعبارتی دیگر اگر در محیط ترتیبی و درون process به سیگنالی ارجاع داده شود، آن سیگنال تبدیل به رجیستر، درغیر اینصورت تبدیل به سیم میشود.
اجازهبدهید در ابتدا کد قسمت قبل را دوباره بازنویسی کنیم و توضیحاتی را در رابطه با این کد بیانکنیم، و نهایتا با نشاندادن مدار پیادهسازیشده در FPGA، ادعای خود مبنیبر اینکه اگر در محیط ترتیبی به سیگنالی ارجاع داده شود، آن سیگنال تبدیل به رجیستر میشود را ثابت کنیم.
با دقت به کد زیر توجه کنید:
library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Flip_Flop is Port ( Clock : in STD_LOGIC; D : in STD_LOGIC; Q : out STD_LOGIC ); end Flip_Flop; architecture Behavioral of Flip_Flop is begin process (Clock) begin if rising_edge(Clock) then Q <= D; end if; end process; end Behavioral;
در کد بالا ما یک پورت ورودی تک بیتی برای کلاک تعریف کردیم تا با تغییر آن process فعالشود، همچنین یک پورت ورودی تک بیتی و یک پورت خروجی تک بیتی نیز تعریفکردیم تا درون process و در محیط ترتیبی، پورت ورودی را به پورت خروجی ارجاع بدهیم، که ما این کار را در خط ۱۹ ام کد انجام دادیم.
اکنون وقت آن رسیده است تا مشاهده کنیم که کد نوشتهشده، در FPGA تبدیل به چه سختافزاری شدهاست. برای این کار ابتدا باید برروی گزینهی View RTL Schematic دابلکلیک کرده و سپس بقیه مراحل را طبق همان مراحلی که در قسمت سوم بیانکردیم پیش بروید تا به مدار زیر برسید.
همانطورکه در تصویربالا مشاهده میکنید کد نوشتهشده تبدیل به یک فلیپفلاپ در FPGA شد، اما دلیل آن چیست؟
قبلاز اینکه بهدلیل این موضوع بپردازیم که چرا کد نوشتهشده، تبدیلبه یک فلیپفلاپ در FPGA شد، باید یک توضیح مختصر در رابطه با فلیپفلاپ و رجیستر بیانکنیم.
همانطورکه میدانید فلیپفلاپ کوچکترین عنصر حافظه در مدارات دیجیتال میباشد که توانایی ذخیرهکردن تنها یک بیت را دارد و از قرارگرفتن چندین فلیپفلاپ در کنارهم رجیستر ساختهخواهد شد، که رجیسترها میتوانند چندین بیت را در خود ذخیره کنند و نتیجه کلی که میتوان گرفت این است که رجیسترها تشکیلشده از چندین فلیپفلاپ میباشد.
پس اگر سیگنال ما تک بیتی باشد، وقتی در محیط ترتیبی و درون process به آن ارجاع داده میشود، آن سیگنال تبدیل به فلیپفلاپ میشود.
نکتهی دیگری که باید ذکر گردد این است که اگر در محیط ترتیبی و درون process به پورتی ارجاع داده شود، همهی شرایط سیگنالها برای این موضوع نیز صادق است، اگر توجهکردهباشید ماهم بعداز در کد نوشتشده به پورت ارجاع دادیم نه سیگنال، که البته این موضوع هیچ فرقی ندارد و تمامی شرایط یکسان خواهد بود.
اما شماتیکی که در بالا مشاهدهکردید دقیقا چیزی نیست که درون FPGA ساخته میشود، مداری که در FPGA پیادهسازی میشود کمی با شکلبالا متفاوت است و تمهیداتی دیگری را نیز شامل میشود. برای اینکه ببینید دقیقا درون FPGA چه چیزی پیادهسازی میشود باید تمامی مراحلبالا را برروی گزینهی View Technology Schematic تکرارکنید تا به مدار زیر برسید:
شماتیک بالا همان چیزی است که درون FPGA پیادهسازی میشود، اگر توجهکنید در مواردی با تصویرقبلی متفاوت است.
چندین مورد تمهیدات اضافهشدهاست، ازجمله بافر کلاک، بافر ورودی و بافر خروجی. قصد نداریم درمورد تمهیدات اضافهشده در این قسمت صحبتکنیم اما درهمینحد بدانید که اگر قرار باشد پینی در FPGA به کلاک اختصاص داده شود، حتما باید آن پین قابلیت خاصی داشتهباشد تا بتوانیم کلاک را به آن اعمال کنیم، بهعبارتیدیگر به هر پین FPGA نمیتوان سیگنال کلاک را اعمال کرد.
در چندین قسمت مجزا مفصلا درمورد تمهیدات کلاک، پینهایی که میتوانند کلاک را دریافتکنند، نرمافزار چگونه تشخیص میدهد سیگنال کلاک، کدام سیگنال است، تولید کلاکهایی با فرکانسهای متفاوت و بسیاریاز موارد دیگر صحبتخواهیمکرد.
در قسمت چهاردهم بحث مربوط به حافظهها را ادامه داده، و حافظههایی با قابلیت بیشتر را پیادهسازی خواهیمکرد. پس با ما همراه باشید.
منبع: سیسوگ