Professional Documents
Culture Documents
هي شرائح الكترونية أكثر تعقيدا من شرائح( )PLDوتحتوي بداخلها على بلوكات من
شرائح ( )PLDوهي تشبه الى حد كبير في تعقيدها شرائح ( )PALالتي سبق شرحها
ولكن شرائح (( CPLDعدد الدوائر بها أكثر
هي شرائح الكترونية تركيبها العام يسمح باستيعاب عدد كبير جدا من الشرائح اللكترونية
وفي حين ان شرائح( )CPLDبها امكانية تواجد عدد كبير من الشرائح اللكترونية بداخلها
فان شرائح ( )FPGAتسمح بعدد محدود من الدوائر بداخلها ولكنها يتوافر بها عدد اكبر
( )Flip-Flopنسبة الى عدد الدوائر المسموح بها في من دوائر الفليب فلوب
شرائح ()CPLD
4
-
أ) تتكون شرائح( )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
المحاكاة بدأت بالطريقة البرمجية و هذا الحل على روعته لم يكن كافي ًا لننا أحياناً نصنع
جزء من دارة ضخمة وعلينا أن نختبر أداء هذا الجزء مع باقي الدارة وقد لتكون باقي
الدارة من صنعنا أو متوفر لها محاكاة كذلك فإن هذه الطريقة لتساعدنا في التصميم.
فنحن لزلنا نصمم الدراة على الورق من خلل جداول الحقيقة والعلميات المنطقية ثم
نطبقها على الحاسب .إذاً لبد من دارات قابلة للبرمجة بنيوياً
جـ -المحاكاة ()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
مثلها مثل المتحكمات الدقيقة الميكروكنترولر فان ال 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
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 :
في هذا القسم سنعرف الشكل الخارجي للدارة وذلك عبر تعريف المداخل والمخارج وطبيعتها
الشكل العام لهذا الجزء:
حيث نقوم باعطاء اسم للكيان الذي نريد تعريفه ,ثم نعرف أرجل هذا الكيان
…,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 Adder_ent IS
PORT (
Op1 : IN std_logic; -- Operand 1
op2 : IN std_logic; -- Operand 2
carry : OUT std_logic; -- Output carry
Result : OUT std_logic); -- Result
END Adder_ent;
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;
BEGIN -- behavior
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;
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;
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;