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

سجل الإزاحة

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

challenge icon

التحدي

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

كيفية عمل مسجل إزاحة من 4 بتات

Initial: q0=0, q1=0, q2=0, q3=0
Each clock: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2
Shifting in d = 1, 0, 1, 0:
Clock 1 (d=1): q0=1, q1=0, q2=0, q3=0
Clock 2 (d=0): q0=0, q1=1, q2=0, q3=0
Clock 3 (d=1): q0=1, q1=0, q2=1, q3=0
Clock 4 (d=0): q0=0, q1=1, q2=0, q3=1

بعد 4 دورات ساعة، تصل أول بتة إدخال إلى q3.

واجهة الوحدة

المنفذالاتجاهالعرضالوصف
clkinput1 bitإشارة الساعة
resetinput1 bitإعادة تعيين جميع المخرجات إلى 0
dinput1 bitإدخال البيانات
q0output1 bitخرج القلاب الأول
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
  // وإلا: إزاحة البيانات: q0 <= d, q1 <= q0, q2 <= q1, q3 <= q2

endmodule

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

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