مقدمة إلى اللغات الوصفية للهاردوير

عام 0 geek4arab
Spread the love
قانونٌ واحد جمع بين معظم التطورات في شتى مجالات الهندسة .. يمكن أن تلحظ سريان هذا القانون بسهولة في العديد من التطورات و الإختراعات .. يقول هذا القانون بأنك إذا وجدت عملاً روتينياً مكرراً يقوم به الإنسان بشكل متكرر و كانت التكنولوجيا التي عندك تسمح لك بأن تجعل الآلة تعمل هذا العمل بدلاً من الإنسان فقم بعمل تلك الآلة .. و إذا كانت التكونولوجيا التي عندك لا توفر لك هذا فقم بتطويرها حتى تصل بها إلى هذا المستوى
و إذا دققت النظر في معظم الأشياء – إن لم يكن كلها – ستجد أن هذه القاعدة تنطبق عليها .. فعلى سبيل المثال .. الموظف الذي يقوم بإدارة قواعد البيانات .. كان يحتفظ بالعديد من الدفاتر و الأوراق و يقوم بالبحث فيها و ترتيبها .. عندما زاد الأمر عن حده و وجدنا أننا بحاجة إلى العديد من الموظفين .. و لهذا الأمر تم عمل برامج إدارة قواعد البيانات و خوارزميات البحث Searching Algorithms إلى غير ذلك .. فليس الجديد أن توجد قواعد بيانات و إنما الجديد هو من الذي سيقوم بها .. هل الإنسان أم الآلة .. فالإنسان دائماً ما يمل من تكرار العمليات الروتينية التي لا تفكير فيها ولا إبداع و يميل أكثر إلى إعمال عقله و ليس إلى تعطيله .. و البحث وسط الأوراق عملية تعطل العقل و تجعل الإنسان مجرد آلة تعمل .. فلماذا لا نجعل الآلة تعمل هذا العمل من البداية .. و يدخل في هذا الأمر العديد من الأشياء مثل الروبوتات Robotics و الذكاء الإصطناعي Artificial Intelligence و الشبكات Networking و الإتصالات و غير ذلك ..
و لم يقتصر الأمر على تسهيل حياة المستخدم النهائي End User فحسب .. بل تعدى الأمر إلى المصممين أيضاً .. فبعض التصميمات تحتاج إلى العديد من المعادلات الرياضية المعقدة مما يجعلنا نحتاج إلى عمل بعض البرامج التي تقوم بحل المعادلات الرياضية و تحليلها .. فالمصمم هو الأخر يريد أن يستغل وقته في الإبداع و إستخراج أفضل الأفكار و ليس في حل معادلات رياضية روتينية تقليدية تحتاج إلى الوقت أكثر من إحتياجها إلى العقل .. و يدخل في هذا الأمر برامج تصميم الدوائر الإلكترونية و الكهربائية و برامج المحاكاة للأنظمة الكهربائية و الميكانيكية و أنظمة التحكم الآلي إلى غير ذلك ..

ولا شك بأن مجال التصميم الرقمي Digital Design هو أحوج المجالات إلى إستخدام التصميم الآلي أو ما يعرف بإسم Design Automation .. فكما يعلم من درس تصميم الدوائر الرقمية Digital Design أننا نستخدم ما يسمى بالبوابات المنطقية Logic Gates و نقوم بكتابة كل المخرجات outputs المتوقعة التي يمكن أن ستخرجها الدائرة الرقمية و كل المدخلات inputs المتوقع أن تدخل إلى الدائرة و نقوم بالربط بينهما في جدول يعرف بإسم Truth Table .. و بناءاً على هذا الجدول نقوم بتصميم الدائرة المنطقية التي نريد .. و المثال الآتي يوضح تلك الطريقة (أو يراجع عليها حتى يتذكرها من يعرفها في الأصل) ..
تخيل أننا نريد أن نصمم دائرة رقمية .. لها أربعة مدخلات و مخرج واحد .. الهدف منها هو أننا نريد أن نختار أي المدخلات سوف تعبر نحو المخرجات .. و يتم تحديد المدخل الذي سوف يعبر عن طريق مدخل أخر .. و هذه الدائرة تسمى “الناخب” أو ما يعرف بالـMUX .. له العديد و العديد من الإستخدامات .. بل هو أكثر الدوائر إستخداماً في الحواسيب .. فيوجد منها في الذاكرة RAM حيث يدخل إليه كل البيانات المخزنة فيها و يتم إختيار الجزء أو البايت الذي نريد قرائته أو إستخدامه فقط .. أو أحياناً ستجد بأن هناك العديد من الوحدات بداخل الحاسب الآلي تريد أن تدخل بعض البيانات إلى المعالج Processor .. ففي هذه الحالة ستكون تلك الدائرة موجودة بالخارج ليقوم المعالج بإختيار الوحدة التي يريد أن يستقبل منها البيانات التي تريد أن ترسلها .. المهم أن لها إستخدامات عديدة جداً .. و الآن نريد أن نقوم بتصميم تلك الدائرة .. و حسب الطريقة التقليدية في التصميم سنقوم بعمل جدول به كل الإحتمالات المتوقعة للمدخلات و المخرجات .. و تلك الدائرة لها مخرج واحد و أربع مدخلات (قد يكون لها اي عدد من المدخلات بالطبع) و يوجد لها مدخل أخر يحدد أي المدخلات سوف يتم إختياره ليعبر نحو المخرج .. و الصورة التي بالأسفل بها هذا الجدول و تلك الدائرة التي إستنتجناها بناءاً على الجدول .. و سوف نقوم بتسمية المدخلات I0 و I1 و I2 و I3 .. و المدخلات التي سيتم إختيار المخرج عن طريقها S0 و S1 .. و المخرج سوف نسميه F ..

