المتجهات المعبأة مقابل غير المعبأة في نظام فيريلوج

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

  •  20-08-2019
  •  | 
  •  

سؤال

بالنظر إلى بعض التعليمات البرمجية التي أحتفظ بها في System Verilog، أرى بعض الإشارات التي تم تعريفها على النحو التالي:

node [range_hi:range_lo]x;

وغيرها التي يتم تعريفها على النحو التالي:

node y[range_hi:range_lo];

انا افهم ذلك x يتم تعريفها على أنها معبأة، في حين y يتم تعريفها على أنها غير معبأة.ومع ذلك، ليس لدي أي فكرة عما يعنيه ذلك.

ما الفرق بين المتجهات المعبأة وغير المعبأة في System Verilog؟

يحرر: ردًا على إجابة @Empi، لماذا يجب على مصمم الأجهزة الذي يكتب بلغة SV أن يهتم بالتمثيل الداخلي للمصفوفة؟هل هناك أي أوقات عندما أكون لا ينبغي أو لا أستطيع استخدام الإشارات المعبأة؟

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

المحلول

توفر هذه المقالة مزيدًا من التفاصيل حول هذه المشكلة:http://electrosofts.com/systemverilog/arrays.html, وخاصة القسم 5.2.

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

نصائح أخرى

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

bit [3][7] a;

المصفوفة غير المعبأة لها اسم كائن يأتي بعد إعلان الحجم.على سبيل المثال:

bit a[3];

المصفوفة المعبأة تصنع الذاكرة بينما لا تعمل المصفوفة غير المعبأة.يمكنك الوصول إلى/الإعلان عن المصفوفة غير المعبأة مثل هذا أيضًا

reg unpacked_array [7:0] = '{0,0,0,0,0,0,0,1};

يمكنك مزج المصفوفة المعبأة وغير المعبأة لإنشاء ذاكرة متعددة الأبعاد.على سبيل المثال:

bit [3:0][7:0]a[2:0].

يجعل مجموعة من 4 (أي.4*8) بايت بعمق 3.

تُستخدم المصفوفة المعبأة بشكل أساسي للاستخدام الفعال للذاكرة عندما نكتب [3:0] [7:0] A [4:0] مما يعني أنه في مواقع الذاكرة 32 بت، يتم تعبئة 4 شرائح كل منها 8 بت لتكوين 32 بت.تعني قيمة الجانب الأيمن وجود 5 شرائح من هذا القبيل.

ستمنحك المصفوفات غير المعبأة المزيد من التحقق من أخطاء وقت الترجمة مقارنة بالمصفوفات المعبأة.

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

bit[3:0] a -> صفيف معبأة يمكن استخدام المصفوفة المعبأة كصفيف كامل (a='d1) أو مجرد جزء من صفيف (a[0]='b1)

bit a [3:0] -> صفيف تفريغ لا يمكن استخدام المصفوفة غير المعبأة كـ a[0]='b1, ، يجب استخدامه بالكامل a={8{'b1}}

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