فيريلوج (برمجة)

**لغه فيريلوج** الموحدة كـ **[[معهد مهندسي الكهرباء والإلكترونيات]] 1364** ، هي لغة توصيف العتاد (HDL) المستخدمة لنمذجة الأنظمة الإلكترونية. كما تستخدم هذه اللغة بشكل شائع وكبير في التصميم، والتحقق من الدوائر الرقمية على مستوى نقل التسجيل للتجريد. كما وتستخدم أيضًا في التحقق من الدوائر التناظرية ودوائر الإشارة المختلطة، وكذلك في تصميم الدوائر الجينية. في عام 2009، تم دمج معيار Verilog (IEEE 1364-2005) في معيار SystemVerilog ، مما أدى إلى إنشاء معيار IEEE 1800-2009. منذ ذلك الحين، أصبحت لغه فيريلوج رسميًا جزءًا من لغة نظام فيريلوج.وهو الإصدار الحالي هو IEEE القياسي 1800-2017.

## الملخص
في الواقع فإن لغات وصف الأجهزة مثل لغه فيريلوج تشبه لغات برمجة البرامج لأنها تتضمن طرقًا لوصف وقت الانتشار ونقاط قوة الإشارة (الحساسية). كما انه من الجدير بالذكر هناك نوعان من عوامل التخصيص؛ تخصيص حظر (=)، وتخصيص غير معطل (>>. يسمح إنشاء: إنشاء / إنشاء نهائي (على غرار إنشاء / إنشاء VHDL) لـ فيريلوج-2001 بالتحكم في مثيل وبيان إنشاء مثيل من خلال مشغلي القرار العاديين (حالة / إذا / آخر). باستخدام إنشاء / إنشاء، يمكن لـ Verilog-2001 إنشاء مثيل لمجموعة من المثيلات، مع التحكم في اتصال الحالات الفردية. تم تحسين إدخال / إخراج الملف من خلال العديد من مهام النظام الجديدة. وأخيرًا وليس اخرا، تم تقديم بعض الإضافات النحوية لتحسين قابلية قراءة الكود في هذا الإصدار من النظام (على سبيل المثال، دائمًا، @ * ، تجاوز المعلمة المسماة، إعلان رأس الوظيفة / المهمة / الوحدة النمطية على غرار C).

فيريلوج 2001 هو إصدار من لغة البرمجة فيريلوج المدعوم بمعظم حزم برامج EDA التجارية.

### فيريلوج 2005
يجب عدم الخلط بينه وبين SystemVerilog (نظام فيريلوج)، ت*تكون g 2005* (لغه فيريلوج IEEE Standard 1364-2005) من تصحيحات طفيفة وتوضيحات المواصفات وبعض ميزات اللغة الجديدة (مثل الكلمة الأساسية uwire).

يحاول جزء منفصل من معيار لغة فيريلوج للبرمجة، Verilog-AMS ، دمج نمذجة الإشارات التناظرية والمختلطة مع Verilog التقليدي.

### النظام الخاص بـ لغة فيريلوج
ظهور الأجهزة التحقق من اللغات مثل OpenVera ، Verisity لـ e اللغة تشجيع تطوير Superlog لمن شارك في تصميم Automation Inc (التي حصل عليها سينوبسيس). أسس Superlog وفيرا ثم قام بالتبرع بـ Accellera ، الذي أصبح فيما بعد IEEE القياسية لنظام فيريلوج P1800-2005: SystemVerilog.

نظام فيريلوج SystemVerilog وهو يعد مجموعة شاملة من فيريلوج-2005، مع العديد من الميزات والقدرات الجديدة للمساعدة في التحقق من التصميم ونمذجة التصميم. اعتبارًا من عام 2009، تم دمج معايير لغة نظام فيريلوج SystemVerilog وولغه فيريلوج ذاتها في SystemVerilog 2009 (IEEE Standard 1800-2009). الإصدار الحالي هو IEEE القياسي 1800-2017.

## مثال
فيما يلي سيتم ذكر مثال بسيط على flip-flops:
```verilog
module toplevel(clock,reset);
 input clock;
 input reset;

 reg flop1;
 reg flop2;

 always @ (posedge reset or posedge clock)
  if (reset)
   begin
    flop1 <= 0;
    flop2 <= 1;
   end
  else
   begin
    flop1 <= flop2;
    flop2 <= flop1;
   end
endmodule
```
يعد `<=` في لغة فيريلوج جانبًا آخر لكونه لغة وظيفتها هي وصف الأجهزة بدلاً من اللغة الإجرائية العادية المتعارف عليها. كما انه يُعرف هذا باسم التخصيص «غير المحظور». لا يتم تسجيل الإجراء الخاص به إلا بعد تنفيذ الكتلة دائمًا. هذا يعني أن ترتيب التخصيصات غير ذي صلة وسوف ينتج نفس النتيجة: flop1 و flop2 سيتبادلان القيم كل ساعة على الدوام.

اما عن `=` فهو عامل التخصيص الآخر والذي يشار اليه على أنه تخصيص حجب. فإنه عند استخدامك لعامل التخصيص هذا `=` الإسناد، لأغراض المنطق، يتم تحديث المتغير الهدف على الفور. في المثال الذي رأيته سابقا، لو استخدمت العبارات `=` blocking بدلاً من `<=` ، لما تم تبديل flop1 و flop2. بدلاً من ذلك، كما هو الحال في البرمجة التقليدية، سيفهم المترجم ببساطة تعيين flop1 مساويًا لـ flop2 (وبالتالي يتجاهل المنطق الزائد لضبط flop2 مساويًا لـ flop1).

يتبع مثال دارة العداد:
```verilog
module Div20x (rst, clk, cet, cep, count, tc);
// TITLE 'Divide-by-20 Counter with enables'
// enable CEP is a clock enable only
// enable CET is a clock enable and
// enables the TC output
// a counter using the Verilog language

parameter size = 5;
parameter length = 20;

input rst; // These inputs/outputs represent
input clk; // connections to the module.
input cet;
input cep;

output [size-1:0] count;
output tc;

reg [size-1:0] count; // Signals assigned
           // within an always
           // (or initial)block
           // must be of type reg

wire tc; // Other signals are of type wire

// The always statement below is a parallel
// execution statement that
// executes any time the signals
// rst or clk transition from low to high

always @ (posedge clk or posedge rst)
 if (rst) // This causes reset of the cntr
  count <= {size{1'b0}};
 else
 if (cet && cep) // Enables both true
  begin
   if (count == length-1)
    count <= {size{1'b0}};
   else
    count <= count + 1'b1;
  end

// the value of tc is continuously assigned
// the value of the expression
assign tc = (cet && (count == length-1));

endmodule
```
مثال على التأخيرات:
```verilog
...
reg a, b, c, d;
wire e;
...
always @(b or e)
 begin
  a = b & e;
  b = a | b;
  #5 c = b;
  d = #6 c ^ e;
 end
```
شرط **دائما** المذكوره في المثال الموضح اعلاه تشير إلى نوع آخر من طرق الاستخدام، أي أنه ينفذ أي من الكيانات في القائمة **(ب** أو **ه)** يتغير. عند أحد هذه التغييرات، **يتم** تعيينه على الفور قيمة جديدة، كما ان ذلك يرجع إلى التنازل حظر، ثم بعد ذلك يتم تعيين *ب* قيمة جديدة (مع الأخذ في الاعتبار قيمة جديدة **ل).**

بعد تأخير دام 5 وحدات الوقت، يتم تعيين **ج** قيمة **ب** وقيمة **ج ^ ه** هو مدسوس بعيدا في مخزن غير مرئية. اما الخطوة الاخير فهي: بعد 6 وحدات زمنية أخرى، يتم تعيين القيمة التي تم وضعها بعيدًا عن **د.**

هناك نقطه يجب التنويه عليها الا وهي انه يجب أن تكون الإشارات التي يتم دفعها من داخل عملية (كتلة أولية أو دائمًا) من النوع **reg** . أيضا يجب أن تكون الإشارات التي يتم دفعها من خارج العملية من النوع **السلكي** . الكلمة الأساسية **reg** لا تعني بالضرورة وجود سجل للأجهزة.

## تعريف الثوابت
ندعم تعريف الثوابت في لغة فيريلوج إضافة معلمة عرض. :

 '  ماسبق عرضه هنا هو الصيغة الاساسيه

أمثلة:

* 12'h123 - سداسي عشري 123 (باستخدام 12 بايتًا)
* 20'd44 - عشري 44 (باستخدام 20 بت - 0 تمديد تلقائي)
* 4'b1010 - ثنائي 1010 (باستخدام 4 بايت)
* 6'o77 - أوكتال 77 (باستخدام 6 بايت)

## بنيات قابلة للتركيب
لغه فيريلوج تعتبر على نطاق واسع أن HDL (لغة وصف الأجهزة). كما انه هناك العديد من العبارات في لغة فيريلوج والتي لا تحتوي على تناظرية في الأجهزة الحقيقية، ونأخذ على سبيل المثال $ display. وبالتالي فإنه لا يمكن استخدام الكثير من اللغات لوصف الأجهزة.

في واقع الامر فإنه هذا قد يبدو لك كـ تعريف لـ لغه فيريلوج الذي يكون بشكل عام يحتاج إلى إعادة توصيف بشكل صحيح. ومع ذلك، فإن الأمثلة المقدمة هنا هي المجموعة الفرعية الكلاسيكية (والمحدودة) للغة التي لها تعيين مباشر للبوابات الحقيقية.
```verilog
// Mux examples — Three ways to do the same thing.

// The first example uses continuous assignment
wire out;
assign out = sel ? a : b;

// the second example uses a procedure
// to accomplish the same thing.

reg out;
always @(a or b or sel)
 begin
  case(sel)
   1'b0: out = b;
   1'b1: out = a;
  endcase
 end

// Finally — you can use if/else in a
// procedural structure.
reg out;
always @(a or b or sel)
 if (sel)
  out = a;
 else
  out = b;
```
الهيكل المثير للإهتمام الذي سوف اعرضه لك الآن هو مزلاج شفاف؛ سيمرر المدخلات إلى الخرج عندما يتم ضبط إشارة البوابة على «المرور عبر»، كما انه يلتقط المدخلات ويخزنها عند انتقال إشارة البوابة إلى «الانتظار». سيبقى الإخراج ثابتًا بغض النظر عن إشارة الإدخال أثناء ضبط البوابة على «تعليق». في المثال الذي تراه ادناه، سيكون مستوى «المرور» للبوابة عندما تكون قيمة جملة if صحيحة، أي البوابة = 1. تتم قراءة هذا «إذا كانت البوابة صحيحة، يتم تغذية الدين إلى latch_out بشكل مستمر.» ولكن احذر فإنه بمجرد أن تكون جملة if خاطئة، فإن القيمة الاخير ستبقى في latch_out ومستقلة عن قيمة din.
```verilog
// Transparent latch example

reg latch_out;
always @(gate or din)
 if(gate)
  latch_out = din; // Pass through state
  // Note that the else isn't required here. The variable
  // latch_out will follow the value of din while gate is
  // high. When gate goes low, latch_out will remain constant.
```
flip-flop هو القالب المهم التالي؛ في لغة فيليوج، D-flop هو الأبسط في هذه اللغة، ويمكن تصميمه على النحو التالي:
```verilog
reg q;
always @(posedge clk)
 q <= d;
```
إن الشي الذي يجب ملاحظته في هذا المثال المستخدم والذي يعد مهما أيضا هو استخدام تخصيص عدم الحظر. القاعدة الأساسية الأساسية هي استخدام **<=** عندما يكون هناك بيان **posedge** أو **Negedge** ضمن جملة Always.(دائما)

إن البديل من D-flop هو واحد مع مراعاه إعادة تعيين غير متزامن؛ هناك اصطلاح مايجدر معرفته فيه أن حالة إعادة التعيين ستكون أول عبارة في العبارة.
```verilog
reg q;
always @(posedge clk or posedge reset)
 if(reset)
  
 else
  q <= d;
```
المتغير التالي يتضمن كلاً من الامرين التاليين:

إعادة تعيين غير متزامن وشرط مجموعة غير متزامن مرة أخرى

تدخل الاتفاقية حيز التنفيذ، وهذا المصطلح يعني إعادة التعيين يتبعه المصطلح المحدد.
```verilog
reg q;
always @(posedge clk or posedge reset or posedge set)
 if(reset)
  q <= 0;
 else
 if(set)
  q <= 1;
 else
  q <= d;
```
ملاحظة: إذا تم استخدام هذا النموذج لنمذجة قالب تعيين / إعادة تعيين، فإن هذا قد ينتج عن ذلك أخطاء في المحاكاة ضع في اعتبارك تسلسل الاختبار التالي للأحداث التي سوف تجري .

اولا) إعادة التعيين إلى مستوى عالٍ

ثانيا) يرتفع مستوى clk

ثالثا) يرتفع مستوى clk

رابعا) يرتفع مستوى clk مرة أخرى

خامسا) يتم إعادة التعيين إلى مستوى منخفض متبوعًا بـ

سادسا) مجموعة منخفضة. لا تفترض أي إعداد وتعليق الانتهاكات.

في هذا المثال الذي اسلف ذكره، سيتم تنفيذ العبارة Always @ وهي بمعنى دائما أولاً عند حدوث الحافة الصاعدة لإعادة التعيين والتي ستضع q على القيمة 0.اما في المرة التالية التي يكون فيها تنفيذ الكتلة دائمًا هو الحافة الصاعدة لـ clk والتي ستحافظ مرة أخرى على q عند القيمة 0. يتم بعد ذلك تنفيذ الكتلة دائمًا عند ارتفاع الضبط والذي نظرًا لأن إعادة التعيين هي قوى عالية q للبقاء عند 0. في بعض الاحوال قد تكون هذه الحالة صحيحة وقد لا تكون أيضا ويعتمد هذا الامر كليا على التقليب الفعلي. ومع ذلك فإننا لا نعد هذا الامر المشكله الرئيسيه أو الاساسيه في هذا النموذج. لاحظ أنه عند انخفاض إعادة التعيين، تظل هذه المجموعة عالية. في تقليب حقيقي، سيؤدي هذا إلى انتقال الإخراج إلى 1. كما انه في الواقع في هذا النموذج لن يحدث ذلك لأن الكتلة دائمًا يتم تشغيلها عن طريق ارتفاع حواف المجموعة وإعادة التعيين - وليس المستويات. قد يكون من الامور الضروريه اتباع نهج مختلف لضبط / إعادة ضبط الوجه المتأرجح. [1]

المتغير الأساسي الأخير هو الذي ينفذ D-flop مع تغذية mux لمدخلاته. يحتوي mux على مدخلات d وردود الفعل من التقليب نفسه. هذا يسمح بوظيفة التحميل المسور. لذلك هذه هي طريقه تنفيذه 
```verilog
// Basic structure with an EXPLICIT feedback path
always @(posedge clk)
 if(gate)
  q <= d;
 else
  q <= q; // explicit feedback path

// The more common structure ASSUMES the feedback is present
// This is a safe assumption since this is how the
// hardware compiler will interpret it. This structure
// looks much like a latch. The differences are the
// '''@(posedge clk)''' and the non-blocking '''<='''
//
always @(posedge clk)
 if(gate)
  q <= d; // the "else" mux is "implied"
```
لاحظ معي أنه لا توجد كتل للكتابه «أولية» مذكورة في هذا الوصف. بل نلاحظ أن هنالك بين أدوات التوليف FPGA و ASIC في هذا الهيكل. وفي الواقع فإن ادوات FPGA تتيح الكتل الأولية حيث يتم إنشاء قيم reg بدلاً من استخدام إشارة «إعادة تعيين». لا تدعم أدوات تجميع ASIC مثل هذا البيان. والسبب وراء هذا الامر يعود إلى أن الحالة الأولية لـ FPGA هي شيء يتم تنزيله في جداول ذاكرة FPGA. ASIC وهو تطبيق فعلي للأجهزة.

## مبدئي ودائم
في الواقع يوجد هناك طريقتان منفصلتان للإعلان عن عملية فيريلوج. هذه هي الكلمات الرئيسية **دائمًا** **والأولية (.Initial and always)** **تشير الكلمة الأساسية دائمًا** إلى عملية التشغيل الحر. **تشير الكلمة الأساسية الأولية** إلى تنفيذ العملية لمرة واحدة بالضبط. يبدأ كلا البناءين التنفيذ في وقت المحاكاة 0، كما يتم تنفيذ كلاهما حتى نهاية الكتلة.اما بمجرد وصول **الكتلة دائمًا** إلى نهايتها، تتم إعادة جدولتها (مرة أخرى). ومن الجدير بالذكر انه من المفاهيم الخاطئة الشائعة: الاعتقاد بأن كتلة أولية سيتم تنفيذها قبل حظر دائمًا. في الواقع أرى أنه من الأفضل التفكير في **الكتلة الأولية** كحالة خاصة **للكتلة دائمًا** ، والتي تنتهي بعد إكتمالها لأول مرة.
```verilog
//Examples:
initial
 begin
  a = 1; // Assign a value to reg a at time 0
  #1; // Wait 1 time unit
  b = a; // Assign the value of reg a to reg b
 end

always @(a or b) // Any time a or b CHANGE, run the process
begin
 if (a)
  c = b;
 else
  d = ~b;
end // Done with this block, now return to the top (i.e. the @ event-control)

always @(posedge a)// Run whenever reg a has a low to high change
 a <= b;
```
هذه هي الاستخدامات الكلاسيكية أو الاعتياديه لهاتين الكلمتين الرئيسيتين، ولكن هناك استخدامان إضافيان مهمان يجدر علي التطرق اليهما وذكرهما . الأكثر شيوعًا هو الكلمة الأساسية **دائمًا** بدون قائمة الحساسية **@ (...).** من الممكن استخدامها دائمًا كما هو موضح أدناه:
```verilog
always
 begin // Always begins executing at time 0 and NEVER stops
  clk = 0; // Set clk to 0
  #1; // Wait for 1 time unit
  clk = 1; // Set clk to 1
  #1; // Wait 1 time unit
 end // Keeps executing — so continue back at the top of the begin
```
في الواقع فإن عمل **الكلمة الأساسية دائمًا** بشكل مشابه لتكوين لغة C **بينما (1) {..}** بمعنى أنها ستنفذ إلى الأبد.

المثال أدناه مطابق وظيفيًا للمثال أعلاه **دائمًا. always**
```verilog
initial forever // Start at time 0 and repeat the begin/end forever
 begin
  clk = 0; // Set clk to 0
  #1; // Wait for 1 time unit
  clk = 1; // Set clk to 1
  #1; // Wait 1 time unit
 end
```


## الانضمام
**يتم استخدام الانضمام** بواسطة لغة فيريلوج لإنشاء عمليات متوازية. هل تعلم ان جميع العبارات (أو الكتل) تبدأ بين زوج مفترق / صلة بالتنفيذ في وقت واحد عند وصول تدفق التنفيذ إلى **Fork** . كما انه يستمر هذا التنفيذ بعد **الانضمام** عند اكتمال أطول بيان أو كتلة قيد التشغيل بين **fork** و **Join** .
```verilog
initial
 fork
  $write("A"); // Print char A
  $write("B"); // Print char B
  begin
   #1; // Wait 1 time unit
   $write("C"); // Print char C
  end
 join
```
بالطريقة التي تمت بها كتابة ما سبق، من الممكن طباعة التسلسلات "ABC" أو "BAC". يعتمد ترتيب المحاكاة بين أول $ write و $ write الثانية على تنفيذ المحاكي، وقد يتم اختياره عشوائيًا عن طريق المحاكي في لغة فيريلوج .كما ان هذا يسمح للمحاكاة باحتواء كل من ظروف السباق العرضي بالإضافة إلى السلوك المتعمد غير الحتمي في لغه فيريلوج

