طرح اصلي مدار سخت افزار پايه در واقع يك Voter هوشمند است . Voter در معناي لغوي به معني راي دهنده است . فكر نمي كنيم « راي دهنده » انتخاب مناسبي براي بيان مفاهيم مدار باشد . كما اينكه در صنعت نيز عيناً از خود كلمه Voter استفاده مي شود .
  • مریم زمانی
  • 1397/1/28
  • 0
  • 147

طرح اصلي مدار سخت افزار پايه در واقع يك 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  رخ مي دهد كار مقايسات و نمونه برداري و توليد خروجي و نحوه پيكر بندي بخش سوئيچينگ را انجام مي دهد .

 

  1. عمليات بخش 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  تا از  ورودي مانند هم است يا نه ، و دوماً اگر بود يك نمونه از اكثريت وروديهاي داده اي سالم را به عنوان خروجي انتخاب مي كند . بديهي است كه اگر  باندازه 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  معرفي كنيم .

به عنوان مثال من براي هر bit  از نوع داده جديدي تحت عنوان qit  استفاده كرده ام . نوع داده bit  بطور پيش فرض دركامپايلر model sim  معرفي شده كه مي تواند دو مقدار ( 1 ) , ( 0 )  باينري را در خود جاي دهد . ما مي توانيم از نوع داده bit  و همچنين bit _ vector  ( آرايه اي از بيت ها ) استفاده كنيم . ولي اگر بخواهيم هر سيگنال يا اتصال ما مثلاً مقدار Z  يعني امپدانس بالا را نيز قبول كند بايد يك نوع داده جديدي در بسته كتابخانه اي تعريف كنيم كه شامل اين مقدار جديد نيز باشد .

اين كار با دستور TYPE  در  VHDL  انجام مي شود . به عنوان مثال در خط اول قطعه كد basic _ utility نوع داده اي با نام qit  تعريف شده كه مي تواند ارزشهاي  “ X “ , “ Z  “, “ 1 “ , “ 0 “  كه به ترتيب صفر منطقي ، يك منطقي ، امپدانس بالا و حالت بي اهميت است را در خود جاي دهد . توابع منطقي كه با اين نوع داده جديد  ( qit )  كار مي كنند مانند  “ xor “ , “ nor “ , “ nand “ , “ or “ , “ and “ , “ not “  نيز به بسته كتابخانه اي اضافه شده اند .

همچنين توابع ديگري مانند int – to – bin , bit – to – int , equal  كه هر يك وظيفه خاصي را دارا مي باشند طراحي و كد نويسي و به بسته كتابخانه اي مورد نظراضافه شده اند . بسته كتابخانه اي basic _ utility به وسيله نرم افزار  model sim  كامپايل شده و در كتابخانه با نام  work  كه بصورت پيش فرض در هر پروژه انتخاب مي شود جاي مي گيرد . براي اينكه هر يك از قطعه كدها بتوانند از نوع داده ها و امكاناتي كه در اين بسته قرار دارند استفاده كنند ما بايد در ابتداي هر قطعه كد اين بسته كتابخانه اي كه در كتابخانه work  قرار دارد را معرفي كنيم . قطعه كد مربوط به اين بسته كتابخانه اي در صفحات بعد چاپ شده است .

 

2-2-2-2  كد نويسي بخش switch – cell

قطعه كد switch – cell  در ساخت قطعه كد سوئيچينگ به كار مي رود . هر switch – cell داراي دو ورودي داده با نامهاي d  و  d2   و دو خروجي داده با نامهاي d4   , d3  است . بعلاوه يك ورودي با نام  s  هم وجود دارد كه حالت عملكرد switch – cell رامشخص مي كند . پورتهاي d  و  d2 وd4 , d3 دو بيتي هستند ولي  S  تك بيتي است .

هر switch – cell داراي دو مود عملياتي است كه در شكل ( 2-3 ) مشاهده مي كنيد . در ضمن تاخير عملكرد switch – cell در هر مود 1ns  در نظر گرفته شده است .

 

2-2-2-3   كد نويسي بخش switching

همانگونه كه گفته شد در قطعه كد switching  از ماژول switch – cell به تعداد  ( N * M )  استفاده مي شود . پارامترهاي  an , sn  ( همان  N , M  ) توسط كلمه كليدي generic  از ورودي توسط كاربر وارد مي شود و قطعه كد switching  را براي هر تعداد از وروديهاي داده اصلي و كمكي پيكر بندي مي كند . البته در اشكالي كه وجود دارد و مقدار   a= 5  و مقدار s n = 3  در نظر گرفته شده است . پورتهاي  stb – m ,  act – m  كه به ترتيب معرف وروديهاي اصلي و كمكي هستند بر حسب اندازه  sn , an  تنظيم مي شوند . خروجي fix – m  نيز هم اندازه ورودي act – m  است كه ورودي داده اي بلوك  master – slave  را تشكيل مي دهد . علاوه براينها بخش switching  يك ورودي از نوع جدول ( an * sn )  دارد كه هر  خانه آن ازنوع تك  qit  است و نحوه عملكرد هر switch – cell را معين مي كند . هر خانه اين جدول به ورودي  s  در هر switch _ cell  متصل مي شود .

در قطعه كد switching  سعي شده تا ساختماني از switch – cell ها بسته به اينكه مقادير an , sn  چقدر است تشكيل شود . شكل ( 2-2 ) اين ساختمان را براي مقادير an = 5 , sn = 3  نشان مي دهد . دو سيگنال با نامهاي  Hor , Ver  اتصالات عمودي و افقي بين switch – cell ها را برقرار  مي كنند . قطعه كد switching  وظيفه جايگزين كردن وروديهاي كمكي به جاي وروديهاي خراب اصلي را به عهده دارد . اين كار بوسيله جدولي كه بلوك error – finder  توليد مي كند به switch – cell ها ديكته مي شود . در قسمت قبل گفتم كه تاخير عملكرد هر switch – cell ،  1ns  درنظر گرفته شده است . در اينصورت در بهترين حالت تاخير بخش switching  به اندازه   (sn)  ns است و در بدترين حالت موقعي است كه اولين ورودي اصلي خراب باشد و اولين ورودي كمكي بخواهد جاي آن را بگيرد . اگربه شكل ( 2-2 ) خوب دقت كرده باشيد ورودي كمكي  stb – m ( 1 )  پس از گذشت  ( an + sn –1 ) ns  به خروجي  fix –m ( 1 )  مي رسد .

همين تاخير بخش switching ‌ باعث شده تا در گلوگاه مدار انتخابگر داده از بلوك  master – slave استفاده كنم .

 

2-2-2-4  كد نويسي بخش d – ff – 2 bit

d – ff – 2 bit  درواقع يك فليپ فلاپ ساده است كه ورودي و خروجي داده اي آن دو بيتي است . ورودي پالس ساعت نيز از وروديهاي واجب هر فيليپ فلاپي است . در بدنه اين قطعه كد از     process   ( كلمه كليدي درHDL   ) استفاده شده كه با هر رخداد روي سيگنال پالس ساعت يكبار تا آخر اجرا مي شود .

دراين بين اگر سيگنال پالس ساعت در لبه بالا رونده باشد داده معتبر در ورودي داده d – ff – 2 bit  در خروجي آن بعد از گذشت  1 ns  لچ يا بعبارت ديگر نگه داشته مي شود ،  تا لبه بالا رونده ديگر در ورودي پالس ساعت فرا برسد و دوباره اين كار تكرار مي شود .

 

2-2-2-5  كد نويسي بخش ms - d – ff – 2 bit

در قطعه كد ms - d – ff – 2 bit دوبار از قطعه كد d – ff – 2 bit استفاده شده است . ما با اين كار عملكرد فليپ فلاپيها را بصورت  master – slave  در مي آوريم . به عبارت  ديگر ورودي قطعه كد ms - d – ff – 2 bit  درون اولين d – ff – 2 bit رفته و خروجي داده آن به ورودي دومين d – ff – 2 bit متصل شده است . خروجي داده اي دومين d – ff – 2 bit نيز خروجي داده قطعه كد ms - d – ff – 2 bit  را فراهم مي كند .

نحوه فراخواني قطعه كدهاي بخشهاي زيرين در قطعه كدهاي بخشهاي فوقاني طرح بوسيله دستور  port  map  و  generic map  ( كلمات كليدي در VHDL  ) انجام مي شود . فرق d – ff – 2 bit اول با دوم دراين است كه به d – ff – 2 bit اول مستقيماً پالس ساعت ورودي  ms - d – ff – 2 bit ‌ وارد مي شود و نقيض شده آن به d – ff – 2 bit دوم وارد مي شود . اين كار باعث مي شود تا حالت  master – slave  در دو فليپ فلاپ بوجود آيد . به اينصورت كه داده معتبر با فرا رسيدن لبه بالا رونده پالس ساعت درخروجي فليپ فلاپ اول لچ مي شود ، و با فرا رسيدن لبه پايين رونده در ورودي پالس ساعت داده مربوطه به خروجي فليپ فلاپ دوم مي رسد و در آنجا نگه داشته مي شود ، البته با  1 ns  تاخير اين كار انجام مي شود . اين روال همينطور با فرا رسيدن لبه هاي مثبت و منفي پالس ساعت تكرار مي شود .

 

2-2-2-6  كد نويسي بخش ms – block

در قطعه كد  ms – block  كه گلوگاه داده اي مدار انتخابگر داده را تشكيل مي دهد از قطعه كد  ms - d – ff – 2 bit ‌  به تعداد وروديهاي اصلي كه همان an  باشد استفاده شده است .

همانطوركه گفته شد اين فراخواني توسط دستور port map ( )  انجام مي شود . در بين پرانتز دستور فوق بايد ورودي و خروجيهاي قطعه كد فراخواني شونده را قرار داد . قطعه كد  m - s  block  اينطور كه عمل مي كند كه يك سري وروديهاي داده اي كه از خروجي قطعه كد  switching  آمده را مي گيرد و پس از گذشت لبه هاي بالا رونده و پايين رونده در ورودي پالس ساعت بعلاوه  1  ns  آنها را در خروجي داده اي خود را قرار مي دهد . اين بلوك بخاطر اينكه حداكثر تاخير بخش سوئيچينگ پوشش داده شود تعبيه شده است .  بديهي است بخاطر اين خاصيت عرض پالس سيگنال CLK  بايد مطابق با اندازه sn , an  در نظر گرفته شود  .

 

2-2-2-7  كد نويسي بخش m – s – block

در اين قطعه كد مقايسات بين وروديهاي داده اي كه از خروجي  m – s – block  گرفته شده انجام مي شود . دربدنه اين قطعه كد  از يك  process  استفاده شده است . اولين دستور process روال انجام دستورات را تا رويداد يك رخداد روي ورودي هاي  m – outs  متوقف مي كند . پس از انجام يك رخداد دستور بعدي روال را براي  1 ns  منتظر نگه مي دارد .

پس از يك حلقه for   قرار دارد كه از 1  تا  an  لوپ مي زند . در اين حلقه از تابع  equal  براي تست برابري دو به دو وروديها استفاده شده است . الگو و بدنه اين تابع در بسته كتابخانه اي     basic– utility  يافت مي شود . در اين حلقه آرايه اي بطول an  كه هر خانه آن از جنس integer  است پر شده و در انتهاي بدنه process به عنوان خروجي قطعه كد  comparement  ارسال مي شود .

 

2-2-2-8   كدنويسي بخش ed – om

وروديهاي قطعه كد  ed – om  جدول مقايسات حاصل از قطعه كد comparement و وروديهاي داده اي كه از خروجي بلوك master – slave  گرفته شده ، هستند . در اين قطعه كد از يك process  استفاده شده است . اولين دستور process روال انجام دستورات را تا رويداد يك رخداد روي وروديهاي داده اي متوقف مي كند . پس از انجام يك رخداد دستور بعدي process روال را براي 2 ns  منتظر نگه مي دارد .

پس از آن يك حلقه for  وجود دارد كه باندازه an  كه همان طول آرايه مقايسات است لوپ مي زند و ماكزيمم عدد جدول را پيدا كرده و در متغيير max  مي گذارد .همچنين انديس آن را نيز در متغيير  ذخيره مي كند . دستورات بعدي تست مي كنند كه آيا به تعداد لازم وروديهاي صحيح وجود دارند يا خير . اگر اينطور بود يك نمونه از اكثريت وروديهاي صحيح بعنوان خروجي قطعه كد  ed – om  درنظر گرفته مي شود .ولي اگر اينطور نبود خروجي st به سيستم اعلام مي دارد كه كار را متوقف كند چون به تعداد sn  تا از وروديهاي صحيح پيدا نشده است .

 همچنين يك قطعه كد با نام voter  نوشته ام كه دو بلوك comparement وed – om  را درخود فراخواني مي كند . بديهي است كه ورودي ماژول comparement ورودي  voter  و خروجي ماژول ed – om  خروجي voter  است .

 

2-2-2-9  كد نويسي بخش error – finder

در قطعه كد مربوط به بخش error – finder  نيز از يك process استفاده شده است . اولين دستور process روال انجام دستورات را تا اولين رخداد روي وروديهاي داده اي متوقف مي كند . پس از آن دستور wait  روال را تا 3 ns  متوقف مي كند .

بعد از گذشت 3 ns  از دستور wait  روال انجام دستورات وارد يك ساختار  if  مي شود . در آنجا چك مي شود كه اگر ورودي letin  كه از خروجي st  از ماژول ed – om  گرفته شده ، اجازه بدهد دستورات داخلي if  اول انجام شود و گرنه به خروجي letoute  دستور مي دهد تا به سيستم اعلام كند كه كار رامتوقف كند و در خروجي خود حالت بي اهميت را قرار دهد . با فرض ا ينكه ورودي letin  مقدار صفر منطقي را داشته باشد ( يعني اجازه بدهد كه دستورات داخلي if  اول انجام شود ) دستورات داخل if  اول چك مي كنند كه آيا ورودي كمكي بكار گرفته نشده اي وجود دارد يا خير . اگر چنين نبود دوباره خروجي letoute مانند قبل به سيستم پيام halt  را صادر مي كند . در غير اينصورت يعني هنوز از وروديهاي كمكي بكار گرفته نشده وجود دارد . طي يك حلقه  for  به دنبال ورودي خراب مي گردد . اينكار را با مقايسه نمونه استخراجي روي اكثريت صحيح توسط ed – om  انجام مي دهد . اگر هيچ ورودي متفاوتي يا به اصطلاح خرابي پيدا نكرد از حلقه خارج شده و هيچ تغييري در جدول دو بعدي switching  انجام نمي دهد . ولي اگر ورودي خراب را پيدا كرد با توجه به اينكه نوبت كداميك از وروديهاي كمكي است جدول دو بعدي ( an * sn )  مربوط به بخش swiching را طوري مقدار دهي مي كند تا swich- cell  ها ورودي كمكي مربوطه را جاي ورودي اصلي خراب وارد كار كنند .

 

2-2-2-10  كد نويسي بخش data – selector

قطعه كد data – selector  همه بلوك ها را درخود فراخواني كرده و اتصالات بين آنها را برقرار مي كند . وروديهاي قطعه كد data – selector ،sm , am  به طولهاي sn , an  هستند .sn , an  توسط كلمه كليدي    generic  وارد مي شود . همچنين يك ورودي ديگر بانام CLK  وجود دارد كه به بلوكmaster – slave  تحت عنوان پالس ساعت وارد مي شود . خروجي اين قطعه كد با نام out data  است كه دو بيتي بوده و مي تواند مقدار “ xx “  يا داده معتبر باينري را داشته باشد و اگر خروجي letout مربوط به بلوك error – finder   “ 0 “   باشد ، خروجي داده اي نمونه حاصل از بلوك ed – om  درخروجي out data قرار مي گيرد . در غير اينصورت مقدار “ xx “ بمعني حالت بي اهميت درخروجي out data  قرار مي گيرد . اين عمليات درخط با برچسب  a6 تعريف شده است . همچنين درموقع خطا دستور  ASSERT  پيام مناسبي را كه درون قطعه كد تايپ شده همراه با ذكر زمان دقيق خطا در صفحه كار نرم افزار  model sim  نمايش مي دهد . تاخيرهايي كه در قطعه كد هاي comparement و ed – om و error – finder در نظر گرفته شده ، براي اين است كه روال كار به طور دقيق و صحيح از سمت چپ به راست به روي شكل (2-1 ) ( بلوك دياگرام data – selector ) انجام گيرد . براي تست كردن قطعه كد data – selector يك  test – bench  تحت عنوان test – data – selector نوشته ام كه درزمانهاي مختلف وروديهاي اصلي و كمكي را به قطعه كد data – selector مي دهد .

