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

مسجل الإزاحة

جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 86 من 90.

challenge icon

التحدي

يقوم سجل الإزاحة (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)الاتجاهالعرضالوصف
clkinput1 bitإشارة الساعة
resetinput1 bitإعادة ضبط جميع المخرجات إلى 0
dinput1 bitمدخل البيانات
q0output1 bitمخرج القلاب (flip-flop) الأول
q1output1 bitمخرج القلاب الثاني
q2output1 bitمخرج القلاب الثالث
q3output1 bitمخرج القلاب الرابع

مهمتك هي إكمال الوحدة أدناه.

ما يجب القيام به:

  1. عند حدوث reset، قم بضبط جميع المخرجات على 0
  2. عند كل حافة صاعدة للساعة، قم بإزاحة البيانات من اليسار إلى اليمين:
    1. q0 يأخذ قيمة d
    2. q1 يأخذ قيمة q0 القديمة
    3. q2 يأخذ قيمة q1 القديمة
    4. 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

جميع دروس الأساسيات