لاحظ أن VHDL لا يمكن أن تنتج عمليات متعددة ديناميكيًا مثل لغة فيريلوج.

## شروط السباق
كما انه لا يتم ضمان ترتيب التنفيذ دائمًا في لغة فيريلوج. يمكن توضيح ذلك بأفضل شكل من خلال مثال كلاسيكي والذي سوف نعرضه لكم ادناه: 
```verilog
initial
 a = 0;

initial
 b = a;

initial
 begin
  #1;
  $display("Value a=%d Value of b=%d",a,b);
 end
```
ماهو الامر أو ما الذي سيتم طباعته لقيمتي أ وب؟ في واقع الأمر واعتمادًا على ترتيب تنفيذ الكتل الأولية، فإنه من الممكن أن يكون صفرًا وصفرًا، أو بالتناوب صفر وبعض القيم التعسفية غير المهيأة. سيتم تنفيذ عبارة $ display دائمًا بعد اكتمال مجموعتي التعيين، بسبب التأخير رقم 1.

## العاملين
*ملاحظة: (لا* تظهر عوامل التشغيل هذه بترتيب الأسبقية.)

## المنطق الرباعي القيم
في الواقع فإنه يحدد معيار IEEE 1364 منطقًا رباعي القيم بأربع حالات وهي كالتالي: 0، 1، Z (مقاومة عالية)، و X (قيمة منطقية غير معروفة). بالنسبة لـ VHDL المتنافس، يوجد معيار مخصص للمنطق وهذا المعيار متعدد القيم مثل IEEE 1164 مع تسعة مستويات.

## مهام النظام
تتوفر مهام النظام للتعامل مع الإدخال أو الإخراج البسيط ووظائف قياس التصميم المختلفة أثناء المحاكاة. تكون جميع مهام النظام مسبوقة بـ **$** لتمييزها عن مهام ووظائف المستخدم. يقدم هذا القسم قائمة قصيرة بالمهام الأكثر استخدامًا. عموما فإنها ليست بأي حال من الأحوال قائمة شاملة ولا تعد كذلك .

