Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Verilog

Asignaciones de Verilog

La colocación de valores en redes y variables se denomina asignaciones. Hay tres formas básicas:

Valores legales LHS

Una tarea tiene dos partes:lado derecho (RHS) y lado izquierdo (LHS) con un símbolo igual (=) o un símbolo menor que igual (<=) en el medio.

Tipo de tarea Lado izquierdo
Procedimiento
  • Variables (vectoriales/escalares)
  • Selección de bits o selección parcial de un registro vectorial, entero o variable de tiempo
  • Palabra de memoria
  • Concatenación de cualquiera de los anteriores
Continuo
  • Neto (vector/escalar)
  • Selección de bits o selección parcial de una red vectorial
  • Concatenación de selecciones de bits y selecciones parciales
Procedimiento Continuo
  • Neto o variable (vector/escalar)
  • Selección de bits o selección parcial de una red vectorial

El RHS puede contener cualquier expresión que evalúe un valor final, mientras que el LHS indica una red o una variable a la que se asigna el valor en RHS.

  
  
module tb;
	reg clk;
	wire a, b, c, d, e, f;
	reg  z, y;
	
	// clk is on the LHS and the not of clk forms RHS
	always #10 clk = ~clk;
	
	// y is the LHS and the constant 1 is RHS
	assign y = 1; 
	
	// f is the LHS, and the expression of a,b,d,e forms the RHS
	assign f = (a | b) ^ (d & e);

	always @ (posedge clk) begin
		// z is the LHS, and the expression of a,b,c,d forms the RHS
		z <= a + b + c + d;
	end
	
	initial begin
		// Variable names on the left form LHS while 0 is RHS
		a <= 0; b <= 0; c <= 0; d <= 0; e <= 0;
		clk <= 0;
	end
endmodule

  

Asignación procesal

Las asignaciones de procedimiento ocurren dentro de procedimientos como siempre, inicial, tarea y funciones y se utilizan para colocar valores en las variables. La variable mantendrá el valor hasta la siguiente asignación a la misma variable.

El valor se colocará en la variable cuando la simulación ejecute esta declaración en algún momento durante el tiempo de simulación. Esto se puede controlar y modificar de la manera que queramos mediante el uso de declaraciones de flujo de control como if-else-if, case y mecanismos de bucle.

  
  
	reg [7:0]  data;
	integer    count;
	real       period;
	
	initial begin
		data = 8'h3e;
		period = 4.23;
		count = 0;
	end
	
	always @ (posedge clk) 
		count++;

  

Asignación de declaración de variables

Se puede colocar un valor inicial en una variable en el momento de su declaración, como se muestra a continuación. La asignación no tiene una duración y mantiene el valor hasta que ocurre la siguiente asignación a la misma variable. Tenga en cuenta que no se permiten las asignaciones de declaraciones de variables a una matriz.

  
  
	module my_block;
		reg [31:0] data = 32'hdead_cafe;
	
		initial begin
			#20  data = 32'h1234_5678;    // data will have dead_cafe from time 0 to time 20
			                              // At time 20, data will get 12345678
		end
	endmodule

  
  
  
	reg [3:0] a = 4'b4;
	
	// is equivalent to 
	
	reg [3:0] a;
	initial a = 4'b4;

  

Si la variable se inicializa durante la declaración y en el tiempo 0 en un bloque inicial como se muestra a continuación, el orden de evaluación no está garantizado y, por lo tanto, puede tener 8'h05 o 8'hee.

  
  
	module my_block;
		reg [7:0]  addr = 8'h05;
		
		initial 
			addr = 8'hee;
	endmodule

  
  
  
	reg [3:0] array [3:0] = 0;           // illegal
	integer i = 0, j;                    // declares two integers i,j and i is assigned 0
	real r2 = 4.5, r3 = 8;               // declares two real numbers r2,r3 and are assigned 4.5, 8 resp.
	time startTime = 40;                 // declares time variable with initial value 40

  

Los bloques de procedimiento y las asignaciones se tratarán con más detalle en una sección posterior.

Asignación Continua

¡Haga clic aquí para ver un ejemplo de simulación paso a paso!

Esto se usa para asignar valores a redes escalares y vectoriales y sucede cada vez que hay un cambio en el RHS. Proporciona una forma de modelar la lógica combinacional sin especificar una interconexión de puertas y facilita la conducción de la red con expresiones lógicas.

  
  
    // Example model of an AND gate
	wire  a, b, c;
	
	assign a = b & c;

  

Siempre que b o c cambie su valor, se evaluará toda la expresión en RHS y a se actualizará con el nuevo valor.

Asignación de declaración neta

Esto nos permite colocar una asignación continua en la misma declaración que declara la red. Tenga en cuenta que debido a que una red solo se puede declarar una vez, solo es posible una asignación de declaración para una red.

  
  
	wire  penable = 1;

  

Asignación continua procesal

Estas son declaraciones de procedimiento que permiten que las expresiones se asignen continuamente a redes o variables y son de dos tipos.

asignar designar

Esto anulará todas las asignaciones de procedimiento a una variable y se desactiva usando la misma señal con deassign . El valor de la variable permanecerá igual hasta que la variable obtenga un nuevo valor a través de una asignación procesal o continua procesal. El LHS de un assign La declaración no puede ser una selección de bits, una selección parcial o una referencia de matriz, pero puede ser una variable o una concatenación de variables.

  
  
	reg q;
	
	initial begin
		assign q = 0;
		#10 deassign q;
	end

  

liberación forzada

Estos son similares al assign - deassign pero también se puede aplicar a redes y variables. El LHS puede ser una selección de bits de una red, una selección parcial de una red, una variable o una red, pero no puede ser la referencia a una matriz y la selección de bits/partes de una variable. El force declaración anulará todas las demás asignaciones realizadas a la variable hasta que se publique utilizando el release palabra clave.

  
  
	reg o, a, b;
	
	initial begin
		force o = a & b;
		...
		release o;
	end

  

Verilog

  1. Tutorial de Verilog
  2. Concatenación Verilog
  3. Bloqueo y no bloqueo de Verilog
  4. Funciones de Verilog
  5. Tarea Verilog
  6. Generador de reloj Verilog
  7. Funciones matemáticas de Verilog
  8. Formato de hora de Verilog
  9. Alcance de la escala de tiempo de Verilog
  10. Operaciones de E/S de archivos de Verilog
  11. Verilog Hola Mundo