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

إطلاق إنذار العتبة

جزء من قسم تصميم RTL والتحقق منه في رحلة Verilog على Coddy. الدرس 35 من 38.

challenge icon

التحدي

صعب

أنشئ Sample Monitor واحدًا على مدار خمس خطوات. اجعل الإنذار التوافقي alarm مرتفعًا كلما كان total أكبر من أو يساوي limit غير الموقّع، بما في ذلك حالة التساوي. يعكس alarm قيمة total المحدّثة بعد كل حافة، ويتبع تغييرات limit. تجعل limit=0 قيمة alarm مرتفعة حتى عندما تكون total=0. حافظ على جميع سلوكيات التراكم والتمكين والمسح والعد. أبقِ كل ما كان موجودًا في الخطوات السابقة، بما في ذلك testbench الخاص به وسلوك المخرجات السابق. جميع قيم الإدخال معروفة. تحتوي السيناريوهات على 40 حافة كحد أقصى، لذا تتسع total ضمن 16 بتًا. يطبع testbench الثابت total للسيناريوهات 1-9، وtotal وcount للسيناريوهات 10-12، وtotal وcount وalarm للسيناريوهات 13-15. لا تُقيَّم إلا السيناريوهات المفعّلة لهذه الخطوة.

أكمل design.v وحافظ على أسماء وحداته ومنافذه. يوفّر testbench.v المقفل تغييرات الإدخال ويطبع المخرجات بعد استقرارها. ويختار سيناريو باستخدام وسيط للمحاكي مثل +CASE=1؛ ولا يلزم إدخال قياسي. لا تضف طباعة أو تأخيرات أو إنهاءً للمحاكاة إلى التصميم. المخرجات المتوقعة هي صف واحد من القيم العشرية لكل ملاحظة، تفصل بينها مسافة واحدة وتنتهي بسطر جديد.

جرّب بنفسك

module dut(input clk,rst,en,clear, input [7:0] data, input [15:0] limit, output reg [15:0] total, output reg [3:0] count, output alarm);
    always @(posedge clk)begin
        if(rst || clear)begin total<=0;count<=0;end
        else if(en)begin
            total<=total+data;
            if(count!=15)count<=count+4'd1;
        end
    end
    assign alarm=0;
endmodule

جميع دروس تصميم RTL والتحقق منه

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