12
١ اﻟﺴﻮرﻳﺔ اﻟﻌﺮﺑﻴﺔ اﻟﺠﻤﻬﻮرﻳﺔ اﻟﻌﺎﻟﻲ اﻟﺘﻌﻠﻴﻢ وزارة ﺣﻠﺐ ﺟﺎﻣﻌﺔ واﻻﻟﻜﺘﺮوﻧﻴﺔ اﻟﻜﻬﺮﺑﺎﺋﻴﺔ اﻟﻬﻨﺪﺳﺔ آﻠﻴﺔ اﻟﺤﻮاﺳﻴﺐ هﻨﺪﺳﺔ ﻗﺴﻢ اﻟﺤﺎﺳﺒﺎت ﻣﺨﺒﺮ اﻟﻤﻬﻨﺪس إﻋﺪاد: ﻋﺰﻳﺰ أﺳﺎﻣﺔ ﻣﺎ ﺷﺨﺺ اﺳﺘﺠﺎﺑﺔ زﻣﻦ ﻗﻴﺎس ﻣﺆﻗﺖ دارةReaction Timer Circuit اﻟﺜﺎﻟﺜﺔ اﻟﺴﻨﺔ- اﻟﺤﻮاﺳﻴﺐ هﻨﺪﺳﺔ ﻗﺴﻢ اﻷول اﻟﺪراﺳﻲ اﻟﻔﺼﻞ٢٠١٠ - ٢٠١١

VHDL Quartus II 04

Embed Size (px)

DESCRIPTION

Tutorial about Quartus II and DE2 in Arabic

Citation preview

١

الجمهورية العربية السورية وزارة التعليم العالي

آلية الهندسة الكهربائية وااللكترونية–جامعة حلب مخبر الحاسبات–قسم هندسة الحواسيب

أسامة عزيز: إعداد المهندس

دارة مؤقت قياس زمن استجابة شخص ماReaction Timer Circuit

قسم هندسة الحواسيب-السنة الثالثة

الفصل الدراسي األول٢٠١١ - ٢٠١٠

1

من عملي مادة تصميم النظم المنطقية والدارات الرقميةالجلسة الثامنة قسم هندسة الحواسيب-السنة الثالثة

:النقاط التي ستعالج في هذه الجلسة هي

Quartus IIباستخدام البرمجية تصميم دارة مؤقت قياس زمن استجابة شخص ما وتنجيزها -١ .DE2والبورد .VHDLة تصميم دارة المؤقت هذه باستخدام منهجية التصميم الهرمي بلغة عرض آيفي -٢ باستخدام نمط DE2 على البورد FPGA اختبار صحة أداء الدارة من خالل برمجة شريحة الـ -٣ .JTAG البرمجة

DE2البورد وQuartus IIباستخدام البرمجية تصميم دارة مؤقت قياس زمن استجابة شخص ما وتنجيزها -١

وذجي Electronic Devicesتعمل األجهزة االلكترونية أخير نم بسرعات عالية جدا بشكل ملحوظ مع زمن تTypical Delay ة ة منطقي ر بواب ة واحدة ( ns 1 ال يتجاوز Logic Gate عب انو ثاني ذه الجلسة ) . ن في ه

!!!شخص ما : بكثير سنقوم بتصميم دارة منطقية لقياس سرعة االستجابة لنظام أبطأ

