‫فكرة عامة عن‬

‫الشرائح اللكترونية القابلة للبرمجة‬
‫(‪)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;

Sign up to vote on this title
UsefulNot useful