همچنين سيگنال CLK  نيز با عرض پالس 8 ns  به data – selector وارد مي شود . دراين test – bench جاي پارامترهاي sn , an  اعداد generic map , 3 , 5  شده و وروديهاي اصلي و كمكي به طول 3 , 5  درنظر گرفته شده و  port map  شده اند . در زمانهاي 194 , 146 , 50  سعي شده تا وروديهاي اصلي خراب شوند . همچنين درزمان 98  ورودي كمكي جايگزين شده خراب شده است . عرض پالس ورودي پالس ساعت به اندازه an + sn  بايد باشد تا ماكزيمم تاخير بخش switching  را پوشش دهد .

 

2-2-3   كامپايل و شبيه سازي

تمام قطعه كدها مانند شكل ( 2-4 ) بايد درون پروژه ساخته شده توسط برنامه model sim اضافه شوند . ابتدا بسته كتابخانه اي basic – utility  كامپايل مي شود و بعد از آن بترتيب پايين به بالا تك تك قطعه كدهاي زيرين كامپايل مي شوند و پس از آن يكي پس از ديگري قطعه كدهاي فوقاني و فراخوان كامپايل مي شوند . تا دست آخر قطعه كد test – data – selector كامپايل مي شود .

چنانچه تمام قطعه كدها بدون خطا بوده و اگر به ترتيبي كه درفوق ذكر شد آنها را كامپايل كنيد هيچ مشكلي در برنامه model sim گزارش نمي شود . براي شروع شبيه سازي قطعه كد data – selector دركتابخانه work  درقسمت بعدي پنجره project  گزينه test – data – selector را load  كنيد تا ورودي ها را به data – selectorاعمال كند . پس از Run  كردن قطعه كد مربوطه و باز كردن پنجره wave - defult مي توانيد شكل موج هاي حاصل را در پنجره مذكور مشاهده كنيد . با عقب و جلو بردن ميله آبي رنگ در هر زمان مي توانيد تغييرات سيگنال هاي ورودي و خروجي را ببينيد .

شكل ( 2-5 ) پنجره wave – defult مربوط به قطعه كد test – data – selector در برنامه model sim را نشان مي دهد .

  1. استاندارد كردن قطعه كدها و آناليز آنها توسط FPGA express

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

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

لذا استاندارد كردن قطعه كد هاي غير استانداردو سنتز ناپذير از اهميت زيادي در بحث CPLD FPGA  برخوردار است . زيرا قرار است عملكرد مدار سخت افزاري كد شده طي روال استاندارد كردن حفظ شود .

اين مرحله از مراحل بسيار مهم كار است كه اگر چنانچه درست و منطقي انجام شود بعد از آن مشكلات چنداني در بخش سنتز و پيكر بندي روي تراشه وجود ندارد . اينطور به نظر مي رسد كه اگر كاربرطرح سخت افزاري خود را از ابتدا به صورت استاندارد يا حد اقل نزديك به سطح استاندارد كد نويسي كند ، درقسمت سنتز عملاً مشكلي وجود ندارد . از جمله مطالبي كه در بحث استاندارد كردن قابل سنتز نيست ، بحث تاخير ها است . در شبيه سازي قطعه كد VHDL مي توانيم از تاخيرها بوسيله دستور after x ns  استفاده كنيم . همچنين در داخل بدنه process  مي توانيم از ساختارهاي wait  استفاده كنيم . ولي هيچكدام از ساختارهاي فوق قابل سنتز نيستند . از ساختارهاي VHDL غيرقابل سنتز مي توان به : wait , Dellay  ، مقدار دهي اوليه ، ASSERT  ، انواع آرايه دو بعدي وساختارهاي مختلف اين تعاريف نام برد .

دربسته كتابخانه اي مربوط به اين پروژه نوع داده اي تحت عنوان qit  به عنوان  يك زير نوع از بسته كتابخانه اي std – logic  از كتابخانه IEEE  تعريف شده است . نوع داده هاي تعريف شده دراين بسته كتابخانه اي همگي توسط نرم افزارهاي سنتز گر قابل شناسايي هستند . من سعي كرده ام كه انواع داده مورد استفاده در اين پروژه را زير نوع بسته std – logic – 1164  تعريف كنم .

بعلاوه بعضي نوع داده ها و توابع كه در بسته كتابخانه اي std – logic – 1164 وجود نداشت را درعنوان بسته basic – utility  در كتابخانه  work  به هر قطعه كد ضميمه كرده ام . در زير توضيحاتي در مورد استاندارد كردن هر قطعه كد ارائه داده ام .

قطعه كد switch – cell  :  دراين قطعه كد تاخيرهاي 1 ns  دراتصالات عمودي و افقي حذف شده است .

قطعه كد switching   : دراين قطعه كد و همچنين تمام قطعه كد هاي ديگر براي پارامتر هاي    sn , an  كه با دستور generic  وارد قطعه كدها مي شوند مقادير ثابت  3 , 5  در نظر گرفته شده است . به عبارت ديگر دستور generic از بخش entity  هر قطعه كد حذف شده و هرجا كه sn , an وجود داشته مقادير 3  ,  5  جايگزين شده است . همچنين براي جدول پايه s    سوئيچ ها و اتصالات عمودي و افقي سوئيچ ها از آرايه هاي دو بعدي استفاده شده بود كه آنها را  به شكلي به آرايه هاي تك بعدي تبديل كرده ام .

قطعه كد d – ff – 2 bit  :  دراين قطعه كد متغير state  از نوع سيگنال تعريف شده و مقدار دهي اوليه آن حذف شده است . همچنين تاخير 1 ns  در دستور انتساب به خروجي حذف گرديده است .

قطعه كد m – s – block , ms – d – ff – 2 bit  : دراين قطعه كدها به غير از حذف دستور generic  تغيير ديگري حاصل نشده است .

قطعه كد comparement  : در اين قطعه كد دو دستور  wait  در داخل process  حذف شده و سيگنال ورودي هاي اصلي در داخل process , sensitivity list  نوشته شده است .

قطعه كد ed – om  : در اين قطعه كد جدول مقايسات كه ورودي است درداخل process , sensitivity list نوشته شده است . همچنين دو دستور  wait  در بدنه process  حذف شده اند .

قطعه كد voter  : در اين قطعه كد كه فراخواننده دو ماژول comparement و ed – om است هيچ تغييري حاصل نشده است .

قطعه كد error – finder   :‌ دراين قطعه كد نيز دو دستور  wait  از بدنه process حذف شده و سيگنالهاي ورودي letin , sam   در داخل sensivity list نوشته شده اند . همچنين يك زير نوع از اعداد صحيح با نام kvalue  تعريف شده كه معرف اعداد 1ـ 4  است . اين كار بخاطر حذف مقدار اوليه متغير k  انجام شده است .

قطعه كد data – selector  : دراين قطعه كد از دستور ASSERT  صرفنظر شده است . قطعه كد هاي مذكور در پيوست ؟ چاپ شده اند .

پس از اينكه تمام قطعه كدها را به شكل استاندارد و قابل سنتز در آورديم ، مي توانيم آنها را در برنامه FPGA  express  آناليز كنيم . همانطور كه در شكل ( 2- 6 ) مشاهده مي كنيد اين قطعه كدها بترتيب پايين به بالا در قسمت سمت چپ اين نرم افزار اضافه شده اند . نرم افزار به طور اتوماتيك پس از اضافه شدن قطعه كدها به برنامه آنهارا آناليز مي كند . اگر هيچ مشكلي از نظر سنتز پذيري وجود نداشته باشد روي هر قطعه كد علامت تيك سبز رنگي به نشانه سنتز پذير بودن قطعه كد نمايش داده مي شود . چنانچه مشكلي در قطعه كدها وجود داشته باشد ، پيام مناسبي در قسمتهاي massage , warning , error  در زير پنجره FPGA express  نمايان مي شود .

اگر در پنجره  error  روي شماره خطا دوبار كليك كنيد پنجره  help  مربوط به آن خطا باز مي شود كه مطالب آن شما را در روند سنتز كردن قطعه كدها ياري مي كند .

  1. توليد طرح سطح گيت بوسيله FPGA express

اكنون مرحله اول كار يعني آناليز كردن قطعه كدهاي استاندارد شده تمام شده است . مرحله بعدي اين است كه ما فايل VHDL  تحت عنوان Net list  را از برنامه استخراج كنيم . ولي قبل از اينكه بتوانيم اين كار را انجام دهيم بايد قطعه كدهاي VHDL خود را به يك طرح سطح گيت براي يك شماره تراشه از يكي از خانواده ها يFPGA  يا  CPLD  تبديل كنيم . به شكل ( 2-7 ) دقت كنيد .

براي اين كار روي قطعه كد VHDL كه در بالا ترين سطح قرار دارد رفته وروي علامت  ، + ، كه در سمت چپ آن قرار دارد يك بار كليك مي كنيم . روي گزينه اي كه به صورت آبشاري پديدار شده كليك راست كرده و گزينه Creat  implementation  را انتخاب كنيد . پنجره جديدي مانند شكــل

 ( 2-8)باز مي شود . در اين پنجره بايد خانواده اي از تراشه هاي FPGA  يا CPLD  و همچنين شماره يك نوع تراشه را براي شروع كار طرح اجرايي انتخاب كنيم . همچنين در اين پنجره گزينه هايي براي انتخاب سطح بهينه سازي ، ميزان جديت عمليات ، انتخاب پايانه هاي ورودي و خروجي و ايجاد طرح سلسله مراتبي وجود دارد كه بسته به انتخاب كاربر معيين مي شوند . با كليك كردن روي دكمه OK  كار شبيه سازي طرح سطح گيت مدار براي تراشه انتخاب شده شروع مي شود .

اين عمليات ابتدا يك طرح اوليه و پس از آن طرح بهينه سازي شده آن را در پنجره سمت راست برنامه FPGA express  توليد مي كند . در اين قسمت نيز هر خطا يا پيامي وجود داشته باشد ، در پنجره هاي زيرين برنامه FPGA express  نمايش داده مي شود .

درسيستم من كه يك P3 – 500 MHZ  با 128 M  حافظه اصلي است ، اين كار در حدود 27 ثانيه بطول انجاميد . پس از اتمام كار با كليك راست كردن روي طرح بهينه سازي شده و انتخاب گزينه view shematics  مي توانيد طرح سطح گيت مدار خود را به صورت سلسه مراتبي مشاهده كنيد . در طرح من كه از تراشه XC4005XL  استفاده كرده ام ، تمامي بلاك ها و زير بلاك ها در پايين ترين سطح بوسيله گيت هاي TRI , Xor , not , and  ساخته شده اند . برخي از اين طرحها در پيوست ؟ چاپ شده اند .

  1. استخراج فايل Net list بوسيله FPGA express

فايل تحت عنوان Net list  فايلي با فرمت VHDL  يا  Verilog  است . اين فايل از روي همان طرح سطح گيت مدار اوليه توليد مي شود . در واقع نزديكترين قطعه كد نوشته شده با زبان VHDL  به سخت افزار محض ، فايل Net list است .

براي توليد فايل Net list در پنجره سمت راست FPGA express روي گزينه بهينه سازي شده كليك راست كرده و گزينه Net listexport  راانتخاب مي كنيم . پنجره ديگري مانند شكل ( 2-9 ) باز مي شود كه حاوي آدرس دايركتوري مكان ذخيره فايل و تعيين فرمت آن است . پس از مشخص كردن گزينه ها روي گزينه  OK  كليك مي كنيم . پس از چند ثانيه فايل Net list با فرمت معين شده در آدرس مربوطه ذخيره مي شود . فايل Net list اين پروژه در حدود 4646 خط است كه از چاپ آن دراين مقاله صرفنظر كرده ام . اين فايل در CD  شماره 1 ضميمه شده به اين پايان نامه موجود است .

در صفحات بعدي تنها فايل Net list مربوط به قطعه كد switch – cell  چاپ شده است .

  1. طريقه سنتز بوسيله Foundation 2.1

نرم افزار foundation 2.1  ساخته شركت xilinx  ( شركت xilinx  بزرگترين سازنده FPGA  در دنيا است . ) محيطي همه منظوره براي فرآيندهاي طراحي ديجيتال فراهم مي كند . در اين نرم افزار مي توان طرح سخت افزاري اوليه را بصورت اديتور شماتيك ، اديتور ماشين حالت و يا اديتور متني HDL  (  ABEL  يا  VHDL  ) تشكيل ، طراحي و وارد كرد . در اين نرم افزار بخشي وجود دارد كه مي توان با آن طرح سخت افزاري را از نظر عملي شبيه سازي كرد .

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

بعد از آن همانطور كه در شكل ( 2- 10 ) مشاهده مي كنيد سه مرحله اصلي وجود دارد كه programming  , implementation , synthesis  نام دارند . ابتدابايد يك پروژه با تعيين محل كار آن براي نرم افزار foundation 2.1 تعريف كنيم .

پس از آن مي توانيم طرحهاي نوشته شده به زبان VHDL  و قابل سنتز را از قسمت add ducument  به پنجره سمت چپ نرم افزار اضافه كنيم . بايد دقت شود كه قطعه كدها بايد به ترتيب پايين به بالا درنرم افزار اضافه شوند . يعني بر فرض مثال قطعه كد فراخوان بايد در زير محل قرار گيري قطعه كد فراخواني شونده قرار گيرد . نرم افزار بطور اتوماتيك طرحها را آناليز مي كند و در صورت عدم وجود خطا روي آنها علامت تيك سبز رنگ مي گذارد . اين قسمت در برنامه FPGA express دقيقاً به همين صورت است . پس از انجام اين كار مانند شكل ( 2-11 ) در قسمت Design entry  تيك سبز رنگ را مشاهده مي كنيد كه به معني صحت پايان پذيرفتن اين قسمت است .

اكنون به قسمت synthesis  مي رسيم . دراين قسمت پنجره مانند شكل ( 2-12 ) باز مي شود . در قسمت  top level  بايد نام قطعه كدي كه در بالاترين سطح قرار دارد را وارد كنيد . بعد از آن مي توانيد خانواده و نام تراشه مورد نظر را نيز انتخاب كنيد . روي دكمه RUN  كليك كنيد و منتظر نتايج باشيد . اين قسمت در كامپيوتر من درحدود 50 ثانيه بطول انجاميد . اين قسمت درست مانند قسمت

im plementation      creat  در برنامه FPGA express است . با اين فرق كه در اين قسمت فايل  Net list  هم توليد مي شود . اگر مشكلي دراين قسمت وجود نداشته باشد روي بخش  sinthesis  علامت تيك سبز رنگ را مشاهده مي كنيد .

  1. فاز اجرايي در برنامه foundation 2.1

پس از وارد كردن قطعه كدهاي   VHDL  به  برنامه foundation 2.1 ، آناليز اوليه و سنتز آنها ، به مرحله اجرايي يا implementation مي رسيم . اين مرحله اصلي ترين قسمت كارپروژه است . در واقع اگر اين مرحله با موفقيت طي شود مي توان گفت 90 درصد برنامه ريزي و كار با  FPGA  تمام شده است .

با كليك كردن روي قسمت implementation پنجره اي مانند پنجره قسمت  synthesis  باز مي شود . اكثر پارامترهاي اين پنجره غيرقابل تغيير هستند . در زير اين پنجره دكمه اي با نام  SET   وجود دارد . با كليك كردن روي آن پنجره ديگري مانند شكل ( 2-13 ) باز مي شود . در اين پنجره جديد گزينه اي به نام user constraints  وجود دارد . در سمت چپ اين گزينه دكمه  Browse  وجود دارد.

شما نهايتاً مي خواهيد از  FPGA  برنامه ريزي شده خود در مداري استفاده كنيد و مسلماً يك سري پايه هاي ورودي و يك سري پايه هاي خروجي را از FPGA  براي مرتبط كردن با مدار احتياج داريد. طرحي كه من انتخاب و كد نويسي كرده ام ، بطور كلي 19 پايانه ورودي و خروجي دارد كه 17 پايه ورودي و 2 پايه خروجي لازم دارد . لازم به ذكر است كه تراشه  XC4005XL  داراي 84   پايه بصورت  PLCC  است . از اين  84  پايه ، 61   پايه ورودي و خروجي است كه كاربر مي تواند از آنها استفاده كند . اگر در قسمت user constraints  ، NONE  را انتخاب كرده باشيد ، درفاز اجرايي برنامه foundation  پايانه هاي ورودي و خروجي طرح شما را بطور اتوماتيك به بعضي از 61  پايه ورودي خروجي تراشه XC4005XL متصل مي كند . گزارش اين كار را در قسمت  reports   تحت عنوان

 I / O PADS  مي توانيد مشاهده كنيد . دراين گزارش كه پس از اتمام كار اجرايي تهيه مي شود ، شما مي توانيد ببينيد كه كدام پايانه ورودي يا خروجي طرح به كدام پايه تراشه مورد نظر متصل شده است . اگر دوست داشته باشيد تا خود پايه هاي ورودي و خروجي داده روي تراشه را مشخص كنيد ، بايد يك فايل با فرمت . ucf  * درست كنيد .

اين فايل را در هر اديتور متني موجود در ويندوز مي توانيد بسازيد . دست آخر فايل مذكور را با فرمت ucf  ذخيره كنيد . مي توانيد جاي نام فايل از نام پروژه استفاده كنيد . نمونه اين فايل كه من براي تخصيص پينهاي خاصي از تراشه براي طرح خود ساخته ام در پيوست ؟ آمده است . بعد از آنكه اين فايل را ساختيد و در آن مشخص كرديد كه كدام پايانه ورودي و خروجي طرح به كدام پايه تراشه متصل شود ، مي توانيد با انتخاب custom  در قسمت user constraints و كمك گرفتن از دكمهBrowse اين فايل  . ucf * را به برنامه foundation معرفي كنيد .

تا مطابق ميل شما پينهاي تراشه XC4005XL را به پايانه هاي طرح متصل كند . اكنون مي توانيد روي دكمه Run  كليك كنيد . با اين كار پنجره اي با نام flow engin  باز مي شود . اگر در قسمت synthesis  يك CPLD  را انتخاب كرده باشيد ، روال كار اين پنجره داراي چهار قسمت است . ولي اگر يك تراشه FPGA  اتخاب كرديد ، اين روال داراي پنج قسمت است .

 همانطور كه در شكل ( 2-14 ) مي بينيد اين مراحل به ترتيب Translate – Map – Place & Route – Timing – Configure  نام دارند . در هر كدام از اين مراحل عمليات خاصي انجام مي شود كه در زير شرح داده ام .

 ترجمه (Translate ) : فايل net list  بوجود آمده در قسمت  synthesis  به فرمت فايل net list داخلي تغيير مي يابد و قوانين طراحي چك مي شوند .

انطباق  ( map )  : بهينه سازي هاي مختلف روي مدار منطقي انجام مي شود كه باعث افزايش سرعت مدار و كاهش تعداد گيتهاي استفاده شده مي شود .

جايگذاري و مسيريابي(Place & Route ) : گيتهاي داخل net list به  CLB  هاي تراشه FPGA تخصيص مي يابند و اتصالات آنها از طريق  PSM  ها و ديگر ابزار مسير يابي ، انجام مي شوند.

زمانبندي ( timing )  : تاخير هاي توزيع  شده از طريق CLB  ها در مسيريابهاي PSM  محاسبه مي شوند .

مرتب كردن (Configure ) : رشته بيتها جهت برنامه ريزي تراشه توليد مي شود . اين رشته بيت ، تراشه را طوري تغيير ميدهد تا توابع و عمليات منطقي نوشته شده ، به زبان VHDL  را انجام دهد .

عنوان زير هر مرحله پس از اتمام مرحله ، از حالت Running  به Completed  تغيير خواهد يافت .

چنانچه در طول اجراي يك مرحله خاص مشكلي پيش آيد ، عنوان  Aborted  ظاهر خواهد شد و نوع خطاها در صفحه دايالوگ پاييني ظاهر خواهد شد .

پس از اتمام تمام مراحل ، يك پنجره كوچك باز مي شود كه موفقيت يا عدم موفقيت فاز im plementation را اعلام مي كند . روي دكمه OK كليك كنيد تا به پنجره اصلي برگرديد . با انجام موفقيت آميز اين مراحل علامت تيك سبز رنگي همانطور كه در شكل ( 2-15 ) مشاهده مي كنيد روي قسمت implementation ظاهر مي شود . در طي اجراي مراحل implementation براي طرح انتخابگر داده گزارشاتي حاوي نتايج هرمرحله توليد شده است كه در پيوست ؟ چاپ گرديده است . همچنين فايل نهايي باينري توليد شده در پيوست ؟ قابل مشاهده است . در سخت افزار كامپيوتر من مرحله ترجمه 15 ثانيه ، مرحله انطباق 5 ثانيه ، مرحله جايگذاري و مسير يابي 25 ثانيه ، مرحله زمانبندي 25 ثانيه و مرحله مرتب سازي 10 ثانيه به طول انجاميده است . در مجموع فاز implementation در مدت زمان 80 ثانيه به اتمام رسيده است . هدف من آموزش طرز كار و نحوه عملكرد نرم افزارهاي FPGA expressfoundation 2.1, نبوده است . چرا كه كتب و مراجع زيادي در بازار وجود دارند كه حاوي مطالب كاملي در مورد سنتز مدارهاي FPGA  هستند .

بلكه قصد داشتم تا جاي ممكن روال كار در اين پروژه و نحوه انجام مراحل آن را بيان كنم . دوستاني كه علاقمند به كار در اين زمينه هستند مي توانند به كتب و مراجعي كه در قسمت مراجع اين پايان نامه چاپ شده مراجعه كنند و از آنها بهره گيرند . همچنين دو برنامه آموزشي تحت عنوان Quick tour و FNDTN – MMD  در  CD  ضميمه شده شماره 1 وجود دارند . برنامه Quickk tour  آموزش نرم افزار FPGA express و برنامه FNDTN – MMD آموزش نرم افزار foundation 2.1, است . اين دو برنامه آموزشي به صورت تصويري و بدون صدا مثالهايي را درهر دو نرم افزار FPGA expressfoundation 2.1, توضيح داده اند كه علاقمندان را در يادگيري اين نرم افزارها بسيار ياري مي كنند .

2-8  پيكر بندي روي تراشه XC4005XL  توسط Foundation 2.1

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

حالت  jtag programmer  راانتخاب كنيد . با اين كار پنجره اي مانند شكل ( 2-16 ) باز مي شود . به شكل  دقت كنيد . در اين شكل تراشه مشخص شده در قسمت سنتز را مشاهده مي كنيد . اگر از بيشتر از يك تراشه مي خواهيد استفاده كنيد بايد گزينه  Add device  رااز قسمت  Edit  انتخاب كرده و پايه  TDO  تراشه اول را به پايه  TDI  تراشه دوم متصل كنيد . در نهايت دو پايه TDO , TDI  توسط برد برنامه ريز تراشه مقدار دهي مي شوند. ابتدا كابل واسط بين برد برنامه ريز و كامپيوتر را متصل كنيد . در مدار ارائه شده در پيوست ؟ پورت موازي كامپيوتر مورد استفاده قرار گرفته است  . سپس وروديهاي تغذيه برد را وصل كرده و دوباره تمام اتصالات را چك كنيد . ترجيحاً تراشه FPGA  روي سوكت قرار نداشته باشد .

سپس به قسمت jtag programmer باز گرديد . ابتدا بايد نحوه اتصال برد برنامه ريز به كامپيوتر را براي jtag programmer تعريف كنيد . براي اين كار از قسمت Out put  گزينه  cable setup  را انتخاب كنيد . در پنجره جديدي كه باز مي شود حالت parallel  و از قسمت  port  ، lpt1 را انتخاب كنيد . سپس روي دكمه  OK  كليك كنيد .

اگر تمام اتصالات اعم از كابل و اسط و تغذيه درست و بدون نقص باشند . همچنين برد برنامه ريز درست ساخته شده باشد ، jtag programmer اين اتصال را شناسايي مي كند . سپس روي تراشه  FPGA  در برنامه jtag programmer يك بار كليك كنيد تا فعال شود . بعد از آن از قسمت  Edit  ، گزينه  properties  راانتخاب كنيد . در پنجره اي كه باز مي شود بايد نام فايل باينري طرح را مشاهده كنيد. اگر چنين نبود به كمك دكمه  Browse  مي توانيد آن را معرفي كنيد . پس از انجام اين كارها منبع تغذيه برد برنامه ريز را خاموش كرده و تراشه FPGA  مورد نظر را در آن قرار دهيد . دوباره تغذيه برد را روشن كنيد . به قسمت فايل از برنامه jtag programmer رفته و گزينه  initialize chain  راانتخاب كنيد . برنامه شروع به برنامه ريزي تراشه مي كند . پس از اتمام كار براي اطمينان از درست برنامه ريزي شدن تراشه از قسمت فايل گزينه  Debug chain  راانتخاب كنيد . اگر مشكلي وجود نداشته باشد تراشه مورد نظر، مدار سخت افزاري طراحي شده راپياده سازي مي كند . با اعمال ورودي به پايه ها ، خروجي آن را مي توانيد تست كنيد .

همانطور كه گفتم مدار برد برنامه ريز ، براي تمام  FPGA  ها و CPLD  هاي شركت  xilinx  را در پيوست ؟ آورده ام .

اين مدار براي رابط موازي طراحي شده و تمام محصولات شركت xilinx را برنامه ريزي مي كند . پايه هايي كه تحت عنوان FPGA header , jtag header  درمدار مشخص شده در تمام محصولات با همين نام هستند .

تنها بايد تراشه مورد استفاده راتعيين كرد و براي سوكت منطبق كننده پايه هاي آن تراشه ، برد برنامه ريز راساخت . بايد اضافه كنم كه مراحلي كه درنرم افزارfoundation 2.1 طي شد براي پيكر بندي تراشه هاي FPGA  است . اگر بخواهيد از تراشه CPLD  استفاده كنيد بعد از فاز implementation يك سري عمليات ديگر نيز براي آماده كردن فايل باينري نهايي بايد انجام شود .

نظرات0
برای ارسال دیدگاه وارد حساب کاربری خود شوید.

ورود به حساب کاربریایجاد حساب کاربری