vhdl quartus ii 03

18
١ اﻟﺴﻮرﻳﺔ اﻟﻌﺮﺑﻴﺔ اﻟﺠﻤﻬﻮرﻳﺔ اﻟﻌﺎﻟﻲ اﻟﺘﻌﻠﻴﻢ وزارة ﺣﻠﺐ ﺟﺎﻣﻌﺔ واﻻﻟﻜﺘﺮوﻧﻴﺔ اﻟﻜﻬﺮﺑﺎﺋﻴﺔ اﻟﻬﻨﺪﺳﺔ آﻠﻴﺔ اﻟﺤﻮاﺳﻴﺐ هﻨﺪﺳﺔ ﻗﺴﻢ اﻟﺤﺎﺳﺒﺎت ﻣﺨﺒﺮ اﻟﻤﻬﻨﺪس إﻋﺪاد: ﻋﺰﻳﺰ أﺳﺎﻣﺔ اﻟـ ﺷﺮﻳﺤﺔ ﺑﺎﺳﺘﺨﺪام رﻗﻤﻴﺔ ﺳﺎﻋﺔ ﺗﻨﺠﻴﺰFPGA اﻟﺒﻮرد ﻋﻠﻰDE2 Digital Clock Implementation Using The FPGA On DE2 Board اﻟﺜﺎﻟﺜﺔ اﻟﺴﻨﺔ- اﻟﺤﻮاﺳﻴﺐ هﻨﺪﺳﺔ ﻗﺴﻢ اﻷول اﻟﺪراﺳﻲ اﻟﻔﺼﻞ٢٠١٠ - ٢٠١١

Upload: oussama-aziz

Post on 17-Mar-2016

227 views

Category:

Documents


2 download

DESCRIPTION

Tutorial about Quartus II and DE2 in Arabic

TRANSCRIPT

Page 1: VHDL Quartus II 03

١

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

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

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

DE2 على البورد FPGAتنجيز ساعة رقمية باستخدام شريحة الـ Digital Clock Implementation Using The FPGA On DE2 Board

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

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

Page 2: VHDL Quartus II 03

1

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

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

Clock ومولدات نبضات الساعة Push-Buttons آيفية استخدام آل من الكباسات اللحظية -١ Generators7ن نوع ولوحات اإلظهار م-Segments الموجودة على البورد DE2. .MHZ 50 آيفية تقسيم التردد للحصول على نبضات ساعة بتردد ما انطالقًا من التردد -٢ Look-Up باستخدام تقنية جداول التقابل Segments-7 آيفية قيادة لوحات اإلظهار من نوع -٣ Tables في لغة VHDL. .VHDL بلغة Timersرات المؤقتات آيفية تصميم دا-٤ .DE2 المرآبة على البورد FPGA آيفية تنجيز ساعة رقمية باستخدام شريحة الـ -٥

Clock Generators ومولدات نبضات الساعة Push-Buttonsآيفية استخدام آل من الكباسات اللحظية -١

:DE2 الموجودة على البورد Segments-7ولوحات اإلظهار من نوع

Using The LEDs And Switches: استخدام ثنائيات اإلصدار الضوئي والمفاتيح -أوًال

