Управляющие конструкции

Конструкции, которые определяют порядок выполнения операций и поток управления в цифровых схемах. Они позволяют описывать поведение цифровых систем, принимающих решения и выполняющих повторяющиеся операции.

Особенности управляющих конструкций в Verilog

  1. Аппаратная природа:

    Управляющие конструкции описывают аппаратуру, а не программный код:

    • if-else → мультиплексоры

    • case → декодеры/мультиплексоры

    • циклы → развертываются в параллельную логику

  2. Синтезируемость vs Несинтезируемость:

    • Синтезируемые: if-else, case, for (с ограничениями)

    • Несинтезируемые: while, forever, repeat (для тестбенчей)

  3. Приоритетность:

    if (cond1) out = a;      // Высокий приоритет
    else if (cond2) out = b; // Средний приоритет  
    else out = c;            // Низкий приоритет
    // Создает приоритетный кодер
  4. Полнота условий:

    // Неполный case – создает latch!
    case (sel)
        2'b00: out = a;
        2'b01: out = b;
        // отсутствуют 2'b10 и 2'b11 → latch!
    endcase
    
    // Полный case – комбинационная логика
    case (sel)
        2'b00: out = a;
        2'b01: out = b;
        2'b10: out = c;
        2'b11: out = d;
    endcase

Практические примеры

Комбинационная логика с if-else

always @(*) begin
    if (enable) begin
        data_out = data_in;
    end else begin
        data_out = 8'b0;
    end
end
// Синтезируется в мультиплексор

Конечный автомат с case

always @(posedge clk or posedge reset) begin
    if (reset) begin
        state <= IDLE;
    end else begin
        case (state)
            IDLE: if (start) state <= WORK;
            WORK: if (done) state <= DONE;
            DONE: state <= IDLE;
        endcase
    end
end

Параметризированный дизайн с generate

parameter NUM_STAGES = 4;
genvar i;

generate
    for (i = 0; i < NUM_STAGES; i = i + 1) begin : pipeline
        register #(.WIDTH(32)) stage (
            .clk(clk),
            .in(stage_input[i]),
            .out(stage_output[i])
        );
    end
endgenerate

Last updated