بخشی از مقاله

شبيه سازي و پياده سازي مدار سخت افزار پايه به كمك VHDL

چكيده
شبيه سازي و پياده سازي مدار سخت افزار پايه به كمك VHDL .
در اين پروژه يك مدار سخت افزاري با 17 ورودي و 2 خروجي از نوع qit كد نويسي و شبيه سازي شده و براي پيكربندي روي چيپ هاي FPGA يا CPLD آماده شده است .
كد نويسي اين مدار بوسيله زبان VHDL و شيه سازي آن بوسيله نرم افزار model sim صورت گرفته است . مراحل آناليز و سنتز قطعه كد هاي VHDL توسط دو برنامه foundation 2.1و FPGA express از شركت xilinx انجام شده است .


در صفحات بعدي اين مقاله هر قسمت از روال فوق را كه عبارت اند از : كد نويسي اوليه و مشكلات كامپايل ، آناليز قطعه كدهاي غير استاندارد ، استاندارد كردن قطعه كدها و سنتز آنها مي باشد . بطور كامل توضيح داده ام . همچنين در پايان در قسمت اجرايي نحوه توليد فايل باينري نهايي جهت برنامه ريزي روي چيپ XC4005XLPC84 كه يك FPGA از خانواده XC4000XL است را مشاهده مي كنيد .
اميد دارم با مطالعه اين مقاله به اطلاعات شما در اين زمينه افزوده شود .


مقدمه
طي چند دهه اخير ،مدارهاي الكترونيكي پيشرفت قابل ملاحظه اي داشته اند . با پيچيده تر شدن هرچه بيشتر اين مدارها ،نياز به يافتن روشهايي است كه سيستمها را بتوان با مجتمع سازي و جزئيات بيشتر طراحي و پياده سازي نمود. قطعات قابل برنامه ريزي و FPGA ها ،آي سي هايي هستند كه به تبع اين پيشرفتها به بازار عرضه شده اند . هزينه ساخت كم و جزئيات زياد اين آي سي ها نسبت به حجم آنها،همچنين قابليت برنامه ريزي شدن اين قطعات بوسيله برنامه هاي نرم افزاري معمول و نرم افزارهاي طراحي شماتيك باعث افزايش كاربرد اين قطعات شده است . چنين پيش بيني مي شود كه با وجود اين پيشرفت،آينده در تسخير اين قطعات قرار گيرد تا جائيكه بتوان بوسيله آنها تمامي يك سيستم پيچيده را به سادگي طراحي و اجرا نمود .


در اين ميان زبان توصيف سخت افزاري VHDL نقش مهمي را در طراحي و شبيه سازي مدارات سخت افزاري به عهده دارد . در اين قسمت لازم مي دانم تا توضيحي اجمالي از نحوه عملكرد و مزاياي اين زبان به شما ارائه كنم .

مروري بر VHDL
VHDLروش توسعه يافتهاي از توصيف رفتار سيستمهاي منطقي به وسيله روابط منطقي است . اين زبان بسياري از مشخصه هاي روابط منطقي و روابط حالت را در درون خود دارد .
زبان VHDL امروزه به عنوان استاندارد صنعتي MIL STD 454L معرفي شده است و تمامي طرحهاي ASIC مربوط به دپارتمان دفاع ايالت متحده آمريكا بايد طبق اين زبان استاندارد نوشته شوند .


اين زبان به عنوان قسمتي از پروژه VHSIC (مدارهاي مجتمع با سرعت خيلي بالا ) ارائه شده است و به وسيله آن مي توان ASICهاي پيچيده را بدون مراجعه به تكنولوژي مشخصي ،تعريف و شبيه سازي نمود . زماني كه يك مدار به وسيله اين زبان تعريف مي گردد . مي توان آنرا به هر پروسه منطقي و يا بر روي ماژولهاي طراحي شده توسط هريك از توليدكننده هاي ابزارهاي منطقي انتقال داد .


(VHSIC HDL) VHDL يك سيستم منطقي را بصورت ساختار بالا باپائين توصيف مي كند . براي بدست آوردن توصيفي از يك سيستم به صورت ساختار بالا به پايين ،سيستم را به صورت مجموعة اي از زيرسيستمها تقسيم مي كنيم كه بوسيله يك سري رابطه به هم متصل مي گردند هريك از اين زيرسيستمهاي بالايي را مي توان به توابع و زيرسيستمهاي كوچكتر تقسيم كرد . اين عمل همچنان ادامه مي يابد تا به پائين ترين سطح از سيستم دست بيابيم كه در اين سطح هريك از سيستم ها را مي توان بوسيله گيتها و ماژولهاي آماده ديگر طراحي نمود .


به اين ترتيب ، بدليل آنكه هريك از طبقات اين ساختار منطقي به صورت يكتا مشخص شدهاند ،هريك از آنها را ميتوان به تنهايي شبيه سازي نمود و تابع منطقي اجرا شده بوسيله آنها را آزمايش كرده و خطاهاي احتمالي را برطرف نمود . ابتدا صحت عملكرد پايين ترين طبقه اين سيستم را آزمايش كرده و با تركيب زير سيستمهاي پايين تر به زيرسيستمهاي پيچيده تر مي رسيم تا جائيكه به طرح سيستم موردنظر كه در بالاترين طبقه اين ساختار وجود دارد برسيم . پس از انجام اين عمل ، به مرحله تركيب مي رسيم كه در آن كل طرح را پياده كرده وسپس براي بدست آوردن پارامترهاي زماني آن ،عمل شبيه سازي را انجام مي دهيم .


اين طرح سلسله مراتبي به طراح اجازه مي دهد تا بدون مشخص كردن نوع تكنولوژي ابزارهاي استفاده شونده و يا قسمت كردن طرح به ابزارهاي مختلف ،بتواند سيستم را به طور كامل تعريف نمايد . به اين ترتيب ، مي توان يك سيستم كامل را بدون مشخص كردن يك ابزار خاص تعريف و آزمايش كرد . ماژولها به صورت جداگانه طراحي مي شوند و مي توان از آنها در طرحهاي آينده نيز استفاده نمود . به عبارت ديگر براي هر طرح كتابخانه اي از توابع وجود دارد كه مي توان آنها را براي استفاده آينده ذخيره كرد. در اين پروژه نيز از توابع و جداول و كتابخانه هاي مجتمع تحت عنوان basic-utility استفاده شده است .


در زمان حاضر تعدادي از زبانهاي توصيف كننده مدارات سخت افزاري مانندVerilog , TI – HDL ,TEGAS , CONLAN , CDL , AHDL وجود دارند كه در اين ميان زبانهاي , AHDL,Verilog ABEL از كاربرد و اهميت بيشتري برخوردارهستند . با تحقيقاتي كه تاكنون انجام داده ام ، از نظر من زبان VHDL قويترين و پر كاربردترين زبانهاي توصيفگر سخت افزار است كه امكانات زيادي را به كاربر مي دهد تا مدار سخت افزاري مورد نظر خود را هر چه كه پيچيده باشد بواسطه اين زبان توصيف

كرده و كد نويسي كند . البته كار با زبان VHDL براي كساني كه تازه پا به اين عرصه گذاشته اند كمي دشوار است و ممكن است با خطاهاي زيادي درطول كد نويسي و كامپايل روبرو شوند . لذا شناخت كامل و دقيق اين زبان و مزاياي آ‌ن نسبت به ساير روشهاي توصيفي را ، داراي اهميت زيادي مي دانم . زيرا اگر ما در قسمت شبيه سازي و كد نويسي مدار سخت افزاري بوسيله VHDL دچار اشكال شويم يا مدار سخت افزاري را بصورت استاندارد كد نويسي نكنيم اگر چه كه

قطعه كد قابل كامپايل و شبيه سازي باشد ولي در قسمت آناليز و سنتز قطعه كدها با مشكلات زياد و غيرقابل حلي مواجه مي شويم كه در برخي اوقات ما رامجبورمي كنند تا طرح هود را دوباره به يك روش ديگري كد نويسي كنيم . همانطور كه در عنوان پروژه ذكر شده ، كار اصلي اينجانب شبيه سازي و كدنويسي يك مدار سخت افزاري بوده كه به مرحله سنتز و آماده براي پيكر بندي روي چيپ هاي FPGA يا CPLD رسيده است .


در ابتدا سعي شده تا مدار سخت افزاري نمونه كه يك Voter هوشمند است ( انتخابگر و توليد كننده خروجي از بين چند ورودي ) بوسيله زبان توصيف سخت افزاري VHDL كد نويسي شود .


اين كار با در نظر گرفتن تمامي تاخير هاي ممكن از اعمال ورودي تا فراهم شدن خروجي آن انجام گرفته است . سپس قطعه كدهاي حاصل شده بوسيله برنامه كامپيوتري model sim شبيه سازي شده و با اعمال ورودي به برنامه خروجي آن توليد شده و خطاهاي احتمالي مدار چه از نظر منطقي و چه از نظر مدت زمان تاخير شناسايي شده و رفع گرديده است .


پس از اتمام كار شبيه سازي توسط برنامه كامپيوتري model sim و اطمينان از صحت عملكرد آن ، قطعه كدها را به صورت استاندارد و قابل سنتز براي پيكر بندي روي چيپ هاي FPGA يا CPLD تبديل كرده ام .


كار آناليز و سنتز قطعه كدها به كمك دو برنامه كامپيوتري ساخته شركت xilinx با نامهاي FPGA expresss و foundation 2.1 انجام گرفته است .
طرحهاي سطح گيت مدار اصلي و اجزاء آن توسط نرم افزار FPGA express توليد شده كه درصفحات اين مقاله به چاپ رسيده است .
همچنين فايل باينري نهايي براي پيكر بندي روي چيپ ها توسط نرم افزار foundation 2.1 توليد شده كه نمونه آن را نيز مي توانيد درپيوست ؟ مشاهده بفرماييد . كليه عمليات و گزارشاتي كه در طي اين روال توليد شده را تا جاي ممكن در صفحات اصلي اين مقاله شرح داده ام .

فصل اول :
مروري بر تحقيقات گذشته
بسياري از دانشمندان بزرگ ، دنيا را در زمان كنوني ، درحال گذار مي دانند . با آنكه متخصصان مختلف به توضيح و تبيين روشهاي مختلف طراحي مي پردازند ، همگي به طور يكپارچه ، تكامل ديجيتال را حداقل براي چند دهه آينده ، مرحله مركزي فعاليت بشري پيش بيني مي كنند . در حال حاضر طراحي هاي ديجيتال به صورت فراگير درهمه ابعاد تكنولوژي ، خود را جايگزين طراحي صنعتي و زمانبر كرده است . بنابراين نياز آشكاري به آموزش متدهاي نوين طراحي به متخصصين دانشگاهي و سنتي احساس مي شود . خوشبختانه ايران ما ، درطي چند سال اخير ، در اين روند رو به رشد ، خود را سهيم كرده است و خواه يا ناخواه بيشتر به اين طريق كشيده خواهد شد ، زيرا كه جهان مدرن امروز ، سنتي ترين افكار و رويه ها را ملزم به تبعيت از خود كرده است .

1-1 تراشه هاي قابل برنامه ريزي
با پيشرفت در زمينه ساخت قطعات قابل برنامه ريزي ، مراحل طراحي سخت افزار ، دچار تحولات بسياري شده است . در روشهاي پيشين طراحي سخت افزار ، مدارهاي گسترده با استفاده از تكنولوژي SSI طراحي و ساخته مي شدند . ولي اكنون اين قطعات ، جاي خودشان را با قطعات ديگري با تكنولوژي VLSI عوض كرده اند . اين قطعات نيز داراي هزينه زيادي براي ساخت مي باشند كه اين اشكال يك مانع بزرگ براي استفاده از اين قطعات درطرح هاي نمونه سازي مي باشند .


گسترش و پيچيده تر شدن سيستمهاي الكترونيكي و نيز محدوديتهاي ناشي از همه منظوره بودن آي سي هاي استاندارد نيز ، مشكلاتي را براي طراح ايجاد مي كند و براي دستيابي به كار آيي بالا در طرح مورد نظر، بايد از تعداد زيادي مدار مجتمع استاندارد استفاده كرد . اما خوشبختانه رشد سريع الكترونيك باعث شده تا امكان طراحي با مدارهاي مجتمعي فراهم گردد كه درآنها استفاده از قابليت مدار مجتمع با تراكم بالا و كاربرد خاص ، نسبت به عموميت كاربرد آن اهميت بيشتري دارد . از اين رو ، در دو دهه اخير ، مدارهاي مجتمع با كاربرد خاص به عنوان راه حل مناسبي مورد توجه قرار گرفته و روشهاي متنوعي درتوليد اين تراشه ها پديد آمده است . كاهش هزينه ساخت و نيز انگيزه ارائه سريع طرح به بازار باعث شده است تا توليد كنندگان مدارهاي مجتمع علاوه بر ساخت تمام سفارشي ، به توليد محصولات نيمه سفارشي نيز روي آورند .


روش طراحي تمام سفارشي از قديمي ترين روشهاي توليد مدارهاي مجتمع با كاربرد خاص مي باشد . دراين روش ، خريدار ، مشخصات مورد نظر خود را ارائه مي كند و طراح بر اين اساس طرح را در سطح ترانزيستور ، اجرا مي نمايد و بديهي است كه طراح بايد داراي مهارتهاي مختلفي در طراحي مدار ، توصيف فيزيكي مدار و طرح بندي باشد . با توجه به زمان طولاني كه صرف يك طرح تمام سفارشي و نيز هزينه بالاي توليد يك نمونه از آن مي شود ، اين روش طراحي هنگامي مقرون به صرفه است كه تعداد تراشه هاي درخواستي بسيار زياد باشد .


در روش طراحي نيمه سفارشي ، انعطاف پذيري بيشتري به چشم مي خورد . اين روش طراحي در سطح ترانزيستور ، ممكن نيست و عملكرد هر بخش از پيش مشخص است . درحاليكه در طراحي سفارشي هيچ بخش از قبل تعيين شده اي وجود ندارد .
در يك جمع بندي كلي مزاياي زير را مي توان براي طراحي به روش ASIC بر شمرد :
 كاهش ابعاد و حجم سيستم


 كاهش هزينه و افزايش قابليت اطمينان سيستم : اين امر ناشي از آن است كه بخش بزرگي از يك طرح به داخل تراشه منتقل مي شود و همين امر باعث مي گردد تا زمان ، هزينه مونتاژ ، راه اندازي و نگهداري طرح كمتر گردد و در نتيجه ، قابليت اطمينان مدار افزايش يابد . به گونه اي كه اندازه گيري مؤسسات ناظر بر اين گونه فاكتورها نظير PREP نيز مؤيد ميزان نرخ خطاهاي بسيار ناچيز درحين عملكرد هاي طولاني مدت براي اين گونه تراشه ها است .
 كاهش مدت زمان طراحي و ساخت و عرضه به بازار


 حفاظت از طرح : سيستمهايي كه با استفاده از تراشه هاي استاندارد ساخته مي شوند به علت وجود اطلاعات كامل درمورد اين تراشه ها به راحتي از طريق مهندسي معكوس قابل شناسايي و مشابه سازي هستند . درعين حال امنيت طرح در تجارت از اهميت زيادي برخوردار بوده و اكثر طراحان مايلند تا از اين بابت اطمينان حاصل كنند .


 كاهش توان مصرفي ، نويز و اغتشاش

اولين تراشه هاي قابل برنامه ريزي منطقي كه به بازار عرضه شد ، حافظه هاي فقط خواندني برنامه پذير ( PROM ) بود كه خطوط آدرس به عنوان ورودي و خطوط داده به عنوان خروجي اين تراشه ها تلقي مي شد .
PROM شامل دسته اي از گيت هاي AND ثابت شده ( غير قابل برنامه ريزي ) كه به صورت رمز گشا بسته شده اند و نيز يك آرايه OR قابل برنامه ريزي است . نمودار قالبي آن در شكل (1-1) نشان داده شده است . از آنجائي كه PROM داراي قابليتهاي لازم براي پياده سازي مدارهاي منطقي نمي باشد ، از اين تراشه ها بيشتر به عنوان حافظه هاي قابل برنامه ريزي استفاده مي شود .


اولين قطعه اي كه به عنوان يك قطعه برنامه پذير براي مدارات منطقي ساخته شد ، آرايه هاي منطقي و برنامه پذير بود . اين قطعات داراي دو آرايه قابل برنامه ريزي هستند . يك آرايه قابل برنامه ريزي AND و يك آرايه قابل برنامه ريزي OR . نمودار قالبي اين قطعه PLA در شكل (1-2 ) نشان داده شده است .
در سال 1920 كه Philips ، ساختار PLA را به بازار عرضه كرد ، دو اشكال بر آن وارد بود . يكي هزينه گران ساخت PLA و دوم ، سرعت كم آن بود .
شركت Memories Monolithic براي پوشش دادن اشكالات PLA ، ساختار آرايه قابل برنامه ريزي منطقي PLA را به بازار عرضه نمود . PLA شامل يك آرايه AND قابل برنامه ريزي و يك آرايه OR تثبيت شده است . نمودار قالبي اين PLA در شكل ( 1-3 ) نشان داده شده است .


PLA هاي استاندارد ، آرايشهاي متنوعي دارند كه هر يك از آنها توسط عددي يكتا ، مشخص مي شود . اين عدد ، هميشه با پيشوند PLA شروع مي شود . دو رقم بعد از PLA ، تعداد وروديها را نشان مي دهد كه شامل خروجيهايي كه مي توانند به صورت ورودي به كار روند نيز هست . حرف بعد از تعداد وروديها ، نوع خروجي را نشان مي دهد : L يعني فعال پايين ، H يعني فعال بالا و P يعني قابل برنامه ريزي .


يك يا دو عدد بعدي كه بعد از نوع خروجي قرار مي گيرد ، تعداد خروجيهاست . به عنوان مثال PLA 10 L8 داراي 10 ورودي و 8 خروجي فعال پايين است .
علاوه بر اين شماره ، PLA مي تواند پسوندهايي براي تعيين سرعت ، نوع بسته بندي و حوزه حرارتي داشته باشد .


بعد از PLA ، يكي ديگر از تراشه هاي منطقي قابل برنامه ريزي ( PLD ) كه در بسياري از كاربردها ، جايگزين مدارهاي SSI و MSI شد ، توسط شركت Lattice Semiconductor با عنوان آرايه عمومي منطقي ( GAL ) به بازار عرضه شد .
GAL شامل آرايه اي قابل برنامه ريزي از گيت هاي AND است كه به آرايه ثابتي از گيت هاي OR متصل شده است . نمودار قالبي GAL در شكل ( 1-4 ) نشان داده شده است .


