HEXALINX
528 subscribers
147 photos
4 files
74 links
این آغاز ماجراجویی شماست...
آموزش رایگان برنامه نویسی FPGA و ZYNQ و ابزارهای طراحی XILINX

پرسش و پاسخ:
@ask_linx

آدرس سایت:
hexalinx.com

آدرس کانال آپارات:
aparat.com/hexalinx

آدرس اینستاگرام:
insatagram.com/hexalinx_go
Download Telegram
#Basic
#CLB, #SLICE
معرفی Slice و CLB بخش اول

کلیه تراشه های شرکت Xilinx که بعد از Virtex-6 به بازار عرضه شدند تقریبا دارای منابع منطقی یکسانی هستند. برای آشنایی بیشتر با این منابع ادامه مطلب را در پست زیر مطالعه بفرمایید. 👇

@Hexalinx
#Basic
#CLB, #SLICE, #PAR
معرفی Slice و CLB بخش دوم

📋 در شکل بالا نحوه اتصال دو CLB به یک سوییچ ماتریس نشان داده شده است. اسلایس ها از طریق این سوییچ ماتریس ها به شبکه سرتاسری مسیرها در FPGA دسترسی پیدا می کنند. در این مسیرهای سرتاسری، مسیرهای مجزا برای داده و کلاک در نظر گرفته شده که در شکل نیز با نام Clk و Data نشان داده شده اند. در حالت کلی کاربر روی نحوه استفاده از سوییچ ها و مسیریابی بین عناصر موجود در تراشه دخالت نمی کند و این کار به صورت اتوماتیک توسط ابزار و در مرحله post place & route انجام می شود.
.
@Hexalinx
#Basic
#SLICE
اسلایس ها از چه چیزهایی تشکیل شده اند؟

1️⃣ چهار جدول درستی 6 ورودی (6x-Input-LUT)
2️⃣ مالتی پلکسر های عریض (Wide Multiplexers)
3️⃣زنجیره نقلی (Carry chain)
4️⃣ شیفت رجیسترها (SRLs)
5️⃣ چهار فلیپ فلاپ/ لچ (flip-flops/latches) بعلاوه چهار فلیپ فلاپ اضافی

@Hexalinx
#Basic
#SLICE, #SLICER, #SLICEM

انواع اسلایس در FPGA های سری 7

🔖 کلیه منابع موجود درون اسلایس ها برای محاسبات منطقی، محاسبات ریاضی و ذخیره سازی به عنوان ROM قابل استفاده هستند. در معماری تراشه های سری 7 دو نوع Slice و دو نوع CLB وجود دارد.

1️⃣ اسلایس منطقی و محاسباتی (SLICER)
این اسلایس ها با بکارگیری منابع درونی خود به عنوان منابع منطقی، محاسباتی و ROM مورد استفاده قرار می گیرند.

2️⃣ اسلایس کامل (SLICEM)
این اسلایس ها علاوه بر انجام محاسبات منطقی، ریاضی و ROM از دو عملکرد اضافی نیز پشتیبانی می کنند و می توانند به عنوان حافظه (RAM) و یا شیفت رجیستر (Memory/SRL) مورد استفاده قرار بگیرند.

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

@Hexalinx
#Essentials
🔖 مقاله ایی که خدمتتان ارائه می گردد، با توجه به معماری تراشه های 7 Series و خانواده Spartan 6 تهیه شده است، معماری CLB ها در سایر تراشه های Xilinx تا حدودی متفاوت است، اگر چه شباهت هایی نیز وجود دارد.

تمامی تراشه های FPGA شرکت Xilinx دارای تعداد زیادی بلوک #CLB هستند که هر کدام متشکل از دو اسلایس #Slice هستند. هر اسلایس نیز شامل 4 عدد #LUT شش ورودی، 8 عدد فلیپ فلاپ #FLIP_FLOP ، یک زنجیره بیت نقلی #CARRY_CHAIN و تعدادی مالتی پلکسر عریض #WIDE_MULTIPLEXER است. ساختار داخلی یک LUT در شکل بالا نشان داده شده است.

همانطور که در شکل می بینیم، هر #LUT داری شش ورودی مستقل به نام های D1 تا D6 و دو خروجی مستقل به نام های O5 و O6 می باشد. هر #LUT قابلیت پیاده سازی یک تابع 6 ورودی با هر نوع پیچیدگی را دارد، مثلا تابع f را به صورت زیر در نظر بگیرد.

