وثائق Verilog
مرجع موجز ومدعّم بأمثلة للغة Verilog. اقرأ المفهوم، شاهد الكود، ثم تدرّب عليه في رحلة Coddy.
ابدأ رحلة موجَّهة في Verilogالبداية
- ما هو Verilog؟مقدمة مبسطة إلى Verilog: ما هو، وفيمَ يُستخدم، وكيف يختلف عن لغات البرمجة العادية، ولماذا لا يزال مصممو الدارات الرقمية يلجؤون إليه بعد مرور 40 عامًا.
- العتاد مقابل البرمجياتلماذا يبدو Verilog مربكًا بعد لغات البرمجيات: التزامن افتراضيًا، والزمن كمفهوم من الدرجة الأولى، وجمل لا تُنفَّذ بالترتيب.
- تثبيت Verilogثبّت Icarus Verilog وGTKWave لترجمة Verilog ومحاكاته محليًا. أو تخطَّ التثبيت واستخدم محرر المتصفح - كلاهما يعمل مع هذه المستندات.
- أول moduleاكتب أول module Verilog كامل من الصفر - الإعلان، والمنافذ (ports)، وقطعة من المنطق التوافقي، وtestbench يقودها. قابل للتشغيل في المتصفح.
- التعليقاتكيف تكتب تعليقات أحادية ومتعددة الأسطر في Verilog، إضافة إلى أنماط التوثيق التي يستخدمها مصممو الدارات الرقمية ليُبقوا modules قابلة للقراءة مع نموّها.
أنواع البيانات والأرقام
- wire وregالنوعان الرئيسيان للبيانات في Verilog - `wire` للوصلات المستمرة و`reg` للتخزين الإجرائي - والقاعدة التي تختار بها بينهما في كل مرة.
- Vectors وArraysكيف تُعلن عن إشارات متعددة البت بـ `[7:0]`، وكيف تأخذ شرائحها، وكيف تجمعها، والفرق بين vector محزوم وarray ذاكرة.
- Parametersكيف تستخدم `parameter` و`localparam` لتعريف ثوابت وقت الترجمة، وضبط العروض والأعماق، وتجاوز القيم عند أخذ نسخة من module.
- Number Literalsكيف يكتب Verilog الثوابت: محدد الحجم مقابل غير محدد، قواعد `'b` و`'h` و`'d` و`'o`، الأرقام الـ signed، الشرطات السفلية لتحسين القراءة، والمزالق التي تعضّ المبتدئين.
- قيم X وZإشارات Verilog لها أربع قيم محتملة، لا اثنتان. إليك ماذا تعني `x` (مجهول) و`z` (معاوقة عالية) فعلًا في المحاكاة، وكيف تُنقّحها.
العوامل
- العواملالعوامل الأساسية في Verilog - حسابية ومقارنة ومنطقية والعامل الشرطي `?:` - مع القواعد والمزالق حول العروض المختلطة والـ signedness.
- Bitwise وReductionالعوامل على مستوى البت في Verilog - bitwise AND/OR/XOR، أشكال العكس، وعوامل reduction التي تختصر vector كاملًا إلى بت واحدة.
- Concatenation وReplicationكيف تلصق إشارات معًا بـ `{}` وكيف تنسخ نمطًا N مرة بـ `{N{...}}` - عوامل Verilog التي لا غنى عنها لبناء buses أوسع من قطع.
الوحدات والبنية
- منافذ Moduleكيف تعلن عن منافذ module - input وoutput وinout - أسلوب ANSI لقائمة المنافذ، ومتى يكون output من نوع `wire` أو `reg`.
- Module Instantiationكيف تأخذ نسخة من module داخل آخر، والفرق بين وصلات المنافذ المسماة والموضعية، وأنماط النسخ المتعدد لبناء تصاميم حقيقية.
- Continuous Assignmentكيف تعمل `assign` - العلاقة الدائمة الصحة التي تصفها، وما يمكنها وما لا يمكنها أن تقود، والأنماط التي تتفوّق فيها مقارنة بالشيفرة الإجرائية.
الكتل الإجرائية
- كتلة Alwaysكيف تعمل كتل `always`، والفرق بين التوافقي `always @(*)` والمتزامن مع clock `always @(posedge clk)`، والقواعد التي تقرر ما العتاد الذي يُنتجه كل منهما.
- كتلة Initialكيف تختلف كتل `initial` عن `always`، لماذا توجد فقط في المحاكاة، والأنماط الشائعة - التحفيز، إعداد الموجة، رؤوس السجلات - التي تُستخدم لها.
- Blocking مقابل Non-blockingأكثر موضوع مربك في Verilog للمبتدئين. ماذا تعني `=` و`<=` فعلًا داخل كتلة `always`، والقاعدة التي تمنع معظم race conditions.
التحكم في التدفق
- If-Elseكيف تعمل `if`/`else` داخل كتلة `always`، فخ latch الذي يلتقط المبتدئين، وعتاد priority encoder الذي تُنتجه سلاسل `else if`.
- جملة Caseكيف تعمل `case` لفك ترميز متعدد الطرق نظيف، الـ `default` الذي يجب ألا تتخطاه أبدًا، والفروق بين `case` و`casex` و`casez`.
- حلقات Forكيف تختلف حلقات `for` في Verilog عن نظيراتها في البرمجيات - يتم نشرها بواسطة أداة التركيب إلى عتاد متوازٍ، لا تُنفَّذ تكراريًا في وقت التشغيل.
المنطق التسلسلي وآلات الحالة
- المنطق المتزامن مع clockكيف تبني registers وعدّادات وshift registers وpipelines من كتل `always` متزامنة مع clock - النمط حصان العمل لكل تصميم رقمي متزامن.
- آلات الحالة المنتهيةكيف تكتب FSM في Verilog بطريقة المحترفين - register حالة متزامن مع clock، كتلة توافقية لـ next-state، وفصل نظيف سهل القراءة والتركيب.
بيئات الاختبار والمحاكاة
- أساسيات testbenchكيف تكتب testbench في Verilog - توليد clock، تسلسل reset، تحفيز، مراقبة، والهيكل القياسي الذي يقود كل محاكاة ستشغّلها.
- Display وMonitorكيف تعمل `$display` و`$write` و`$monitor` - مُحدّدات التنسيق التي ستستخدمها، الفرق بينها، ومتى تكون كل واحدة هي الأداة الصحيحة.
- Dumpfile وVCDكيف تضيف خرج موجة VCD إلى testbench - `$dumpfile` و`$dumpvars`، اختيار النطاق، وكيف تعرض الملف الناتج في GTKWave أو محرر المتصفح.
- Timescale وDelaysكيف يضبط توجيه `` `timescale `` وحدة `#delay`، قواعد دمج وحدات مختلفة عبر الملفات، وكيف تتفاعل delays مع المنطق المتزامن مع clock.