در GAL به جاي فيوز ، از سلولهايي از نوع CMOS كه قابل پاك شدن به صورت الكتريكي E2CMOC ) ) هستند ، استفاده شده است .
GAL ، آرايشهاي متنوعي دارد كه هر يك توسط شماره يكتايي مشخص مي شود . اين شماره ، همواره با پيشوند GAL ، آغاز مي شود . دو رقم اوليه كه بعد از پيشوند GAL مي آيند ، تعداد وروديها را نشان مي دهند كه خروجيهايي كه مي توانند به عنوان ورودي نيز به كار روند را در بر دارد . حرف V كه بعد از وروديها مي آيد ، خروجي متغير و يك يا دو رقم بعد از آن ، تعداد خروجيها را نشان مي دهد . به عنوان مثال GAL 16 V8 داراي 16 ورودي و 8 خروجي متغير است .


به همراه تراشه هاي قابل برنامه ريزي ، ASIC قابل ماسك MPGA نيز شروع به رشد كرد كه به صورت آرايه اي از ترانزيستورهاي پيش ساخته هستند و براي پياده سازي در مدارهاي منطقي ، در كارخانه هاي سازنده به يكديگر متصل مي شوند . ظرفيت آنها طي ده سال ، از حدود هزار گيت به مرز چند ده هزار گيت رسيد . بيشتر اين رشد مديون پيشرفت در ابزارهاي طراحي اتوماتيك بود كه در فرايند طراحي اين تراشه ها وارد شده بودند .


پيشرفت در ابزارهاي طراحي و نيز تراشه هاي قابل برنامه ريزي منجر به عرضه FPGA ها در اوايل دهه 1990 شد و پس از آن ، اين محصولات رشد قابل توجهي پيدا كردند . از نقطه نظر تكنولوژي ، هم اكنون FPGA ها در زمره بزرگترين مدارهاي مجتمع موجود در بازار مي باشند . براي مثال محصولات Altera از سري FLEX 10 K با تكنولوژي نيم ميكرون ، حدود 10 ميليون ترانزيستور را در گستره اي به ابعاد cm 5/1 × cm 8/1 جاي دادند . گرچه اين محصولات ظرفيتي بيش از 000/300 گيت و 300 پايه I/O را به كاربر عرضه كرده اند ولي با اين همه هنوز از تراشه هايي همچون 16V8 و نيز سري 74LS00 استفاده فراواني به عمل مي آيد ، با وجود اينكه مي توان 7000 نوع از تراشه اخير را در يك FPGA معمولي جاي داد .


از نظر آماري بيشتر FPGA هاي مورد استفاده ظرفيتي حدود 8000 گيت دارند . از FPGA هاي بزرگتر براي ساخت نمونه هاي اوليه به منظور پياده سازي نهايي با MPGA ها استفاده مي گردد . اين امكان نتيجه پيشرفت درنرم افزارهاي طراحي است كه مي توانند مستقل از تراشه نهايي ، طراحي را انجام دهند و درنهايت طراح مي تواند تصميم بگيرد كه طرح با FPGA و يا MPGA پياده سازي گردد .


به نظر مي رسد كه درآينده ، ايده FPGA همچنان قوام بيشتري به خود گرفته و فراگير گردد و با ايجاد ابزارهاي طراحي قوي تر كه دستورات پيشرفته تري از VHDL و AHDL را پشتيباني مي كنند ، راه براي بكارگيري هرچه بيشتر اين گونه تراشه ها هموار گردد .


همچنين امروزه برنامه هاي نوشته شده به زبان VHDL تحت عنوان مگا فانكشن ها درصنعت وجود دارند كه كار را براي طراحان سخت افزار آسان كرده است .
مگا فانكشن ها قطعه كدهاي نوشته شده آماده اي هستند كه براي برخي ا زتراشه هاي خاص فراهم شده و تست گرديده اند . به عنوان مثال مگا فانكشن ميكرو كنترلر 8051 بصورت آماده و تست شده و آماده براي برنامه ريزي روي FPGA يا CPLD در بازار موجود است . اين مگا فاكنشن دقيقاً عملكرد ميكرو كنترلر 8051 را پياده سازي مي كند .


لازم به ذكر است كه درمداراتي كه ما احتياج به عملكرد با فركانس در حدود چند مگا هرتز داريم عملاً نمي توانيم از خود تراشه كنترلر 8051 استفاده كنيم .
در صورتي كه FPGA ها در فركانسهاي بالاي 50MHZ كار مي كنند و مي توانند منظور ما راپياده سازي كنند . به هر حال استفاده از مگا فانكشن ها باعث دقت و سرعت و اطمينان بيشتر در طراحي هاي ديجيتالي شده است .

 


فصل دوم :
روش تحقيق و مواد
1-2 طراحي مدار voter هوشمند
طرح اصلي مدار سخت افزار پايه در واقع يك Voter هوشمند است . Voter در معناي لغوي به معني راي دهنده است . فكر نمي كنيم « راي دهنده » انتخاب مناسبي براي بيان مفاهيم مدار باشد . كما اينكه در صنعت نيز عيناً از خود كلمه Voter استفاده مي شود .
به سراغ بحث اصلي برمي گرديم . من براي كل سيستم نام « انتخابگر داده » را انتخاب كرده ام .


انتخابگر داده به تعداد N ورودي اصلي و تعداد M ورودي كمكي يا به اصطلاح زاپاس دارد . لازم به ذكر است كه من كل سيستم را طوري طراحي و كد نويسي كرده ام كه اعداد صحيح M , N را نيز مي توانيم به عنوان يكي ديگر از وروديها به مدار انتخابگر داده بدهيم . همچنين بايد به تعداد N ورودي داده اي اصلي و M ورودي داده اي كمكي براي مدار انتخابگر داده فراهم كنيم .


بديهي است كه سيستم براي هر N , M اي كه ما براي آن انتخاب كنيم پيكر بندي مناسبي را انجام داده و طبق روال تعريف شده عمل مي كند . البته بايد رابطه M > = N/2 برقرار باشد .
مدار انتخابگر داده در نهايت يك خروجي دارد . براي درست عمل كردن مدار ما احتياج به يك ورودي پالس ساعت هم داريم تا سيستم را در زمانهاي مشخص به عمل وا دارد .


خوب تا بحال ما يك جعبه سياه تعريف كرديم كه به تعداد M + N ورودي داده و يك ورودي پالس ساعت و يك خروجي نهايي داده دارد ولي از محتواي اين جعبه سياه و نحوه عملكرد آن چيزي به ميان نيامده است .


طرز كار اين جعبه سياه اينگونه است كه اگر به تعداد M تا از N ورودي مثل هم باشند يك نمونه از ارزش اكثريت به عنوان خروجي نهايي ارسال مي شود . دوباره تكرار مي كنم چنانچه تعداد وروديهاي سالم بيشتر يا مساوي M باشد ، يك نمونه از ارزش وروديهاي سالم به خروجي ارسال مي شود ولي اگر تعداد وروديهاي نابرابر يا باصطلاح خراب از عدد M بزرگتر بود سيستم در خروجي خود حالت بي اهميت را قرار مي دهد و باقي مي ماند . در واقع با چنين شرايطي عمليات سيستم متوقف مي شود و همينطور باقي مي ماند تا دوباره سيستم خاموش و روشن شود .


حال اگر به تعداد M تا از N ورودي اصلي سيستم سالم بود ، مثلاً يكي يا دو تاي آنها خراب و با بقيه وروديها فرق مي كرد و همچنين خروجي سيستم فراهم شده و ما وروديهاي خراب را تصحيح نكرديم و تكليف آنها را مشخص نكرديم چه اتفاقي مي افتد .
فرض مي كنيم كه هر كدام از وروديها كه خراب شد تا ابد خراب باقي مي ماند و درست نمي شود .


با اين حساب اگرما ترفندي براي آن ورودي خراب بكار نبريم و آن را تصحيح و يا جايگزين نكنيم ممكن است رفته رفته با گذشت زمان به تعداد وروديهاي خراب اضافه شده و سيستم به حالت مرگ برود .


اينجاست كه وظيفه آن M ورودي كمكي سيستم معلوم مي شود . سيستم به ازاي هر ورودي خراب از N ورودي اصلي يك ورودي كمكي قرار مي دهد و از آن پس آن ورودي كمكي در توليد خروجي نهايي نقش دارد و جاي وروديهاي اصلي محسوب مي شود .


اين عمل تا جايي ادامه پيدا مي كند كه ما ورودي كمكي به تعداد لازم داشته باشيم . اگر پس از بكار گرفتن M امين ورودي كمكي باز هم يكي از آنها خراب شد و سيستم دستور داد تا يك ورودي كمكي جايگزين شود فكر مي كنيد چه اتفاقي مي افتد ، بلي بازهم سيستم در خروجي خود حالت بي اهميت را قرار داده و باصطلاح halt مي شود ، چون ديگر تمام M ورودي كمكي آن به كار گرفته شده اند . در اين بين ممكن است خود وروديهاي كمكي كه جايگزين شده ، خراب شوند و احتياج به تعويض داشته باشند ، باز هم اگر هنوز از وروديهاي جايگزين نشده كمكي وجود داشته باشد ، جاي آن ورودي خراب كمكي ايفاي نقش مي كند . عمليات جايگزين كردن وروديهاي كمكي به جاي وروديهاي اصلي را بخش سوئيچينگ سيستم انجام مي دهد . شكل ( 2-1 ) بلوك دياگرام سيستم انتخابگر داده را نشان مي دهد . همچنين نحوه بسته شدن سوئيچ هاي كمكي كوچك به هم را مي توانيد در شكل ( 2-2 ) ملاحظه كنيد.


لازم به ذكر است كه در اشكال اخير براي پارامترهاي M , N مقادير 5 و 3 فرض شده است . همچنين ازاينجا به بعد ما سيستم انتخابگر داده را با 5 ورودي اصلي ، 3 ورودي كمكي ، 1 ورودي پالس ساعت و 1 خروجي نهايي داده طراحي ، تست و آناليز مي كنيم و بايد بگويم كه تمام وروديهاي داده و خروجي نهايي داده سيستم ، دوبيتي هستند .

 


2-2 كد نويسي با VHDL و شبيه سازي بوسيله برنامه model sim
در فصل قبل راجع به مدار سخت افزاري انتخابگر داده و نحوه عملكرد آن مطالبي را ذكر كردم . در اين فصل قصد دارم سيستم انتخابگر داده را به چند زير سيستم تقسيم كرده و وظيفه هر يك از آن زير سيستم ها را شرح دهم . روال كار به اين صورت است كه درابتدا نگاهي به عملكرد هر يك از قسمتها داريم و پس از آن هر زير سيستم را به همراه قطعه كد نوشته شده به زبان VHDL مربوط به آن مفصل شرح مي دهم .

2-2-1 توصيف عملياتي
همانطور كه در شكل (2-1 ) از بخش قبل ملاحظه كرديد سيستم انتخابگر داده در بلوك دياگرام مربوطه داراي 6 بلوك است . هر يك از اين بلوك ها وظيفه خاص خود را دارا مي باشند . براي هر بلوك سطح توصيفي وجود دارد و از روي آن سطح توصيف قطعه كد VHDL خاص آن نوشته شده كه آن سطح توصيف را شبيه سازي مي كند . بعضي از اين بلوك ها از يك يا چند زير بلوك تشكيل شده كه البته براي آن زير بلوك ها نيز قطعه كد خاص آن نوشته شده كه در صفحات بعد از آنها صحبت خواهم كرد .

2-2-1-1 عمليات بخش switching
همانطور كه از شكل پيداست 5 ورودي اصلي و 3 ورودي كمكي به بخش سوئيچينگ وارد شده اند . بخش سوئيچينگ 5 خروجي داده اي را نيز دارا مي باشد . شكل ( 2-2 ) را كه به خاطر داريد . در ابتداي امر سوئيچ ها به گونه اي اتصالات را برقرار كرده اند كه 5 ورودي داده اصلي مستقيم ار بين سوئيچ هاي هم رديف خودشان عبور كرده و به خروجي داده بخش سوئيچينگ متصل مي شوند . لازم به ذكر است كه بخش سوئيچينگ از متصل كردن 15 زير بخش يا همان زير بلوك با نام Switch _ Cell تشكيل شده كه عملكرد زير بخش Switch _ Cell را در صفحات بعدي توضيح خواهم داد .


به اين مطلب اكتفا مي كنم كه بخش سوئيچينگ پس از پيدا شدن آدرس ورودي خراب يكي پس از ديگري، ورديهاي كمكي كه از قسمت پايين بلوك سوئيچينگ به آن متصل شده اند را وارد كار مي كند . همچنين براي هر Switch _ Cell تاخير 1 ns در نظر گرفته شده است .

2-2-1-2 عمليات بخش master _ slave
پس از بخش سوئيچينگ بخش master _ slave قرار دارد . اين بخش 5 خروجي بخش سوئيچينگ را به عنوان ورودي گرفته و 5 خروجي متناظر را براي عملكرد مابقي سيستم فراهم مي كند . لذا بااين تفاوت كه تنها در زمانهايي كه ورودي سيگنال CIK به آن اجازه مي دهد ، اين كار را انجام مي دهد . خيلي ساده است . بلوك master _ slave با فرار رسيدن لبه بالا رونده در سيگنال CLK يك نمونه از خروجيهاي بخش سوئيچينگ بر مي دارد وبا فرا رسيدن لبه پايين رونده CLK آن را در خروجي خود قرار مي دهد . به عبارت ديگر اين بخش در مدت زمان ، عرض پالس سيگنال CLK نمونه داده اي از خروجيهاي بخش قبل را در خود نگه مي دارد .


عليرغم مدت زمان عرض پالس ورودي CLK ، اين بلوك به مدت 1 ns تاخير دارد كه به مقدار قبل اضافه مي شود . بطور كلي تاخير كلي بخش master _ slave طبق فرمول 2-1 به دست مي آيد .
(2-1 ) Td = (Pulse Width + 1 ) ns
خوب خروجي بخش master _ slave به عنوان گلوگاه مدار ترقي مي شود . به عبارت ديگر سيستم با هر رخدادي كه در خروجي بخش m – s رخ مي دهد كار مقايسات و نمونه برداري و توليد خروجي و نحوه پيكر بندي بخش سوئيچينگ را انجام مي دهد .


2-2-1-3 عمليات بخش Comparement
بخش Comparement وظيفه انجام مقايسات بين وروديهاي داده را به عهده دارد . حاصل اين مقايسات ايجاد يك جدول مقايسات است كه آن را به عنوان خروجي خود توليد مي كند . تاخير اين بخش نيز در كد نويسي باندازه 1 ns در نظر گرفته شده است . يعني پس از هر رخداد در خروجي بخش master _ slave ، 1 ns بعد جدول مقايسات حاصل از مقايسه تمام وروديها با هم ، درخروجي Comparement آماده مي شود .

2-2-1-4 عمليات بخش ed _ om
در بلاك Output _ maker فرآيند توليد خروجي براي سيستم انتخابگر داده رخ مي دهد . اجازه بدهيد اين بلاك را ed _ om نامگزاري كنم . چون اين بلاك وظيفه شناسايي خطا راهم به عهده دارد و سر نام كلمات error detector نيز به خاطر همين خاصيت است .
ورودي اين بلاك جدول مقايسات محصول بلاك Comparement است . ed _ om از روي جدول مقايسات تشخيص مي دهد كه اولاً آيا به تعداد M تا از N ورودي مانند هم است يا نه ، و دوماً اگر بود يك نمونه از اكثريت وروديهاي داده اي سالم را به عنوان خروجي انتخاب مي كند . بديهي است كه اگر باندازه M تا از N تا ورودي سالم پيدا نكرد پيام Stop به سيستم مي دهد .
بلاك ed _ om به غير از جدول مقايسات يك سري از خروجيهاي داده اي بلاك m _ s را در ورودي دارد . اين بلاك پس از هر رخداد روي ورودي هاي داده اي پس از 2 ns خروجي داده اي يا پيام خطا را توليد مي كند .
توجه داشته باشيد كه اين در زماني اتفاق مي افتد كه تنها 1 ns از فراهم شدن جدول مقايسات مي گذرد .


2-2-1-5 عمليات بخش error finder
بخش error finder ( اشتباه نشود error detector در قسمت قبل بود ) وظيفه ايجاد جدولي را دارد كه پيكر بندي بخش سوئيچينگ را انجام مي دهد . پس از ايجاد يك خروجي نمونه توسط ed _ om ، error finder اين نمونه خروجي را با تك تك خروجيهاي بخش master _ slave مقايسه مي كند تامعلوم شود كه كدام يك خراب است . اگر هيچكدام تفاوتي نداشت ، مي گذارد سوئيچينگ طبق روال عادي به كار خود ادامه دهد ولي اگر با هر كدام كه تفاوت داشت بسته به اينكه نوبت كداميك از ورودي هاي كمكي باشد ، جدول مربوط به سوئيچينگ راطوري مقدار دهي مي كند تا ورودي كمكي مربوطه جاي ورودي خراب شده قرار بگيرد . بخش سوئيچينگ با جدولي كه از قسمت error finder مي گيرد نحوه اتصال بين سوئيچها را مشخص كرده و آنها را پيكر بندي مي كند .

2-2-1-6 عمليات بخش data_ selector
در اين بخش خروجي نهايي سيستم توليد مي شود . به اين صورت كه اگر بخش ed _ om يا error _ finder پيام stop ندهند ، نمونه انتخابي ed _ om را در خروجي نهايي قرار مي دهد . در غير اينصورت با اعلام پيام stop حالت بي اهميت در خروجي قرار مي گيرد .
تمام بخشها به جز بخش switching و m _ s از يك قطعه كد تشكيل شده اند . همانطور كه گفته شد بخش سوئيچينگ از زير بخشهايي با نام Switch _ cell به تعداد 15 عدد استفاده مي كند .
همچنين بخش m _ s نيز از زير بخشهاي dff _ 2 bit , ms _ dff _ 2 bit به تعداد 5 عدد استفاده مي كند . درتعريف و كد نويسي اين بخش ها از بسته كتابخانه اي تحت عنوان basic _ utility استفاده كرده ام كه انواع داده اي جديد و همچنين توابع مورد نياز براي كار با نوع داده هاي جديد را در آن تعريف كرده ام . در بخش بعد به شرح و توصيف تك تك قطعه كدها و شبيه سازي آنها به وسيله برنامه كامپيوتري model sim خواهم پرداخت .


2-2-2 كد نويسي در VHDL
2-2-2-1 كدنويسي بسته basic _ utility
در شبيه سازي و كد نويسي مدار سخت افزاري انتخابگر داده از بسته كتابخانه اي تحت عنوان basic _ utility استفاده كرده ام . استفاده از بسته كتابخانه اي ( package )اين امكان را به ما مي دهد تا بتوانيم نوع داده هايي را كه مايليم با آنها كار كنيم را براي كامپايلر برنامه model sim معرفي كنيم .

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