f=((D1 and D2) or (D3 and not(D4 or D5)) and D6)

با یک مرور کوتاه به درس مدار منطقی به یاد می آوریم که یک جدول درستی با شش ورودی می توانست 64 خروجی مختلف داشته باشد. در حقیقت #LUT ها در FPGA کاملا مشابه جداول درستی با شش ورودی عمل می کنند. علاوه بر این یک #LUT می تواند مشابه یک حافظه با 64 عنصر حافظه نیز عمل کند.

هنگام پیاده سازی یک تابع شش ورودی روی FPGA ، ابتدا جدول درستی این تابع توسط ابزار سنتز در ISE و یا Vivado ساخته می شود و سپس روی #LUT ها نگاشت می شود و در نهایت روی تراشه FPGA پیکره بندی می شود.

نکته دیگری که باید به آن اشاره کرد این است که همانطور که شکل بالا نشان می دهد. یک #LUT شش ورودی می تواند همانند دو عدد #LUT مستقل 5 ورودی نیز مورد استفاده قرار بگیرد، البته این 5 ورودی بین هر دو #LUT مشترک هستند ولی هر #LUT می تواند جدول درستی اختصاصی خودش و البته خروجی اختصاصی خودش یعنی O5 یا O6 را داشته باشد. در حالتی که تابع مورد نظر برای پیاده سازی نیاز به استفاده همزمان از هر دو #LUT داشته باشد، یک #LUT شش ورودی ساخته می شود و تنها خروجی O6 استفاده می شود، ولی در صورت استفاده تکی از #LUT ها هر دو خروجی بکار گرفته می شوند.

از سوی دیگر هر #LUT می تواند در نقش یک حافظه ROM یا RAM جهت ذخیره سازی 64 عدد تک بیت یا 32 عدد دو بیتی استفاده شود. در اینجا هم در حالت اول فقط خروجی O6 و در حالت دوم هر دو خروجی O5 و O6 به صورت همزمان استفاده می شوند. توجه داشته باشید هنگامی که تعداد محدودی عدد چند بیتی (مثلا 128 عدد بیتی) در یک ROM ذخیره می کنیم، در صورت کدنویسی صحیح (تاکید می کنم، حتما باید ساختار کد صحیح باشد) ابزار سنتز به صورت اتوماتیک از #LUT ها جهت این کار استفاده می کند و به نوعی یک حافظه توزیع شده #DISTRIBURD_RAM سنتز می شود ولی اگر تعداد اعداد از یک حدی بیشتر باشند حافظه ROM ما به بلوک های حافظه داخللی نگاشت می شود.

❗️ تعیین آستانه برای انتخاب بین یک حافظه توزیع شده یا بلوک های حافظه به موارد متعددی بستگی دارد که در مقاله ای جداگانه به آن پرداخته می شود.

با ترکیب هر چهار #LUT درون یک اسلایس می توان حافظه های بزرگتری با ظرفیت حداکثر 256 بیت بدون استفاده از هیچ نوع منابع اضافی روی تراشه فراخوانی کرد. همانطور که در شکل زیر نشان داده شده است.

❗️درون هر اسلایس سه مالتی پلکسر عریض با نام های

1⃣ #F7AMUX
2⃣ #F7BMUX
3⃣ #F8MUX

وجود دارد که برای ترکیب کردن خروجی #LUT ها و ساخت حافظه های 128 و 256 بیتی مورد استفاده قرار می گیرند، وجود این مالتی پلکسرهای عریض به طراح اجازه می دهد تا با ترکیب کردن #LUT ها توابع منطقی با 7 و یا 8 ورودی را نیز به راحتی درون یک اسلایس طراحی کند. نام گذاری مالتی پلکسرهای عریض با توجه به تعداد ورودی های آن ها صورت گرفته و عناصر بسیار مهمی در طراحی هستند.

https://www.researchgate.net/publication/321234978/figure/fig1/AS:563666749333511@1511400033789/Partial-diagram-of-a-Xilinx-7-Series-configurable-logic-block-CLB-slice.png

✳️ بحث در رابطه با #CLB ها هنوز به پایان نرسیده و در مقاله بعدی به قابلیت های #CLB ها در انجام عملیات ریاضی و به خصوص عملکرد زنجیره بیت نقلی می پردازیم.

@Hexalinx