ما هي أفضل الممارسات الأجهزة وصف لغات (Verilog, VHDL.... الخ) [مغلقة]

StackOverflow https://stackoverflow.com/questions/326880

  •  11-07-2019
  •  | 
  •  

سؤال

ما أفضل الممارسات التي ينبغي مراعاتها عند تنفيذ HDL الرمز ؟

ما هي أوجه الاتفاق والاختلاف بالمقارنة مع أكثر شيوعا تطوير البرمجيات الحقول ؟

هل كانت مفيدة؟

المحلول

أفضل كتاب في هذا الموضوع هو إعادة استخدام منهجية دليل.وهو يغطي كل VHDL و Verilog.

و خاصة في بعض القضايا التي لا يكون هناك تطابق تام في البرنامج:

  • لا المزالج
  • كن حذرا مع إعادة تعيين
  • التحقق الخاص بك الداخلية والخارجية توقيت
  • استخدم فقط synthesizable رمز
  • تسجيل المخرجات من جميع وحدات
  • كن حذرا مع حجب مقابلعدم عرقلة المهام
  • كن حذرا مع حساسية قوائم اندماجي المنطق (أو استخدام @(*) في Verilog)

بعض التي هي نفس تشمل

  • استخدام سم
  • كود استعراض
  • اختبار (محاكاة) التعليمات البرمجية الخاصة بك
  • إعادة استخدام التعليمات البرمجية عند الاقتضاء
  • لديك ما يصل إلى تاريخ الجدول الزمني
  • لديها المواصفات أو حالات الاستخدام أو رشيقة العملاء

نصائح أخرى

نوع من قديم الموضوع, ولكن أريد أن أضع في بلدي $0.02.هذا ليس حقا محددة Verilog/VHDL..أكثر على تصميم الجهاز بشكل عام...على وجه التحديد synthesizable تصميم مخصص ASICs.

هذا هو بلدي الرأي على أساس سنوات من صناعة (بدلا الأكاديمية) خبرة في التصميم.هم في أي ترتيب معين

مظلتي البيان هو تصميم التحقق من صحة التنفيذ.في تصميم الجهاز, التحقق من صحة أمر بالغ الأهمية.البق أغلى كثيرا عندما وجدت في الفعلية السيليكون.لا يمكنك فقط إعادة تجميع.ولذلك قبل السيليكون يتم إعطاء التركيز أكثر من ذلك بكثير.

  • تعرف الفرق بين التحكم في مسارات ومسارات البيانات.هذه تمكنك من إنشاء أكثر من ذلك بكثير أنيقة كود للصيانة.كما يسمح لك بحفظ أبواب وتقليل X الانتشار.فعلى سبيل المثال ، بيانات المسارات يجب أن لا تحتاج resettable يتخبط, التحكم في مسارات دائما في حاجة إليها.

  • إثبات وظيفة قبل التحقق من الصحة.إما من خلال النهج الرسمي أو من خلال الطول الموجي.هذا له العديد من المزايا ، سوف اشرح 2.أولا سيوفر لك الوقت الضائع تقشير البصل من خلال القضايا.على عكس الكثير من التطبيقات على مستوى التصميم (esp أثناء التعلم) و معظم العمل بطبيعة الحال ، بدوره حول الوقت رمز تغييرات كبيرة جدا (في أي مكان من 10 دقائق إلى أيام ، اعتمادا على تعقيد).في كل مرة قمت بتغيير رمز, كنت بحاجة إلى الذهاب من خلال وضع الوبر فحص وتصنيف الموجي جلب و أخيرا المحاكاة الفعلية..التي يمكن أن يستغرق ساعات.ثانيا ، هل هي اقل بكثير من المرجح أن يكون من الصعب ضرب الحالات الزاوية.ملاحظة هذا فيما يتعلق مسبقا السيليكون التحقق من الصحة.هذه بالتأكيد ضرب في ما بعد السيليكون يكلفك الكثير من $$$.صدقني مقدما تكلفة تثبت وظائف يقلل بشكل كبير خطر جيد يستحق كل هذا الجهد.هذا هو أحيانا من الصعب إقناع الأخيرة خريجي الكلية.

  • يكون "الدجاج بت".الدجاج بت بت في MMIO مجموعة عبر السائق إلى تعطيل ميزة في السيليكون.إنه يعتزم العودة تغييرات في الثقة ليست عالية (الثقة يتناسب طرديا مع التحقق من صحة الجهود).بل هو أقرب إلى المستحيل لضرب كل دولة في مرحلة ما قبل السيليكون.الثقة في التصميم الخاص بك حقا لا يمكن أن تتحقق حتى إنه ثبت في ما بعد السيليكون.حتى لو كان هناك فقط 1 الدولة التي هو ضرب 0.000005% من الوقت الذي يكشف الخلل ، وسوف تصل في مرحلة ما بعد السيليكون ، ولكن ليس بالضرورة في مرحلة ما قبل السيليكون.

  • تجنب الاستثناءات في السيطرة على الطريق في جميع التكاليف.كل جديد استثناء لديك الزوجي الخاص بك التحقق من صحة الجهود.هذا هو واحد من الصعب أن أشرح.دعنا نقول أن هناك DMA كتلة من شأنها حفظ البيانات إلى الذاكرة أن كتلة أخرى سوف تستخدم.دعونا نقول بنية البيانات المحفوظة بها تعتمد على بعض من وظيفة يجري القيام به.إذا كنت قررت أن تصميم مثل أن هيكل البيانات المحفوظة كانت مختلفة بين وظائف مختلفة ، كنت مجرد ضرب الخاص بك التحقق من صحة الجهود المبذولة من قبل عدد من DMA وظائف.إذا هذه القاعدة المتبعة ، بنية البيانات المحفوظة من أن تكون فائقة مجموعة من البيانات المتاحة عن كل وظيفة حيث محتوى المواقع ضمنية.مرة واحدة DMA حفظ المنطق هو التحقق من صحة 1 وظيفة لها التحقق من صحة جميع الوظائف.

  • التقليل من واجهات (قراءة التقليل من التحكم في مسارات).هذا هو ذات الصلة إلى التقليل من الاستثناءات.أولا كل واجهة جديدة يتطلب التحقق من الصحة.وهذا يشمل جديدة لعبة الداما/بتتبع تأكيدات تغطية نقاط حافلة النماذج الفنية في testbench.ثانيا ، يمكن أن تزيد من صحة الجهود أضعافا مضاعفة!دعونا نقول لديك 1 واجهة على قراءة البيانات في مخابئ.الآن دعونا نقول (لسبب غريب) أنك تريد واجهة أخرى لقراءة الذاكرة الرئيسية.فقط أربعة أضعاف الخاص بك التحقق من صحة الجهود.أنت الآن بحاجة إلى التحقق من صحة هذه المجموعات في أي وقت n:

    • لا توجد ذاكرة التخزين المؤقت القراءة لا قراءة الذاكرة
    • لا توجد ذاكرة التخزين المؤقت القراءة ذاكرة القراءة
    • ذاكرة التخزين المؤقت القراءة لا قراءة الذاكرة
    • ذاكرة التخزين المؤقت القراءة ذاكرة القراءة
  • فهم والتواصل الافتراضات.يفتقر هذا هو السبب الرئيسي كتلة إلى كتلة مشاكل في الاتصالات.هل يمكن أن يكون الكمال كتلة تماما من صحتها..ومع ذلك ، من دون فهم كل الافتراضات كتلة الخاص بك سوف تفشل عندما يكون متصلا به.

  • التقليل من إمكانات الدول.أقل الدول (مقصودة أو غير مقصودة) تصميم لديه أقل من الجهد المطلوب للتحقق من صحة.أنها ممارسة جيدة مثل وظائف في 1 أعلى مستوى الدالة (مثل التعاقب و حكاما).فإنه من الصعب جدا تحديد هذا المستوى العالي وظيفة هذا أنه يشمل العديد من أصغر وظائف ممكن ، ولكن في القيام بذلك إلى حد كبير في القضاء على الدولة و في المقابل احتمال الخلل.

  • دائما توفر إشارة قوية ترك كتلة الخاص بك.معظم الوقت التخبط هو الحل.لديك أي فكرة عما نقطة النهاية كتلة(s) سوف نفعل ذلك.هل يمكن أن تصل إلى توقيت القضايا التي يمكن أن يكون لها تأثير مباشر على تنفيذ مثالية.

  • تجنب دقيقي نوع FSMs إلا إذا كان الأداء سلبيا.دقيقي FSMs من المرجح أن تنتج توقيت القضايا عبر مور

  • ..وأخيرا واحد أكرهه:"إذا لم يتم كسر ، لا تصلحه" بسبب المخاطر التي تنطوي عليها وارتفاع تكاليف البق ، مرات عديدة القرصنة هو أكثر الحلول العملية لحل المشاكل.آخرون استعصى على هذا بالإشارة إلى استخدام المكونات الموجودة.

