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

Timing The Transitions

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

challenge icon

التحدي

في هذا الدرس، ستضيف منطق counter الذي يتحكم في المدة التي يظل فيها كل ضوء مضاءً. يقوم counter بالعد التنازلي من قيمة محددة مسبقًا إلى الصفر، ثم يُفعّل تغيير state التالي.

متطلبات التوقيت

Stateالمدةقيمة counter
Green30 ثانية30
Yellow10 ثوانٍ10
Red40 ثانية40

كيفية عمل counter

  1. عندما يبدأ state، يتم تحميل قيمة المدة في counter
  2. في كل نبضة ساعة، ينخفض counter بمقدار 1
  3. عندما يصل counter إلى 0، يحين وقت التغيير إلى state التالي

مهمتك هي إضافة منطق counter المفقود إلى آلة state.

ما يجب فعله:

  1. أضف تعريف reg [5:0] counter
  2. عند reset، اضبط counter على 0
  3. عندما يكون counter == 0:
    • حمّل مدة state التالي في counter
    • غيّر إلى state التالي
  4. وإلا، أنقص counter بمقدار 1 في كل نبضة ساعة

جرّب بنفسك

module traffic_light (
  input clk,
  input reset,
  output reg red,
  output reg yellow,
  output reg green
);

  reg [1:0] state;
  // TODO: تعريف سجل العداد (6 بت)
  

  // تعيينات المخرجات
  always @(*) begin
    case (state)
      0: begin green = 1; yellow = 0; red = 0; end
      1: begin green = 0; yellow = 1; red = 0; end
      2: begin green = 0; yellow = 0; red = 1; end
      default: begin green = 0; yellow = 0; red = 1; end
    endcase
  end

  // آلة الحالة مع التوقيت
  always @(posedge clk or posedge reset) begin
    if (reset) begin
      state <= 2;      // ابدأ عند الأحمر
      // TODO: اضبط العداد إلى 0
      
    end else begin
      if (counter == 0) begin
        case (state)
          0: begin
            state <= 1;
            // TODO: حمّل العداد للأصفر (10 ثوانٍ)
            
          end
          1: begin
            state <= 2;
            // TODO: حمّل العداد للأحمر (40 ثانية)
            
          end
          2: begin
            state <= 0;
            // TODO: حمّل العداد للأخضر (30 ثانية)
            
          end
        endcase
      end else begin
        // TODO: أنقص العداد بمقدار 1
        
      end
    end
  end

endmodule

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

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