تكنولوژي NISC، انقلاب بدون دستورالعمل.(قسمت دوم)
نویسنده علیرضا حق دوست
تكنيكهاي متداول طراحي سيستمهاي ديجيتال بر روي تراشه
در فرآيند طراحي(System On Chip) ؛ SoCها اغلب سيستم كلي، به بخشهاي كوچكتري شكسته ميشود كه هر يك، برنامه يا عملكرد خاصي دارند، اين اجزا اغلب به صورت IP هاي سخت يا نرم توصيف كننده آن عملكرد خاص ميباشند كه يا توسط اشخاص ديگر توسعه داده شدهاند و در غالب قراردادهاي تجاري يا جنبش سختافزار آزاد، در طراحي از آنها بهره گرفته ميشوند يا IP هايي هستند كه قبلا طراحي شده و هم اكنون در سيستم جديد، مجددا مورد استفاده قرار ميگيرند. در فاز پياده سازي، هريك اين اجزا ميتوانند كاملا به صورت نرمافزاري پيادهسازي شده و بر روي يك پردازنده اجرا شوند يا كاملا به صورت سختافزاري توسط گيتهاي منطقي طراحي شوند يا تركيبي از نرمافزار و سختافزار اختصاصي، سيستم را تشكيل دهد.
الف) پياده سازي نرمافزاري:
پيادهسازي نرمافزاري اجزاي سيستم و اجراي آن بر روي يك پردازنده عمومي، فرايند بسيار سادهاي است كه ميتواند يك سيستم سختافزاري را توليد نمايد، با اين حال به دليل عمومي بودن پردازندهاي كه عملكرد سيستم را اجرا ميكند، اين پردازندهها از نقطه نظر كارايي، مصرف توان و مساحت، بهينه نيستند. جهت ارتباط و برنامه ريزي اين پردازندهها از يك مجموعه دستورالعمل ( ISA (Instruction Set Architecture بهره گرفته ميشود كه توسط كامپيايلر زبان برنامهنويسي كه اجزاي سيستم در آن نوشته شدهاند،دستورالعملهاي مطلوب توليد شده تا پردازنده عمومي، برنامه مطلوب را اجرا كند.كامپايلرهاي موجود زماني ميتوانند عملكرد مطلوبي در توليد دستورالعملها به همراه داشته باشند كه مانند كامپيوترهاي RISC مجموعه دستورالعملهاي ثابت، خيلي عمومي و بسيار سادهاي برايش تعريف شده باشد. به بيان ديگر افزايش پيچيدگي دستورالعملها و اختصاصي شدن عملكرد آنها، موجب افت كارايي كامپايلر خواهد شد طوري كه راندمان سيستمهاي مبتني بر راهكارهاي نرمافزاري خالص را به شدت محدود و وابسته به مجموعه دستورالعملها خواهد كرد.
ب) پياده سازي سختافزاري:
پيادهسازي سختافزاري اجزاي سيستم تنها با به كارگيري سلولهاي استاندارد كتابخانهاي ميتواند از نقطه نظر كارايي و توان مصرفي كارآمد باشد، با اين وجود انعطافپذيري اندكي در به كارگيري سلولهاي استاندارد و تركيب آنها در يك طراحي كاملا سختافزاري وجود دارد، همچنين اندازه برنامهاي كه آنها ميتوانند پياده سازي كنند، محدود به مساحت چيپ خواهد شد، در حالي كه در پيادهسازي نرمافزاري اجزاي سيستم، اين اندازه به ميزان حافظه برنامه محدود بود. به خاطر پيچيدگي بالايي كه در پيادهسازي سختافزاري هر يك از اين سلولهاي استاندارد به كار گرفته شده است، ابزارهاي سنتز سطح بالا (HLS) اغلب توانايي سنتز سيستمي با اجزاي پيچيده سختافزاري را ندارند. پيچيدگي بالا و هزينه پيادهسازي هر يك از اجزاي سيستم عموما كاربري SoCهايي كه به اين شيوه طراحي ميشوند را محدود ميكند.
پ) پياده سازي تركيبي:
راهكار بهتر براي پيادهسازي اجزاي سيستم يا يك IP، داشتن يك سختافزار اختصاصي براي هر بخش و اجراي نرمافزار توصيف كننده عملكرد بخش مذكور روي آن ميباشد. پردازندههاي خاص منظوره (ASIP) بر اساس اين ايده توسعه يافتهاند كه براي يك برنامه خاص، سختافزار اختصاصي فراهم گردد كه بتواند نرمافزار را به صورت كارآمدتري نسبت به پردازنده عمومي پردازش نمايد. جهت پياده سازي يك ASIP براي هر يك از اجزاي سيستم عموما مراحل زير پيموده ميشود.
<!--[if !supportLists]-->1. <!--[endif]-->يافتن توابع كليدي برنامه كه شايستگيهاي لازم جهت افزايش كارايي آنها وجود دارد.
<!--[if !supportLists]-->2. <!--[endif]-->طراحي Datapath كارآمد يا ارتقا نسخه موجود براي اجراي هرچه بهتر تابع مذكور.
<!--[if !supportLists]-->3. <!--[endif]-->طراحي يك دستورالعمل جديد مختص به تابع و به طبع آن اعمال تغييرات لازم در كدگشاي دستورالعمل پردازنده.
<!--[if !supportLists]-->4. <!--[endif]-->ارتقا كامپايلر جهت توليد دستورالعمل پيچيده جديد هنگام كامپايل كردن برنامه.
<!--[if !supportLists]-->5. <!--[endif]-->كامپايل كردن برنامه جهت اجراي آن روي Datapath جديد.
به اين ترتيب سختافزار به گونهاي اختصاصي ميگردد كه اجراي يك يا چند دستورالعمل پركاربرد و كليدي بر روي آن كارآمد تر گردد. با وجود اينكه اين راهكار در افزايش عملكرد برنامهها موثر ميباشد با دو محدوديت عمده مواجه است :
<!--[if !supportLists]-->1. <!--[endif]-->نوعا در پردازندههاي ASIP، يك پردازنده عمومي كه از پيش مستندات طراحي آن موجود ميباشد به گونه ارتقا يافته و اختصاصي ميگردد كه بتواند برنامه خاصي را سريعتر اجرا كند، لذا محدوديتهاي زمانبندي و مساحتي كه اين پردازنده بر روي كدگشاي دستورالعمل خود دارد موجب ميشود تا پيچيدگي دستورالعملهايي كه در مرحله سوم طراحي ASIP در نظر گرفته ميشوند به شدت به كدگشا وابسته گردند همچنين محدوديتهاي زماني و مساحتي كدگشا به عنوان يكي از مراحل خطلوله پردازنده مانع از به كار گيري دستورالعملهاي پيچيده گردد، چرا كه افزايش پيچيدگي دستورالعمل موجب افزايش سطح مدار منطقي كدگشا شده و همچنين عمليات كدگشايي را زمانبر تر ميكند، اين موضوع مانع بهينهسازي هرچه بيشتر خط لوله ميشود. به اين خاطر همواره براي تابعي كه قصد اختصاصي كردن سختافزار براي آن داريم، محدوديت پيچيدگي وجود دارد.
<!--[if !supportLists]-->2. <!--[endif]-->طراحي كردن كامپايلري كه بتواند دستورالعملهاي پيچيده اضافه شده به ISA را به صورت كارآمدي توليد كند، بسيار دشوار و در برخي مواقع غير ممكن است.
ت) پياده سازي NISC
محققين دانشگاه كاليفرنيا - ايرواين، بر اين باورند كه مجموعه دستورالعملها، يك لايه اضافي ميان كامپايلر و رفتار پردازنده ميباشد و باعث به وجود آمدن سربار پيادهسازي و طراحي هم براي پردازنده و هم براي كامپايلر ميگردد. در هر پردازندهاي پيچيده ترين واحد از نقطه نظر پياده سازي سختافزاري و بحرانيترين مسير از نقطه نظر زماني، واحد كدگشايي دستورالعمل آن به شمار ميرود. در كامپايلرها نيز انتخاب دستورالعمل پيچيده يك فرايند بسيار كند و زمانبر است، اين موضوع يكي از اصليترين عوامل جايگزيني كامپيوترهاي با دستورالعملهاي پيچيده (CISC) با كامپيوترهاي كم دستورالعمل (RISC) بود.
معماري كامپيوتر بدون دستورالعمل (NISC) كه توسط محققين اين دانشگاه ابداع شده است با حذف مجموعه دستورالعمل و به طبع آن واحدكدگشايي دستورالعمل، اين مشكلات را مرتفع كرده است. به بيان ديگر در اين معماري مرحله 3 و 4 طراحي ASIP حذف شده است در عوض كامپايلر به صورت مستقيما برنامه را بر روي Datapath كه براي برنامه مذكور بهينه شده است، اجرا ميكند. به كمك مفاهيم مطرح شده در معماري NISC هر نوع Datapath با هر ميزان پيچيدگي و بهينهسازي قابل پيادهسازي خواهد بود چرا كه هريك از ويژگيهاي يك برنامه ميتواند در توليد Datapath بهينه براي اجراي آن، نقش داشته باشد.
يكي از پيچيدهترين بخشهاي يك پردازنده كه هم طراحي آن دشوار است و هم بخش عمدهاي از مساحت و مصرف توان پردازنده را به خود اختصاص ميدهد واحد كنترل است كه شامل اجزايي مانند كدگشاي دستورالعمل ميگردد تا سيگنالهاي كنترلي Datapath را در زمانهاي مشخص توليد نمايد. اين واحد اغلب داراي بيشترين مسيرهاي بحراني بوده و نيازمند مراحل Verification متعددي چه از نظر تابعي و چه از نظر زماني ميباشد. در معماري NISC با حذف مجموعه دستورالعملها و به طبع آن واحد كدگشايي دستورالعمل، كنترلر پردازنده به طور قابل توجهي ساده خواهد شد لذا پردازنده NISC از اين نقطه نظر ميتواند بسيار سريعتر از ASIPهاي همرده خود عملكرده و نيازمند تلاش كمتري در توسعه و Verification ميباشد.
ادامه دارد....
www.sakhtafzar.com الف
در فرآيند طراحي(System On Chip) ؛ SoCها اغلب سيستم كلي، به بخشهاي كوچكتري شكسته ميشود كه هر يك، برنامه يا عملكرد خاصي دارند، اين اجزا اغلب به صورت IP هاي سخت يا نرم توصيف كننده آن عملكرد خاص ميباشند كه يا توسط اشخاص ديگر توسعه داده شدهاند و در غالب قراردادهاي تجاري يا جنبش سختافزار آزاد، در طراحي از آنها بهره گرفته ميشوند يا IP هايي هستند كه قبلا طراحي شده و هم اكنون در سيستم جديد، مجددا مورد استفاده قرار ميگيرند. در فاز پياده سازي، هريك اين اجزا ميتوانند كاملا به صورت نرمافزاري پيادهسازي شده و بر روي يك پردازنده اجرا شوند يا كاملا به صورت سختافزاري توسط گيتهاي منطقي طراحي شوند يا تركيبي از نرمافزار و سختافزار اختصاصي، سيستم را تشكيل دهد.
الف) پياده سازي نرمافزاري:
پيادهسازي نرمافزاري اجزاي سيستم و اجراي آن بر روي يك پردازنده عمومي، فرايند بسيار سادهاي است كه ميتواند يك سيستم سختافزاري را توليد نمايد، با اين حال به دليل عمومي بودن پردازندهاي كه عملكرد سيستم را اجرا ميكند، اين پردازندهها از نقطه نظر كارايي، مصرف توان و مساحت، بهينه نيستند. جهت ارتباط و برنامه ريزي اين پردازندهها از يك مجموعه دستورالعمل ( ISA (Instruction Set Architecture بهره گرفته ميشود كه توسط كامپيايلر زبان برنامهنويسي كه اجزاي سيستم در آن نوشته شدهاند،دستورالعملهاي مطلوب توليد شده تا پردازنده عمومي، برنامه مطلوب را اجرا كند.كامپايلرهاي موجود زماني ميتوانند عملكرد مطلوبي در توليد دستورالعملها به همراه داشته باشند كه مانند كامپيوترهاي RISC مجموعه دستورالعملهاي ثابت، خيلي عمومي و بسيار سادهاي برايش تعريف شده باشد. به بيان ديگر افزايش پيچيدگي دستورالعملها و اختصاصي شدن عملكرد آنها، موجب افت كارايي كامپايلر خواهد شد طوري كه راندمان سيستمهاي مبتني بر راهكارهاي نرمافزاري خالص را به شدت محدود و وابسته به مجموعه دستورالعملها خواهد كرد.
ب) پياده سازي سختافزاري:
پيادهسازي سختافزاري اجزاي سيستم تنها با به كارگيري سلولهاي استاندارد كتابخانهاي ميتواند از نقطه نظر كارايي و توان مصرفي كارآمد باشد، با اين وجود انعطافپذيري اندكي در به كارگيري سلولهاي استاندارد و تركيب آنها در يك طراحي كاملا سختافزاري وجود دارد، همچنين اندازه برنامهاي كه آنها ميتوانند پياده سازي كنند، محدود به مساحت چيپ خواهد شد، در حالي كه در پيادهسازي نرمافزاري اجزاي سيستم، اين اندازه به ميزان حافظه برنامه محدود بود. به خاطر پيچيدگي بالايي كه در پيادهسازي سختافزاري هر يك از اين سلولهاي استاندارد به كار گرفته شده است، ابزارهاي سنتز سطح بالا (HLS) اغلب توانايي سنتز سيستمي با اجزاي پيچيده سختافزاري را ندارند. پيچيدگي بالا و هزينه پيادهسازي هر يك از اجزاي سيستم عموما كاربري SoCهايي كه به اين شيوه طراحي ميشوند را محدود ميكند.
پ) پياده سازي تركيبي:
راهكار بهتر براي پيادهسازي اجزاي سيستم يا يك IP، داشتن يك سختافزار اختصاصي براي هر بخش و اجراي نرمافزار توصيف كننده عملكرد بخش مذكور روي آن ميباشد. پردازندههاي خاص منظوره (ASIP) بر اساس اين ايده توسعه يافتهاند كه براي يك برنامه خاص، سختافزار اختصاصي فراهم گردد كه بتواند نرمافزار را به صورت كارآمدتري نسبت به پردازنده عمومي پردازش نمايد. جهت پياده سازي يك ASIP براي هر يك از اجزاي سيستم عموما مراحل زير پيموده ميشود.
<!--[if !supportLists]-->1. <!--[endif]-->يافتن توابع كليدي برنامه كه شايستگيهاي لازم جهت افزايش كارايي آنها وجود دارد.
<!--[if !supportLists]-->2. <!--[endif]-->طراحي Datapath كارآمد يا ارتقا نسخه موجود براي اجراي هرچه بهتر تابع مذكور.
<!--[if !supportLists]-->3. <!--[endif]-->طراحي يك دستورالعمل جديد مختص به تابع و به طبع آن اعمال تغييرات لازم در كدگشاي دستورالعمل پردازنده.
<!--[if !supportLists]-->4. <!--[endif]-->ارتقا كامپايلر جهت توليد دستورالعمل پيچيده جديد هنگام كامپايل كردن برنامه.
<!--[if !supportLists]-->5. <!--[endif]-->كامپايل كردن برنامه جهت اجراي آن روي Datapath جديد.
به اين ترتيب سختافزار به گونهاي اختصاصي ميگردد كه اجراي يك يا چند دستورالعمل پركاربرد و كليدي بر روي آن كارآمد تر گردد. با وجود اينكه اين راهكار در افزايش عملكرد برنامهها موثر ميباشد با دو محدوديت عمده مواجه است :
<!--[if !supportLists]-->1. <!--[endif]-->نوعا در پردازندههاي ASIP، يك پردازنده عمومي كه از پيش مستندات طراحي آن موجود ميباشد به گونه ارتقا يافته و اختصاصي ميگردد كه بتواند برنامه خاصي را سريعتر اجرا كند، لذا محدوديتهاي زمانبندي و مساحتي كه اين پردازنده بر روي كدگشاي دستورالعمل خود دارد موجب ميشود تا پيچيدگي دستورالعملهايي كه در مرحله سوم طراحي ASIP در نظر گرفته ميشوند به شدت به كدگشا وابسته گردند همچنين محدوديتهاي زماني و مساحتي كدگشا به عنوان يكي از مراحل خطلوله پردازنده مانع از به كار گيري دستورالعملهاي پيچيده گردد، چرا كه افزايش پيچيدگي دستورالعمل موجب افزايش سطح مدار منطقي كدگشا شده و همچنين عمليات كدگشايي را زمانبر تر ميكند، اين موضوع مانع بهينهسازي هرچه بيشتر خط لوله ميشود. به اين خاطر همواره براي تابعي كه قصد اختصاصي كردن سختافزار براي آن داريم، محدوديت پيچيدگي وجود دارد.
<!--[if !supportLists]-->2. <!--[endif]-->طراحي كردن كامپايلري كه بتواند دستورالعملهاي پيچيده اضافه شده به ISA را به صورت كارآمدي توليد كند، بسيار دشوار و در برخي مواقع غير ممكن است.
ت) پياده سازي NISC
محققين دانشگاه كاليفرنيا - ايرواين، بر اين باورند كه مجموعه دستورالعملها، يك لايه اضافي ميان كامپايلر و رفتار پردازنده ميباشد و باعث به وجود آمدن سربار پيادهسازي و طراحي هم براي پردازنده و هم براي كامپايلر ميگردد. در هر پردازندهاي پيچيده ترين واحد از نقطه نظر پياده سازي سختافزاري و بحرانيترين مسير از نقطه نظر زماني، واحد كدگشايي دستورالعمل آن به شمار ميرود. در كامپايلرها نيز انتخاب دستورالعمل پيچيده يك فرايند بسيار كند و زمانبر است، اين موضوع يكي از اصليترين عوامل جايگزيني كامپيوترهاي با دستورالعملهاي پيچيده (CISC) با كامپيوترهاي كم دستورالعمل (RISC) بود.
معماري كامپيوتر بدون دستورالعمل (NISC) كه توسط محققين اين دانشگاه ابداع شده است با حذف مجموعه دستورالعمل و به طبع آن واحدكدگشايي دستورالعمل، اين مشكلات را مرتفع كرده است. به بيان ديگر در اين معماري مرحله 3 و 4 طراحي ASIP حذف شده است در عوض كامپايلر به صورت مستقيما برنامه را بر روي Datapath كه براي برنامه مذكور بهينه شده است، اجرا ميكند. به كمك مفاهيم مطرح شده در معماري NISC هر نوع Datapath با هر ميزان پيچيدگي و بهينهسازي قابل پيادهسازي خواهد بود چرا كه هريك از ويژگيهاي يك برنامه ميتواند در توليد Datapath بهينه براي اجراي آن، نقش داشته باشد.
يكي از پيچيدهترين بخشهاي يك پردازنده كه هم طراحي آن دشوار است و هم بخش عمدهاي از مساحت و مصرف توان پردازنده را به خود اختصاص ميدهد واحد كنترل است كه شامل اجزايي مانند كدگشاي دستورالعمل ميگردد تا سيگنالهاي كنترلي Datapath را در زمانهاي مشخص توليد نمايد. اين واحد اغلب داراي بيشترين مسيرهاي بحراني بوده و نيازمند مراحل Verification متعددي چه از نظر تابعي و چه از نظر زماني ميباشد. در معماري NISC با حذف مجموعه دستورالعملها و به طبع آن واحد كدگشايي دستورالعمل، كنترلر پردازنده به طور قابل توجهي ساده خواهد شد لذا پردازنده NISC از اين نقطه نظر ميتواند بسيار سريعتر از ASIPهاي همرده خود عملكرده و نيازمند تلاش كمتري در توسعه و Verification ميباشد.
ادامه دارد....
www.sakhtafzar.com الف