أما بالنسبة لمقارنة ضد أكثر التقليدية تصميم البرمجيات:

  • منفصلة الحدث مدفوعة البرمجة هو نموذج مختلف تماما.يرى الناس verilog جملة والتفكير "أوه ، مثل ج"...بيد أن هذا لا يمكن أن يكون أبعد عن الحقيقة.على الرغم من أن بناء الجملة هو مماثل ، يجب على المرء أن يفكر بشكل مختلف.على سبيل المثال التقليدي المصحح لا معنى لها تقريبا على synthesizable RTL (Testbench تصميم مختلفة).الطول الموجي على الورق هي أفضل وسيلة متاحة.بيد أن يقال ، FSM التصميم يمكن في بعض الأحيان أن تحاكي البرمجة الإجرائية.الناس مع خلفية البرنامج يميلون إلى الذهاب مجنون مع أنظمة إدارة سلامة الغذاء (أنا أعلم أنني فعلت في الأولى).

  • نظام Verilog لديه الكثير و الكثير (الكثير) من testbench ميزات محددة.هو تماما وجوه المنحى.بقدر ما testbench يذهب التصميم جدا مماثلة إلى البرامج التقليدية في التصميم.ومع ذلك, فإنه لا يكون 1 أكثر بعدا المرتبطة ذلك الوقت.شروط السباق والبروتوكول التأخير يجب أن تكون مسؤولة

  • أما بالنسبة التحقق من الصحة ، بل هو أيضا مختلفة (نفس).هناك 3 أساليب رئيسية ؛

    • الرسمية propagative التحقق (FPV):عليك أن تثبت من خلال المنطق أنه سوف يعمل دائما
    • توجه اختبار عشوائي.تعيين عشوائيا تأخير إدخال القيم ميزة تمكين حسب تعريف البذور. توجه يعني أن بذرة يضع الوزن على المسارات التي لديها أقل ثقة.يستخدم هذا النهج تغطية النقاط تشير إلى الصحة
    • التركيز على الاختبار.هذا هو مماثل التقليدية اختبار البرمجيات

...للتأكد من اكتمالها ، أنا أيضا بحاجة إلى مناقشة أفضل اختبار مقاعد البدلاء ممارسات التصميم...ولكن هذا ليوم آخر

آسف على طول..كنت في "منطقة" :)

وHDL في مثل فيريلوج وVHDL يبدو حقا لتشجيع السباغيتي المدونه. تتكون معظم وحدات عدة "دائما" (فيريلوج) أو "عملية" (إتش دي إل) الكتل التي يمكن أن تكون في أي أمر. وغالبا ما تحجب الخوارزمية العامة أو وظيفة من وحدة تماما. معرفة كيف يعمل رمز (إذا لم يكتب عليه) هو عملية مؤلمة.

قبل

وبضع سنوات جئت عبر هذه الورقة التي تحدد طريقة أكثر تنظيما ل تصميم VHDL. والفكرة الأساسية هي أن كل وحدة لها فقط 2 كتل العملية. واحد لرمز اندماجي، والآخر للمتزامن (سجلات). انه امر رائع لإنتاج كود قراءة وللصيانة.

  • HDL في بعض أجزاء من التعليمات البرمجية يمكن أن تعمل في نفس الوقت على سبيل المثال سطرين من التعليمات البرمجية "العمل" في نفس الوقت, هذا هو ميزة استخدام بحكمة.هذا هو الشيء الذي مبرمج الذي اعتاد على خط سطرا اللغات قد تجد من الصعب فهم في البداية:

    • طويلة وغير محددة لتلبية الاحتياجات الخاصة بك الأنابيب يمكن أن تنشأ.
    • يمكنك أن تجعل الخاصة بك كبيرة وحدات العمل في نفس الوقت.
    • بدلا من وحدة واحدة أن تفعل عمل المتكررة على مختلف البيانات ، يمكنك إنشاء عدة وحدات ، والقيام بالعمل بالتوازي.
  • وينبغي إيلاء اهتمام خاص إلى تمهيد العملية مرة واحدة رقاقة الوظيفية ، كنت قد قدمت طريقة ضخمة.

التصحيح على الأجهزة عادة ما تكون أصعب بكثير من برنامج تصحيح ذلك:

  • رمز بسيط هو المفضل في بعض الأحيان هناك طرق أخرى لتسريع التعليمات البرمجية الخاصة بك ، بعد كان يعمل بالفعل ، على سبيل المثال باستخدام أعلى سرعة رقاقة ، الخ.

  • تجنب "الذكية" بروتوكولات بين المكونات.

  • تعمل التعليمة البرمجية في HDL هو أغلى من على البرامج الأخرى, كما الأجهزة من الصعب جدا للفك وإعادة الاستخدام أيضا النظر في استخدام "المكتبات" من وحدات بعضها مجاني والبعض الآخر بيعها.

  • تصميم ينبغي أن تنظر ليس فقط الخلل في HDL رمز ، ولكن أيضا الفشل على رقاقة كنت البرمجة وغيرها من الأجهزة التي واجهة مع رقاقة, لذلك ينبغي للمرء حقا التفكير في تصميم سهل التحقق.

بعض التصحيح النصائح:

  • إذا كان التصميم يتضمن العديد من اللبنات واحدة ربما ترغب في إنشاء خطوط من واجهات بين تلك الكتل إلى اختبار نقاط خارج الشريحة.

  • سوف تحتاج إلى توفير ما يكفي من الخطوط في التصميم الخاص بك لتحويل البيانات مثيرة للاهتمام التي يتعين تفتيشها مع الأجهزة الخارجية.كما يمكنك استخدام هذه الخطوط, و الرمز الخاص بك كوسيلة أقول لك الحالة الراهنة التنفيذ - على سبيل المثال إذا كنت تتلقى البيانات في بعض النقطة تكتب بعض القيمة إلى خطوط في مرحلة لاحقة التنفيذ تكتب قيمة أخرى ، الخ'

    إذا كان لديك رقاقة إعادة التشكيل هذه سوف تصبح أكثر في متناول يدي ، كما يمكنك تصميم اختبارات محددة ، برمجة النواتج لكل اختبار كما تذهب (هذا يبدو جيدا جدا مع المصابيح :).)

تحرير:

الذكية البروتوكولات ، لقد كان يعني أن اثنين من الوحدات الفيزيائية الاتصال ، ينبغي أن التواصل مع أبسط بروتوكول الاتصال المتاحة.التي لا تستخدم أي متطورة الصنع بروتوكولات بينهما.

السبب هو هذا - Fidning البق "في الداخل" وهو FPGA/أسيك هو reletivly سهلة كما كنت قد المحاكاة.حتى إذا كنت متأكدا من أن تأتي البيانات كما تريد, و يخرج كما البرنامج يرسل ذلك ، لقد وصلت إلى الأجهزة الفاضلة - أن تكون قادرة على العمل على مستوى البرامج :) (مع محاكاة).ولكن إذا كانت البيانات الخاصة بك لا تحصل لك بالطريقة التي تريدها و يجب عليك معرفة السبب...سيكون لديك للاتصال خطوط و هذا ليس سهلا.

إيجاد خلل في خطوط من الصعب كما كنت قد للاتصال خطوط مع معدات خاصة ، أن تسجل الدول الخطوط ، في أوقات مختلفة, و سيكون لديك للتأكد من خطوط العمل وفقا للبروتوكول.

إذا كنت في حاجة لربط اثنين من الوحدات الفيزيائية جعل "البروتوكول" بسيطة كما يمكن أن تصل إلى نقطة لن يكون يسمى بروتوكول :) على سبيل المثال إذا كان الوحدات حصة على مدار الساعة ، إضافة x خطوط البيانات بينهما ، وجعل وحدة واحدة كتابة هذه وغيرها من وحدة قراءة ، وبالتالي تمرير واحد "كلمة" الذي س بت بينهما على مدار الساعة كل سقوط, على سبيل المثال.إذا كان لديك FPGA ، ينبغي الأصلي معدل الساعة يكون سريع جدا بالنسبة موازية البيانات - يمكنك التحكم في سرعة هذا ، وفقا التجارب الخاصة بك ، على سبيل المثال جعل بيانات البقاء على خطوط على الأقل 't' على مدار الساعة دورات وما إلى ذلك'.أفترض موازية نقل البيانات هو أبسط ، كما يمكنك العمل مع في أقل من ساعة معدلات الحصول على نفس الأداء دون الحاجة إلى تقسيم الكلمات على وحدة واحدة ، وإعادة تجميع من جهة أخرى.(نأمل أن لا يكون هناك أي تأخير بين "الساعة" كل وحدة يتلقى).بل وربما هذا هو معقد جدا :)

فيما يتعلق SPI, I2C الخ' لم تنفذ أي منها ، أستطيع أن أقول أنني كنت على اتصال الساقين اثنين من FPGA يهرب من نفسه الساعة (لا أتذكر بالضبط تشكيل المقاومات في الوسط) ، بأسعار أعلى بكثير, لذلك أنا حقا لا يمكن التفكير في سبب وجيه لاستخدام تلك ، باعتبارها السبيل الرئيسي لتمرير البيانات بين الخاصة بك FPGA ، ما لم FPGA هي تقع بعيدة جدا بعضها عن بعض ، الذي هو سبب واحد لاستخدام المسلسل بدلا من حافلة مواز.

JTAG المستخدمة من قبل بعض FPGA الشركات إلى اختبار/برنامج منتجاتها ، ولكن ليس متأكدا مما إذا انها تستخدم كوسيلة لنقل البيانات بسرعات عالية ، وهو بروتوكول...(لا تزال واحدة التي قد يكون لها بعض المدمج في رقاقة دعم).

إذا كان لديك لتنفيذ أي معروف البروتوكول في النظر في استخدام مسبقة الصنع HDL رمز هذه - والتي يمكن العثور عليها أو شراؤها.

هذا هو السؤال الذي يتطلب JBDAVID 10 الوصايا تصميم الأجهزة.

  1. استخدام تنقيح/التحكم في الإصدار ، تماما كما في البرنامج.SVN و Hg مجانا.
  2. تتطلب رمز إلى تمرير التحقق من بناء الجملة من قبل تسجيل الوصول.الوبر أداة هو أفضل.
  3. استخدام كامل قوة الأجهزة التحقق لغة تصميم التحقق.النظام Verilog هو ما يقرب من خيار آمن.
  4. تتبع الأخطاء.بجزيلا و البعوض هي أدوات مجانية.FogBugz يتطلب القليل $.
  5. استخدام التأكيدات للقبض مشاكل مع الاستخدام غير الصحيح.
  6. تغطية ثالوث يجعل تصميم ثابت:قياس مدونة التغطية الوظيفية التغطية تأكيد التغطية في كل من محاكاة الرسمية الأدوات.
  7. قوة الملك:استخدام الشراكة أو UPF لالتقاط وتنفيذ التحقق من السلطة القصد.
  8. التصميم الحقيقي هو في كثير من الأحيان إشارة مختلطة ، استخدام مختلط إشارة اللغة للتحقق من التناظرية الرقمية.Verilog-AMS هو أحد هذه الحلول.ولكن لا تسرف.Realnumber النمذجة يمكن أن تنجز معظم الجوانب الوظيفية مختلط إشارة السلوك.
  9. استخدام تسريع الأجهزة إلى التحقق من صحة البرامج التي تعمل مع السيليكون!
  10. جملة علم محرر النص الخاص بك HDL/HVL هي الحد الأدنى من المتطلبات اللازمة المطور IDE.

لشرائح (FPGA)، XILINX ديه هذه الصفحة . كلها تقريبا ينطبق على الباعة FPGA أخرى، أو أن لديها قواعد مماثلة. وهناك قدر كبير ينطبق على التصاميم ASIC.

وإنتل قد أوصت HDL الترميز أنماط والتوصيات التصميم (PDF) <وأ href = "https://www.intel.com/content/www/us/en/programmable/products/design-software/fpga-design/ ، بنصر رئيس / المستخدم guides.html "يختلط =" نوفولو noreferrer "> تحت هذه الصفحة .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top