و بعد أن قمنا بعمل مثل هذا الجدول (و الذي يحتوي على 64 إحتمال) قمنا بإستنتاج الدائرة بناءاً على الجدول .. و كما يعلم من لديه فكرة عن التصميم الرقمي بهذه الطريقة سيجد بأن من قام بالإبداع و الإختراع هو من أتى بفكرة دائرة الناخب Mux و ليس من قام بتصميمها .. بمعنى أخر .. الذي جائت له فكرة أن يقوم بعمل دائرة تختار أي المدخلات سوف تعبر إلى المخرجات و إخترع لها تطبيقات هو بالفعل الذي إخترع .. و أما من قام برصد كل الحالات المتوقعة في جدول و قام بإستنتاج الدائرة من الجدول فلم يخترع شيئاً و إنما قام بعمل روتيني مكرر فضلاً عن الوقت الذي قد يضيعه وهو يقوم بمثل هذا ..
و بما أننا دائماً نريد أن نجعل الآلة هي التي تقوم بعمل العمليات الروتينية لنجعل الإنسان يركز أكثر على الإبداع و التفكير .. فقد خرجت بعض البرامج التي تقوم بتصميم الدوائر الرقمية .. فقط صف لها ماذا سوف تفعل الدائرة و سيقوم البرنامج بإستنتاج كل شئ و تصميم الدائرة لك .. و هنا يأتي السؤال الذي سيطرح نفسه .. و هو كيف سنقوم بوصف الدائرة للبرنامج حتى يقوم بتصميمها ؟؟ هل سنقوم بوضع الجدول الذي يحتوي على كل الإحتمالات و يقوم هو بإستنتاج الدائرة ؟؟ إن وضع الجدول بحد ذاته هو أمر يطول .. ستجد أنك سوف تحتاج إلى عدد من المعطيات يزيد كلما زادت عدد المدخلات .. فستجد أن معطيات الجدول تساوي 2^(عدد المدخلات) مضروباً في عدد المخرجات .. إذ أن كل مخرج من المخرجات له دائرته الخاصة به .. و الدائرة السابقة كان بها عدد 6 من المدخلات .. 4 منهم للبيانات التي تريد أن تعبر و 2 منهم يحددان أي مدخل من المدخلات سوف يعبر .. أي أننا نحتاج إلى 64 حالة من الحالات سوف نضعها في الجدول .. و عدد المخرجات هو 1 و لهذا فالأمر بسيط .. و لكن ماذا يحدث إذا كنت تريد أن تقوم بتصميم معالج يعمل على 32bits ؟؟ هل ستقوم بعمل جدول به 2^32 من الحالات و الذي يعادل 4294967296 حالة ؟؟ هذا فضلاً عن عدد المخرجات التي سوف يخرجها هذا المعالج فضلاً عن المدخلات و المخرجات التي تأتي من المسجلات Registers و التي سوف تكتشف بعد ذلك أنها ستتسبب في نوعين من الجداول .. الأول يسمى جدول الإنتقال Transition Truth Table و الأخر جدول التنفيذ Excitation Table .. و لهذا السبب لن يكون الحل هو أن نعطي البرنامج الذي سيقوم بالتصميم جدول الإحتمالات و يقول هو بتصميم الدائرة ..
إذا كانت لديك فكرة تريد أ ن تنفذها كهاردوير Hardware و تريد أن تخبر المصمم (الذي سيقوم بعمل الجدول) عن فكرتك ليبدأ في التصميم .. ماذا ستقول له ؟؟ بالطبع سوف تصف له سلوك و تصرف الدائرة أو قد ترسم له بعض الرسومات التوضيحية مثل الرسم الإنسيابي Flow Chart بالإضافة إلى بعض التعليقات الكلامية حتى يتضح له ماذا سيفعل .. بالضبط هذا ما سوف تقوم به عندما تتحدث مع البرنامج الذي سيقوم بالتصميم عن تصميمك .. و بالطبع لن تقوم بكتابة بعض الكلمات الإنجليزية !! فبما أنك ستتعامل مع ألة فلا شك أن هذا الوصف الذي سوف تصفه للدائرة أو للتصميم الذي تريد سيكون محكوماً ببعض القواعد و القوانين مثل التي في لغات البرمجة و التي تعرف بالـSyntax و الـSemantics .. و هذا هو مفهوم اللغات الوصفية اللهاردوير Hardware Description Language ..
مفهوم اللغات الوصفية Description Languages يختلف إختلافاً كبيراً عن اللغات البرمجية Programming Languages .. فاللغات الوصفية تخاطب فيها برنامجاً من البرامج سيقوم بفهم ما قلته له و سيقوم بعمل دائرة رقمية بناءاً على وصفك الذي وصفت .. أما اللغات البرمجية فأنت تخاطب فيها المعالج Processor و تذكر له فيها التعليمات التي سوف يقوم بتنفيذها و هو يقوم بتنفيذها عميانياً بغير تفكير منه .. و المنتج الذي تنتظره من اللغة الوصفية هو دائرة رقمية .. أما المنتج الذي تنتظره من لغة برمجية هو تعليمات instructions موجهة إلى المعالج ليقوم بتنفيذها ..
و بما أن تصميم الدائرة سيكون في يد البرنامج و ليس في يد إنسان .. فلا شك أنه يمكننا الإستفادة منه بقدر الإمكان .. فيمكنه أن يقوم بإختصار التصميم Design Optimization .. و يمكنه أن يقوم بحساب مساحة التصميم و الوقت الذي تحتاجه الدائرة لكي تخرج المخرجات بشكل صحيح Time Response .. كما يمكنها أن تقوم بعمل محاكاة للدائرة لكي ترى المخرجات المتوقعة بنفسك لترى هل ستعمل الدائرة بالشكل المطلوب أم لا .. و العديد و العديد من الأشياء التي سوف نعرفها في الدروس القادمة إن شاء الله ..
و إختبار التصميم باب واسع من العلم .. فنحن لا نريد أن نقوم بعمل تصميم أو دائرة تكاملية Integrated Circuit و بعد أن نقوم بتصنيعها نكتشف أنها لا تعمل أو أننا قد أخطئنا في التصميم .. فلا بد من إختبارها أولاً .. و أول مرحلة في الإختبار هي مرحلة المحاكاة Simulation و في هذه المرحلة يقوم البرنامج الذي معه التصميم بمحاكاته بحيث يخبرنا بالمخرجات التي سوف تخرج من التصميم إذا تم تشغيله بالفعل .. بالطبع بناءاً على المعادلات التي إستنتجها بعد أن إنتهى من التصميم .. و لكن هذه المرحلة ليست كافية .. نحتاج إلى إختبار التصميم بالفعل كدائرة كهربائية و ليس كبيانات تخرج على شاشة الحاسوب .. و في هذه الحالة نستخدم الرقاقات القابلة للبرمجة Programmable Chips .. و هي ليست سوى دوائر تكاملية Integrated Circuits نقوم ببرمجتها بطريقة أو بأخرى فتصبح هذه الدائرة هي التصميم الذي نريده .. فتتصرف كما سيتصرف التصميم الذي قمنا بعمله و كأنها تقلد الدائرة .. و بهذه الطريقة سنختبر التصميم بالفعل كإشارات إلكترونية Electronic Signals حقيقية و ليس كبيانات مبنية على الحسابات فقط .. و لكن بالطبع برمجة تلك الرقاقات ليست هي الهدف .. و غالباً ما تستخدم للإختبار .. و بعد أن نقوم بعمل الإختبار و نتأكد بالفعل أن هذا التصميم سيعمل نقوم بعد ذلك بتصنيعه ..
يوجد العديد من اللغات الوصفية .. و في ما يلي من دروس إن شاء الله سنتعرض للغة الـVHDL .. سنبدأ بوضع أمثلة بسيطة و شرحها عما قريب إن شاء الله ..

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة