تصميم مفكك الشفرة
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 85 من 90.
التحدي
يأخذ المُشفر (decoder) رقماً ثنائياً كمدخل ويقوم بتشغيل مخرج واحد فقط بناءً على ذلك الرقم. يُسمى المخرج الذي يتم تشغيله "one-hot" لأن بت واحد فقط يكون نشطاً (1)، وجميع البتات الأخرى تكون غير نشطة (0).
جدول الحقيقة (مُشفر 2 إلى 4)
| المدخل (in) | out0 | out1 | out2 | out3 |
|---|---|---|---|---|
| 00 | 1 | 0 | 0 | 0 |
| 01 | 0 | 1 | 0 | 0 |
| 10 | 0 | 0 | 1 | 0 |
| 11 | 0 | 0 | 0 | 1 |
واجهة الوحدة (Module Interface)
| المنفذ (Port) | الاتجاه | العرض | الوصف |
|---|---|---|---|
in | input | 2 bits | مدخل ثنائي (من 0 إلى 3) |
out0 | output | 1 bit | نشط عندما يكون in = 00 |
out1 | output | 1 bit | نشط عندما يكون in = 01 |
out2 | output | 1 bit | نشط عندما يكون in = 10 |
out3 | output | 1 bit | نشط عندما يكون in = 11 |
مهمتك هي إكمال الوحدة أدناه باستخدام جملة case.
ما يجب القيام به:
- عندما يكون
in = 2'b00، اجعلout0 = 1، والباقي 0 - عندما يكون
in = 2'b01، اجعلout1 = 1، والباقي 0 - عندما يكون
in = 2'b10، اجعلout2 = 1، والباقي 0 - عندما يكون
in = 2'b11، اجعلout3 = 1، والباقي 0
جرّب بنفسك
module decoder (
input [1:0] in,
output reg out0,
output reg out1,
output reg out2,
output reg out3
);
// TODO: أضف كتلة always @(*) مع case (in)
// 2'b00: out0=1، والباقي 0
// 2'b01: out1=1، والباقي 0
// 2'b10: out2=1، والباقي 0
// 2'b11: out3=1، والباقي 0
endmoduleجميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة