لغة VHDL

لغة وصف الأجهزة VHDL ( لغة وصف الأجهزة VHSIC ) هي لغة لوصف الأجهزة تُستخدم لنمذجة سلوك وبنية الأنظمة الرقمية على مستويات تجريد متعددة، بدءًا من مستوى النظام وصولًا إلى مستوى البوابات المنطقية . تُستخدم هذه اللغة في إدخال التصميم، والتوثيق، والتحقق. طُوّرت هذه اللغة لبرنامج VHSIC العسكري الأمريكي في ثمانينيات القرن الماضي، واعتمدها معهد مهندسي الكهرباء والإلكترونيات (IEEE) كمعيار IEEE 1076 ، وأحدث إصداراته هو IEEE 1076-2019 . ولنمذجة الأنظمة التناظرية وأنظمة الإشارات المختلطة ، طُوّرت لغة وصف أجهزة (HDL) معتمدة من IEEE ومبنية على VHDL تُسمى VHDL-AMS (المعروفة رسميًا باسم IEEE 1076.1).
تاريخ
في عام 1983، طُوِّرت لغة VHDL في الأصل بناءً على طلب وزارة الدفاع الأمريكية لتوثيق سلوك الدوائر المتكاملة الخاصة بالتطبيقات (ASIC) التي كانت الشركات الموردة تُضمِّنها في المعدات. وينص المعيار MIL-STD-454N [ 2 ] ، في المتطلب 64، القسم 4.5.1 "توثيق الدوائر المتكاملة الخاصة بالتطبيقات بلغة VHDL"، صراحةً على ضرورة توثيق "الأجهزة الإلكترونية الدقيقة" بلغة VHDL.
كانت فكرة محاكاة الدوائر المتكاملة الخاصة بالتطبيقات (ASICs) انطلاقًا من المعلومات الواردة في هذه الوثائق جذابة للغاية، ما دفع إلى تطوير برامج محاكاة منطقية قادرة على قراءة ملفات VHDL. وكانت الخطوة التالية هي تطوير أدوات توليف منطقية تقرأ ملفات VHDL وتُخرج تعريفًا للتنفيذ المادي للدائرة.
نظراً لأن وزارة الدفاع تشترط أن يكون أكبر قدر ممكن من بناء الجملة مبنياً على لغة Ada، وذلك لتجنب إعادة اختراع المفاهيم التي تم اختبارها بدقة في تطوير لغة Ada، فإن لغة VHDL تستعير بشكل كبير من لغة برمجة Ada في كل من المفهوم وبناء الجملة .
تضمنت النسخة الأولية من VHDL، المصممة وفقًا لمعيار IEEE 1076-1987، [ 3 ] مجموعة واسعة من أنواع البيانات، بما في ذلك البيانات العددية ( الأعداد الصحيحة والحقيقية ) ، والمنطقية ( البتات والبوليان )، والحرفية والوقت ، بالإضافة إلى مصفوفات من البيانات المستدعاة والسلاسل النصية المستدعاة .bitbit_vectorcharacter
مع ذلك، لم تُحل مشكلة المنطق متعدد القيم في هذه النسخة ، حيث تُؤخذ قوة إشارة الدفع (معدومة، ضعيفة، أو قوية) والقيم المجهولة في الاعتبار. وقد استلزم ذلك معيار IEEE 1164 ، الذي حدد أنواع المنطق ذي القيم التسع: النوع القياسي std_logicونظيره المتجهي std_logic_vector. وباعتبارها نوعًا فرعيًا مُحَلَّلًا من std_Ulogicنوعها الأصلي، std_logicتسمح الإشارات المُعَلَّمة بدفعات متعددة لنمذجة هياكل ناقل البيانات، حيث تتعامل دالة الحل المتصلة مع التعيينات المتضاربة بكفاءة.
لقد جعل معيار IEEE 1076 المحدث ، في عام 1993، بناء الجملة أكثر اتساقًا، وسمح بمزيد من المرونة في التسمية، ووسع النوع characterللسماح بأحرف ISO-8859-1 القابلة للطباعة، وأضاف xnorعامل التشغيل، وما إلى ذلك.
أضافت التغييرات الطفيفة في المعيار (2000 و2002) فكرة الأنواع المحمية (على غرار مفهوم الفئة في C++ ) وأزالت بعض القيود من قواعد تعيين المنافذ.
بالإضافة إلى معيار IEEE 1164، تم تقديم العديد من المعايير الفرعية لتوسيع وظائف اللغة. أضاف معيار IEEE 1076.2 معالجة أفضل لأنواع البيانات الحقيقية والمركبة. وقدّم معيار IEEE 1076.3 أنواع البيانات الموقعة وغير الموقعة لتسهيل العمليات الحسابية على المتجهات. أما معيار IEEE 1076.1 (المعروف باسم VHDL-AMS ) فقد وفّر امتدادات لتصميم الدوائر التناظرية والمختلطة.
تدعم بعض المعايير الأخرى استخدامًا أوسع لـ VHDL، ولا سيما VITAL (مبادرة VHDL نحو مكتبات ASIC) [ 4 ] وامتدادات تصميم دوائر الميكروويف .
في يونيو 2006، وافقت اللجنة الفنية للغة VHDL التابعة لـ Accellera (المفوضة من قبل IEEE للعمل على التحديث التالي للمعيار) على ما يُعرف بالمسودة 3.0 من معيار VHDL-2006. مع الحفاظ على التوافق التام مع الإصدارات الأقدم، يُقدم هذا المعيار المقترح العديد من الإضافات التي تُسهّل كتابة وإدارة كود VHDL. تشمل التغييرات الرئيسية دمج المعايير الفرعية (1164، 1076.2، 1076.3) في معيار 1076 الرئيسي، ومجموعة موسعة من المعاملات، وبنية أكثر مرونة لعبارات case و generate ، ودمج VHPI (واجهة VHDL الإجرائية) (واجهة للغات C/C++) ومجموعة فرعية من PSL ( لغة مواصفات الخصائص ). من شأن هذه التغييرات تحسين جودة كود VHDL القابل للتوليف، وجعل بيئات الاختبار أكثر مرونة، والسماح باستخدام أوسع للغة VHDL في وصف الأنظمة.
في فبراير 2008، وافقت شركة Accellera على إصدار VHDL 4.0، المعروف أيضًا باسم VHDL 2008، والذي عالج أكثر من 90 مشكلة تم اكتشافها خلال الفترة التجريبية للإصدار 3.0، ويتضمن أنواعًا عامة محسّنة. وفي عام 2008، طرحت Accellera إصدار VHDL 4.0 على معهد مهندسي الكهرباء والإلكترونيات (IEEE) للتصويت عليه لإدراجه في معيار IEEE 1076-2008. ونُشر معيار VHDL، IEEE 1076-2008 [ 5 ] ، في يناير 2009.
التقييس
يُعرّف معيار IEEE 1076 لغة وصف الأجهزة VHSIC ، أو VHDL. وقد طُوّرت هذه اللغة في الأصل بموجب العقد F33615-83-C-1003 الصادر عن القوات الجوية الأمريكية عام 1983، والذي أُسند إلى فريقٍ ضمّ شركة Intermetrics، بصفتها خبيرةً في اللغة والمقاول الرئيسي، وشركة Texas Instruments بصفتها خبيرةً في تصميم الرقائق، وشركة IBM بصفتها خبيرةً في تصميم أنظمة الحاسوب. وقد خضعت اللغة للعديد من المراجعات، ولها مجموعةٌ متنوعةٌ من المعايير الفرعية المرتبطة بها والتي تُثريها أو تُوسّعها بطرقٍ مهمة.
كان معيار IEEE 1076 ولا يزال يمثل علامة فارقة في تصميم الأنظمة الإلكترونية. [ 6 ]
التعديلات
- IEEE 1076–1987 [ 3 ] أول مراجعة موحدة للإصدار 7.2 من اللغة من القوات الجوية الأمريكية.
- IEEE 1076–1993 [ 7 ] (منشور أيضًا برقم ISBN) 1-55937-376-8). تحسينات كبيرة ناتجة عن سنوات عديدة من الملاحظات. ربما تكون هذه النسخة الأكثر استخدامًا مع أكبر دعم لأدوات الموردين.
- IEEE 1076–2000. [ 8 ] تنقيح طفيف. يقدم استخدام الأنواع المحمية .
- IEEE 1076–2002. [ 9 ] مراجعة طفيفة للمعيار 1076–2000. تم تخفيف القواعد المتعلقة بمنافذ التخزين المؤقت .
- IEC 61691-1-1:2004. [ 10 ] اعتماد IEC لمعيار IEEE 1076-2002.
- IEEE 1076c–2007. [ 11 ] قدمت VHPI، وهي واجهة إجرائية للغة VHDL، والتي توفر للبرامج إمكانية الوصول إلى نموذج VHDL. تطلبت لغة VHDL تعديلات طفيفة لاستيعاب VHPI.
- معيار IEEE 1076-2008 (المعروف سابقًا باسم 1076-200x). تم إصدار مراجعة رئيسية في 26 يناير 2009. من بين التغييرات الأخرى، يتضمن هذا المعيار مجموعة فرعية أساسية من لغة PSL، ويسمح بالأنواع العامة في الحزم والبرامج الفرعية، ويُدخل استخدام الأسماء الخارجية .
- IEC 61691-1-1:2011. [ 12 ] اعتماد IEC لمعيار IEEE 1076-2008.
- IEEE 1076–2019. مراجعة رئيسية.
المعايير ذات الصلة
- IEEE 1076.1 VHDL Analog and Mixed-Signal ( VHDL-AMS )
- حزم IEEE 1076.1.1 VHDL-AMS القياسية (stdpkgs)
- حزمة الرياضيات IEEE 1076.2 VHDL
- حزمة توليف لغة VHDL IEEE 1076.3 (vhdlsynth) ( المعيار الرقمي )
- حزمة توليف VHDL IEEE 1076.3 - الفاصلة العائمة (fphdl)
- IEEE 1076.4 التوقيت (مبادرة VHDL نحو مكتبات ASIC: VITAL)
- IEEE 1076.6 VHDL Synthesis Interoperability (تم سحبه في عام 2010) [ 13 ]
- حزم منطق متعدد القيم IEEE 1164 VHDL (std_logic_1164)
تصميم
تُستخدم لغة VHDL عمومًا لكتابة نماذج نصية تصف الدوائر المنطقية. ولا يُعالج هذا النموذج بواسطة برنامج توليف إلا إذا كان جزءًا من التصميم المنطقي. ويُستخدم برنامج محاكاة لاختبار التصميم المنطقي باستخدام نماذج محاكاة لتمثيل الدوائر المنطقية المتصلة بالتصميم. وتُسمى هذه المجموعة من نماذج المحاكاة عادةً بمنصة اختبار .
عادةً ما يكون محاكي VHDL محاكيًا قائمًا على الأحداث . [ 14 ] وهذا يعني إضافة كل عملية إلى قائمة انتظار الأحداث لفترة زمنية محددة. على سبيل المثال، إذا كان من المفترض أن تتم عملية إسناد إشارة بعد 1 نانوثانية، يُضاف الحدث إلى قائمة الانتظار لمدة زمنية +1 نانوثانية. يُسمح أيضًا بتأخير صفري، ولكنه لا يزال بحاجة إلى جدولة: في هذه الحالات، يُستخدم تأخير دلتا ، الذي يُمثل خطوة زمنية متناهية الصغر. يتناوب المحاكي بين وضعين: تنفيذ العبارات، حيث تُقيّم العبارات المُفعّلة، ومعالجة الأحداث، حيث تُعالج الأحداث الموجودة في قائمة الانتظار.
تحتوي لغة VHDL على بنيات للتعامل مع التوازي المتأصل في تصميمات الأجهزة، لكن هذه البنيات ( العمليات ) تختلف في تركيبها عن بنيات التوازي في لغة Ada ( المهام ). ومثل Ada، فإن VHDL لغة ذات كتابة قوية وغير حساسة لحالة الأحرف . ولتمثيل العمليات الشائعة في الأجهزة بشكل مباشر، تتميز VHDL بالعديد من الخصائص غير الموجودة في Ada، مثل مجموعة موسعة من عوامل التشغيل المنطقية، بما في ذلك nand و nor .
تتمتع لغة VHDL بإمكانيات إدخال وإخراج الملفات، ويمكن استخدامها كلغة عامة لمعالجة النصوص، إلا أن الملفات تُستخدم عادةً في بيئات اختبار المحاكاة لتوفير بيانات التحفيز أو التحقق. توجد بعض مُجمِّعات VHDL التي تُنشئ ملفات تنفيذية ثنائية. في هذه الحالة، قد يكون من الممكن استخدام VHDL لكتابة بيئة اختبار للتحقق من وظائف التصميم باستخدام ملفات على الحاسوب المضيف لتحديد المحفزات، والتفاعل مع المستخدم، ومقارنة النتائج بالنتائج المتوقعة. مع ذلك، يُفضِّل معظم المصممين ترك هذه المهمة للمحاكي.
من السهل نسبيًا على مطور عديم الخبرة كتابة كود يحاكي الجهاز بنجاح، ولكنه لا يمكن تركيبه في جهاز حقيقي، أو يكون حجمه كبيرًا جدًا بحيث لا يكون عمليًا. ومن أبرز هذه الأخطاء إنتاج دوائر تثبيت شفافة بدلًا من دوائر القلاب من النوع D كعناصر تخزين. [ 15 ]
يمكن تصميم الدوائر الإلكترونية باستخدام بيئة تطوير متكاملة (IDE) للغة VHDL (مثل Xilinx ISE أو Altera Quartus أو Synopsys Synplify أو Mentor Graphics HDL Designer) لإنتاج مخطط RTL للدائرة المطلوبة. بعد ذلك، يمكن التحقق من المخطط الناتج باستخدام برنامج محاكاة، والذي يعرض أشكال موجات المدخلات والمخرجات للدائرة بعد إنشاء بيئة الاختبار المناسبة. لإنشاء بيئة اختبار مناسبة لدائرة معينة أو كود VHDL، يجب تحديد المدخلات بشكل صحيح. على سبيل المثال، بالنسبة لمدخل الساعة، يلزم استخدام حلقة تكرارية أو عبارة تكرارية. [ 16 ]
عندما يتم ترجمة نموذج VHDL إلى البوابات والأسلاك التي يتم تعيينها على جهاز منطقي قابل للبرمجة مثل CPLD أو FPGA ، فإن ذلك يعني تكوين الأجهزة الفعلية، بدلاً من تنفيذ كود VHDL كما لو كان على شكل شريحة معالج.
المزايا
تتمثل الميزة الرئيسية لـ VHDL، عند استخدامها في تصميم الأنظمة، في أنها تسمح بوصف (نمذجة) سلوك النظام المطلوب والتحقق منه (محاكاته) قبل أن تقوم أدوات التركيب بترجمة التصميم إلى أجهزة حقيقية (بوابات وأسلاك).
ومن المزايا الأخرى أن لغة VHDL تسمح بوصف نظام متزامن . فهي لغة تدفق بيانات تُعتبر فيها كل عبارة قابلة للتنفيذ في آن واحد، على عكس لغات الحوسبة الإجرائية مثل BASIC وC ولغة التجميع، حيث يتم تنفيذ سلسلة من العبارات بشكل متسلسل، تعليمة واحدة في كل مرة.
مشروع VHDL متعدد الأغراض. فبمجرد إنشائه مرة واحدة، يمكن استخدام وحدة حسابية في العديد من المشاريع الأخرى. ومع ذلك، يمكن ضبط العديد من معلمات التكوين والوظائف الخاصة بالوحدة (معلمات السعة، وحجم الذاكرة، وقاعدة العناصر، وتكوين الوحدة، وبنية الربط البيني).
مشروع VHDL قابل للنقل. فباعتباره مصممًا لقاعدة عنصر واحدة، يمكن نقل مشروع جهاز حاسوبي إلى قاعدة عنصر أخرى؛ على سبيل المثال، VLSI بتقنيات مختلفة.
تتمثل إحدى المزايا الكبيرة للغة VHDL مقارنةً بلغة Verilog الأصلية في امتلاكها نظام أنواع كامل . يمكن للمصممين استخدام نظام الأنواع هذا لكتابة تعليمات برمجية أكثر تنظيمًا (خاصةً من خلال تعريف أنواع السجلات ). [ 17 ]
أمثلة تصميمية
في لغة VHDL، يتألف التصميم كحد أدنى من كيان يصف الواجهة وبنية معمارية تتضمن التنفيذ الفعلي. بالإضافة إلى ذلك، تستورد معظم التصاميم وحدات مكتبية. كما تحتوي بعض التصاميم على بنى معمارية وتكوينات متعددة .
بوابة AND بسيطة في لغة VHDL ستبدو كالتالي:
-- (هذا تعليق بلغة VHDL) /* هذا تعليق كتلة (VHDL-2008) */ -- استيراد std_logic من مكتبة IEEE library IEEE ; استخدام IEEE.std_logic_1164. all ;-- هذا هو الكيان ANDGATE هو منفذ ( I1 : إدخال std_logic ; I2 : إدخال std_logic ; O : إخراج std_logic ) ; نهاية الكيان ANDGATE ;-- هذه هي بنية RTL لبوابة ANDGATE : تبدأ O < = I1 و I2 ؛ تنتهي بنية RTL ؛(لاحظ أن هذا RTLيرمز إلى تصميم مستوى نقل السجلات ). قد يبدو المثال أعلاه مطولًا للمبتدئين في لغات وصف الأجهزة (HDL)، إلا أن العديد من أجزائه اختيارية أو لا تحتاج إلى كتابة إلا مرة واحدة. عمومًا، تُعدّ الدوال البسيطة كهذه جزءًا من وحدة سلوكية أكبر، بدلًا من وجود وحدة منفصلة لمثل هذه البساطة. إضافةً إلى ذلك، std_logicقد يبدو استخدام عناصر مثل النوع في البداية مبالغًا فيه. يمكن بسهولة استخدام النوع المدمج bitوتجنب استيراد المكتبة في البداية. مع ذلك، فإن استخدام شكل من أشكال المنطق متعدد القيم ، وتحديدًا المنطق التساعي ( U, X, 0, 1, Z, W, H, L, -)، بدلًا من البتات البسيطة (0، 1)، يوفر للمصمم أداة محاكاة وتصحيح أخطاء قوية جدًا غير موجودة حاليًا في أي لغة وصف أجهزة أخرى.
في الأمثلة التالية، ستلاحظ أن كود VHDL يمكن كتابته بشكل مختصر للغاية. مع ذلك، يتجنب المصممون الأكثر خبرة عادةً هذه الأشكال المختصرة، ويستخدمون أسلوب كتابة أكثر تفصيلاً حرصاً على سهولة القراءة والصيانة.
البنى القابلة للتصنيع وقوالب VHDL
تُستخدم لغة VHDL بشكل متكرر لهدفين رئيسيين: محاكاة التصاميم الإلكترونية وتوليف هذه التصاميم. التوليف هو عملية يتم فيها تجميع كود VHDL وتحويله إلى تقنية تنفيذ مثل FPGA أو ASIC.
ليست جميع بنيات لغة VHDL مناسبة للتوليف. على سبيل المثال، معظم البنيات التي تتعامل صراحةً مع التوقيت، مثل wait for 10 ns;تلك المذكورة، غير قابلة للتوليف رغم صلاحيتها للمحاكاة. مع أن أدوات التوليف المختلفة تمتلك قدرات متباينة، إلا أن هناك مجموعة فرعية مشتركة قابلة للتوليف من لغة VHDL تُحدد بنيات اللغة وأساليبها التي تُقابل مكونات الأجهزة الشائعة في العديد من أدوات التوليف. يُحدد معيار IEEE 1076.6 مجموعة فرعية من اللغة تُعتبر المجموعة الفرعية الرسمية للتوليف. يُنصح عمومًا بكتابة شيفرة برمجية مُتوافقة مع أساليب اللغة المُستخدمة في التوليف، لأن النتائج قد تكون غير صحيحة أو دون المستوى الأمثل عند استخدام بنيات غير قياسية.
قالب MUX
المُضاعِف ، أو "MUX" كما يُطلق عليه عادةً، هو بنية بسيطة شائعة جدًا في تصميم الأجهزة. يُوضح المثال أدناه مُضاعِفًا بسيطًا ثنائيًا إلى أحادي، مع مدخلات و ، ومُحدِّد ومخرج . تجدر الإشارة إلى وجود العديد من الطرق الأخرى للتعبير عن نفس المُضاعِف في لغة VHDL . [ 18 ]ABSX
X <= A عندما S = '1' وإلا B ؛مثال أكثر تعقيدًا لجهاز MUX ذي 4×3 مدخلات ومحدد ثنائي البت:
مكتبة IEEE ؛ استخدم IEEE.std_logic_1164.all ؛ الكيان mux4 هو منفذ ( a1 : إدخال std_logic_vector ( 2 downto 0 )؛ a2 : إدخال std_logic_vector ( 2 downto 0 ) ؛ a3 : إدخال std_logic_vector ( 2 downto 0 )؛ a4 : إدخال std_logic_vector ( 2 downto 0 )؛ sel : إدخال std_logic_vector ( 1 downto 0 )؛ b : إخراج std_logic_vector ( 2 downto 0 ) )؛ نهاية mux4 ؛ بنية rtl لـ mux4 هي -- الجزء التصريحي: فارغ بداية p_mux : عملية ( a1 ، a2 ، a3 ، a4 ، sel ) بداية حالة sel هي عندما "00" => b <= a1 ؛ عندما "01" => b <= a2 ؛ عندما يكون "10" => b <= a3 ؛ عندما تكون القيم الأخرى => b <= a4 ؛ نهاية الحالة ؛ نهاية العملية p_mux ؛ نهاية rtl ؛قالب المزلاج
إنّ المزلاج الشفاف هو في الأساس بت واحد من الذاكرة يتم تحديثه عند رفع إشارة التفعيل. وهناك العديد من الطرق الأخرى التي يمكن التعبير بها عن ذلك في لغة VHDL.
-- قالب القفل 1: Q <= D عندما يكون التمكين = '1' وإلا Q ؛-- قالب القفل 2: معالجة ( الكل ) ابدأ Q <= D عندما ( تمكين )؛ نهاية المعالجة ؛شبشب من النوع D
تقوم دارة القلب والقلاب من النوع D بأخذ عينات من الإشارة الواردة عند الحافة الصاعدة (أو الهابطة) لإشارة الساعة. يحتوي هذا المثال على إعادة ضبط غير متزامنة وفعالة عند المستوى العالي، ويقوم بأخذ العينات عند الحافة الصاعدة لإشارة الساعة.
DFF : العملية ( الكل ) تبدأ إذا RST ثم Q <= '0' ؛ وإذا كانت الحافة الصاعدة ( CLK ) ثم Q <= D ؛ نهاية إذا ؛ نهاية العملية DFF ؛هناك طريقة شائعة أخرى لكتابة سلوك مُفعّل بالحافة في لغة VHDL وهي استخدام سمة الإشارة 'event'. يجب كتابة فاصلة عليا واحدة بين اسم الإشارة واسم السمة.
DFF : العملية ( RST ، CLK ) تبدأ إذا RST فإن Q <= '0' ؛ وإذا كان CLK 'حدثًا' و CLK = ' 1' فإن Q <= D ؛ نهاية إذا ؛ نهاية العملية DFF ؛تُتيح لغة VHDL أيضًا إمكانية كتابة "أسطر برمجية واحدة" مثل:
DFF : Q <= '0' عندما RST = '1' وإلا D عند الحافة الصاعدة ( clk );أو:
DFF : العملية ( الكل ) تبدأ إذا كانت الحافة الصاعدة ( CLK ) فإن Q <= D ؛ نهاية إذا ؛ إذا كانت RST فإن Q <= '0' ؛ نهاية إذا ؛ نهاية العملية DFF ؛أو:
مكتبة IEEE ؛ استخدم IEEE.Std_logic_1164. all ؛الكيان RisingEdge_DFlipFlop_SyncReset هو منفذ ( Q : إخراج std_logic ؛ Clk : إدخال std_logic ؛ sync_reset : إدخال std_logic ؛ D : إدخال std_logic )؛ نهاية RisingEdge_DFlipFlop_SyncReset ؛بنية السلوك لـ RisingEdge_DFlipFlop_SyncReset هي: ابدأ العملية ( Clk ) ابدأ إذا ( rising_edge ( Clk )) ثم إذا ( sync_reset = '1' ) ثم Q <= '0' ؛ وإلا Q <= D ؛ نهاية إذا ؛ نهاية إذا ؛ نهاية العملية ؛ نهاية السلوك ؛وهذا قد يكون مفيدًا إذا لم يكن من الضروري إعادة ضبط جميع الإشارات (السجلات) التي يتم تشغيلها بواسطة هذه العملية.
مثال: عداد
المثال التالي عبارة عن عداد تصاعدي مع إعادة ضبط غير متزامنة، وتحميل متوازٍ، وعرض قابل للتكوين. يوضح استخدام النوع 'unsigned'، وتحويلات الأنواع بين 'unsigned' و'std_logic_vector'، بالإضافة إلى استخدام الأنواع العامة في لغة VHDL . تُشبه هذه الأنواع العامة إلى حد كبير الوسائط أو القوالب في لغات البرمجة التقليدية الأخرى مثل C++. المثال مكتوب بلغة VHDL 2008.
مكتبة IEEE ؛ استخدم IEEE.std_logic_1164.all ؛ استخدم IEEE.numeric_std.all ؛ -- للنوع غير المُوقَّعالكيان COUNTER هو كيان عام ( العرض : إدخال طبيعي := 32 )؛ المنفذ ( إعادة الضبط : إدخال منطقي قياسي ؛ الساعة : إدخال منطقي قياسي ؛ التحميل : إدخال منطقي قياسي ؛ البيانات : إدخال متجه منطقي قياسي ( العرض - 1 إلى 0 )؛ Q : إخراج متجه منطقي قياسي ( العرض - 1 إلى 0 ))؛ نهاية الكيان COUNTER ؛بنية RTL للعداد هييبدأالعملية ( الكل ) تبدأ إذا كانت RST ثم Q < = ( الآخرون => '0' )؛ وإذا كانت الحافة الصاعدة ( CLK ) ثم إذا كانت LOAD = '1' ثم Q <= DATA ؛ وإلا Q <= std_logic_vector ( unsigned ( Q ) + 1 )؛ نهاية إذا ؛ نهاية إذا ؛ نهاية العملية ؛نهاية بنية RTL ؛قد تتضمن العدادات الأكثر تعقيدًا عبارات شرطية (if/then/else) rising_edge(CLK) elsifلإضافة وظائف أخرى، مثل تفعيل العد، أو إيقافه أو تجاوزه عند قيمة معينة، أو توليد إشارات خرج مثل إشارات العد النهائية. يجب توخي الحذر عند ترتيب وتداخل هذه العناصر عند استخدامها معًا، وذلك لتحقيق الأولويات المطلوبة وتقليل عدد مستويات المنطق اللازمة.
هياكل المحاكاة فقط
لا يمكن ترجمة جزء كبير من لغة VHDL إلى مكونات مادية. يُعرف هذا الجزء باسم الجزء غير القابل للتصنيع أو الجزء المخصص للمحاكاة فقط من VHDL، ولا يُستخدم إلا في النماذج الأولية والمحاكاة وتصحيح الأخطاء. على سبيل المثال، سيُولد الكود التالي إشارة ساعة بتردد 50 ميجاهرتز. يمكن استخدامه، على سبيل المثال، لتشغيل إشارة ساعة في تصميم ما أثناء المحاكاة. مع ذلك، فهو مُخصص للمحاكاة فقط ولا يمكن تنفيذه في المكونات المادية. في المكونات المادية الفعلية، تُولد إشارة الساعة خارجيًا، ويمكن تقليل ترددها داخليًا بواسطة منطق المستخدم أو مكونات مادية مُخصصة.
بدء العملية CLK <= '1' ; انتظر 10 نانوثانية ; CLK < = ' 0' ; انتظر 10 نانوثانية ; نهاية العملية ;يمكن استخدام البنى القائمة على المحاكاة فقط لإنشاء أشكال موجية معقدة في وقت قصير جدًا. ويمكن استخدام هذه الأشكال الموجية، على سبيل المثال، كمتجهات اختبار لتصميم معقد أو كنموذج أولي لمنطق توليف سيتم تنفيذه في المستقبل.
ابدأ العملية ، انتظر حتى يصبح START = '1' ؛ -- انتظر حتى يصبح START مرتفعًا ، ثم كرر العملية من 1 إلى 10 -- انتظر لعدة دورات ساعة... انتظر حتى الحافة الصاعدة ( CLK )؛ نهاية الحلقة ؛حلقة تكرارية من 1 إلى 10 : اكتب الأرقام من 1 إلى 10 في المتغير DATA، بمقدار 1 في كل دورة. DATA < = to_unsigned ( i , 8 ); انتظر حتى الحافة الصاعدة لإشارة الساعة CLK . نهاية الحلقة .-- انتظر حتى يتغير الناتج، انتظر النتيجة ؛ -- الآن ارفع إشارة تأكيد (ACK) لفترة الساعة ACK <= '1' ؛ انتظر حتى الحافة الصاعدة ( CLK )؛ ACK <= '0' ؛وهكذا دواليك... نهاية العملية ؛ميزات VHDL-2008
الأسماء المستعارة الهرمية
مكتبة ieee ؛ استخدم ieee.std_logic_1164. الكل ؛الكيان bfm هو نهاية الكيان ؛ بنية beh الخاصة بـ bfm هي إشارة en : std_logic ؛ بداية -- أدخل التنفيذ هنا نهاية البنية ؛// ------------------------------------------ مكتبة ieee ؛ استخدم ieee.std_logic_1164. الكل ؛الكيان test1 هو كيان نهائي ؛ بنية beh الخاصة بـ test1 هي بدايةibfm : entity work.bfm ; -- عملية منصة الاختبار المسماة probe_en هي << signal.test1.ibfm.en : std_logic > ; begin probe_en <= ' 1' ; wait for 100 ns ; probe_en < = ' 0 ' ; wait for 100 ns ; probe_en < = ' 1 ' ; wait for 100 ns ; std.env.stop ( 0 ) ; end process ; end architecture ;المكتبات القياسية
ويُشار إليها أيضاً باسم الحزم القياسية.
حزمة معيار IEEE
تتضمن حزمة معايير IEEE ما يلي: [ 19 ]
- الانحراف المعياري الرقمي
- std_logic_1164
- std_logic_arith
- std_logic_unsigned
- std_logic_signed
- std_logic_misc
محاكيات VHDL
تجاري:
- ألديك أكتيف-إتش دي إل
- إيقاع حاد
- برنامج Mentor Graphics ModelSim
- محاكي كويستا المتقدم من مينتور جرافيكس
- Synopsys VCS-MX [ 20 ]
- Xilinx Vivado Design Suite (يحتوي على Vivado Simulator)
آخر:
- EDA Playground هي بيئة تطوير متكاملة مجانية قائمة على الويب لـ VHDL (تستخدم Synopsys VCS و Cadence Incisive و Aldec Riviera-PRO و GHDL لمحاكاة VHDL)
- GHDL هو مُترجم VHDL مفتوح المصدر [ 21 ] يُمكنه تنفيذ برامج VHDL. ( GHDL على GitHub )
- برنامج boot من freerangefactory.org هو برنامج تجميع ومحاكاة VHDL يعتمد على GHDL و GTKWave .
- برنامج Simili من Symphony EDA هو برنامج محاكاة VHDL تجاري مجاني موجود على موقع Wayback Machine (تمت أرشفته في 2007-10-02).
- برنامج nvc من تطوير نيك جاسون هو برنامج مفتوح المصدر لتجميع ومحاكاة لغة VHDL. [ 22 ] [ 23 ]
- freehdl بواسطة Edwin Naroska كان محاكي VHDL مفتوح المصدر، تم التخلي عنه منذ عام 2001. [ 24 ]
انظر أيضاً
- لغة وصف الأجهزة من شركة ألترا (AHDL)
- Chisel – لغة وصف الأجهزة مفتوحة المصدر (HDL)
- numeric std – حزمة مكتبة لغة وصف الأجهزة (VHDL) للاستخدام في تصميم الدوائر الإلكترونية، والتي توفر وظائف حسابية للمتجهات
- لغة Rosetta-lang - لغة توصيف على مستوى النظام
- SystemC – امتدادات C++ لمحاكاة الأنظمة المدمجة
- لغة SystemVerilog – لغة وصف الأجهزة والتحقق من الأجهزة
- فيريلوج - لغة وصف الأجهزة
- قائمة محاكيات لغة وصف الأجهزة (HDL)
مراجع
- ↑ ديفيد ر. كويلو (30 يونيو 1989). دليل VHDL . سبرينغر ساينس آند بيزنس ميديا. ISBN 978-0-7923-9031-2.
- ↑ وزارة الدفاع (1992). المعيار العسكري، المتطلبات العامة القياسية للمعدات الإلكترونية . تم الاطلاع عليه بتاريخ 15 نوفمبر 2017 .
- 1 2 1076-1987 – دليل مرجعي للغة VHDL القياسية لمعهد مهندسي الكهرباء والإلكترونيات . 1988. doi : 10.1109/IEEESTD.1988.122645 . ISBN 0-7381-4324-3.
- ↑ "VHDL - VITAL" . www.vhdl.renerta.com . مؤرشف من الأصل بتاريخ 22-10-2011.
- ↑ 1076-2008 – دليل مرجعي للغة VHDL وفقًا لمعيار IEEE . 2009. doi : 10.1109/IEEESTD.2009.4772740 . ISBN 978-0-7381-6854-8.
- ↑ مجموعة عمل IEEE P1076 لتحليل وتوحيد لغة VHDL (VASG)
- ↑ 1076-1993 – دليل مرجعي للغة VHDL القياسية لمعهد مهندسي الكهرباء والإلكترونيات . 1994. doi : 10.1109/IEEESTD.1994.121433 . ISBN 0-7381-0986-X.
- ↑ 1076-2000 – دليل مرجعي للغة VHDL القياسية لمعهد مهندسي الكهرباء والإلكترونيات . 2000. doi : 10.1109/IEEESTD.2000.92297 . ISBN 0-7381-1948-2.
- ↑ 1076-2002 – دليل مرجعي للغة VHDL وفقًا لمعيار IEEE . 2002. doi : 10.1109/IEEESTD.2002.93614 . ISBN 0-7381-3247-0.
- ↑ IEC 61691-1-1، الطبعة الأولى 2004-10؛ IEEE 1076 — لغات السلوك IEC/IEEE – الجزء 1-1: دليل مرجعي للغة VHDL (اعتماد معيار IEEE 1076-2002) . 2004. doi : 10.1109/IEEESTD.2004.95752 . ISBN 2-8318-7691-5.
- ↑ 1076c-2007 – التعديل 1 من دليل مرجع لغة VHDL القياسي الصادر عن معهد مهندسي الكهرباء والإلكترونيات: واجهة تطبيق لغة الإجراءات . 2007. doi : 10.1109/IEEESTD.2007.4299594 . ISBN 978-0-7381-5523-4.
- ↑ 61691-1-1-2011 — اللغات السلوكية - الجزء 1-1: دليل مرجعي للغة VHDL . 2011. doi : 10.1109/IEEESTD.2011.5967868 . ISBN 978-0-7381-6605-6.
- ↑ "IEEE 1076.6-2004 - معيار IEEE لتوليف مستوى نقل السجل (RTL) في VHDL" .
- ↑ "ELEC3017 - المحاكاة" (ملف PDF) . جامعة ساوثهامبتون. مؤرشف (ملف PDF) من الأصل بتاريخ 23 فبراير 2017. تم الاطلاع عليه بتاريخ 23 فبراير 2017 .
- ↑ "لماذا عليّ الاهتمام بالمزالج الشفافة؟" . دولوس. مؤرشف من الأصل في 18 يونيو 2025. تم الاطلاع عليه في 27 مارس 2026 .
- ↑ "دليل مصممي VHDL لإنشاء الساعة" . دولوس. مؤرشف من الأصل في 20 يناير 2013. تم الاطلاع عليه في 22 ديسمبر 2012 .
- ↑ جيري جايسلر. "منهجية تصميم VHDL منظمة" (ملف PDF) . مؤرشف (PDF) من الأصل بتاريخ 10 أكتوبر 2022. تم الاطلاع عليه بتاريخ 15 نوفمبر 2017 .
- ↑ "المعاملات المنطقية وتعيينات الإشارات في لغة VHDL للمنطق التوافقي" . FPGAtutorial . 16 مايو 2020. تم الاطلاع عليه بتاريخ 23 أغسطس 2020 .
- ↑ تشيوسانو، سيلفيا (5 أبريل 2011). "أنواع بيانات VHDL والمعاملات المتاحة في حزم IEEE القياسية" (ملف PDF) . جامعة تورينو التقنية . مؤرشف (ملف PDF) من الأصل بتاريخ 10 أكتوبر 2022.
- ↑ "VCS: حلول المحاكاة الأعلى أداءً في الصناعة" . synopsis.com .
- ↑ "حقوق النشر | التراخيص" . وثائق GHDL -- وثائق GHDL 0.36-dev . readthedocs.io.
- ↑ جاسون، نيك (5 نوفمبر 2011). "كتابة مترجم VHDL" .
- ↑ جاسون، نيك (22 يوليو 2023). "NVC - مُترجم ومُحاكي لغة VHDL" . تم الاطلاع عليه في 23 يوليو 2023 .
- ↑ "freehdl: By Thread" . مؤرشف من الأصل في 10 فبراير 2002.
- ملحوظات
- 1076/INT-1991 – تفسيرات معايير IEEE: معيار IEEE 1076-1987، دليل مرجعي للغة VHDL القياسية من IEEE . 1992. doi : 10.1109/IEEESTD.1992.101084 . ISBN 0-7381-0987-8.
للمزيد من القراءة
- آشندن، بيتر ج. (2008). دليل المصمم إلى لغة VHDL، الطبعة الثالثة (أنظمة على السيليكون) . ISBN 978-0-1208-8785-9.(كتاب مرجعي عن لغة VHDL كتبه أحد كبار مطوري اللغة)
- برايان ميلي، فابريزيو تابيرو (فبراير 2012).دليلٌ مُبسط لكتابة أكواد VHDL فعّالة لتطبيقاتك الرقمية. مُؤرشف من النسخة الأصلية Free Range VHDL بتاريخ 13 فبراير 2015.
- يوهان ساندستروم (أكتوبر 1995). "مقارنة فيريلوج بـ VHDL من الناحية التركيبية والدلالية" . تصميم الأنظمة المتكاملة . مجلة EE Times.— يقدم ساندستروم جدولاً يربط بين بنيات VHDL وبنيات Verilog .
- شركة كواليس ديزاين (20 يوليو 2000). "بطاقة مرجعية سريعة للغة VHDL" (ملف PDF) . 1.1. شركة كواليس ديزاين. مؤرشفة من النسخة الأصلية (ملف PDF) بتاريخ 10 ديسمبر 2003.
- شركة كواليس ديزاين (20 يوليو 2000). "بطاقة مرجعية سريعة لـ 1164 حزمة" (ملف PDF) . الإصدار 1.0. شركة كواليس ديزاين. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 14 مارس 2016.
- يانيك بيرجيرون، "كتابة منصات الاختبار: التحقق الوظيفي من نماذج لغة وصف الأجهزة"، 2000، رقم ISBN 0-7923-7766-4(دليل اختبار HDL)
- كروليكوسكي، إس. جيه. (مايو 1995). "توحيد مكتبات الدوائر المتكاملة الخاصة بالتطبيقات في لغة VHDL باستخدام VITAL: دليل تعليمي". وقائع مؤتمر IEEE للدوائر المتكاملة المخصصة لعام 1995. الصفحات 603-610 . doi : 10.1109/CICC.1995.518256 . ISBN 0-7803-2584-2.
- فريلاند، راسل إي. "ربط النظام بالشريحة: استخدام VHDL/VITAL لمحاكاة مستوى اللوحة" (ملف PDF) . تم الاطلاع عليه بتاريخ 12 مايو 2025 .
- روشتون، أندرو (2011). لغة VHDL لتوليف المنطق ( الطبعة الثالثة). تشيتشستر، غرب ساسكس، المملكة المتحدة: وايلي . ص 4. ISBN 9780470977972.
- فريلاند، راسل إي. "نمذجة مكونات اللوحة باستخدام VITAL" . تم الاسترجاع في 12 مايو 2025 .
- توزوف، إيليا؛ رويز، خوان كارلوس؛ دي أندريس، ديفيد (سبتمبر 2017). "محاكاة دقيقة لتأثيرات الأعطال في نماذج VHDL الموصوفة على مستوى التنفيذ". المؤتمر الأوروبي الثالث عشر للحوسبة الموثوقة (EDCC) لعام 2017. معهد مهندسي الكهرباء والإلكترونيات . الصفحات 10-17 . doi : 10.1109/EDCC.2017.26 . ISBN 978-1-5386-0602-5.
روابط خارجية
- لغات وصف الأجهزة
- معايير IEEE
- معايير اللجنة الكهروتقنية الدولية
- عائلة لغات البرمجة آدا
- لغات البرمجة الخاصة بالمجال
- لغات البرمجة التي تم إنشاؤها عام 1983
