Menu
Coddy logo textTech

Подача сигнала тревоги при превышении порога

Часть раздела Проектирование и верификация 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; стандартный ввод не требуется. Не добавляйте в design вывод, задержки или завершение симуляции. Ожидаемый вывод — одна строка десятичных значений для каждого наблюдения, разделённых одним пробелом и заканчивающихся символом новой строки.

Попробуйте сами

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