Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Verilog

Оператор назначения Verilog

Сигналы типа wire или аналогичный проводной тип данных требует непрерывного присвоения значения. Например, рассмотрим электрический провод, используемый для соединения деталей на макетной плате. Пока батарея +5 В подключена к одному концу провода, компонент, подключенный к другому концу провода, получит необходимое напряжение.

В Verilog эта концепция реализована с помощью assign оператор, в котором любой wire или другой аналогичный провод, такой как типы данных, может непрерывно управляться значением. Значение может быть либо константой, либо выражением, состоящим из группы сигналов.

Назначить синтаксис

Синтаксис присваивания начинается с ключевого слова assign. за которым следует имя сигнала, которое может быть либо отдельным сигналом, либо конкатенацией различных сигнальных цепей. Сила привода и задержка являются необязательными и в основном используются для моделирования потоков данных, а не для синтеза в реальном оборудовании. Выражение или сигнал в правой части вычисляются и назначаются цепи или выражению цепей в левой части.

  
  
assign <net_expression> = [drive_strength] [delay] <expression of different signals or constant value>

  

Значения задержки полезны для определения задержек для вентилей и используются для моделирования временных характеристик в реальном оборудовании, поскольку значение указывает, когда сети должно быть присвоено оцененное значение.

Правила

Есть несколько правил, которые необходимо соблюдать при использовании assign. утверждение:

Пример №1

В следующем примере вызываемая сеть непрерывно управляется выражением сигналов. i1 и i2 с логическим И & сформируйте выражение.

Если вместо этого провода преобразовать в порты и синтезировать, после синтеза мы получим схему RTL, подобную той, что показана ниже.

Оператор непрерывного присваивания можно использовать для представления комбинационных вентилей в Verilog.

Пример №2

Показанный ниже модуль принимает два входа и использует assign оператор для управления выводом z с использованием выбора части и нескольких битовых конкатенаций. Рассматривайте каждый случай как единственный код в модуле, иначе много assign операторы для одного и того же сигнала обязательно сделают вывод равным X.

  
  
module xyz (input [3:0] 	x,		// x is a 4-bit vector net
						input 				y, 		// y is a scalar net (1-bit)
						output [4:0] 	z ); 	// z is a 5-bit vector net

wire [1:0] 	a;
wire 				b;
						
// Assume one of the following assignments are chosen in real design
// If x='hC and y='h1 let us see the value of z  

// Case #1: 4-bits of x and 1 bit of y is concatenated to get a 5-bit net
// and is assigned to the 5-bit nets of z. So value of z='b11001 or z='h19
assign z = {x, y};

// Case #2: 4-bits of x and 1 bit of y is concatenated to get a 5-bit net
// and is assigned to selected 3-bits of net z. Remaining 2 bits of z remains
// undriven and will be high-imp. So value of z='bZ001Z
assign z[3:1] = {x, y};

// Case #3: The same statement is used but now bit4 of z is driven with a constant
// value of 1. Now z = 'b1001Z because only bit0 remains undriven
assign z[3:1] = {x, y};
assign z[4] = 1;

// Case #4: Assume bit3 is driven instead, but now there are two drivers for bit3,
// and both are driving the same value of 0. So there should be no contention and 
// value of z = 'bZ001Z
assign z[3:1] = {x, y};
assign z[3] = 0;

// Case #5: Assume bit3 is instead driven with value 1, so now there are two drivers
// with different values, where the first line is driven with the value of X which
// at the time is 0 and the second assignment where it is driven with value 1, so
// now it becomes unknown which will win. So z='bZX01Z
assign z[3:1] = {x, y};
assign z[3] = 1;

// Case #6: Partial selection of operands on RHS is also possible and say only 2-bits
// are chosen from x, then z = 'b00001 because z[4:3] will be driven with 0
assign z = {x[1:0], y};

// Case #7: Say we explicitly assign only 3-bits of z and leave remaining unconnected
// then z = 'bZZ001
assign z[2:0] = {x[1:0], y};

// Case #8: Same variable can be used multiple times as well and z = 'b00111
// 3{y} is the same as {y, y, y}
assign z = {3{y}};

// Case #9: LHS can also be concatenated: a is 2-bit vector and b is scalar
// RHS is evaluated to 11001 and LHS is 3-bit wide so first 3 bits from LSB of RHS
// will be assigned to LHS. So a = 'b00 and b ='b1
assign {a, b} = {x, y};

// Case #10: If we reverse order on LHS keeping RHS same, we get a = 'b01 and b='b0
assign {a, b} = {x, y};

endmodule

  

Назначить регистрационные переменные

Незаконно управлять или назначать reg введите переменные с assign утверждение. Это связано с тем, что reg переменная способна хранить данные и не требует постоянного управления. reg сигналы могут управляться только в процедурных блоках, таких как initial и always .

Неявное непрерывное назначение

Когда assign оператор используется для присвоения данной сети некоторого значения, он называется явным назначение. Verilog также позволяет выполнять присваивание, когда сеть объявлена ​​и называется неявной. задание.

  
  
wire [1:0] a;
assign a = x & y; 			// Explicit assignment

wire [1:0] a = x & y; 	// Implicit assignment

  

Комбинационная логика

Рассмотрим следующую цифровую схему, состоящую из комбинационных вентилей и соответствующего кода Verilog.

Комбинационная логика требует, чтобы входы непрерывно управлялись для поддержания вывода, в отличие от последовательных элементов, таких как триггеры, где значение захватывается и сохраняется на границе тактового сигнала. Итак, assign оператор хорошо подходит для этой цели, потому что вывод o обновляется всякий раз, когда изменяется любой из входов в правой части.

  
  
// This module takes four inputs and performs a boolean
// operation and assigns output to o. The combinational
// logic is realized using assign statement.

module combo (	input 	a, b, c, d,
								output  o);
  
  assign o = ~((a & b) | c ^ d);
  
endmodule

  

Схема оборудования

После проработки и синтеза проекта мы видим комбинационную схему, которая будет вести себя так же, как моделируется assign. заявление.

Обратите внимание, что сигнал o становится равным 1 всякий раз, когда комбинационное выражение в правой части становится истинным. Точно так же o становится 0, когда RHS ложно. Выход o — это X от 0 нс до 10 нс, потому что входы — это X за то же время.

Щелкните здесь, чтобы просмотреть слайд-шоу с примером моделирования!


Verilog

  1. Оператор переключения C#
  2. Оператор C# break
  3. C# оператор продолжения
  4. Конкатенация Verilog
  5. Верилог Задания
  6. Блокировка и неблокировка Verilog
  7. Верилог-функции
  8. Верилог Задача
  9. Генератор часов Verilog
  10. Математические функции Verilog