logo

بيان حالة فيريلوج

يتحقق بيان الحالة مما إذا كان التعبير المحدد يطابق أحد التعبيرات الأخرى داخل القائمة والفروع. من المعتاد عادةً تنفيذ جهاز.

قد لا يكون بناء if-else قابلاً للتطبيق إذا كانت هناك وحدة قياس يجب التحقق من العديد من الشروط وسيتم تجميعها في أداة تشفير ذات أولوية بدلاً من جهاز.

في فيريلوج ، يتضمن بيان الحالة كل التعليمات البرمجية الموجودة بين كلمات Verilog الأساسية، والحالة ('casez'، و'casex')، وendcase. يمكن أن يكون بيان الحالة عبارة عن بناء اختيار واحد من بين العديد من العناصر التي تشبه تقريبًا عبارة Associate in nurse if-else-if.

بناء الجملة

يبدأ بيان حالة Verilog بالكلمة الأساسية case وينتهي بالكلمة الأساسية endcase.

التعبير الموجود بين قوسين يهدف إلى تقييمه مرة واحدة على وجه التحديد ومقارنته بقائمة البدائل داخل ترتيب كتابته.

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

 case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase 

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

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

كيفية البحث عن الارقام المحظورة على الاندرويد

مثال

تشتمل وحدة النمط التالية على اختيار 2 بت للإشارة لتوجيه أحد المدخلات الثلاثة المختلفة 3 بت إلى الإشارة المذكورة على أنها خارج.

يتم استخدام بيان الحالة لتعيين الإدخال الصحيح للإخراج المدعوم بقيمة sel. بما أن sel يمكن أن تكون إشارة مكونة من 2 بت، فستحتوي على 20 مجموعة، من صفر إلى 3. تساعد العبارة الافتراضية على جعل إخراج السطر صفرًا إذا كانت sel 3.

 module my_mux (input [2:0] a, b, c, // three 3-bit inputs [1:0]sel, // 2-bit opt for signal to choose on from a, b, c output reg [2:0] out); // Output 3-bit signal // invariably block is dead whenever a, b, c or sel changes in value invariably @ (a, b, c, sel) begin case(sel) 2'b00 : out = a; // If sel=0, output can be a 2'b01 : out = b; // If sel=1, output is b 2'b10 : out = c; // If sel=2, output is c default : out = 0; // If sel is something, out is commonly zero endcase end endmodule 

رأس بيان الحالة

يتكون رأس بيان الحالة من الكلمة الأساسية ('casez'، 'casex') متبوعة بتعبير الحالة، وعادةً ما يكون كل ذلك في سطر واحد من التعليمات البرمجية.

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

البند القضية

عنصر الحالة هو أن تعبير البت أو المتجه أو Verilog المعتاد مقارنته بتعبير الحالة.

على عكس لغات البرمجة عالية المستوى المختلفة مثل ' ج '، يتضمن بيان حالة Verilog عبارات فاصل ضمنية.

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

بيان بند القضية

يعد بيان عنصر الحالة واحدًا أو أكثر من عبارات Verilog ميتة إذا كان عنصر الحالة يطابق تعبير الحالة هذا. ليس مثل VHDL، يمكن لأشياء حالة Verilog أن تكون في حد ذاتها تعبيرات.

لتغيير تحليل مستند كود Verilog، يجب أن تكون بيانات عناصر حالة Verilog مضمنة بين الكلمات الرئيسية 'يبدأ' و 'نهاية' إذا كان أكثر من عبارة واحدة ستموت بالنسبة لعنصر حالة محدد.

تقسيم سلسلة C++

كاسيز

في Verilog، هناك بيان casez، وهو شكل مختلف من بيان الحالة الذي يمكّن 'z' و'?' القيم التي يجب التعامل معها خلال مقارنة الحالات على أنها قيم 'لا أهتم'.

'ز' و'؟' يتم التعامل مع وحدة القياس على أنها لا تهتم إذا كانت داخل تعبير الحالة أو إذا كانت داخل عنصر الحالة.

عند كتابة بيان حالة سرًا باستخدام 'لا أهتم'، استخدم عبارة casez واستخدم '؟' أحرف بدلاً من أحرف 'z' داخل أشياء الحالة لغرض البتات 'لا أهتم'.

كاسيكس

في Verilog، يوجد بيان حالة، وهو شكل مختلف من بيان الحالة الذي يمكّن قيم 'z' و'؟' و'x' من التعامل معها خلال المقارنة كقيم 'لا أهتم'.

السابق لاسم المستخدم

'س'، 'ض' و'؟' يتم التعامل مع وحدة القياس على أنها لا تهتم إذا كانت داخل تعبير الحالة أو إذا كانت داخل عنصر الحالة.

بيان الحالة الكامل

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

إذا لم تتضمن عبارة الحالة الحالة الافتراضية، وكان من الممكن البحث عن تعبير حالة ثنائي لا يتطابق مع أي من عناصر الحالة المطبوعة، فإن عبارة الحالة ليست ممتلئة.

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

لا ترغب شركة Verilog في أن تكون بيانات الحالة إما تخليقية أو محاكاة كاملة للبروتين الدهني عالي الكثافة، ولكن بيانات حالة Verilog تصبح كاملة عن طريق إضافة حالة افتراضية. يريد VHDL أن تكون بيانات الحالة عبارة عن محاكاة كاملة للبروتين الدهني عالي الكثافة، وهذا عادةً ما يرغب في عبارة 'الآخرين' في التمريض.

بيان الحالة الموازية

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

إذا كان من الممكن البحث عن تعبير حالة قد يتطابق مع عنصر حالة واحد، فسيتم ذكر وحدة قياس أشياء الحالة المطابقة كأشياء حالة متداخلة، وبالتالي فإن بيان الحالة ليس متوازيًا.

تخطيطي للأجهزة

تم تطوير كود RTL للحصول على مخطط الأجهزة الذي يمثل معدد إرسال من 4 إلى 1.

بيان حالة فيريلوج

بعد تنفيذ التصميم أعلاه، يكون الإخراج صفرًا عندما يكون sel 3 ويتوافق مع المدخلات المخصصة للقيم الأخرى.

 ncsim> run [0] a=0x4 b=0x1 c=0x1 sel=0b11 out=0x0 [10] a=0x5 b=0x5 c=0x5 sel=0b10 out=0x5 [20] a=0x1 b=0x5 c=0x6 sel=0b01 out=0x5 [30] a=0x5 b=0x4 c=0x1 sel=0b10 out=0x1 [40] a=0x5 b=0x2 c=0x5 sel=0b11 out=0x0 ncsim: *W,RNQUIE: Simulation is complete. 

في بيان الحالة، تنجح المقارنة فقط عندما يتطابق كل بت من التعبير مع أحد البدائل بما في ذلك 0 و1 وx وz. في المثال أعلاه، إذا كان أي من البتات في sel إما x أو z، فإن تقصير سيتم تنفيذ البيان لأنه لم يتطابق أي من البدائل الأخرى. في مثل هذه الحالة، سيكون الناتج كله أصفارًا.

 ncsim> run [0] a=0x4 b=0x1 c=0x1 sel=0bxx out=0x0 [10] a=0x3 b=0x5 c=0x5 sel=0bzx out=0x0 [20] a=0x5 b=0x2 c=0x1 sel=0bxx out=0x0 [30] a=0x5 b=0x6 c=0x5 sel=0bzx out=0x0 [40] a=0x5 b=0x4 c=0x1 sel=0bxz out=0x0 [50] a=0x6 b=0x5 c=0x2 sel=0bxz out=0x0 [60] a=0x5 b=0x7 c=0x2 sel=0bzx out=0x0 [70] a=0x7 b=0x2 c=0x6 sel=0bzz out=0x0 [80] a=0x0 b=0x5 c=0x4 sel=0bxx out=0x0 [90] a=0x5 b=0x5 c=0x5 sel=0bxz out=0x0 ncsim: *W,RNQUIE: Simulation is complete. 

إذا كانت عبارة الحالة في التصميم تحتوي على x وz في بدائل عناصر الحالة، فستختلف النتائج.

 module mux (input [2:0] a, b, c, output reg [2:0] out); // Case items have x and z, and sel has to match the exact value for // output to be assigned with the corresponding input always @ (a, b, c, sel) begin case(sel) 2'bxz: out = a; 2'bzx: out = b; 2'bxx: out = c; default: out = 0; endcase end endmodule 

التفريق بين الحالة وإذا كان آخر

يختلف بيان الحالة عن if-else-if بطريقتين، مثل:

  • التعبيرات الواردة في إذا كان غير ذلك تعتبر الكتلة أكثر عمومية، بينما في كتلة الحالة، يتم مطابقة تعبير واحد مع عناصر متعددة.
  • القضية سيوفر نتيجة نهائية عندما تكون هناك قيم X وZ في التعبير.