سؤال

ماذا يعني إذا تم الإعلان عن مهمة باستخدام الكلمة الأساسية التلقائية في Verilog؟

task automatic do_things;
  input [31:0] number_of_things;
  reg [31:0] tmp_thing;
  begin
    // ...
  end
endtask;

ملحوظة:يرجع هذا السؤال في الغالب إلى فضولي لمعرفة ما إذا كان هناك أي مبرمجي أجهزة على الموقع.:)

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

المحلول

هذا يعني أن المهمة يتم إعادة إدخالها - يتم تخصيص العناصر المعلنة داخل المهمة ديناميكيًا بدلاً من مشاركتها بين الاستدعاءات المختلفة للمهمة.

كما ترى - البعض منا يفعل فيريلوج...(قرف)

نصائح أخرى

"تلقائي" يعني في الواقع "إعادة الدخول".المصطلح نفسه مسروق من لغات البرامج - على سبيل المثال، تحتوي لغة C على الكلمة الأساسية "تلقائي" للإعلان عن تخصيص المتغيرات في المكدس عند تنفيذ النطاق الموجود فيه، وإلغاء تخصيصها بعد ذلك، بحيث يتم تنفيذ استدعاءات متعددة من نفس النطاق لا أرى القيم المستمرة لهذا المتغير.السبب وراء عدم سماعك بهذه الكلمة الأساسية في لغة C هو أنها فئة التخزين الافتراضية لجميع الأنواع :-) البدائل "ثابتة"، مما يعني "تخصيص هذا المتغير بشكل ثابت (إلى موقع عام واحد في الذاكرة)،" والإشارة إلى نفس موقع الذاكرة طوال تنفيذ البرنامج، بغض النظر عن عدد مرات استدعاء الوظيفة"، و"volatile"، مما يعني "هذا سجل في مكان آخر على SoC الخاص بي أو شيء ما على جهاز آخر لا أملكه السيطرة على؛أيها المترجم، من فضلك لا تحسن عمليات القراءة لي، حتى عندما تعتقد أنك تعرف قيمتي من القراءات السابقة مع عدم وجود عمليات كتابة وسيطة في الكود".

"تلقائي" مخصص للوظائف العودية، ولكن أيضًا لتشغيل نفس الوظيفة في مؤشرات ترابط مختلفة للتنفيذ بشكل متزامن.على سبيل المثال، إذا قمت "بفصل" عدد N من الكتل المختلفة (باستخدام بيان fork->join الخاص بشركة Verilog)، وطلبت منهم جميعًا استدعاء نفس الوظيفة في نفس الوقت، فستظهر نفس المشكلات عندما تستدعي دالة نفسها بشكل متكرر.

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

تتيح لك الكلمة الأساسية "تلقائي" أيضًا كتابة وظائف متكررة (منذ verilog 2001).أعتقد أنه يجب أن يكونوا قابلين للتوليف إذا وصلوا إلى القاع، لكنني لست متأكدًا مما إذا كان لديهم أدوات داعمة.

أنا أيضا، أفعل فيريلوج!

وكما يقول ويل ومارتي، فإن الآلة الأوتوماتيكية كانت مخصصة للوظائف العودية.

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

يؤدي جعل الوظيفة تلقائيًا إلى إصلاح هذه المشكلة.

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