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

مسجل الإزاحة

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

challenge icon

التحدي

يقوم سجل الإزاحة (shift register) بإزاحة البيانات من اليسار إلى اليمين مع كل حافة لرمز الساعة (Clock). ينتقل كل بت إلى الموقع التالي.

كيف يعمل سجل الإزاحة بـ 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 دورات لرمز الساعة (Clock)، يصل بت الإدخال الأول إلى q3.

واجهة وحدة النظام (Module Interface)

PortDirectionWidthDescription
clkinput1 bitإشارة Clock
resetinput1 bitإعادة ضبط جميع المخرجات إلى 0
dinput1 bitإدخال البيانات (Data input)
q0output1 bitمخرج المقلب (flip-flop) الأول
q1output1 bitمخرج المقلب الثاني
q2output1 bitمخرج المقلب الثالث
q3output1 bitمخرج المقلب الرابع

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

ما يجب عليك فعله:

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

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