Menu
Coddy logo textTech

Continuous Assignment

Часть раздела Основы путешествия по Verilog на Coddy. Урок 37 из 90.

В аппаратной части соединение — это физический провод, который связывает две точки в цепи. После установки провода соединение является постоянным и всегда активно. Если один конец изменяется, другой конец изменяется немедленно.

В Verilog нам нужен способ моделировать такое поведение. Мы хотим передать значение на провод и навсегда оставить его подключённым. Процесс выполнения этого называется continuous assignment.

Непрерывное присваивание использует ключевое слово assign для создания постоянного соединения между проводом и выражением. Провод непрерывно принимает значение выражения, прямо как физический провод.

Представьте это как припаивание провода, а не как однократную запись значения.

Синтаксис

assign wire_name = expression;
ЧастьЗначение
assignКлючевое слово, которое начинает continuous assignment
wire_nameУправляемый wire (не может быть reg)
expressionЗначение, которое управляет wire

Простой пример

wire out;
assign out = a & b;

Это означает: out always equal a AND b. Всякий раз, когда изменяется a или b, out изменяется немедленно.

Как это работает

В отличие от reg, который хранит значение, wire с непрерывным присваиванием постоянно обновляется:

module continuous_demo;
  reg a, b;
  wire c;
  
  assign c = a & b;   // c следует a AND b во все времена
  
  initial begin
    a = 0; b = 0;
    #10 $display("a=%d, b=%d, c=%d", a, b, c);  // c=0
    
    a = 1;
    #10 $display("a=%d, b=%d, c=%d", a, b, c);  // c=0 (1&0=0)
    
    b = 1;
    #10 $display("a=%d, b=%d, c=%d", a, b, c);  // c=1 (1&1=1)
    
    $finish;
  end
endmodule

Вывод:

a=0, b=0, c=0
a=1, b=0, c=0
a=1, b=1, c=1

Каждый раз, когда изменяется a или b, c автоматически обновляется.

Несколько присваиваний

В модуле может быть несколько непрерывных присваиваний:

module multiple_assign (
  input a, b, c,
  output x, y
);
  assign x = a & b;
  assign y = x | c;   // y зависит от x
endmodule

Все assignment выполняются параллельно, continuously.

Распространённые применения

Непрерывные присваивания используются для:

  • Простой комбинационной логики (AND, OR, XOR)
  • Соединения проводов друг с другом
  • Создания буферов с тремя состояниями
  • Управления выходами с помощью комбинационных выражений
challenge icon

Задание

Что нужно сделать:

  1. Add missing continuous assignment, that makes z equal к x AND y.

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

module continuous_challenge (
  input x,
  input y,
  output z
);
  
  // TODO: Добавьте недостающее непрерывное присваивание, которое делает z равным x AND y
  

endmodule
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog