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

قائمة التحسس

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

تحدد قائمة الحساسية (sensitivity list) لكتلة always متى يتم التنفيذ (when to execute). وتُكتب بين قوسين بعد الرمز @.

إن قائمة الحساسية (sensitivity list) هي مجموعة من الإشارات (signals) أو الأحداث (events) التي تحفز كتلة always. عندما تتغير (changes) أي إشارة في القائمة، يتم تنفيذ الكتلة (executes).

الصياغة (Syntax):

always @(sensitivity_list) begin
  // يعمل الكود عندما تتغير الإشارات في القائمة
end

أنواع قائمة الحساسية (Sensitivity List)

النوعبناء الجملة (Syntax)متى يتم تنفيذ الكتلة
جميع الإشارات (تجميعي/combinational)always @(*)عندما تتغير أي إشارة بداخلها
إشارات محددةalways @(a or b)عندما يتغير a أو b
قدح بالحافة (تتابعي/sequential)always @(posedge clk)عند الحافة الصاعدة لـ clock
حواف متعددةalways @(posedge clk or posedge reset)عند حافة clock أو حافة reset

الخيار 1: جميع الإشارات (*)

الأكثر أمانًا والأكثر شيوعًا للـ combinational logic.

always @(*) begin
  out = a & b;   // يعمل عندما يتغير a أو b
end

يتضمن الـ * تلقائيًا جميع الـ signals التي يتم قراءتها داخل الكتلة.

الخيار 2: إشارات محددة

always @(a or b) begin
  out = a & b;   // يعمل عندما يتغير a أو b
end

إذا نسيت إشارة، فلن يتحدث الـ output في المحاكاة عندما تتغير تلك الإشارة — وبذلك لن تتطابق المحاكاة بعد الآن مع العتاد المصنع (synthesized hardware).

Option 3: Edge Trigger (posedge)

always @(posedge clk) begin
  q <= d;        // يعمل على الحافة الصاعدة للساعة
end

استخدم posedge للحافة الصاعدة (rising edge)، و negedge للحافة الهابطة (falling edge).

الخيار 4: حواف متعددة (Multiple Edges)

always @(posedge clk or posedge reset) begin
  if (reset)
    q <= 0;
  else
    q <= d;
end

يعمل عند حافة الـ clock أو حافة الـ reset.

الأخطاء الشائعة

الخطأسبب الخطأ
always @(a or b or c) ولكن يستخدم dفقدان d ← يصبح output غير محدث في المحاكاة (عدم تطابق المحاكاة/التجميع)
always @(posedge clk or reset)فقدان posedge لـ reset
always @(clk)يجب استخدام posedge clk بالنسبة لـ flip-flops
challenge icon

التحدي

ما يجب فعله:

  1. أضف قائمة الحساسية الصحيحة لجعل هذا الـ flip-flop يعمل. يجب أن تنفذ الكتلة البرمجية عند الـ posedge للـ clk.

جرّب بنفسك

module flipflop (
  input clk,
  input d,
  output reg q
);
  
  always @(______) begin
    q <= d;
  end

endmodule
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

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