مسجل الإزاحة
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 86 من 90.
التحدي
يقوم سجل الإزاحة (shift register) بإزاحة البيانات من اليسار إلى اليمين عند كل حافة للساعة. تنتقل كل بتة إلى الموضع التالي.
كيفية عمل سجل إزاحة 4-بت
Initial: q0=0, q1=0, q2=0, q3=0
Clock 1: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2
Clock 2: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2بعد 4 دورات ساعة، تصل بتة الإدخال الأولى إلى q3.
واجهة الوحدة (Module Interface)
| المنفذ (Port) | الاتجاه | العرض | الوصف |
|---|---|---|---|
clk | input | 1 bit | إشارة الساعة |
reset | input | 1 bit | إعادة ضبط جميع المخرجات إلى 0 |
d | input | 1 bit | مدخل البيانات |
q0 | output | 1 bit | مخرج القلاب (flip-flop) الأول |
q1 | output | 1 bit | مخرج القلاب الثاني |
q2 | output | 1 bit | مخرج القلاب الثالث |
q3 | output | 1 bit | مخرج القلاب الرابع |
مهمتك هي إكمال الوحدة أدناه.
ما يجب القيام به:
- عند حدوث
reset، قم بضبط جميع المخرجات على 0 - عند كل حافة صاعدة للساعة، قم بإزاحة البيانات من اليسار إلى اليمين:
q0يأخذ قيمةdq1يأخذ قيمةq0القديمةq2يأخذ قيمةq1القديمةq3يأخذ قيمةq2القديمة
جرّب بنفسك
module shift_register (
input clk,
input reset,
input d,
output reg q0,
output reg q1,
output reg q2,
output reg q3
);
// TODO: أضف always @(posedge clk or posedge reset)
// عند الـ reset: q0<=0, q1<=0, q2<=0, q3<=0
// Else: إزاحة البيانات: q0 <= d, q1 <= q0, q2 <= q1, q3 <= q2
endmodule
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة