Управляющие конструкции
Конструкции, которые определяют порядок выполнения операций и поток управления в цифровых схемах. Они позволяют описывать поведение цифровых систем, принимающих решения и выполняющих повторяющиеся операции.
Особенности управляющих конструкций в Verilog
Аппаратная природа:
Управляющие конструкции описывают аппаратуру, а не программный код:
if-else
→ мультиплексорыcase
→ декодеры/мультиплексорыциклы → развертываются в параллельную логику
Синтезируемость vs Несинтезируемость:
Синтезируемые:
if-else
,case
,for
(с ограничениями)Несинтезируемые:
while
,forever
,repeat
(для тестбенчей)
Приоритетность:
if (cond1) out = a; // Высокий приоритет else if (cond2) out = b; // Средний приоритет else out = c; // Низкий приоритет // Создает приоритетный кодер
Полнота условий:
// Неполный 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