Sensitivity List
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 48 من 90.
تخبر قائمة الحساسية كتلة always **when يتم التنفيذ**. وتُكتب داخل قوسين بعد الرمز @.
قائمة الحساسية هي مجموعة من الإشارات أو الأحداث التي تُشغّل كتلة always. عندما تتغير أي إشارة في القائمة، تُنفَّذ الكتلة.
الصياغة:
always @(sensitivity_list) begin
// يعمل الكود عندما تتغير الإشارات في القائمة
endأنواع قائمة الحساسية
| النوع | البنية | متى تُنفَّذ الكتلة |
|---|---|---|
| جميع signals (التوافقية) | always @(*) | عندما تتغير أي إشارة داخلها |
| إشارات محددة | always @(a or b) | عندما تتغير a أو b |
| مُشغِّل edge (التتابعية) | always @(posedge clk) | عند rising edge لـ clock |
| عدة edge | always @(posedge clk or posedge reset) | عند edge لـ clock أو edge لـ reset |
الخيار 1: جميع الإشارات (*)
الأكثر أمانًا والأكثر شيوعًا للمنطق التوافقي.
always @(*) begin
out = a & b; // يعمل عندما يتغير a أو b
endتتضمن * تلقائيًا جميع الإشارات المقروءة في الكتلة.
الخيار 2: إشارات محددة
always @(a or b) begin
out = a & b; // يعمل عندما يتغير a أو b
endإذا نسيت إشارة، فلن يتم تحديث output في المحاكاة when تحدث changes في تلك الإشارة، وبالتالي لن تعود المحاكاة متطابقة مع العتاد المُركَّب.
الخيار 3: مُشغِّل الحافة (posedge)
always @(posedge clk) begin
q <= d; // يعمل على الحافة الصاعدة للساعة
endاستخدم posedge للحافة الصاعدة، وnegedge للحافة الهابطة.
الخيار 4: حواف متعددة
always @(posedge clk or posedge reset) begin
if (reset)
q <= 0;
else
q <= d;
endRuns عند حافة clock أو حافة reset.
الأخطاء الشائعة
| الخطأ | لماذا هو خاطئ |
|---|---|
always @(a or b or c) لكنه يستخدم d | غياب d → تصبح قيمة output قديمة في المحاكاة (عدم تطابق sim/synth) |
always @(posedge clk or reset) | غياب posedge لـ reset |
always @(clk) | يجب استخدام posedge clk للـ flip-flops |
التحدي
ما يجب فعله:
- أضف قائمة الحساسية الصحيحة لجعل هذا flip-flop يعمل. يجب أن تُنفَّذ الكتلة عند rising edge للإشارة
clk.
جرّب بنفسك
module flipflop (
input clk,
input d,
output reg q
);
always @(______) begin
q <= d;
end
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 عبر الإنترنت