* عرض - وهي تعني طباعة لشاشة سطر متبوعًا بسطر جديد تلقائي.
* $ write - طباعة لتصفية السطر بدون السطر الجديد.
* swrite $ - طباعة لتغيير سطر بدون السطر الجديد.
* $ sscanf - قراءة سلسلة محددة التنسيق من المتغير. (* فيريلوج 2001)
* $ fopen - فتح مقبض لملف (قراءة أو كتابة)
* $ fdisplay - طباعة سطر من ملف متبوعًا بسطر جديد تلقائي.
* $ fwrite - طباعة لتقديم سطر بدون السطر الجديد.
* $ fscanf - قراءة سلسلة محددة بالتنسيق من الملف. (* فيريلوج 2001)
* fclose $ - أغلق مقبض الملف المفتوح وحرره.
* readmemh $ - قراءة محتوى الملف السداسي في مجموعة ذاكرة.
* readmemb $ - قراءة محتوى الملف الثنائي في مصفوفة الذاكرة.
* شاشة $ - اطبع جميع المتغيرات المدرجة عند حدوث أي تغيير تلاحظه في القيمة.
* $ time - قيمة وقت المحاكاة الحالي.
* $ dumpfile - قم بتعريف اسم ملف إخراج التنسيق VCD (تفريغ تغيير القيمة).
* $ dumpvars - قم بتشغيل المتغيرات وتفريغها.
* $ dumpports - قم بتشغيل المتغيرات وتفريغها أو كتابتها بتنسيق Extended-VCD.
* عشوائي $ - إرجاع القيمة لقيمة عشوائية.

## واجهة لغة البرنامج (PLI)
يوفر PLI للمبرمج آلية لنقل التحكم من لغة فيريلوج إلى وظيفة برنامج مكتوبة بلغة C. تم إهماله رسميًا من قبل IEEE Std 1364-2005 لصالح أحدث واجهة إجرائية Verilog ، والتي تحل محل PLI تمامًا. وهاهي أهم المعلومات عنها:

يُمكِّن PLI (الآن VPI) لغة فيريلوج من التعاون مع البرامج الأخرى المكتوبة بلغة C مثل أدوات الاختبار ومحاكيات مجموعة التعليمات الخاصة بالمتحكم الدقيق والمصححات وغيرها على نفس السياق، على سبيل المثال، يوفر وظائف C `tf_putlongp()` و `tf_getlongp()` التي تُستخدم لكتابة وقراءة وسيطة مهمة أو وظيفة لغة فيريلوج الحالية، على التوالي.

## برمجيات المحاكاة
للحصول على معلومات حول المحاكاة في لغة فيريلوج، راجع قائمة محاكيات Verilog .

## انظر أيضًا

### مواد اضافية

* قائمة محاكيات فيريلوج
* عارض الموجي
* واجهة البرمجة المباشرة SystemVerilog (DPI)
* واجهة إجرائية فيريلوج (VPI)

### لغات مماثلة

* VHDL
* SystemC - مكتبة C ++ توفر دلالات تستند إلى أحداث HDL
* النظام
* OpenVera
* (لغة التحقق)
* لغة مواصفات الخاصية
* Chisel ، لغة مفتوحة المصدر مبنية على قمة Scala

### مولدات فيريلوج

## مراجع
 

; الملاحظات 
* 
* 
* 
* 
* 
* http://instruct1.cit.cornell.edu/Courses/ece576/Verilog/coding_and_synthesis_with_verilog.pdf Cornell ECE576 Course illustrating synthesis constructs
*  (The HDL Testbench Bible)
## الروابط خارجية

### تطوير المعايير
* IEEE Std 1364-2005 - المعيار الرسمي لـ Verilog 2005 (غير مجاني).
* IEEE P1364 - مجموعة العمل لـ Verilog (غير نشط).
* IEEE P1800  - مجموعة العمل الخاصة بـ SystemVerilog (يستبدل أعلاه).
* بناء جملة Verilog - وصف بناء الجملة في شكل Backus-Naur . هذا يسبق معيار IEEE-1364.
* Verilog-AMS - امتدادات إشارة Accellera المختلطة إلى Verilog

### امتدادات اللغة
* Verilog AUTOs - تعليق تعريف مفتوح المصدر يستخدمه IP الصناعي لتبسيط الحفاظ على كود Verilog.

تصنيف:لغات برمجة أنشئت في 1984
تصنيف:لغات برمجة مخصصة النطاق
تصنيف:لغات برمجة مهيكلة
تصنيف:لغات توصيف العتاد
تصنيف:معايير آي إي سي