فكرة عامة عن الشرائح اللكترونية القابلة للبرمجة ()Programmable Logic Devices -1مقدمة -2أ -الغرض من هذا المقال هو تقديم فكرة عامة عن الشرائح اللكترونية القابلة للبرمجة والتعرف على تركيبها الداخلي وكيفية برمجتها حتى نتعرف على كيفية استخدامها في تصميم الدوائر اللكترونية ب -من المستفيد من قراءة هذا المقال؟ هذا المقال مفيد لمهندسي اللكترونيات الجدد ولهواة تصميم الدوائر اللكترونية الذين يرغبون في تصميم وتنفيذ دوائرهم الخاصة بطريقة سهلة ومتطورة جـ -ماهي المعلومات الساسية التي يجب معرفتها قبل قراءة هذا المقال؟ يجب معرفة أساسيات الدوائر اللكترونية وأساسيات تصميم دوائر الديجيتال قبل قراءة هذا المقال
-2معلومات هامة عن تصميم الدوائر اللكترونية وتصميم دوائر الديجيتال أن تصميم دوائر الديجيتال يعتمد على كل من -: )1عمليات ( )Boolean Arithmeticوالعمليات الرئيسية في الـ ( )Boolean Arithmeticهي ( )And,Or,Notحيث يمكن تكوين باقي العمليات من هذه العمليات الرئيسية . مثال ()Bit Half Adder 2 )Sum = (x AND NOT y) OR (NOT x AND y )Carry =(x AND y )2دوائر التخزين كما يعتمد تصميم دوائر الديجيتال على دوائر الفليب فلوب ( )Flip Flopوالـ ()Register وهي دوائر تسمح بتنفيذ عمليات تخزين البيانات هـ) أنواع دوائر الديجيتال ( من حيث التزامن) : )1دوائر متزامنة ()Synchronous وهي دوائر تعتمد في عملها على وجود اشارة تزامن ()Clocked )2دوائر غير متزامنة (:)Asynchronous وهي دوائر لتعتمد في عملها على وجود اشارة تزامن ()Non-Clocked و) مزايا تصميم دوائر الديجيتال )1السهولة والبساطة في التنفيذ حيث يمكن بسهولة تصميم وتنفيذ دائرة ديجيتال معقدة عن ان تقوم بتصميم وتنفيذ دائرة أنالوج ()Analog )2السهولة والبساطة في اكتشاف العطال واصلحها نظرا لن دوائر الديجيتال تعتمد على فكرة الفصل والتوصيل فانه من السهل اكتشاف العطال واصلحها وكل خرج فيها ينبغي ان يكون اما صفر او واحد
-3تطور الدوائر المتكاملة ( ) Integrated Circuitsوالشرائح اللكترونية ()Chips )1الترانزستورات )2دوائر الديجيتال البدائية وتكنولوجيا الـ (LSI)Large Scale ))Integration دوائر الديجيتال البدائية كانت قديما تستخدم دوائر أساسية بسيطة مثل دوائر (AND, )OR, NOT ثم ظهر فيما بعد تكنولوجيا ( )LSIوالتي تقوم بتجميع دوائر معقدة داخل شريحة الكترونية صغيرة ومن أمثلتها ( )Decoderو ( )Adderو ()Multiplier جـ) تكنولوجيا ()VLSI( )Very Large Scale Integration وهي شريحة الكترونية اكثر تعقيدا من شريحة ( )LSIتقوم بتجميع العديد من المكونات والدوائر في شريحة واحدة ومن أمثلتها ( )Processorو ()CPU د) ظهرت تكنولوجيا ()Programmable Logic Devices( )PLD
وهي شريحة الكترونية يتم فيها تجميع العديد من الدوائر المتكاملة ويتم توصيل هذه الدوائر بواسطة فيوزات والوظيقة التي تقوم بها الشريحة النهائة تعتمد على عملية البرمجة التي تتم لهذه الشريحة وعملية البرمجة هذه عبارة عن حرق بعض الفيوزات التي تربط الدوائر الداخلية الموجودة في الشريحة عملية الحرق هذه تؤدي الى فصل بعض الفيوزات بين الدوائر وترك الفيوزات الخرى متصلة ومن أمثلة شرائح ( )PLDشريحة ( )ROMوشريحة ( )PALوشريحة ( )PLAsوالفرق الرئيسي بين هذه الشرائح هو مكان الفيوزات التي يمكن حرقها والتوصيلت الثابتة التي ليمكن حرقها ملحوظة نظرا لن هذه الدوائر الداخلية في شريحة ( )PLDمتصلة بواسطة فيوزات يتم حرقها عند البرمجة فانه ليمكن برمجة شريحة ( ) PLDال مرة واحدة فقط التركيب الداخلي لشريحة ()PAL
الشكل ( : )1تركيب شريحة ()PAL هـ) الشرائح اللكترونية المصنعة لغرض محدد ()ASIC وهي شرائح الكترونية يتم بناؤها لتنفيذ غرض محدد وهناك نوعان منها-: )1النوع الول شرائح تحتوي بداخلها على العديد من الدوائر اللكترونية )2النوع الثاني شرائح تحتوي بداخلها على دائرة واحدة و) الشرائح اللكترونية المعقدة القابلة للبرمجة()CPLD هي شرائح الكترونية أكثر تعقيدا من شرائح( )PLDوتحتوي بداخلها على بلوكات من شرائح ( )PLDوهي تشبه الى حد كبير في تعقيدها شرائح ( )PALالتي سبق شرحها ولكن شرائح (( CPLDعدد الدوائر بها أكثر ز) الشرائح اللكترونية )Field Programmable Gate Arrays )FPGA هي شرائح الكترونية تركيبها العام يسمح باستيعاب عدد كبير جدا من الشرائح اللكترونية وفي حين ان شرائح( )CPLDبها امكانية تواجد عدد كبير من الشرائح اللكترونية بداخلها فان شرائح ( )FPGAتسمح بعدد محدود من الدوائر بداخلها ولكنها يتوافر بها عدد اكبر
من دوائر الفليب فلوب شرائح ()CPLD
( )Flip-Flopنسبة الى عدد الدوائر المسموح بها في
الشكل ( : )2تركيب شريحة ()FPGA
4 -
التركيب االداخلي لشرائح (FPGA أ) تتكون شرائح( )FPGAداخليا من بلوكات من الدوائر اللكترونيةوكل بلوك يتكون من دوائر صغيرة موزعة على هيئة مجموعة من الخليا( )LOGIC CELLSوتتكون كل خلية عادة من دائرة فليب فلوب ()Flip-Flopوبعض الدوائر الخرى التي تختلف حسب كل من الشركة المصنعة ( )Vendorوالـ ()Familyالتي تنتمي لها شريحة الـ ()FPGA ملحوظة كل شركة مصنعة لشرائح FPGAتستخدم اسم خاص لوصف الخليا وكيفية بنائها ومن أمثلة هذه السماء ()Logic Blockو()Logic Element ب) كما يتواجد داخل الخليا ()Logic Cellsدائرة )LUT )Look up Tablesوهي تشبه الـ( )ROMsبعض أنواع شرائح FPGAيتواجد بها دوائر ذاكرة أخرى مثل SRAMو(Dual )Port Memoryو()CAMوهي دوائر يتم استخدامها بشكل خاص إما في لغة ()HDLاو باستخدام دوائر خاصة في عملية رسم الدوائر بالبرامج الخاصة schematic entry جـ) وسائل الربط والتوصيل( )Routing Resourcesبين دوائر شريحة ()FPGA وسائل الربط والتوصيل في شريحة ()FPGAهي قنوات توصيل وأسلك ومفاتيح تربط بين الدوائر الداخلية مثل دوائر Memory, LUT & Logic Cells د) pinsأطراف التوصيل الخارجية وبهذه الوسائل يمكن الربط بين الدوائر الداخلية في الشريحة أطراف التوصيل الخارجية ()PINs لشرائح ()FPGA تختلف في كيفية توزيعها وترتيبها فبعض الشرائح يتم توزيع ترتيبها بطريقة ()TTLأو( )CMOSأو( )PCIأو ( )AGPاو اي طريقة اخرى .لذلك فان شرائح ( )FPGAيمكن ان تستخدم للربط بين تكنولوجيات مختلفة من تكنولوجيات الدوائر
هــــ) pinsأطراف التوصـــيل الخارجيـــة ( )Clockو ()PLLبعـــض شرائح ( )FPGAتخصـــص أطراف توصــيل ذات ســرعة عاليــة للــ ( )Clockو ( )Resetوبعــض شرائح ( )FPGAيمكــن ان يكون لها بلوكات للتحكم في ال ( )Clockو ( )PLLمثل ( )ClockMultiplierو ()Divider
الشكل(Xilinx's Virtex Slice )3
الشكل (Altera's Apex Logic Element )4
-6اللوحات اللكترونية المخصصة لشرائح ()FPGA هناك العديد من اللوحات اللكترونية المخصصة لشرائح ( )FPGAومنها .1لوحات عرض ( )Demoللشرائح .2ولوحات اخرى لتطبيقات معينة () Applications هذه اللوحات تتراوح من -: ( .1لوحات مخصصة لشرائح ( )FPGAالصغيرة يمكن ان تكون مزودة بـ )External Headersومجموعة توصيلت .2وحتى لوحات كبيرة ومعقدة مزودة بشرائح ربط أخرى ( )Interface Chipsوكذلك بشرائح ()FPGA
-11لماذا نستخدم الشرائح اللكترونية القابلة للبرمجة؟ .1ليـس هناك حاجـة لعمليـة تصـنيع معقدة لتنفيـذ الدوائر اللكترونيـة باتخدام شرائح ( )FPGAاذا كانت الدائة اللكترونية موجودة أصل ضمن مكونات شريحة ()FPGA .2من السهل واكتشاف العيوب وتعديلها في شرائح ( )FPGAبالنسبة ()ASIC
- 12بناء وحدة معالجة مركزية لغرض خاص - 13الدوائر اللكترونية القابلة لتغيير وظائفها أثناء تشغيلها أحد مزايا الشرائح اللكترونية القابلة للبرمجة انها يمكن اعادة تغيير وظيفتها أثناء عملها ،وهذا يعني أن وظيفة الشريحة اللكترونية ( )FPGAيمكن ان يتم تغييرها خلل تشغيلها ،ميزة هذه الخاصية هي أنه يمكـن لشخـص مـا وضـع العديـد مـن التصـميمات داخـل شريحـة ( )FPGAوهذه التصـميمات لتعمـل فـي شريحة ( )FPGAفي نفس الوقت ولكن يتم تشغيل بعضها فقط عندما يتم الحاجة اليهم وفي هذه الحالة يمكننا وضع العديد من التصميمات في شريحة ( )FPGAواحدة أكثر بكثير من الحجم الحقيقي لها على سبيل المثال هناك بعض التصميمات تحتاج ان يتم تنفيذها فقط عند بداية تشغيل النظام اللكتروني ثم ليتم استخدامها بعد ذلك اما باقي التصميمات فيمكنها أن تعمل فقط عندما يحتاج المستخدم منها أن تعمل لذلك اذا قمنـا بوضـع كـل هذه التصـميمات معـا على شريحـة ( )FPGAفاننـا سـنحتاج شريحـة ()FPGA كـبيرة جدا ولكـن بفضـل خاصـية امكانيـة تغييـر وظيفـة الشريحـة اثناء تشغيلهـا فاننـا يمكننـا وضـع العديـد مـن التصميمات على شريحـة ( )FPGAواحدة ثم نقوم بتشغيل التصميم الذي نرغـب أن تعمـل الشريحـة طبقا له موضـع التنفيذ ثم نقوم بفصل هذا التصميم وتشغيل تصصميم آخرطبقا لحتياجاتنا وبذلك نقلل
الحجم الذي تحتاجه شريحة ()FPGA - 14تصميمات الشرائح اللكترونية المعروضة بشكل مجاني ان تصـميمات الهاردويـر لشرائح ( )FPGAيتـم عرضهـا بشكـل مجانـي لسـتخدامها فـي برمجـة شرائح ( )FPGAولغات ( ، )HDLالمصــممون والهواة يمكنهــم كتابــة كود ( )HDLثــم نــبرمج هذا الكود على شرائح (FPGA .3 -7أساليب تصميم برنامج شريحة ( )FPGAعملية التصميم هي-: أ -تحديد الغرض من الشريحة تحديد المشكلة المراد حلها والغرض من الشريحة ومانحتاج لتنفيذه ب -وضع التصميم )1طريقـة التصـميم الولى (رسـم الهيكـل البنائي للدائرة الكهريـة) ()schematic Entry ببرنامج الحاسوب .وهذه الطريقة غير مجدية للتصميمات كبيرة الحجم )2طريقة التصميم الثانية (كتابة برنامج باستخدام احدى لغات )HDL هـو السـلوب الذي يصـف تركيـب الدوائر اللكترونيـة باسـتخدام برنامـج كمـبيوترواحدى لغات ( )HDLمثل VHDL & Verilog ماذا تعني ..VHDL هي لغة توصيف الكيان الصلب للدارات المتكاملة عالية السرعة. المحاكاة بدأت بالطريقة البرمجية و هذا الحل على روعته لم يكن كافي ًا لننا أحياناً نصنع جزء من دارة ضخمة وعلينا أن نختبر أداء هذا الجزء مع باقي الدارة وقد لتكون باقي الدارة من صنعنا أو متوفر لها محاكاة كذلك فإن هذه الطريقة لتساعدنا في التصميم. فنحن لزلنا نصمم الدراة على الورق من خلل جداول الحقيقة والعلميات المنطقية ثم
نطبقها على الحاسب .إذاً لبد من دارات قابلة للبرمجة بنيوياً جـ -المحاكاة ()Simulation د -تحليل التصميم ()Synthesis هـي عمليـة اسـتنباط مكونات الدائرة التـي تـم تصـميمها بواسـطة لغـة ( )HDLلتحويـل الوصـف الى دوائر الكترونيــة وهذه الخطوة لتســتخدم فــي حالة اســتخدام اســلوب رســم الهيكــل البنائي للدائرة schematic Entry هـ -وضع المكونات في أماكنها والربط بينها()Place and route هذه الخطوة تستخدم لمقابلة الدوائر المصممة بالدوائر والموارد المتاحة بال FPGAووضع الدوائر بالماكـن المناسـبة بالشريحـة وبعـد وضـع المكونات فـي أماكانهـا يتـم ربطهـم سـويا باسـتخدام قنوات التوصيل والسلك الداخلية .هذه الخطوة تربط كذلك بين أطراف التوصيل الخارجية للشريحة()pins مع باقي أجزاء الدائرة الداخلية التي سيتم توصيل الشريحة بها و -توليد الـ()Bit Stream عمليـة توليـد الــ ( )Bit Streamأو ملف البرمجـة ( )Programming Fileالذي يحتوي على كــل المعلومات عــن تصــميم الدائرة وكيــف يتــم مقابلة التصــميم بالمواردالموجودة بال()FPGA وكيــف ينبغــي ان تتصــل المفاتيــح الداخليــة للـــ( .)FPGAوهــو الملف الذي يســتعمل لبرمجــة الشريحة. وبرمجـة ملف الــ ( )Bit Streamيعتمـد على الشريحـة والشركـة المصـنعة لهـا وكـل شريحـة لهـا طريقة برمجة محددة ويتم تزويدها ببرنامج خاص لبرمجتها طريقة لتصميم الهاردوير ( )Hardware Designوهي طريقة لوصف تصميم الهاردوير وهناك العديــد مــن لغات ( HDLومعظــم هذه اللغات يمكــن ان تصــف عمليات ديجيتال أســاسية مثــل ( )AND,OR,NOTواللغات الخرى الكثـر تعقيدا والكثـر تقدمـا للمسـتخدم ان يصـف التصـميم بطريقـة يمكــن ان يتــم قراءتهــا بواســطة البشــر علي ســبيل المثال فانهــا تســمح للمســتخدم ان يســتخدم أوامــر ( )Loops,Case,Ifوالتـي تجعله يركـز على التصـميم نفسـه (كـبرنامج) وليـس على الهاردويـر و معظـم لغات ( )HDLتعرف أطراف الدخـل والخرج للشريحـة ووظائفهـا الداخليـة ومـن أمثلتهـا( )Verilogو ( )VHDLو ()AHDL ما هو CPLD؟ طريقك الى تصميم الدوائر المتكاملة الخاصة بك من نوع )LSI )Large Scale Integration CPLDاختصار( )Complex Programmable Logic Deviceومعناها (الدوائر المتكاملة المنطقية المعقدة القابلة للبرمجة). الدوائر المتكاملة من نوع CPLDهي نوع مصغر من FPGAوهي تحتوي على عدد أقل من البوابات المنطقية وهي متوفرة في السواق وبسعر أقل ويمكنك استخدامها بسهولة وأقل تعقيدا ويمكنك عن طريقها عمل العديد من الدوائر المتكاملة المنطقية في ICواحد فقط. مثال :على سبيل المثال في حالة الدائرة المتكاملة رقم 7400والتي تحتوي على أربع بوابات منطقية من نوع ، NANDوالدائرة المتكاملة من نوع 7404والتي تحتوي على ستة بوابات من نوع NOT وكل منهما دائرة متكاملة منفصلة ،فاذا اردنا توصيلهما ببعضهما البعض فاننا نحتاج الى توصيلهما على لوحة مطبوعة بتوصيلت خارجية. أما في حالة ال CPLDفاننا نوصل بين البوابات داخل الدائرة المتكاملة عن طريق برنامج خاص وبذلك تقل كثيرا التوصيلت الخارجية في اللوحة المصبوعة
وطبعا نحن هنا قدمنا مثال بسيطا لدائرتين متكاملتين فقط ،ولكن في الواقع فان هذه التقنية تحل محل عشرات وربما مئات الدوائر المتكاملة ،وذلك نظرا لحتوائها على عدد كبير من البوابات المنطقية تصل الى مئات أو ألف وبها عدد كبير من أطراف الدخل والخرج ،ولكن بالطبع تقف عند حدود معينة حسب عدد البوابات والطراف. في تدريبنا هذا سندرس الشرائح من عائلة XC9500والتي تنتجها شركة XILINIXزيلينيكس وهي عائلة مغلفة في شكل PLCCوهي تعني()Plastic Leaded Chip Carrierومعناها بالعربية الشريحة المغلفة بالبلستيك المدعم بالرصاص . وفي الجدول التالي سوف نعرض بعض أنواع العائلة XC9500 : PLCCالشريحة المغلفة بالبلستيك المدعم بالرصاص Plastic Leaded Chip Carrier :FBوهي تعني عدد الوظائف التي يمكن أن تقوم بها Function Blockفمثل عندما يكتب 2FBغان ذلك يعني أنه يمكن القيام بوظيفتين في نفس الوقت. :Gatesتعني عدد البوابات الموجودة في الشريحة. :Macrocellsالماكرو هو وحدة متكاملة يمكن ان تقوم بعملية منطقية كاملة مثل الجامع الكامل full adderأو المسجلت .registers :Pinعدد الطراف. مثلها مثل المتحكمات الدقيقة الميكروكنترولر فان ال CPLDلها عدد مرات محدود للبرمجة ،وذلك لن البرنامج يكتب على ذاكرة من نوع فلش . flash memoryوفي حالة العائلة من XC9500فان عدد مرات الكتابة هي 10000مرة. وأخيرا من أحد مميزات هذا النوع أنه يمكن اعادة كتابته اثناء وجوده في الدائرة وأثناء عملها ول يحتاج الى ازالته من الدائرة للبرمجة . والن بعد هذه المقدمة لنتعرف الن على تركيب هذه العائلة XC9500من الداخل. ملحوظة:الدائرة المتكاملة رقم XC9572التي تحتوي على 1600بوابة و 84طرف متوفرة بالسوق $ المصري بسعر 75جنيه مصري(حوالي 12.5
تركيب ال :FPGA هناك نوعان من دوائر ال FPGA
-1الدوائر "الخشنة الحبيبات " : coarse-grained وهى تتكون من عدد قليل من الوحدات المنطقية الكبيرة والقوية ،فكل وحدة تعتبر دائرة مكونة من عدة بوابات منطقية ،ويمكن لكل عنصر ئان يكون قادرا على جمع أو مقارنة عددين كاملين.
-2الدوائر "الناعمة الحبيبات" :fine-grained وهى تتكون من عدد كبير من الوحدات المنطقية البسيطة يكون كل عنصر قادرا فقط على مقارنة رقمين ثنائيين أى يمكن اعتباره فعل بوابة منطقية واحدة.
إستخدامات :FPGA -1البث الفيديوى : تم بناء نظام بث فيديوى من دائرة متكاملة واحدة قادرة على اعادة تشكيل نفسها أربع مرات لكل صورة frameفيديوية واحدة ،لذا فإنها تتطلب فقط ربع الدوائر التى يمكن أن نحتاج اليها لبناء مثل هذا لنظام بدوائر ال . ASICفأول تقوم الدائرة FPGAيتخزين الشارة الفيديوية فى الذاكرة ن ثم تقوم بتحويلين مختلفين لمعالجة الصورة ،وفى النهاية تحول الى موديم لرسال الشارة الىالمرحلة التالية .
-2التعرف على الصور : يمكن لشريحة FPGAالخاصة بالتعرف على الصور أن تهيئ نفسها بمجرد رؤية الشئ الذى تنظر اليه ، فإذاكانت الصورة تحتوى على سيارة أوشاحنة ،فإن أجزاء الدائرة المصممة أصل لتتبع الطائرات السريعة أو الشخاص البطيئى الحركة ،يمكن أن تعيد تشكيل نفسها بحيث تركز بدل من ذلك على الليات البرية . ويوجد العديد من التطبيقات الخرى مثل مقارنة الخطوط والتعرف على الشخاص والشياء المحيطةوتعمية الرسائل والتشفير المعقد جدا وتعرف الهداف الحربية والتصالت .
مستقبل الحوسبة التشكلية :FPGA تبشر دوائر ال FPGAبتطبيقات واعدة فى المستقبل ستجعلك ليس فقط تتحكم فى البرامج soft ware ولكنك أيضا سوف تتحكم فى شكل ووظيفة المكونات الصلبة hard wareوذلك بتحميل البرنامج الخاص بالتطبيق الذى تريده ،فكما تقوم اليوم بتحميل برامج منشبكة النترنت ،فإن أجهزة المستقبل يمكنها تحميل تشكيلت جديدة للدوائر كلما استدعى المر ذلك) نرجو الن ان نكون قد وفقنا فى ايصال الصورة واضحة حتى نعرف جميعا ماهية المشروع الذى نحن مقبلون على دراسته ،وسنبدأ فى المرة القادمة بإذن ال شرح فكرة الجهاز وإنشاءه وكيفية عمله بالتتابع انشاء ال. مثل لو أن لدينا أربع بوابات NANDموصلين لكي تكون دائرتهم النطاط FILP_FLOPونريد أن نحوله إلى بوابة ANDذات أربع مداخل فتحدث الخطوات التالية فيتم أول إعطاء أمر للبرنامج الخاص بالـ FPGAبفصل كل البوابات عن بعضها فيحدث التي ثم يعطى أمر بتحويل جميع البوابات إلى ANDفتتحول إلى AND ثم يعطى أمر بتوصيل خرجي بوابتين بدخلي بوابة أخرى وإهمال البوابة الرابعة وهكذا تتحول من دائرة إلى أخرى ،أما عن التركيب فيمكن أن نمثلها على أنها مجموعة بوابات تتصل ببعضها بمفاتيح الكترونية مثل ICرقم 4066على سبيل المثال
VHDL Very high speed integrated circuits Hardware Description Language إن الدوائر المصممة لمهام محددة ( الغير قابلة للبرمجة) والمعروف باسم (الدوائر المتكاملة المحددة التطبيقات) ( application-specific integrated circuits ) ASICتؤمن بدقة الداء الوظيفى اللزم لمهمة معينة فقط .فيستطيع مصممو الحاسبات إنتاج معالجات أصغرحجما وأقل تكلفة واكثر سرعة وتستهلك طاقة أقل من المعالجات القابلة للبرمجة ،فمعالج رسومات graphicsمن نوع VGAيستطيع أن يرسم خطوطا أو يلون صورا على الشاشة اسرع من معالج وحدة معالجة مركزية عامة الستخدام بعشرة أضعاف أو مائة ضعف . بنية البرنامج المكتوب بلغة VHDL تهتم هذه اللغة بتوصيف الدارة التي نريد إنشاءها من ناحيتين أساسيتين الناحية الخارجية (مداخل مخارج ) والناحية الداخلية وهي وظيفة الدارة أو كيف تتعامل الدارة مع الدخل وكيف يتغير الخرج وبشكل عام يتألف البرنامج من Header-1 Interface )Entity(-2 Functions)Architecture(-3
القسم الول وهو الترويسة Header يتم التصريح فيه عن المكتبات التي سنستخدمها في برنامجنا الشكل العام لهذا القسم:
;LIBRARY library_name ;USE library_name.package_name.ALL وكمثال عن طريقة التصريح على المكتبات:
;LIBRARY ieee ;USE ieee.std_logic_1164.ALL حيث استخدمنا مكتبة IEEEالقياسية ومنها الحزمة std_logic_1164وهي تحوي على تعريف أنواع المعطيات المنطقية والحسابية والعمليات عليها.وتعد من أكثر المكتبات استخداماً الن برنامجنا جاهز لن يقبل منا أي عمليات منطقية أو حسابية نجريها على متحولتنا. الدرس الثاني القسم الثاني)Interface )Entity : في هذا القسم سنعرف الشكل الخارجي للدارة وذلك عبر تعريف المداخل والمخارج وطبيعتها الشكل العام لهذا الجزء:
ENTITY entity_name IS PORT )in1,in2,…… :attribute data_type ;out1,out2,….:attribute da ;(ta_type ; END entity_name حيث نقوم باعطاء اسم للكيان الذي نريد تعريفه ,ثم نعرف أرجل هذا الكيان …,In1,in2هي المتحولت طبعاً يمكننا تعريف أي متحول نشاء مؤلف من احرف وأرقام وبدون مسافات Attributeهي عبارة عن نوع الرجل ليس مداخل ومخارج فقط.. VHDLتؤمن لنا العديد من الخيارات لرجل الدارة يمكن أن تكون INأي دخل فقط OUTخرج فقط INOUTدخل وخرج BUFFERأي مع امكانية التغذية العكسية (ذاكرة)أو :Data_typeهي نوع البيانات التي تتعامل معها هذه الرجل وبالتالي العمليات التي يمكن تطبيقها عليها ماهي أنواع البيانات التي تسمح بها VHDL؟!! بشكل عام هناك ثلثة أنواع أساسية std_logic-1وهي عبارة عن خط واحد (متحول واحد) يأخذ قيمة منطقية )on-off( 1-0 :std_logic_vector-2وهي عبارة عن مجموعة خطوط( )busاو عدة متحولت متسلسلة تاخذ قيم منطقية )on-off( 1-0 :integer-3وهي عبارة عن مجموعة خطوط ()busأو عدة متحولت متسلسلة عددها يحدد بالتمثيل الثنائي اللزم لعلى عدد عشري قادرة على التعامل معه .أو bitبدل من std_logic كمثال على طريقة تعريف هذا القسم لنأخذ المثال التالي:
ENTITY my_first IS ; PORT ) x1,x2,x3 : IN STD_LOGIC ;(y: OUT STD_LOGIC_VECTOR )1 TO 5 ;(c:BUFFER INTEGER RANGE 0 TO 4 ; END my_first
فهيy …) أما-and-or-not( كمداخل منطقية تقبل اجراء العمليات المنطقية عليهاx1,x2,x3 قمنا بتعريف ) تقبل ايضاً العمليات المنطقيةy1,y2,y3,y4,y5( 5 إلى1 مجموعة مخارج متسلسلة من ( أرجل3 وبالتالي تتألف من4 هي عبارة عن مجموعة مخارج ذات ذاكرة يمكن أن تقبل أكبر قيمة عشريةC )ثنائي100= عشري4 .وهي من نوع عشري أي يمكن تطبيق عليها العمليات الحسابية وليس المنطقية لقد قمنا في هذا الدرس بكتابة بعض الكلمات باحرف كبيرة والخرى بأحرف صغيرة هذا:ًملحظة هامة جدا ولكن الكلمات المكتوبة بأحرفVHDL ليعني أن علينا اتباع نفس السلوب حين كتابتنا في برنامج محاكاة . كبيرة تعبر عن الكلمات المفتاحية أو المحجوزة في اللغة
VHDL( Half adder( أمثلة التصميم للـ- 10 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY Adder_ent IS PORT ( Op1 : IN std_logic; op2 : IN std_logic; carry : OUT std_logic; Result : OUT std_logic);
-- Operand 1 -- Operand 2 -- Output carry -- Result
END Adder_ent; ARCHITECTURE behavior OF Adder_ent IS BEGIN -- behavior Result <= (Op1 AND NOT Op2) OR (NOT Op1 AND Op2); Carry <= Op1 AND Op2; END behavior;
-
8 bit Adder LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; ENTITY Adder_ent IS PORT ( clk : IN std_logic; -- System clock rst_n : IN std_logic; -- System reset Op1 : IN std_logic_vector(7 DOWNTO 0); -- Operand 1 op2 : IN std_logic_vector(7 DOWNTO 0); -- Operand 2 Result : OUT std_logic_vector(7 DOWNTO 0)); -- Result END Adder_ent; ARCHITECTURE behavior OF Adder_ent IS BEGIN -- behavior PROCESS (clk, rst_n) BEGIN -- PROCESS
IF rst_n = '0' THEN -- asynchronous reset (active low) Result <= (OTHERS => '0'); ELSIF clk'event AND clk = '1' THEN -- rising clock edge Result <= Op1 + op2; END IF; END PROCESS; END behavior;
-
Counter LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; ENTITY Adder_ent IS PORT ( clk : IN std_logic; -- System clock rst_n : IN std_logic; -- System reset Count : OUT std_logic_vector(7 DOWNTO 0)); -- Count END Adder_ent; ARCHITECTURE behavior OF Adder_ent IS SIGNAL counter : std_logic_vector(7 DOWNTO 0); -- internal counter BEGIN -- behavior PROCESS (clk, rst_n) BEGIN -- PROCESS IF rst_n = '0' THEN -- asynchronous reset (active low) Counter <= (OTHERS => '0'); ELSIF clk'event AND clk = '1' THEN -- rising clock edge Counter <= counter + 1; END IF; END PROCESS; count <= counter; END behavior;
-
7-Segment decoder LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY Decoder IS PORT ( InBin : IN std_logic_vector (3 DOWNTO 0); Display : OUT std_logic_vector (6 DOWNTO 0)); END Decoder; ARCHITECTURE rtl OF decoder IS SIGNAL t : std_logic_vector (6 DOWNTO 0); BEGIN seg_process : PROCESS (InBin) BEGIN CASE InBin IS WHEN "0000" => t <= "1111110"; WHEN "0001" => t <= "0110000";
WHEN "0010" => t <= "1101101"; WHEN "0011" => t <= "1111001"; WHEN "0100" => t <= "0110011"; WHEN "0101" => t <= "1011011"; WHEN "0110" => t <= "0011111"; WHEN "0111" => t <= "1110000"; WHEN "1000" => t <= "1111111"; WHEN "1001" => t <= "1110011"; WHEN "1010" => t <= "1110111"; WHEN "1011" => t <= "0011111"; WHEN "1100" => t <= "1001110"; WHEN "1101" => t <= "0111101"; WHEN "1110" => t <= "1001111"; WHEN OTHERS => t <= "1000111"; END CASE; Display <= NOT t; END PROCESS seg_process; END rtl;