Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مشفّرات الأولوية

جزء من قسم تصميم RTL والتحقق منه في رحلة Verilog على Coddy. الدرس 2 من 38.

يُحوِّل المُشفِّر بتّ الطلب إلى فهرس. تتطلب الطلبات النشطة المتعددة قاعدة أولوية صريحة. تمنح سلسلة if/else-if الفروعَ السابقة أولوية؛ وتُميِّز إشارة صلاحية منفصلة بين عدم وجود طلب والفهرس صفر.

مقتطف ذو صلة؛ يتم توفير التصريحات والتوصيلات المحيطة في التحدي.

if (req[3]) code = 3;
else if (req[2]) code = 2;
else if (req[1]) code = 1;
else code = 0;

يفوز أول فرع صحيح، مما يمنح أعلى بتّ طلب الأولوية.

اذكر ترتيب الأولوية وحدد مخرجات عدم وجود طلب بشكل صريح.

challenge icon

التحدي

متوسط

شفّر أعلى بت مُفعّل من req ذي 4 بتات إلى code. اضبط valid إذا كان هناك أي طلب؛ وعندما تكون قيمة req صفراً، تكون قيمتا code وvalid صفراً. أعمدة الإخراج: code، valid. جميع قيم التحفيز هي قيم ثنائية معروفة.

أكمل design.v وحافظ على أسماء وحداته ومنافذه. يوفّر testbench.v المقفَل تغييرات الإدخال ويطبع المخرجات بعد استقرارها. ويختار سيناريو باستخدام وسيط للمحاكي مثل +CASE=1؛ ولا يلزم إدخال قياسي. لا تضف طباعة أو تأخيرات أو إنهاءً للمحاكاة إلى التصميم. الناتج المتوقّع هو صف واحد من القيم العشرية لكل ملاحظة، مفصولة بمسافة واحدة ومنتهية بسطر جديد.

جرّب بنفسك

module dut (input [3:0] req, output reg [1:0] code, output reg valid);
    // استبدل هذا العنصر النائب بتصميمك.
    initial code = 0;
    initial valid = 0;
endmodule
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس تصميم RTL والتحقق منه

تدرّب بنفسك: مترجم Verilog عبر الإنترنت