ه نقوم ب ا س اس زمن رد الفعل م ة يمكن استخدامها لقي Reaction Time) االستجابة ( هو تصميم دارة رقميين ائي إصدار ضوئي . لشخص ما تجاه حدث خاص مع دارة بإضاءة ضوء صغير بواسطة ثن وم ال د ( تق أو لي

ر إلآاستجابة . Light-Emitting Diode ( LED )) اختصارا ى الشخص المختب د يتوجب عل ضاءة هذا الليا يمكن Specific Push-Buttonأن يحاول ضغط آباس لحظي محدد اس . بأسرع م وم بقي دارة أن تق ى ال عل

.الزمن المنقضي بدءا من لحظة إضاءة الليد وحتى لحظة ضغط الكباس اللحظي

ارة ) أو رد الفعل ( لقياس زمن االستجابة ة هذا تلزمنا إش ردد مناسب Clock Signalنبضات ساعة مربع . بتداره ردد مق ذا يجب استخدام نبضات ساعة بت ا ه ة HZ 100في مثالن زمن بدق اس ال ى يمكن قي من 1/100 حت

ة اس ) . SEC 0.01( الثاني تجابة المق ن االس وع زم ن الن ار م وحتي إظه تخدام ل رض باس ن أن يع -7يمكSegments . ا هاتان اللوحتان ستعر ة آل منه اوية قيم ة متس SEC 0.01ضان معا أجزاء الثانية بفواصل زمني

.99/100 وحتى القيمة 00/100أي من القيمة

رددات اعة ذات ت ات س ارات نبض ادة إش من ع ة تتض نظم الرقمي ة إن ال High-Frequency ClockعاليSignals وباعتبار أننا سنستخدم في هذه الجلسة . لنظم للتحكم بعمل الدارات الجزئية المتنوعة المضمنة في هذه ا

ا MHZ 50بتردد قدره الذي يتضمن مولد نبضات مربعة DE2البورد ذا وانطالق آما رأينا في الجلسة السابقة لردد MHZ 50من التردد داد HZ 100 يمكننا الحصول على الت ك باستخدام ع وب وذل آمقسم Counter المطل

دء . آما عرضنا في الجلسة السابقة Clock Frequency Dividerتردد ا في الب ة ، يتوجب علين في هذه الحالداد د األعظمي للع ة ثابت الع ي الجلسة MAX_COUNTحساب قيم ناها ف ي ناقش ة الت تخدام العالق ك باس وذل

:السابقة MAX_COUNT = ( Fin / 2 Fout ) – 1

ردد Fout هو تردد إشارة الدخل لمقسم التردد و Finحيث أن ارة الخرج لمقسم الت ة . هو تردد إش بتعويض قيم

Fin = 50.000.000 و قيمة Fout = 100 وتحويل القيمة الناتجة إلى النظام الست عشري نجد أن :

MAX_COUNT = 3D08F H ود ل ضمن آ د قلي تخدم بع ة ستس ذه القيم إن ه الي ف ردد VHDLوبالت يم الت ة تقس ز مرحل اء تنجي أي ضمن ( أثن

) .Frequency Divider Processعالجة الخاصة المسماة الم

2

د ى إضاءة لي ادرة عل ون ق تجابة يجب أن تك ن االس ز الرسومي . LEDإن دارة مؤقت زم GraphicalالرمSymbol لثنائي إصدار ضوئي LED ١( مبين في الشكل. (

.CMOS من نوع NOTوابة باستخدام بLEDدارة تحييز ثنائي إصدار ضوئي ) : ١(الشكل ة إن األسهم الصغيرة في الرمز تعني إصدار الضوء من قبل ان . Onالليد عندما يكون في الحال د قطب ذا اللي ( له

ان ي الشكل . Two Terminals) طرف ار ف ى اليس بط ) ١(القطب إل و المه ى The Cathodeه والقطب إلة من . The Anodeهو المصعد ) ١(اليمين في الشكل د في الحال ة العمل ( On أجل وضع اللي يتوجب ) حال

بط ى المه نخفض عل ثال Volts 0( تطبيق جهد م ى المصعد ) م ع عل د مرتف ادة Volts 5 - 3( وجه ذا ) . ع هه في حا . األمر يؤدي إلى سريان التيار عبر الليد وبالتالي إصداره للضوء لة تساوي الجهدين على طرفي الليد فإن

الي ال يصدر أي ضوء Offالحالة يكون في ة ) ١(الجزء األيسر من الشكل . وبالت ل بواب ة NOTيمث ( منطقية ) Inverterعاآس أو ين CMOSباستخدام تقني ين في الشكل ترانزيستورين حقلي ا هو مب والتي تتضمن آم

وي ( أحدهما وع ) العل وع ) السفلي ( واآلخر PMOSمن ن ة تطبيق . NMOSمن ن 'VLED = '0في حال = VLED أما في حالة تطبيق Off وبالتالي فإن الليد يكون في حالة '1' مساويا للقيمة NOTيكون خرج بوابة

ة NOT فإن خرج بوابة '1' دها للقيم ة '0'يكون مساويا عن د يكون في حال إن اللي الي ف وم بإصدار On وبالت ويق .الضوء

ر الترانزيستور . RLتعلقا بقيمة المقاومة إن مقدار التيار المار عبر الليد يكون م د وعب ر اللي ار يمر عب هذا التي

NMOS السفلي ضمن بوابة NOT . باعتبار أن التيار يسري باتجاه بوابةNOT ة عندما يكون خرجها في حالار ) Lowأو ( '0' ا تمتص التي ول أنه ا نق ار األعظمي . The Inverter Sinks The Currentفإنن إن التي

ة ا في حال دما يكون خرجه ا عن م ) عطل ( دون التسبب بضرر Lowالذي يمكن أن تمتصه بوابة منطقية م دائدعى ارة ( IOLي ار Maximum Current When The Output Is Lowاختصارا للعب ة التي أي قيم

د بحيث يكون الت RLيتم اختيار قيمة المقاومة ) . Lowاألعظمي عندما يكون الخرج بحالة ر اللي ار عب ار الم ي

ة اء العمل IOLفي حالتنا هذه أصغر من قيم د أثن ى سالمة اللي اظ عل ـ . للحف ة ل ة النموذجي ادة IOLإن القيم عورد 330 وبالتالي فقد تم اختيار مقاومات قيمتها mA 12تكون مساوية ى الب دات عل سواء DE2 أوم لحماية اللي

ردة دات المنف ت اللي راء الخضراء أو ا( آان بع ) لحم ع الس ار ذات القط ات اإلظه دات لوح Segments-7أو لي : األمر الذي يعطي تيارا قدره Volts 3.3يساوي القيمة Vccوذلك ألن الجهد الكهربائي الذي يمثل القيمة

3.3 / 330 = 10 mA .يسري عبر الليدات عندما تكون في حالة العمل

ة . Push-Button لكباس لحظي Graphical Symbolالرمز الرسومي ) ٢(يبين الشكل ة الطبيعي ( في الحال

ه ) Not Pressedأي عندما يكون الكباس غير مضغوط وي في حين أن ق المسار العل اس تغل إن تماسات الكب فى وضعه الطبيعي . عند ضغط الكباس تقوم تماساته بإغالق المسار السفلي ا إل ود تلقائي اس يع ر الكب د تحري ( عن

) ) . ٢(ية العلوية في الشكل الوضع

3

.Push-Buttonالرمز الرسومي لكباس ضغط لحظي ) : ٢(الشكل عندما يكون غير مضغوط Push_OUT على المخرج '1'في حالتنا هذه ، من الواضح أن الكباس سيزود القيمة

ة الكباسات ( عندما يكون مضغوطا Push_OUT على المخرج '0'في حين أنه سيزود القيمة تماما آما في حال ) . والتي استخدمنا بعضا منها في الجلسة السابقة DE2اللحظية األربعة الموجودة على البورد

كل ين الش ري ) ٣(يب داد عش دارة ع ندوقي ل ط الص ا المخط ز ثنائي انتين BCD Counterمرم ن خ ون م مك

ا ريتين هم اد ( BCD0عش ة اآلح ة ا ( BCD1و ) خان رات خان انتين ) . لعش اتين الخ ن ه رية م ة عش ل خان آات "1001" إلى "0000" خانات ثنائية تأخذ القيم من 4مؤلفة من د تطبيق آل من مجموعتي الخان وبالتالي عن

د العشرية من BCD-To-7Segmentsاألربع هاتين على مدخل محول شيفرة من نوع يمكننا رؤية حاالت العة ة 00القيم ى القيم وع 99 وحت ن الن ار م وحتي إظه ى ل ولي Segments-7عل ي مح ى مخرج ولتين إل موص

) .٣(الشيفرة المتماثلين والموضحين في الشكل

-BCD بطول خانتين عشريتين مع محولي الشيفرة من نوع BCDالمخطط الصندوقي لدارة عداد ) : ٣(الشكل To-Segments7هار من النوع إلظهار قيمة العد على لوحتي إظ-Segments.

إن '1' والذي يجب أن نطبق عليه القيمة Count Enableمدخل تمكين العد يمثل Eالمدخل داد و إال ف ليعمل الع

دخل العداد سيتوقف بشكل مؤقت عن العد ويحافظ على قيمة العد التي وصل إليها دخل . 'E = '0طالما أن الم الم

4

Clearيمثل مدخل تصفير متواقت Synchronous Clear الي إذا نخفض وبالت فعال عند المستوى المنطقي المة لنبضة الساعة آانت قيمة هذا المدخل تساوي الصفر فإن خرج العداد سيصفـر عند ورود الجبهة الصاعدة التالي

Clock بغض النظر عن قيمة المدخل E . 100 من الواضح أن تردد نبضات الساعة هنا يجب أن يساوي القيمة HZ 99 حتى القيمة 00 ألن العداد يجب أن يعد خالل ثانية واحدة من القيمة.

: بعد قليلVHDLالتي سنقوم بتوصيفها بلغة يبين المخطط الكامل لدارة مؤقت قياس زمن االستجابة ) ٤(الشكل

.خص ما المخطط الصندوقي لدارة مؤقت قياس زمن االستجابة لش) : ٤(الشكل

داد DFFآما هو واضح في المخطط فإن خرج القالب د للع ين الع د وتمك ة إضاءة اللي هو الذي يقود آال من حالدما يكون خرج القالب BCDالعشري ذي الخانتين المرمزتين ثنائيا ه عن ة DFF بحيث أن د '0' في حال إن اللي ف

دخل يحافظ على قيمة العد ( يكون غير مضاء والعداد ال يعمل ة E األخيرة له بسبب آون الم ه بحال ) أيضا '0' لان خرج القالب ة DFFفي حين أنه إذا آ د آل نبضة '1' في حال د عن وم بالع داد يق د يكون مضاء والع إن اللي ف

.1ساعة بمقدار

ل موصو DFF للقالب Dالحظ أن المدخل ( لتصفير خرج القالب RSTفي البدء ، يجب ضغط آباس التصفير ة ) ) ٤( ذات المداخل الثالثة الموضحة في الشكل ANDمع مخرج البوابة ى القيم داد إل . 00ولتصفير خرج العون ب أن يك اليج ون Push_Buttonو START ين الكباس آ ث يك غوطين بحي ر مض دء غي ي الب ف

Push_Button = '1' و START = '1' . دخل األول ي أن الم ذا يعن وي ( إن ه ة ) العل سيكون ANDلبوابة ) السفلي ( في حين أن المدخل الثالث '1'بقيمة ين في الشكل ANDلبواب ل خرج الناخب المب ذي يمث ) ٤( وال

ة ) Qالمخرج ( DFFسيكون موصوال إلى خرج القالب ذي يكون بحال ل '0'وال ل قلي ا قب ا نوهن دء آم . في الباس ر الكب د تحري ومRSTبع ة نق ه الطبيعي ى حالت ه إل اس وعودت غط الكب ل START بض ذي يجع ر ال األم

START = '0' ة '1' وبالتالي فإن الناخب سيزود القيمة دخل بواب ى م ة AND إل ا بحال '1' التي سيصبح خرجهة Q سيصبح مخرج القالب HZ 100وعند الجبهة الصاعدة التالية لنبضة الساعة ذات التردد أيضا وبالتالي بحال

د '1' ستصبح بحالة LED_ENABLE أي أن اإلشارة '1' داد بالع دء الع د وب ى إضاءة اللي ا سيؤدي إل أيضا مم ) . أي إحصاء الزمن المنقضي بدءا من لحظة إضاءة الليد ( 00ابتداء من القيمة

5

اس ر بضغط الكب وم الشخص المختب دما يق الب Push_Buttonعن رج الق فير خ ى تص ؤدي إل ك ي إن ذل Q فد وإ اء اللي الي إطف وع وبالت ن ن ار م وحتي اإلظه ى ل اهرة عل ة الظ ون القيم ل وتك ن العم داد ع اف الع -7يق

Segments 0.2 هي نفسها قيمة زمن االستجابة لهذا الشخص والذي يتراوح عادة بين SEC 0.3 و SEC. ة VHDLسنقوم اآلن بعرض آود ا باستخدام البرمجي وم بتنجيزه م نق وشريحة Quartus II لهذه الدارة ومن ث

.DE2 الموجودة على البورد FPGAـ ال

------------------------------------------------------------------------------------------------------------------------ LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ------------------------------------------------------------------------------------------------------------------------ ENTITY REACTION_TIMER IS PORT( RST, CLK_50MHZ, START, PUSH_BUTTON : IN STD_LOGIC; LED_ENABLE : BUFFER STD_LOGIC; BCD0, BCD1 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END REACTION_TIMER; ------------------------------------------------------------------------------------------------------------------------ ARCHITECTURE BEHAVIORAL OF REACTION_TIMER IS SIGNAL CLK_100HZ : STD_LOGIC; SIGNAL CLK_100HZ_COUNTER : STD_LOGIC_VECTOR( 19 DOWNTO 0 ); BEGIN CLOCK_DIVIDER: PROCESS ( CLK_50MHZ ) BEGIN IF CLK_50MHZ'EVENT AND CLK_50MHZ = '1' THEN IF CLK_100HZ_COUNTER < X"3D08F" THEN CLK_100HZ_COUNTER <= CLK_100HZ_COUNTER + 1 ; ELSE CLK_100HZ_COUNTER <= X"00000"; CLK_100HZ <= NOT CLK_100HZ; END IF; END IF; END PROCESS; BCD_COUNTER: PROCESS ( CLK_100HZ ) VARIABLE BCD_D0, BCD_D1 : STD_LOGIC_VECTOR( 3 DOWNTO 0 ); BEGIN IF CLK_100HZ'EVENT AND CLK_100HZ = '1' THEN IF RST = '0' THEN BCD_D0 := "0000"; BCD_D1 := "0000"; ELSIF LED_ENABLE = '1' THEN IF BCD_D0 = "1001" THEN BCD_D0 := "0000"; IF BCD_D1 = "1001" THEN BCD_D1 := "0000"; ELSE BCD_D1 := BCD_D1 + 1; END IF; ELSE BCD_D0 := BCD_D0 + 1;

6

END IF; END IF; END IF; CASE BCD_D0 IS WHEN "0000" => BCD0 <= "1000000"; WHEN "0001" => BCD0 <= "1111001"; WHEN "0010" => BCD0 <= "0100100"; WHEN "0011" => BCD0 <= "0110000"; WHEN "0100" => BCD0 <= "0011001"; WHEN "0101" => BCD0 <= "0010010"; WHEN "0110" => BCD0 <= "0000010"; WHEN "0111" => BCD0 <= "1111000"; WHEN "1000" => BCD0 <= "0000000"; WHEN "1001" => BCD0 <= "0010000"; WHEN OTHERS => NULL; END CASE; CASE BCD_D1 IS WHEN "0000" => BCD1 <= "1000000"; WHEN "0001" => BCD1 <= "1111001"; WHEN "0010" => BCD1 <= "0100100"; WHEN "0011" => BCD1 <= "0110000"; WHEN "0100" => BCD1 <= "0011001"; WHEN "0101" => BCD1 <= "0010010"; WHEN "0110" => BCD1 <= "0000010"; WHEN "0111" => BCD1 <= "1111000"; WHEN "1000" => BCD1 <= "0000000"; WHEN "1001" => BCD1 <= "0010000"; WHEN OTHERS => NULL; END CASE; END PROCESS; FLIP_FLOP: PROCESS ( CLK_100HZ ) BEGIN IF CLK_100HZ'EVENT AND CLK_100HZ = '1' THEN IF RST = '0' THEN LED_ENABLE <= '0'; ELSIF PUSH_BUTTON = '0' THEN LED_ENABLE <= '0'; ELSIF START = '0' THEN LED_ENABLE <= '1'; END IF; END IF; END PROCESS; END BEHAVIORAL; ------------------------------------------------------------------------------------------------------------------------

ال روض أع ود المع ي الك لوآي ف كل س دارة بش يف ال م توص ات Behavioralه ت تخدام معالج الل اس ن خ م

Processes ى دارة إل يم ال دء بتقس الل الب ن خ ك م وي وذل كل بني دارة بش ن توصيف ال ن الممك ه م م أن ع العل مع VHDL وتوصيف آل دارة جزئية بلغة COMPONENTS) دارات جزئية ( مكونات ام بتجمي م القي ومن ث

ى هذه الدارات ان المستوى األعل ل آي ذي يمث ائي وال بعض في الملف النه ة مع بعضها ال Top-Level الجزئيEntity ) ود الرئيسي ادة الك ا يسمى ع ات ) . Main Codeم ذه المكون نقوم بعرض ه ي س ا يل دارات ( فيم ال

7

ود ) الجزئية ل توصيف ا VHDLمع آ ذي يمث ائي ال ود الملف النه م سنعرض آ ا ومن ث ة لكل منه دارة الكلي ل .لمؤقت قياس زمن االستجابة

. بطول خانتين BCDعداد ) : ٥(الشكل

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY BCD_COUNTER IS PORT( CLK, CLEAR, ENA : IN STD_LOGIC; BCD_D0, BCD_D1 : BUFFER STD_LOGIC_VECTOR( 3 DOWNTO 0)); END BCD_COUNTER; ARCHITECTURE BEHAVIORAL OF BCD_COUNTER IS BEGIN PROCESS ( CLK ) BEGIN IF CLK'EVENT AND CLK = '1' THEN IF CLEAR = '0' THEN BCD_D1 <= "0000"; BCD_D0 <= "0000"; ELSIF ENA = '1' THEN IF BCD_D0 < "1001" THEN BCD_D0 <= BCD_D0 + 1; ELSE BCD_D0 <= "0000"; IF BCD_D1 < "1001" THEN BCD_D1 <= BCD_D1 + 1; ELSE BCD_D1 <= "0000"; END IF; END IF; END IF; END IF; END PROCESS; END BEHAVIORAL;

8

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SEVEN IS PORT ( BCD : IN STD_LOGIC_VECTOR(3 DOWNTO 0); LEDS : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END SEVEN ; ARCHITECTURE BEHAVIORAL OF SEVEN IS BEGIN PROCESS ( BCD ) BEGIN CASE BCD IS WHEN "0000" => LEDS <= "1000000"; WHEN "0001" => LEDS <= "1111001"; WHEN "0010" => LEDS <= "0100100"; WHEN "0011" => LEDS <= "0110000"; WHEN "0100" => LEDS <= "0011001"; WHEN "0101" => LEDS <= "0010010"; WHEN "0110" => LEDS <= "0000010"; WHEN "0111" => LEDS <= "1111000"; WHEN "1000" => LEDS <= "0000000"; WHEN "1001" => LEDS <= "0010000"; WHEN OTHERS => LEDS <= "1111111"; END CASE ; END PROCESS ; END BEHAVIORAL ;

.BCD-To-7Segmentsدارة تحويل الشيفرة ) : ٦(الشكل

a b c d e f g BCD(0)BCD(1)BCD(2)BCD(3)0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 1 1 1 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 1 1 0 1 1 0 0 1 0 0 1 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 1

9

.دارة تقسيم التردد ) : ٧(الشكل

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CLOCK_100HZ IS PORT( CLK_50MHZ : IN STD_LOGIC; CLK_100HZ : OUT STD_LOGIC ); END CLOCK_100HZ; ARCHITECTURE BEHAVIORAL OF CLOCK_100HZ IS SIGNAL TEMP : STD_LOGIC; SIGNAL CLK_100HZ_COUNTER : STD_LOGIC_VECTOR( 19 DOWNTO 0 ); BEGIN PROCESS ( CLK_50MHZ ) BEGIN IF CLK_50MHZ'EVENT AND CLK_50MHZ = '1' THEN IF CLK_100HZ_COUNTER < X"3D08F" THEN CLK_100HZ_COUNTER <= CLK_100HZ_COUNTER + 1 ; ELSE CLK_100HZ_COUNTER <= X"00000"; TEMP <= NOT TEMP; END IF; END IF; END PROCESS; CLK_100HZ <= TEMP; END BEHAVIORAL;

.دارة التحكم بإضاءة الليد وتمكين العد ) : ٨(الشكل

10

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY CONTROL IS PORT( CLK_100HZ, RST , START , PUSH_BUTTON : IN STD_LOGIC; LED_ENABLE : OUT STD_LOGIC ); END CONTROL; ARCHITECTURE BEHAVIORAL OF CONTROL IS BEGIN PROCESS ( CLK_100HZ ) BEGIN IF CLK_100HZ'EVENT AND CLK_100HZ = '1' THEN IF RST = '0' THEN LED_ENABLE <= '0'; ELSIF PUSH_BUTTON = '0' THEN LED_ENABLE <= '0'; ELSIF START = '0' THEN LED_ENABLE <= '1'; END IF; END IF; END PROCESS; END BEHAVIORAL;

:الكود الرئيسي للدارة الكلية

------------------------------------------------------------------------------------------------------------------------ LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ------------------------------------------------------------------------------------------------------------------------ ENTITY RTC IS PORT( RST, CLK_50MHZ, START, PUSH_BUTTON : IN STD_LOGIC; LED_ENABLE : OUT STD_LOGIC; BCD0, BCD1 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END RTC; ------------------------------------------------------------------------------------------------------------------------ ARCHITECTURE STRUCTURAL OF RTC IS SIGNAL CLK_100HZ : STD_LOGIC; SIGNAL LED_ENA : STD_LOGIC; SIGNAL D1 , D0 : STD_LOGIC_VECTOR( 3 DOWNTO 0 ); COMPONENT CLOCK_100HZ IS PORT( CLK_50MHZ : IN STD_LOGIC; CLK_100HZ : OUT STD_LOGIC ); END COMPONENT; COMPONENT CONTROL IS PORT( CLK_100HZ, RST , START , PUSH_BUTTON : IN STD_LOGIC; LED_ENABLE : OUT STD_LOGIC ); END COMPONENT; COMPONENT BCD_COUNTER IS PORT( CLK, CLEAR, ENA : IN STD_LOGIC; BCD_D0 , BCD_D1 : BUFFER STD_LOGIC_VECTOR( 3 DOWNTO 0 )); END COMPONENT; COMPONENT SEVEN IS

11

PORT ( BCD : IN STD_LOGIC_VECTOR(3 DOWNTO 0); LEDS : OUT STD_LOGIC_VECTOR(6 downto 0)); END COMPONENT; BEGIN LED_ENABLE <= LED_ENA; U1: CLOCK_100HZ PORT MAP ( CLK_50MHZ , CLK_100HZ ); U2: BCD_COUNTER PORT MAP ( CLK_100HZ , RST , LED_ENA , D0 , D1 ); U3: SEVEN PORT MAP ( D0 , BCD0 ); U4: SEVEN PORT MAP ( D1 , BCD1 ); U5 : CONTROL PORT MAP ( CLK_100HZ , RST , START , PUSH_BUTTON , LED_ENA ); END STRUCTURAL; ------------------------------------------------------------------------------------------------------------------------

= = = = =نهاية الجلسة الثامنة = = = = =