فيريلوج-أ

Verilog-A هي لغة نمذجة قياسية في الصناعة للدوائر التناظرية . وهي مجموعة فرعية من Verilog-AMS تعمل في الزمن المستمر . قد تُصدّر بعض التطبيقات التجارية تصاميم MEMS بصيغة Verilog-A.

تاريخ

تم ابتكار لغة Verilog-A لتوحيد لغة برمجة سلوك Spectre في مواجهة منافسة لغة VHDL (معيار IEEE)، التي كانت تستوعب القدرات التناظرية من لغات أخرى (مثل MAST). وافقت منظمة Open Verilog International (OVI، الجهة التي وضعت معيار Verilog في الأصل) على دعم هذا التوحيد، شريطة أن يكون جزءًا من خطة لإنشاء Verilog-AMS - وهي لغة واحدة تغطي التصميم التناظري والرقمي. كانت Verilog-A مجموعة فرعية تناظرية بالكامل من Verilog-AMS، وشكّلت المرحلة الأولى من المشروع.

كان هناك تأخير كبير بين أول دليل مرجعي للغة Verilog-A و Verilog-AMS الكامل ، وفي ذلك الوقت انتقلت Verilog إلى IEEE، تاركة Verilog-AMS وراءها في Accellera .

التوافر القياسي

لا يوجد معيار Verilog-A بشكل مستقل، بل هو جزء من معيار Verilog-AMS الكامل. يتوفر دليل مرجع اللغة (LRM) الخاص به على موقع Accellera الإلكتروني . [ 1 ] [ 2 ] [ 3 ] من المرجح أن تستفيد الأعمال المستقبلية من إمكانيات أنواع الشبكات الجديدة في SystemVerilog . ستصبح الأنواع المدمجة مثل "wreal" في Verilog-AMS أنواعًا معرفة من قبل المستخدم في SystemVerilog، بما يتماشى بشكل أكبر مع منهجية VHDL .

التوافق مع لغة البرمجة C

يمكن ترجمة مجموعة فرعية من لغة Verilog-A تلقائيًا إلى لغة البرمجة C باستخدام مُركِّب نماذج الأجهزة التلقائي (ADMS) . تُستخدم هذه الميزة، على سبيل المثال، لترجمة نماذج ترانزستورات BSIM Verilog-A، التي لم تعد تُصدر بلغة C، لاستخدامها في برامج المحاكاة مثل ngspice . [ 4 ]

مثال على الكود

يقدم هذا المثال الأول عرضًا توضيحيًا أوليًا للنمذجة في لغة Verilog-A:

`include "constants.vams" `include "disciplines.vams"مثال الوحدة ( أ ، ب ، ج ، د ، هـ ، و المعامل الحقيقي R = 1 ملي أمبير ؛ المعامل الحقيقي C = 1 ميكرو أمبير ؛ المعامل الحقيقي L = 1 ميكرو أمبير ؛ المعامل الصحيح gain = 2 ؛ المدخل أ ؛ المخرج ب ؛ المدخلات والمخرجات ج ، د ، هـ ، و ؛ الدائرة الكهربائية أ ، ب ، ج ، د ، هـ ، و ؛ الدائرة التناظرية begin // نمذجة العناصر المجمعة // المقاومة V ( ج ، د ) <+ R * I ( ج ، د // محث // يتم تجميع عدة تعيينات للتيار أو الجهد V ( c , d ) <+ L * ddt ( I ( c , d )); // مكثف I ( e , f ) <+ C * ddt ( V ( e , f )); // مكبر صوت بسيط // يتم ربط الجهود بالأرض إذا لم يتم تحديد عقدة ثانية V ( b ) <+ gain * V ( a ); end endmodule

يطبق هذا المثال في Verilog-AMS ثنائيًا مثاليًا، من خلال تحديد التيار المار عبر الفرع (a,c) اعتمادًا على الجهد عند أطراف الفرع (a) و(c) ودرجة الحرارة المحيطة للدائرة المحاكاة:

// وحدة الثنائي المثالي diode ( a , c ); inout a , c ; electrical a , c ; parameter real IS = 1.0e-14 ; // تيار التشبع الحقيقي idio قابل للتكوين من قبل المستخدم ; /*  * حساب التيار غير الخطي المار عبر الثنائي اعتمادًا على  * - الجهد الحراري $vt (عند درجة حرارة الدائرة المحاكاة) و  * - الجهد بين الطرفين  */ analog begin idio = IS * ( limexp ( V ( a , c ) / $vt ) - 1 ); I ( a , c ) <+ idio ; end endmodule

بالنسبة لمصدر جهد تيار مستمر بسيط، يتم ضبط جهد الفرع على القيمة الثابتة (تيار مستمر):

// وحدة مصدر التيار المستمر vsrc ( p , n ); المعامل الحقيقي dc = 1.0 ; المدخلات والمخرجات p , n ; القيم الكهربائية p , n ;بداية تناظرية // تعيين جهد تيار مستمر ثابت عند كل خطوة زمنية: V ( p , n ) <+ dc ; نهاية نهاية الوحدة

يمكن لمولد الجهد الجيبي استخدام الدالة المدمجة sin() :

// مصدر جهد جيبي `include "constants.vams"وحدة vsin ( p , n ); المعامل الحقيقي للسعة = 1.0 ; المعامل الحقيقي للتردد = 50.0 ; المعامل الحقيقي للطور = 0.0 ; المدخلات والمخرجات p , n ; الإشارات الكهربائية p , n ;analog begin V ( p , n ) <+ amplitude * sin ( `M_TWO_PI * freq * $abstime + phase ); $bound_step ( 0.1 / freq ); // يتطلب 10 نقاط على الأقل لكل دورة لتجنب مشاكل التداخل end endmodule

انظر أيضاً

مراجع

  1. معيار Verilog-AMS
  2. يمكن العثور على الإصدارات الأولية واللاحقة هنا. مؤرشف بتاريخ ٢٤ سبتمبر ٢٠٠٧ في أرشيف الإنترنت (Wayback Machine).
  3. يمكن العثور على الإصدار النهائي هنا
  4. "إرشادات تحويل Verilog-A إلى C" . ngspice. مؤرشف من الأصل بتاريخ 2022-05-07 . تم الاطلاع عليه بتاريخ 2019-07-17 .