Menu
flag Ar iconالعربيةdown icon

ما هو Verilog؟ دليل المبتدئين للغة وصف العتاد (HDL)

مقدمة مبسطة إلى Verilog: ما هو، وفيمَ يُستخدم، وكيف يختلف عن لغات البرمجة العادية، ولماذا لا يزال مصممو الدارات الرقمية يلجؤون إليه بعد مرور 40 عامًا.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

لغة لوصف الدارات

معظم اللغات التي قابلتها - Python وJavaScript وGo - تصف تسلسلًا من التعليمات تنفّذها وحدة المعالجة المركزية. أما Verilog فيصف دارة. تكتب ما هي الأسلاك الموجودة، وما هي السجلات (registers) الموجودة، وكيف تتدفّق الإشارات بينها. عندئذٍ يستطيع المحاكي إعادة تشغيل سلوك الدارة، كما تستطيع أداة التركيب (synthesis) ترجمة النص نفسه إلى البوابات وflip-flops الخاصة بشريحة حقيقية.

هذا هو التعريف في سطر واحد. أما استيعاب آثاره فيستغرق وقتًا أطول.

تبدو هذه الشيفرة وكأنها برنامج صغير: module وكتلة initial ومهمة نظام $display. اضغط Run وستظهر hello from verilog. لكن خلف الكواليس، لا يُنفّذ المحاكي دالة - إنه يتظاهر بأن الزمن يمضي ويُسيّر الدارة خطوة بخطوة. لهذا السبب سترى $finish في كل مكان: لا بد لأحد أن يُخبر المحاكي بالتوقف.

ماذا يعني "وصف العتاد" فعلًا

سطر من C يعمل عندما يصل عدّاد البرنامج إليه. أما سطر من Verilog فيصف قطعة من الدارة موجودة دائمًا. تأمّل:

assign y = a & b;

هذه ليست "احسب y مرة واحدة". هذه تعني "يوجد سلك y، وفي كل لحظة زمنية يساوي a AND b". غيّر a أو b ويتبعها y فورًا. عدة جمل assign في module واحد ليست تسلسلًا - بل هي أوصاف متوازية لقطع منفصلة من الدارة.

هذه هي السمة المميزة لـ Verilog ومصدر كل خطأ يقع فيه المبتدئون. معظم ما تكتبه يصف أشياء تحدث بالتوازي، والقليل من البُنى التي تبدو وكأنها جمل مرتبة (داخل كتل initial وalways) تبدو كذلك فقط لأن المحاكي يتظاهر.

ماذا تبني باستخدام Verilog

سترى Verilog مستخدمًا في كل مستوى من المكدّس الرقمي:

  • المنطق التوافقي (Combinational). الجامعات (adders)، والـ multiplexers، والمفكّكات (decoders)، وشرائح ALU - أي شيء يعتمد فيه الخرج فقط على المدخلات الحالية.
  • المنطق التسلسلي (Sequential). العدّادات، وسجلات الإزاحة (shift registers)، وآلات الحالة المنتهية (FSM)، وأي شيء مُتزامن مع posedge clk.
  • نوى المعالجات. من معالجات CPU التعليمية في الدورات الجامعية إلى نوى RISC-V مفتوحة المصدر التي تُشحن في سيليكون حقيقي، يكون RTL عادةً Verilog أو SystemVerilog.
  • تصاميم FPGA. المنطق المُحمَّل على Xilinx أو Intel FPGA - الشبكات، ومعالجة الصور، والتحكم المُضمَّن - مكتوب بأغلبية ساحقة بـ Verilog.
  • شرائح ASIC. الشرائح المخصصة داخل هاتفك وراوترك وسيارتك - تصميم الواجهة الأمامية هو HDL، وVerilog أحد الخيارين السائدين.

لا تحتاج إلى أي من هذا العتاد للتعلم. كل ما في هذه المستندات يعمل في محاكٍ يعمل على المتصفح.

المحاكاة مقابل التركيب (Simulation vs Synthesis)

هناك طريقتان "لتشغيل" Verilog، وليستا الشيء نفسه:

  • المحاكاة (Simulation) تعيد تشغيل سلوك الدارة في صورة برمجية. يقرأ المحاكي (Icarus Verilog، Verilator، ModelSim، الأدوات التجارية) modules مع testbench - شيفرة تقود المدخلات - وينتج عنه: سجلات نصية، ومخططات الموجات (waveforms)، وتقارير نجاح/فشل.
  • التركيب (Synthesis) يأخذ مجموعة فرعية من Verilog ويُترجمها إلى netlist من بوابات حقيقية. أداة من الشركة المصنّعة (Vivado، Quartus، أدوات design-compiler في الشركات الكبيرة) تتولى التعيين. على Verilog القابل للتركيب أن يلتزم بقواعد إضافية - كتل initial واستدعاءات $display غير موجودة في السيليكون.

محرر المتصفح في هذه الصفحات يقوم بالمحاكاة. هذا كل ما تحتاجه إلى أن تبدأ شحن شريحة حقيقية أو برمجة FPGA.

Verilog مقابل SystemVerilog

إذا بحثت، فسترى كلا الاسمين. SystemVerilog هي مجموعة فائقة (superset) - تحتفظ بكل بناء من Verilog وتضيف ميزات موجّهة في الأغلب نحو التحقق (classes، اختبار عشوائي مقيد، assertions، interfaces، ونظام أنواع أغنى بكثير). كل ما تتعلمه هنا صالح كذلك في SystemVerilog. الاسمان يندمجان عمليًا؛ تقبل معظم الأدوات الاثنين، ومعظم الملفات تنتهي بـ .v بصرف النظر عن ذلك. سنقول "Verilog" طوال هذه المستندات.

Verilog مقابل VHDL

كلاهما لغة لوصف العتاد. وكلاهما معيار IEEE. وكلاهما موجود منذ الثمانينات. الفروقات:

  • الصياغة. Verilog مشتق من C - أقواس، كلمات مفتاحية موجزة، قواعد أنواع أكثر تساهلًا. VHDL مشتق من Ada - أكثر إسهابًا، وأشد صرامة بشأن الأنواع.
  • الجغرافيا. يسود Verilog في التصميم التجاري الأمريكي. لا يزال VHDL شائعًا في أوروبا، وفي الأعمال الدفاعية، وفي قواعد الشيفرات القديمة.
  • القدرة. متكافئان تقريبًا في ما يمكنهما التعبير عنه. اختر بناءً على ما يستخدمه فريقك.

إذا كنت تتعلم HDL لأول مرة، فإن Verilog له منحدر أكثر سلاسة - صياغة أصغر، وأكثر تساهلًا، ومكتبة الأمثلة المتاحة على الإنترنت أكبر.

كيف تُشغّل هذه المستندات Verilog

يستخدم المحرر أدناه Icarus Verilog (iverilog) خلف الكواليس. يُترجم مصدرك إلى محاكٍ ويُشغّله داخل sandbox. لا حاجة لترخيص Vivado، ولا تثبيت Quartus، ولا لوحة FPGA. تكتب module مع testbench صغير، تضغط Run، فترى الخرج ومخطط الموجة.

هذا عدّاد كامل 4 بت مع testbench. الـ module counter هو التصميم تحت الاختبار (DUT)؛ بينما يقوم module test بتوليد الساعة، وإطلاق reset، وطباعة القيمة في كل دورة. شغّله وسترى count ينتقل من 0 إلى 15 ثم يلتفّ. افتح تبويب Waveform وسترى الشيء نفسه على هيئة انتقالات للجهد.

ماذا بعد

لديك الآن من السياق ما يكفي لتبدأ كتابة modules. المستند التالي - العتاد مقابل البرمجيات - يقضي وقتًا أكثر قليلًا في تحوّل النموذج الذهني، لأنه أكبر عثرة لمبرمجي Verilog الجدد. بعد ذلك، تثبيت محاكٍ محلي (اختياري - المتصفح يكفي)، ثم كتابة أول module من الصفر، وبقية اللغة.

تأنَّ في خطواتك. الصياغة صغيرة؛ النموذج الذهني هو العمل الحقيقي.

الأسئلة الشائعة

ما هو Verilog بكلمات بسيطة؟

Verilog هي لغة وصف عتاد (HDL) تُستخدم لوصف الدارات الرقمية في صورة نصية. بدلًا من كتابة تعليمات تُنفّذها وحدة المعالجة المركزية، فأنت تصف الأسلاك (wires) والسجلات (registers) والبوابات (gates) وكيفية تدفّق الإشارات بينها. ثم يقوم محاكٍ (simulator) بتشغيل الوصف للتحقق من السلوك، كما يمكن لأداة التركيب (synthesis) تحويل الوصف نفسه إلى تخطيط فعلي على شريحة.

فيمَ يُستخدم Verilog؟

يُستخدم Verilog لتصميم العتاد الرقمي والتحقق منه: المعالجات (CPUs)، ومعالجات الرسوميات (GPUs)، ومُحوّلات الشبكات، ومتحكمات الذاكرة، وكتل معالجة الإشارات، وتصاميم FPGA - أي شيء مبني من بوابات وdoublelipflops. كذلك يُشغَّل في محاكاة بحتة لتدريس المنطق الرقمي وعمل نماذج للتصاميم قبل إنتاج أي سيليكون.

هل Verilog لغة برمجة؟

ليس بالمعنى المعتاد. شيفرة Verilog تصف بنية العتاد وسلوكه - إشارات وبوابات وتخزينًا متزامنًا مع clock - بدلًا من كونها تتابعًا من تعليمات CPU. كثير من الأسطر التي تكتبها تحدث بالتوازي على الشريحة، لا واحدة تلو الأخرى. هذا التحوّل الذهني هو أكبر عقبة عند الانتقال من البرمجيات إلى Verilog.

ما الفرق بين Verilog وSystemVerilog؟

SystemVerilog هي مجموعة فائقة (superset) من Verilog. تحتفظ بكل بناء Verilog وتضيف ميزات موجّهة بشكل رئيسي للتحقق: الأصناف (classes)، والمحفزات العشوائية المقيدة، والتأكيدات (assertions)، والواجهات (interfaces)، وأنواع بيانات أغنى. الأدوات التي تقبل SystemVerilog تقبل Verilog العادي أيضًا. في الأعمال التمهيدية، يبدو الاثنان متطابقين.

ما الفرق بين Verilog وVHDL؟

كلاهما لغة لوصف العتاد تحلّ المشكلة نفسها. صياغة Verilog مستمدة من C وتميل إلى الإيجاز؛ بينما تنحدر VHDL من Ada وهي أكثر إسهابًا وأكثر صرامة بشأن الأنواع. يختلف استخدام الصناعة باختلاف المنطقة والفريق - كلاهما حيّ، وكلاهما مُعَيَّر (IEEE 1364/1800 لـ Verilog/SystemVerilog، وIEEE 1076 لـ VHDL).

هل تعلّم Verilog صعب؟

الصياغة صغيرة - أصغر من C++. الجزء الصعب هو نسيان عادات البرمجة. في Verilog، معظم الجمل تصف أشياء تحدث في الوقت نفسه، لا بالتتابع، وكذلك خطأ في وضع blocking مقابل non-blocking قد يحدد ما إذا كانت دارتك ستعمل أصلًا. توقّع أن يكون الأسبوع الأول مربكًا قبل أن تستوعب الفكرة.

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن