Defining The States
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 79 من 90.
التحدي
إن وحدة التحكم في إشارة المرور هي آلة حالات منتهية تتنقل بين حالات إضاءة مختلفة (الأحمر، الأصفر، الأخضر) وفق فواصل زمنية محددة. إن آلة الحالات المنتهية (FSM) هي دائرة يمكن أن تكون في واحدة من عدد محدود من الحالات. وتنتقل من حالة إلى أخرى استنادًا إلى المدخلات أو التوقيت.
في هذا المشروع، ستبني وحدة تحكم في إشارة مرور لتقاطع بسيط. تحتوي إشارة المرور على ثلاثة مخارج:
| الضوء | المخرج | المعنى |
|---|---|---|
| الأحمر | red = 1 | توقف |
| الأصفر | yellow = 1 | الحذر |
| الأخضر | green = 1 | انطلق |
تتتابع الأضواء بهذا الترتيب:
Green → Yellow → Red → Green → …
تسلسل التوقيت
| الحالة | المدة | الحالة التالية |
|---|---|---|
| Green | 30 ثانية | Yellow |
| Yellow | 10 ثوانٍ | Red |
| Red | 40 ثانية | Green |
في هذا الدرس، ستعرّف حالات وحدة التحكم في إشارة المرور.
لإشارة المرور ثلاث حالات ممكنة:
| الحالة | الضوء | الرمز |
|---|---|---|
| Green | الضوء الأخضر قيد التشغيل | 2'b00 |
| Yellow | الضوء الأصفر قيد التشغيل | 2'b01 |
| Red | الضوء الأحمر قيد التشغيل | 2'b10 |
أكمل الوحدة بإضافة الأجزاء المفقودة.
ما يجب فعله:
حدّد ترميز الحالات: 0=Green، 1=Yellow، 2=Red
- Declare سجلًا بحجم 2 بت يُسمّى
state - Declare سجلًا بحجم 6 بت يُسمّى
counter(للتوقيت حتى 40 ثانية) - أضف تعيينات المخرجات داخل كتلة always توافقية،
always @(*) begin ... end، مع وجودcase (state)داخلها. تم تعريفredوyellowوgreenعلى أنهاoutput reg، ولا يمكن تعيينregإلا داخل كتلة من هذا النوع. تعني@(*)أن الكتلة تُشغَّل مجددًا كلما تغيّر أي شيء تقرؤه، وهو هناstate:- عندما تكون state هي 0:
green = 1،yellow = 0،red = 0 - عندما تكون state هي 1:
green = 0،yellow = 1،red = 0 - عندما تكون state هي 2:
green = 0،yellow = 0،red = 1
- عندما تكون state هي 0:
جرّب بنفسك
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
// TODO: المهمة 1 - تعريف سجل الحالة (2 بت)
// TODO: المهمة 2 - تعريف سجل العداد (6 بت)
// TODO: المهمة 3 - تعيينات المخرجات باستخدام case (state)
// الحالة 0: green=1, yellow=0, red=0
// الحالة 1: green=0, yellow=1, red=0
// الحالة 2: green=0, yellow=0, red=1
endmoduleجميع دروس الأساسيات
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logicتدرّب بنفسك: مترجم Verilog عبر الإنترنت