آل منها قد تم إزالة ارتداده باستخدام دارة قادح Push-Buttons 4 أربعة آباسات لحظية DE2يمتلك البورد ) .١( آما هو مبين في الشكل Schmitt Trigger Circuitشميت

.DE2إزالة ارتداد الكباس اللحظي على البورد ) : ١(الشكل الموجودة FPGAإن مخرج آل دارة من دارات قادح شميت األربع موصول مباشرًة إلى أحد أقطاب شريحة الـ

و KEY0 ، KEY1 ، KEY2 حيث تم تسمية هذه المخارج) ٢(كل آما هو موضح في الش DE2على البورد .KEY3أخيرًا

.DE2تخصيص األقطاب من أجل الكباسات اللحظية األربعة على البورد ) : ٢(كل الش . DE2مخطط التوصيالت الكهربائية لهذه الكباسات األربعة على البورد ) ٣(يبين الشكل

Page 3: VHDL Quartus II 03

2

.DE2مخطط التوصيالت الكهربائية للكباسات اللحظية األربعة على البورد ) : ٣(الشكل

عندما ال ) Volts 3.3أي ( Hس لحظي من هذه الكباسات األربعة يزود مستوى منطقيًا مرتفعًا إن آل آباعندما يكون ) Volts 0أي ( L في حين يزود مستوى منطقيًا منخفضًا Not Pressedيكون مضغوطًا

ا مالئمة فإنهDebouncedبما أن هذه الكباسات اللحظية قد تم إزالة ارتدادها . Depressedمضغوطًا .أو آمدخل تصفير لدارة تتابعية ما Manually بشكل يدوي Clockلالستخدام عند توليد نبضات ساعة

أو ما ُيعرف باسم ( Toggle Switches 18 مفتاحًا من النوع المفصلي 18 أيضًا DE2يمتلك البورد

On/Off Switches. ( تم تسمية هذه المفاتيح آما يلي :SW0 ، SW1 ، ... ..SW17. إن هذه المفاتيح لم تتم إزالة ارتدادها آما رأينا في حالة الكباسات اللحظية أعاله وبالتالي فهي معدة لالستخدام آمداخل معطيات

عندما يكون المفتاح في الوضعية السفلية . للدارت الرقمية Level-Sensitive Data Inputsحساسة للمستوى Down Position )افة البورد األقرب إلى ح ( فإنه يزود مستوى منطقيًا منخفضًاL ) 0أي Volts ( لقطب

FPGAلقطب الـ ) Volts 3.3أي ( H الموصول إليه في حين أنه يزود مستوى منطقيًا مرتفعًا FPGAالـ ة مخطط التوصيالت الكهربائي) ٤( يبين الشكل .Up Positionعندما يكون في الوضعية العلوية الموصول إليه

.DE2 على البورد On/Offللمفاتيح من نوع

.DE2 على البورد On/Offمخطط التوصيالت الكهربائية للمفاتيح من نوع ) : ٤(الشكل مبينة في DE2 على البورد On/Off من أجل المفاتيح من نوع FPGAإن آيفية تخصيص أقطاب شريحة الـ

:التالي ) ٥(الشكل

Page 4: VHDL Quartus II 03

3

.DE2 على البورد On/Offتخصيص األقطاب من أجل المفاتيح من نوع ) : ٥(الشكل

18. يمكن التحكم بإضاءة آل منها بشكل منفرد LEDs 27 ثنائي إصدار ضوئي 27 أيضًا DE2يمتلك البورد : سماء وتحمل األOn/Offذات لون أحمر وهي متوضعة فوق المفاتيح من النوع " الليدات " من هذه LEDR0 ، LEDR1 ، ..... ،LEDR17 أخرى ذات لون أخضر وتتوضع فوق " ليدات " 8 في حين أن

األخير " الليد " أما LEDG0 ، LEDG1 ، ..... ،LEDG7: الكباسات اللحظية األربعة وتحمل األسماء Segments-7 فهو متوضع في وسط لوحات اإلظهار من نوع LEDG8األخضر والذي يحمل االسم

" ت الكهربائية لهذه يبين مخطط التوصيال) ٦( الشكل .DE2 على البورد LCDالموجودة تحت شاشة الـ .DE2على البورد " الليدات

.DE2على البورد " لليدات " مخطط التوصيالت الكهربائية ) : ٦(الشكل

Page 5: VHDL Quartus II 03

4

.DE2على البورد " الليدات " أجل منFPGAآيفية تخصيص أقطاب شريحة الـ ) ٧(يبين الشكل

.DE2على البورد " الليدات " تخصيص األقطاب من أجل ) : ٧(الشكل

مستوى منطقي وبالتالي فإن إرسال FPGAشريحة الـ إن آل ليد ُمقاد مباشرًة من ِقَبل قطب ما من أقطاب الليدات يؤدي إلى إضاءة الليد في حين أن إرسال مستوى منطقي إلى القطب الموصول إلى أحد هذهHمرتفع

. إلى القطب الموصول إلى أحد هذه الليدات يؤدي إلى إطفاء الليد Lمنخفض

Using The 7-Segment Displays: استخدام لوحات اإلظهار ذات القطع السبع -ثانيًا

مرتبة على شكل رباعية إلى اليمين Segments-7 لوحات إظهار من النوع 8 أيضًا DE2يمتلك البورد ) .٨(وزوجين إلى اليسار آما هو مبين في الشكل

.DE2 على البورد Segments-7توزيع لوحات اإلظهار من نوع ) : ٨(الشكل

Page 6: VHDL Quartus II 03

5

HEX0 ، HEX1 ، ..... ،HEX7: فإن هذه اللوحات تمتلك التسميات التالية ) ٨(آما هو واضح في الشكل في الحقيقة ، لقد تم اختيار هذا التوزيع لتسهيل عملية إظهار . في أقصى اليمين HEX0ون اللوحة األولى مع آ

FPGAأآثر من عدد وبطول خانات متفاوت آما سنرى بعد قليل عند تنجيز الساعة الرقمية باستخدام شريحة الـ مخطط التوصيالت ) ٩(بين الشكل ي. وإظهار قيمة الوقت على هذه اللوحات DE2الموجودة على البورد

.DE2الكهربائية لهذه اللوحات الثمانية على البورد

.DE2 على البورد Segments-7مخطط التوصيالت الكهربائية للوحات اإلظهار من نوع ) : ٩(الشكل

المصعد المشترك توصيلةفإن آًال من هذه اللوحات قد تم وصلها وفق ) ٩(آما هو واضح في الشكل Commom Anode 3.3أي أن مصعد آل ليد من ليدات لوحة ما من هذه اللوحات قد تم وصله إلى الجهد V

على قطب موصول إلى مهبط ليد من ليدات لوحة ما من هذه L تطبيق مستوى منطقي منخفض فإنوبالتالي على قطب موصول إلى مهبط Hي مرتفع اللوحات سيؤدي إلى إضاءة هذا الليد في حين أن تطبيق مستوى منطقمن لوحة ما ) Segmentقطعة ( آل ليد . ليد من ليدات لوحة ما من هذه اللوحات سيؤدي إلى إطفاء هذا الليد

) .١٠(خاصًا به آما هو موضح في الشكل ) Indexدليًال ( يحمل رقمًا

.DE2إلظهار ذات القطع السبع على البورد ضمن لوحة ا) ليد ( موضع ودليل آل قطعة ) : ١٠(الشكل :)١ (مالحظة

بأحرف أبجدية بدًال من األرقام وذلك آما هو موضح ) الليدات ( في أغلب المراجع تتم اإلشارة إلى هذه القطع : التالي )١ (في الجدول

Segmenta b c d e f g

Index 0 1 2 3 4 5 6 Segments-7الرموز المستخدمة عادًة عوضًا عن األرقام الدليلية لليدات لوحة اإلظهار من نوع ) : ١(الجدول

Page 7: VHDL Quartus II 03

6

:)٢ (مالحظةأو ( قطة في آل لوحة من هذه اللوحات غير موصول وبالتالي ال يمكننا استخدام النقطة إن الليد الخاص بالن

!!!DE2 على البورد Segments-7ضمن اللوحات من نوع ) الفاصلة على Segments-7يبين تخصيص األقطاب من أجل ليدات آل لوحة من اللوحات الثمانية من نوع ) ١١(الشكل .DE2البورد

.DE2 على البورد Segments-7تخصيص األقطاب من أجل لوحات اإلظهار من نوع ) : آ - ١١(الشكل

Page 8: VHDL Quartus II 03

7

.DE2 على البورد Segments-7تخصيص األقطاب من أجل لوحات اإلظهار من نوع ) : ب - ١١(الشكل

Using Clock Sources: بضات استخدام مولدات الن-ثالثًا

) Clock Generators ( Two Oscillators) مولدي نبضات مربعة ( أيضًا هزازين DE2يتضمن البورد .MHZ 50 واآلخر يزود إشارة نبضات ساعة ترددها MHZ 27أحدهما يزود إشارة نبضات ساعة ترددها

P26 إلى القطب External Clock Sourceرجي آما يتضمن البورد مربطًا خاصًا لتوصيل مولد نبضات خا للحصول MHZ 50 في أغلب التطبيقات سنستخدم التردد .DE2 المرآبة على البورد FPGAمن شريحة الـ

مخطط التوصيالت ) ١٢( يبين الشكل .على التردد المطلوب من خالل عملية تقسيم التردد آما سنرى بعد قليل ) ١٣( في حين يبين الشكل DE2 األقطاب الموصولة إليها على البورد الكهربائية لمولدات النبضات مع

.تخصيص األقطاب من أجل مولدات النبضات هذه

.DE2مخطط التوصيالت الكهربائية لمولدات النبضات على البورد ) : ١٢(الشكل

Page 9: VHDL Quartus II 03

8

.DE2تخصيص األقطاب من أجل مولدات النبضات على البورد ) : ١٣(الشكل حيث تظهر فيها آل من الكباسات اللحظية األربعة DE2هو عبارة عن صورة فوتوغرافية للبورد ) ١٤(الشكل

) ليدات 9وعددها ( والليدات بنوعيها األخضر ) مفتاحًا 18والبالغ عددها ( On/Offوالمفاتيح من نوع باإلضافة إلى ) لوحات 8ددها وع ( Segments-7ولوحات اإلظهار من نوع ) 18وعددها ( واألحمر آباسين لحظيين ومولد أثناء تنجيز الساعة الرقمية بعد قليل سنستخدم ) . مولدي النبضات المربعة ( الهزازين

لعرض قيمة Segments-7 لوحات إظهار من النوع 7 باإلضافة إلى MHZ 50النبضات المربعة ذي التردد :الوقت وفق التنسيق التالي

BCD_HRD BCD_HRD0 BCD_MIND1 BCD_MIND0 BCD_SECD1 BCD_SECD0 BCD_TSEC :حيث أن BCD_TSEC : تمثل خانة أعشار الثواني. BCD_SECD0 : تمثل خانة آحاد الثواني. BCD_SECD1 : تمثل خانة عشرات الثواني. BCD_MIND0 : تمثل خانة آحاد الدقائق. BCD_MIND1 : ني تمثل خانة عشرات الثوا. BCD_HRD0 : تمثل خانة آحاد الساعات. BCD_HRD1 : تمثل خانة عشرات الساعات.

ة 0 00 00 00: وبالتالي فإن الساعة الرقمية تقوم بالتوقيت بدءًا من القيمة د 9 59 59 23 وحتى القيم ود بع لتعة ى القيم الي 0 00 00 00ذلك إل وم الت ة الي ا نح . مع بداي ذه الساعة من الواضح اآلن أنن ز ه اج من أجل تنجي ت

داره ردد مق واني يجب أن ُتحّدث آل HZ 10الرقمية إلى نبضات ساعة بت ة أعشار الث في SEC 0.1 ألن خان ... وهكذا SEC 1حين أن خانة آحاد الثواني ُتحّدث آل

) .منظر علوي ( DE2صورة فوتوغرافية للبورد ) : ١٤(الشكل

Page 10: VHDL Quartus II 03

9

:MHZ 50سيم التردد للحصول على نبضات ساعة بتردد ما انطالقًا من التردد آيفية تق-٢

دء HZ 10 إلى القيمة MHZ 50إن المهمة األولى أمامنا تتمثل في تخفيض التردد من القيمة نقوم في الب لذلك سة تر . بعرض طريقة بسيطة للقيام بذلك ارة نبضات ساعة مربع دينا إش ا لتبسيط العرض سنفترض أن ل 10دده

HZ ا ة أخرى تردده يم ( HZ 1 ونريد انطالقًا منها الحصول على إشارة نبضات ساعة مربع د تقس ا نري أي أننردد ) ١٥(الشكل ) . 10التردد على القيمة دخل المتاحة ذات الت ارة ال ًال من إش ين آ وإشارة Fin = 10 HZيب

.Fout = 1 HZخرج مقسم التردد ذات التردد

) .Fout = 1 HZ وتردد الخرج Fin = 10 HZتردد الدخل ( 10تقسيم التردد على ) : ١٥(الشكل

ي الشكل و واضح ف ا ه ة ) ١٥(آم اوية للقيم ى مس ارة الخرج تبق إن إش ن '0'ف ة تساوي زم رة زمني 5 خالل فتن إنبضات ة م ة متتالي ى القيم ب إل م تنقل ن ث دخل وم ارة ال رة'1'ش ذا خالل فت ن لتظل هك اوي زم ة تس 5 زمني

... وهكذا دواليك '0'نبضات متتالية أيضًا لتعود بعدها من جديد إلى القيمة ة ) اإلتمام ( من أجل إجراء عملية القلب د من القيم داد يع تعانة بع ذه في اللحظات المناسبة يمكن االس ى 0ه حت

ارة الخرج ) إتمام ( مع قلب 0لى القيمة ومن ثم وعند الجبهة الصاعدة لنبضة الساعة الخامسة يعود إ 4القيمة إشارة : من هذه المناقشة يمكن أن نستنتج أنه من أجل بناء مقسم التردد تلزمنا إشارتان . لمقسم التردد األولى هي إش

د Counter Signalالعداد ردد الجدي ارة نبضات الساعة ذات الت ردد أي إش واألخرى هي إشارة خرج مقسم التFout . لم أنه عند بناء عداد في لغة نحن نعVHDL ارة ة إش ادة قيم يلزمنا المقارنة مع قيمة أعظمية للعد قبل زي

داد 1العداد بمقدار ارة الع ل حجز إش دء وقب ا في الب ة من ( وبالتالي يتوجب علين ة nالمكون ة ) خان ة القيم معرفداد والتي سنسميها ة للع ة الثابت ذا ا . MAX_COUNTاألعظمي ة ه ة إن قيم لثابت يمكن أن تحسب من العالق

:التالية MAX_COUNT = ( Fin / 2 Fout ) – 1

ا الحالي Finحيث أن ارة Fout و HZ 10 هو تردد إشارة دخل مقسم التردد وهو يساوي في مثالن ردد إش هو تا الحالي إن HZ 1خرج مقسم التردد وهو يساوي في مثالن الي ف MAX_COUNT = ( 10 / 2 ) – 1: وبالت

ارة MAX_COUNT = 4: أي أن وبالتالي يتوجب عند آل جبهة صاعدة لنبضات ساعة الدخل زيادة قيمة إشة 4العداد طالما أن قيمة هذه اإلشارة أصغر تمامًا من القيمة اوية للقيم داد مس ارة الع ة إش 4 أما في حالة آون قيم

إشارة ) إتمام ( الدخل تصفير إشارة العداد وقلب فيتوجب عندها ولدى ورود الجبهة الصاعدة التالية لنبضة ساعة .لتبدأ بذلك دورة عد جديدة للعداد ) والتي تكون بعرض خانة واحدة طبعًا ( خرج مقسم التردد

ى MHZ 50بعد هذا التمهيد يمكننا اآلن حساب قيمة ثابت العد األعظمي من أجل مرحلة تقسيم التردد اح عل المت

: آما يلي HZ 10ساويًا للقيمة بحيث يصبح مDE2البورد MAX_COUNT = ( 50.000.000 / 2 x 10 ) – 1 = 2.500.000 – 1 = 2.499.999

:نقوم اآلن بتحويل هذه القيمة العشرية إلى النظام الست عشري فنجد أن القيمة المطلوبة هي MAX_COUNT = 26259F

Page 11: VHDL Quartus II 03

10

ة بالنظام الست عشري تكافئ ا 26259Fإن القيمة في الحقيقة بالنظام 1001100010010110011111: لقيما 22الثنائي وهذه القيمة مكونة من الي فإنن خانة ولكن عمومًا من المفضل التعامل مع النظام الست عشري و بالت

ة 24 بطول STD_LOGIC_VECTORسنقوم بالتصريح عن إشارة من النوع ات ست عشرية 6 ( خان خان :تخدامها آإشارة العداد في مرحلة تقسيم التردد أي آما يلي من أجل اس) خانة ثنائية 24تكافئ

SIGNAL CLK_COUNT_10HZ : STD_LOGIC_VECTOR( 23 DOWNTO 0 );

وع ة واحدة ( STD_LOGICآما أننا سنقوم بالتصريح عن إشارة من الن من أجل استخدامها ) أي بطول خان

: آما يلي HZ 10 المطلوبة بتردد آإشارة خرج مقسم التردد والتي ستمثل إشارة النبضات

SIGNAL CLK_10HZ : STD_LOGIC;

ردد بهدف تخفيضه PROCESS الذي ينجز المعالجة VHDLاآلن يمكننا عرض آود يم الت المسؤولة عن تقس .HZ 10 إلى القيمة MHZ 50من القيمة

1 ----------------------- FREQUENCY DIVIDER PROCESS : ------------------------ 2 PROCESS ( RESET , CLK_50MHZ ) 3 BEGIN 4 IF RESET = '0' THEN 5 CLK_COUNT_10HZ <= X"000000"; 6 CLK_10HZ <= '0'; 7 ELSIF CLK_50MHZ 'EVENT AND CLK_50MHZ = '1' THEN 8 IF CLK_COUNT_10HZ < X"26259F" THEN 9 CLK_COUNT_10HZ <= CLK_COUNT_10HZ + 1; 10 ELSE 11 CLK_COUNT_10HZ <= X"000000"; 12 CLK_10HZ <= NOT CLK_10HZ; 13 END IF; 14 END IF; 15 END PROCESS; 16 ------------------------------------------------------------------------------------------------

:شروحات وتعليقات

PROCESS في الئحة الحساسية للمعالجة CLK_50MHZ و RESET تم وضع آل من إشارتي الدخل -١

دخل التصفير ت RESETألن م ر متواق ارة Asynchronous غي ا أن اإلش ارة CLK_50MHZ آم هي إش .MHZ 50التردد ذي DE2مدخل نبضات الساعة والتي تؤخذ من خرج مولد النبضات على البورد

دخل ( KEY0 وذلك من خالل ضغط الكباس اللحظي RESET عند تفعيل مدخل التصفير -٢ ة الم أي جعل قيمRESET = '0' ( داد ارة الع تم تصفير آل من إش ة CLK_COUNT_10HZي ناد القيم ك من خالل إس وذل

ردد "X"000000الست عشرية م الت ارة خرج مقس تم تصفير إش ا ي ا آم ن خالل CLK_10HZ إليه ك م وذلنؤآد هنا على ضرورة استخدام قوسي التنصيص المزدوجتين عند التعامل مع قيمة . إليها '0'إسناد القيمة الثنائية

!!!مكونة من أآثر من خانة ثنائية اًال -٣ دخل التصفير فع ن م م يك دخل نبضات ) 'RESET = '1أي ( إذا ل ى م ة صاعدة عل دى ورود جبه ول

ارة ( تتم مقارنة القيمة الحالية لعداد مقسم التردد MHZ 50لتردد الساعة ذي ا CLK_COUNT_10HZاإلشد األعظمي ) ة ثابت الع ة الست عشرية MAX_COUNTمع قيم ذي يساوي القيم بهدف "X"26259F وال

Page 12: VHDL Quartus II 03

11

دار ة 1زيادة قيمة إشارة العداد بمق د القيم غ بع م تبل د ل ة الع ة آون قيم ا في MAX_COUNT في حال ة أم حالداد "CLK_COUNT_10HZ = MAX_COUNT = X"26259Fآون ارة ع فعندها يتم تصفير قيمة إش

ة الست عشرية تم نفي "X"000000مقسم التردد وذلك من خالل إسناد القيم ا ي ا آم ام ( إليه ارة خرج ) إتم إش . من الكود المبين أعاله 12 آما هو موضح في السطر رقم CLK_10HZمقسم التردد

ين ـ ) ١٦(الشكل يب تخدام شريحة ال ا باس د تنجيزه ي نري ة الت اعة الرقمي دارة الس FPGAالمخطط الصندوقي ل :DE2الموجودة على البورد

.Digital Clock Circuit Block Diagramالمخطط الصندوقي لدارة الساعة الرقمية ) : ١٦(الشكل

وع فإن ق ) ١٦(آما هو واضح في الشكل ار من ن ل ت Segments-7يادة لوحات اإلظه ة تحوي ام بعملي تطلب القيورد Segment-7 إلى شيفرة BCDمن النظام ى الب ار ذات القطع السبع عل DE2 مع مراعاة أن لوحات اإلظه

ات العشرية للساعة Common Anodeهي من النوع ة إحدى الخان اد ( آما مرمعنا أي إذا آانت قيم ة آح خانة ) 5القيمة العشرية ( "0101"تساوي القيمة ) مثًال الثواني ى لوحة "0010010"فيجب عندها إرسال القيم إل

ة ار القيم ن أجل إظه ة م ار الموافق ام . بشكل صحيح 5اإلظه ن النظ ل م ة التحوي ن الواضح اآلن إذًا أن عملي مBCD يفرة ى ش ـ Segments-7 إل ريحة ال تم ضمن ش إFPGA يجب أن ت الي ف داد وبالت ارات الخرج لع ن إش

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

حة اإلظهار المقادةلو Segments-7إشارة الخرج بشيفرة BCDاإلشارة بالنظام BCD_TSEC BCD_TSEC_OUT HEX0

BCD_SECD0 BCD_SECD0_OUT HEX2 BCD_SECD1 BCD_SECD1_OUT HEX3 BCD_MIND0 BCD_MIND0_OUT HEX4 BCD_MIND1 BCD_MIND1_OUT HEX5 BCD_HRD0 BCD_HRD0_OUT HEX6 BCD_HRD1 BCD_HRD1_OUT HEX7

.Segments-7إشارات خرج الساعة الرقمية التي تقود لوحات اإلظهار من نوع : )٢(الجدول

Page 13: VHDL Quartus II 03

12

ة حيث ( Processes 7 ) معالجات 7إن هذا ما يفسر سبب وجود دارة الساعة الرقمي ائي ل ود النه ة الك في نهاي . منها بعملية التحويل المطلوبة آما بينا في الجدول أعاله PROCESSتقوم آل معالجة

1 --------------------------------------------------------------------------------------------------------------------- 2 LIBRARY IEEE; 3 USE IEEE.STD_LOGIC_1164.ALL; 4 USE IEEE.STD_LOGIC_UNSIGNED.ALL; 5 --------------------------------------------------------------------------------------------------------------------- 6 ENTITY DIGITAL_CLOCK IS 7 PORT( RESET , CLK_50MHZ , START_STOP : IN STD_LOGIC; 8 BCD_TSEC_OUT , OFF_SSD_OUT : OUT STD_LOGIC_VECTOR(6 9 DOWNTO 0); 10 BCD_SECD0_OUT , BCD_SECD1_OUT : OUT STD_LOGIC_VECTOR(6 11 DOWNTO 0); 12 BCD_MIND0_OUT , BCD_MIND1_OUT : OUT STD_LOGIC_VECTOR(6 13 DOWNTO 0); 14 BCD_HRD0_OUT , BCD_HRD1_OUT : OUT STD_LOGIC_VECTOR(6 15 DOWNTO 0)); 16 END DIGITAL_CLOCK; 17 -------------------------------------------------------------------------------------------------------------------- 18 ARCHITECTURE BEHAVIORAL OF DIGITAL_CLOCK IS 19 SIGNAL CLK_COUNT_10HZ : STD_LOGIC_VECTOR(23 DOWNTO 0); 20 SIGNAL CLK_10HZ : STD_LOGIC; 21 SIGNAL BCD_TSEC , BCD_SECD0 , BCD_SECD1 : 22 STD_LOGIC_VECTOR(3 DOWNTO 0); 23 SIGNAL BCD_MIND0 , BCD_MIND1 , BCD_HRD0 , BCD_HRD1 : 24 STD_LOGIC_VECTOR(3 DOWNTO 0); 25 BEGIN 26 ------------------- CONCURRENT ASSIGNMENT : ---------------------- 27 OFF_SSD_OUT <= "1111111"; 28 ------------------- FREQUENCY DIVIDER PROCESS : ------------------ 29 PROCESS ( RESET , CLK_50MHZ ) 30 BEGIN 31 IF RESET = '0' THEN 32 CLK_COUNT_10HZ <= X"000000"; 33 CLK_10HZ <= '0'; 34 ELSIF CLK_50MHZ 'EVENT AND CLK_50MHZ = '1' THEN 35 IF CLK_COUNT_10HZ < X"26259F" THEN 36 CLK_COUNT_10HZ <= CLK_COUNT_10HZ + 1; 37 ELSE 38 CLK_COUNT_10HZ <= X"000000"; 39 CLK_10HZ <= NOT CLK_10HZ; 40 END IF; 41 END IF; 42 END PROCESS; 43 ------------------ TIME COMPUTATION PROCESS : ---------------------- 44 PROCESS ( RESET , CLK_10HZ ) 45 BEGIN 46 IF RESET = '0' THEN 47 BCD_HRD1 <= X"0"; 48 BCD_HRD0 <= X"0";

Page 14: VHDL Quartus II 03

13

49 BCD_MIND1 <= X"0"; 50 BCD_MIND0 <= X"0"; 51 BCD_SECD1 <= X"0"; 52 BCD_SECD0 <= X"0"; 53 BCD_TSEC <= X"0"; 54 ELSIF CLK_10HZ 'EVENT AND CLK_10HZ = '1' THEN 55 IF START_STOP = '1' THEN 56 IF BCD_TSEC < "1001" THEN 57 BCD_TSEC <= BCD_TSEC + 1; 58 ELSE 59 BCD_TSEC <= X"0"; 60 IF BCD_SECD0 < "1001" THEN 61 BCD_SECD0 <= BCD_SECD0 + 1; 62 ELSE 63 BCD_SECD0 <= "0000"; 64 IF BCD_SECD1 < "0101" THEN 65 BCD_SECD1 <= BCD_SECD1 + 1; 66 ELSE 67 BCD_SECD1 <= "0000"; 68 IF BCD_MIND0 < "1001" THEN 69 BCD_MIND0 <= BCD_MIND0 + 1; 70 ELSE 71 BCD_MIND0 <= "0000"; 72 IF BCD_MIND1 < "0101" THEN 73 BCD_MIND1 <= BCD_MIND1 + 1; 74 ELSE 75 BCD_MIND1 <= "0000"; 76 IF BCD_HRD0 < "1001" AND NOT ( ( BCD_HRD1 = "0010") AND 77 ( BCD_HRD0 = "0011" ) ) THEN 78 BCD_HRD0 <= BCD_HRD0 + 1; 79 ELSE 80 IF NOT ( ( BCD_HRD1 = "0010" ) AND ( BCD_HRD0 = 81 "0011" ) ) THEN 82 BCD_HRD0 <= "0000"; 83 BCD_HRD1 <= BCD_HRD1 + 1; 84 ELSE 85 BCD_HRD1 <= "0000"; 86 BCD_HRD0 <= "0000"; 87 END IF; 88 END IF; 89 END IF; 90 END IF; 91 END IF; 92 END IF; 93 END IF; 94 END IF; 95 END IF; 96 END PROCESS; 97 ------------- LOOK-UP TABLE PROCESS FOR BCD_TSEC_OUT : ----------- 98 PROCESS ( BCD_TSEC ) 99 BEGIN 100 CASE BCD_TSEC IS

Page 15: VHDL Quartus II 03

14

101 WHEN "0000" => BCD_TSEC_OUT <= "1000000"; -- 0 102 WHEN "0001" => BCD_TSEC_OUT <= "1111001"; -- 1 103 WHEN "0010" => BCD_TSEC_OUT <= "0100100"; -- 2 104 WHEN "0011" => BCD_TSEC_OUT <= "0110000"; -- 3 105 WHEN "0100" => BCD_TSEC_OUT <= "0011001"; -- 4 106 WHEN "0101" => BCD_TSEC_OUT <= "0010010"; -- 5 107 WHEN "0110" => BCD_TSEC_OUT <= "0000010"; -- 6 108 WHEN "0111" => BCD_TSEC_OUT <= "1111000"; -- 7 109 WHEN "1000" => BCD_TSEC_OUT <= "0000000"; -- 8 110 WHEN "1001" => BCD_TSEC_OUT <= "0010000"; -- 9 111 WHEN OTHERS => NULL; 112 END CASE; 113 END PROCESS; 114 ------------ LOOK-UP TABLE PROCESS FOR BCD_SECD0_OUT : ---------- 115 PROCESS ( BCD_SECD0 ) 116 BEGIN 117 CASE BCD_SECD0 IS 118 WHEN "0000" => BCD_SECD0_OUT <= "1000000"; -- 0 119 WHEN "0001" => BCD_SECD0_OUT <= "1111001"; -- 1 120 WHEN "0010" => BCD_SECD0_OUT <= "0100100"; -- 2 121 WHEN "0011" => BCD_SECD0_OUT <= "0110000"; -- 3 122 WHEN "0100" => BCD_SECD0_OUT <= "0011001"; -- 4 123 WHEN "0101" => BCD_SECD0_OUT <= "0010010"; -- 5 124 WHEN "0110" => BCD_SECD0_OUT <= "0000010"; -- 6 125 WHEN "0111" => BCD_SECD0_OUT <= "1111000"; -- 7 126 WHEN "1000" => BCD_SECD0_OUT <= "0000000"; -- 8 127 WHEN "1001" => BCD_SECD0_OUT <= "0010000"; -- 9 128 WHEN OTHERS => NULL; 129 END CASE; 130 END PROCESS; 131 ------------ LOOK-UP TABLE PROCESS FOR BCD_SECD1_OUT : ---------- 132 PROCESS ( BCD_SECD1 ) 133 BEGIN 134 CASE BCD_SECD1 IS 135 WHEN "0000" => BCD_SECD1_OUT <= "1000000"; -- 0 136 WHEN "0001" => BCD_SECD1_OUT <= "1111001"; -- 1 137 WHEN "0010" => BCD_SECD1_OUT <= "0100100"; -- 2 138 WHEN "0011" => BCD_SECD1_OUT <= "0110000"; -- 3 139 WHEN "0100" => BCD_SECD1_OUT <= "0011001"; -- 4 140 WHEN "0101" => BCD_SECD1_OUT <= "0010010"; -- 5 141 WHEN OTHERS => NULL; 142 END CASE; 143 END PROCESS; 144 ------------ LOOK-UP TABLE PROCESS FOR BCD_MIND0_OUT : ---------- 145 PROCESS ( BCD_MIND0 ) 146 BEGIN 147 CASE BCD_MIND0 IS 148 WHEN "0000" => BCD_MIND0_OUT <= "1000000"; -- 0 149 WHEN "0001" => BCD_MIND0_OUT <= "1111001"; -- 1 150 WHEN "0010" => BCD_MIND0_OUT <= "0100100"; -- 2 151 WHEN "0011" => BCD_MIND0_OUT <= "0110000"; -- 3 152 WHEN "0100" => BCD_MIND0_OUT <= "0011001"; -- 4

Page 16: VHDL Quartus II 03

15

153 WHEN "0101" => BCD_MIND0_OUT <= "0010010"; -- 5 154 WHEN "0110" => BCD_MIND0_OUT <= "0000010"; -- 6 155 WHEN "0111" => BCD_MIND0_OUT <= "1111000"; -- 7 156 WHEN "1000" => BCD_MIND0_OUT <= "0000000"; -- 8 157 WHEN "1001" => BCD_MIND0_OUT <= "0010000"; -- 9 158 WHEN OTHERS => NULL; 159 END CASE; 160 END PROCESS; 161 ------------ LOOK-UP TABLE PROCESS FOR BCD_MIND1_OUT : ---------- 162 PROCESS ( BCD_MIND1 ) 163 BEGIN 164 CASE BCD_MIND1 IS 165 WHEN "0000" => BCD_MIND1_OUT <= "1000000"; -- 0 166 WHEN "0001" => BCD_MIND1_OUT <= "1111001"; -- 1 167 WHEN "0010" => BCD_MIND1_OUT <= "0100100"; -- 2 168 WHEN "0011" => BCD_MIND1_OUT <= "0110000"; -- 3 169 WHEN "0100" => BCD_MIND1_OUT <= "0011001"; -- 4 170 WHEN "0101" => BCD_MIND1_OUT <= "0010010"; -- 5 171 WHEN OTHERS => NULL; 172 END CASE; 173 END PROCESS; 174 ------------ LOOK-UP TABLE PROCESS FOR BCD_HRD0_OUT : ----------- 175 PROCESS ( BCD_HRD0 ) 176 BEGIN 177 CASE BCD_HRD0 IS 178 WHEN "0000" => BCD_HRD0_OUT <= "1000000"; -- 0 179 WHEN "0001" => BCD_HRD0_OUT <= "1111001"; -- 1 180 WHEN "0010" => BCD_HRD0_OUT <= "0100100"; -- 2 181 WHEN "0011" => BCD_HRD0_OUT <= "0110000"; -- 3 182 WHEN "0100" => BCD_HRD0_OUT <= "0011001"; -- 4 183 WHEN "0101" => BCD_HRD0_OUT <= "0010010"; -- 5 184 WHEN "0110" => BCD_HRD0_OUT <= "0000010"; -- 6 185 WHEN "0111" => BCD_HRD0_OUT <= "1111000"; -- 7 186 WHEN "1000" => BCD_HRD0_OUT <= "0000000"; -- 8 187 WHEN "1001" => BCD_HRD0_OUT <= "0010000"; -- 9 188 WHEN OTHERS => NULL; 189 END CASE; 190 END PROCESS; 191 ------------ LOOK-UP TABLE PROCESS FOR BCD_HRD1_OUT : ----------- 192 PROCESS ( BCD_HRD1 ) 193 BEGIN 194 CASE BCD_HRD1 IS 195 WHEN "0000" => BCD_HRD1_OUT <= "1000000"; -- 0 196 WHEN "0001" => BCD_HRD1_OUT <= "1111001"; -- 1 197 WHEN "0010" => BCD_HRD1_OUT <= "0100100"; -- 2 198 WHEN OTHERS => NULL; 199 END CASE; 200 END PROCESS; 201 END BEHAVIORAL; 202 ------------------------------------------------------------------------------------------------------------------

Page 17: VHDL Quartus II 03

16

:شروحات وتعليقات ا هو -١ ود آم أرقام األسطر ُآتبت لتسهيل اإلحالة إلى سطر ما أو مقطع ما من الكود ولكنها ليست جزءًا من الك

.معلوم رجم سيتج Comment آل سطر يبدأ بخطين قصيرين متتاليين هو تعليق -٢ إن المت الي ف ًا وبالت ى . اهله تمام عل

. بهدف التوضيح فقط البعضآل حال تم استخدام أسطر التعليقات هنا لفصل مقاطع الكود عن بعضها نالحظ هنا أنه قد تم تضمين آل من الحزمتين . تمثل منطقة تصريحات المكتبة والحزم 4 حتى 2 األسطر من -٣

STD_LOGIC_1164 و STD_LOGIC_UNSIGNED من المكتبة IEEE وعي وذلك ألننا استخدمنا نات وع STD_LOGIC_VECTOR و STD_LOGICالمعطي ى ن ع عل ة الجم راء عملي ى إج افة إل باإلض .STD_LOGIC_VECTORالمعطيات

ن -٤ طر م ى 6األس ان 16 حت ع الكي ل مقط م ENTITY تمث ه االس ذي أعطي ل DIGITAL_CLOCK وال

م التصريح عن من . بشكل اختياري دارة ضمن هذا المقطع ت ذ ال ا ( اف داخلها ومخارجه إن ) . م ا هو واضح ف آمر المتواقت اس ( RESETللدارة ثالثة مداخل هي مدخل التصفير غي ق الكب ه عن طري تحكم بقيمت تم ال ذي ي وال

ين التوقيت ) آما بينا قبل قليل KEY0اللحظي ه عن ( START_STOPومدخل تمك تحكم بقيمت تم ال ذي ي والدخل DE2على البورد KEY1طريق الكباس اللحظي بحيث أنه عندما يكون الكباس غير مضغوط فإن قيمة الم

START_STOP ة اوية للقيم ون مس تمر بالتوقيت'1' تك اعة تس إن الس الي ف ة بشكل طبيعي وبالت ي حال ا ف أماس اللحظي دخل KEY1ضغط الكب ة الم إن قيم ى START_STOPف ؤدي إل ا ي اوية للصفر مم تصبح مس

ى لوحات تعطيل مؤقت ة الوقت الُمظهر عل ة التوقيت وتبقى قيم ر Segments-7 لعملي ى تحري ر حت دون تغييد توقف KEY1الكباس اللحظي حيث تستأنف الساعة الرقمية عملية التوقيت من جديد بدءًا من القيمة التي آان قت دها التوقي ردد )عن اعة ذات الت دخل نبضات الس ن ق MHZ 50وم ده م تم تزوي ذي ي د النبضات وال ل مول ب

ا بطول 8من الجهة األخرى ، فإن للدارة . آما رأينا سابقًا DE2الموجود على البورد 7 إشارات خرج آل منهورد ى الب ة الموجودة عل ة سبع إشارات من إشارات الخرج . DE2خانات لقيادة لوحات اإلظهار الثماني الثماني

:وهي مسبقًا ) ٢(هذه تم عرضها في الجدول BCD_TSEC_OUT : تمثل خانة أعشار الثواني. BCD_SECD0_OUT : تمثل خانة آحاد الثواني. BCD_SECD1_OUT : تمثل خانة عشرات الثواني. BCD_MIND0_OUT : تمثل خانة آحاد الدقائق. BCD_MIND1_OUT : ني تمثل خانة عشرات الثوا. BCD_HRD0_OUT : تمثل خانة آحاد الساعات. BCD_HRD1_OUT : تمثل خانة عشرات الساعات.

ار ) ١٦(راجع الشكل ( وع الذي يبين مواقع لوحات اإلظه ادة Segments-7 من ن ذه اإلشارات المق بواسطة هارة ) .السبع رة هي اإلش ة واألخي ارة الخرج الثامن ة من OFF_SSD_OUTإش ود 7المكون ي تق ات والت خان

ر المستخدمة الوحيدة لوحة اإلظهار ورد غي ى الب ى يسار اللوحة HEX1وهي اللوحة ( DE2 عل ع عل التي تقHEX0 رة ع – مباش كل راج ورد انذي يبينل ال)١٤( و )٨( ينالش ى الب ات عل ذه اللوح ع ه ا ) . DE2 مواق آم

عرضنا سابقًا فإن ليدات آل لوحة من لوحات اإلظهار ذات القطع السبع هذه موصولة بتشكيلة المصعد المشترك Common Anode ة وبالتالي إلطفاء آافة ليدات م يتوجب إرسال القيم ا بشكل دائ ى "1111111"لوحة م إل

ة من الكود أع27قم هذه اللوحة وهذا ما تم بالفعل في السطر ر ناد القيم م إس ة اله حيث ت ى "1111111" الثابت إلة بشكل OFF_SSD_OUTإشارة الخرج ار الثاني دات لوحة اإلظه ة لي اء آاف م من أجل إطف ى HEX1دائ عل

.ة نظرًا لعدم الحاجة إليها في دارة الساعة الرقميDE2البورد ن -٥ طر م ى 18األس ة 201 حت ع البني ل مقط مية ARCHITECTURE تمث ا التس م إعطاؤه ذي ت وال

BEHAVIORAL ألن تصميم دارة الساعة الرقمية بلغة VHDL ى سلوك ادُا عل قد تم بشكل سلوآي أي اعتم

Page 18: VHDL Quartus II 03

17

ة 24 حتى 19األسطر من . الدارة وليس على بنيتها م التصريح عن آاف ة حيث ت ة التصريحات للبني ل منطق تمث :اإلشارات الداخلية الالزمة وهي

ردد - م الت داد مقس ارة ع ن CLK_COUNT_10HZ إش ة م وع 24 المكون ن الن ي م ة وه خان STD_LOGIC_VECTOR. .STD_LOGIC بعرض خانة وحيدة من نوع المعطيات CLK_10HZرج مقسم التردد إشارة خ- واني - ار الث ة أعش ارة خان ن BCD_TSEC إش ة م وع 4 المكون ن الن ي م ات وه خان STD_LOGIC_VECTOR. واني - اد الث ة آح ارة خان ن BCD_SECD0 إش ة م وع 4المكون ن الن ي م ات وه خان STD_LOGIC_VECTOR. رات الث - ة عش ارة خان ن BCD_SECD1واني إش ة م وع 4المكون ن الن ي م ات وه خان STD_LOGIC_VECTOR. دقائق - اد ال ة آح ارة خان ن BCD_MIND0إش ة م وع 4المكون ن الن ي م ات وه خان STD_LOGIC_VECTOR. دقائق - رات ال ة عش ارة خان ن BCD_MIND1 إش ة م وع 4المكون ن الن ي م ات وه خان STD_LOGIC_VECTOR. اد ا - ة آح ارة خان اعات إش ن BCD_HRD0لس ة م وع 4المكون ن الن ي م ات وه خان STD_LOGIC_VECTOR. رات الس - ة عش ارة خان ن BCD_HRD1اعات إش ة م وع 4المكون ن الن ي م ات وه خان STD_LOGIC_VECTOR.

) : Processes 9 ( تسع معالجات يضم آما هو واضح آود البنية-٦

.أعاله ) ٢(مسبقًا في الفقرة المعالجة األولى خاصة بعملية تقسيم التردد وقد تم شرحها - ة المعالجة الثانية خاصة بعملية تحديث قيم خانات الساعة - ى خان بدءُا من خانة أعشار الثواني وصوُال إل .( H 24 )عشرات الساعات وفقًا للتقدير األربع عشريني ة المعالجات السبع ا - ارة عن جداول مقابل رة هي عب ل من من أجل التحو Look-Up Tables ألخي ي

وم بعرض Segments-7يادة لوحات اإلظهار من نوع بهدف ق Segments-7 إلى شيفرة BCDالنظام التي تق .قيمة الوقت بشكل صحيح

= = = = =الجلسة السابعةنهاية = = = ==