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

Semántica de programación de Verilog

El diseño y el banco de pruebas de Verilog suelen tener muchas líneas de código que comprenden always o initial bloques, asignaciones continuas y otras declaraciones de procedimiento que se activan en diferentes momentos en el curso de una simulación.

Cada cambio en el valor de una señal en el modelo Verilog se considera un evento de actualización . Y procesos como always y assign los bloques que son sensibles a estos eventos de actualización se evalúan en un orden arbitrario y se denominan evento de evaluación . Dado que estos eventos pueden ocurrir en diferentes momentos, se administran mejor y se garantiza su orden correcto de ejecución programándolos en colas de eventos que están organizados por tiempo de simulación.

  
  
module tb;
	reg a, b, c;
	wire d;
	
	// 'always' is a process that gets evaluated when either 'a' or 'b' is updated. 
	// When 'a' or 'b' changes in value it is called an 'update event'. When 'always'
	// block is triggered because of a change in 'a' or 'b' it is called an evaluation
	// event
	always @ (a or b) begin
		c = a & b;
	end
	
	// Here 'assign' is a process which is evaluated when either 'a' or 'b' or 'c'
	// gets updated
	assign d = a | b ^ c;
endmodule

  

Cola de eventos

Un paso de simulación se puede segmentar en cuatro regiones diferentes. Una cola de eventos activa es solo un conjunto de procesos que deben ejecutarse en el momento actual, lo que puede dar lugar a que se programen más procesos en colas activas u otras colas de eventos. Los eventos se pueden agregar a cualquiera de las regiones, pero siempre se eliminan de las activas región.

Cuando todos los eventos en la cola activa para el paso de tiempo actual ha sido ejecutado, el simulador avanza el tiempo al siguiente paso de tiempo y ejecuta su cola activa.

  
  
module tb;
	reg x, y, z
	
	initial begin
		#1 	x = 1;
			y = 1;
		#1 	z = 0;
	end
endmodule

  

La simulación comienza en el tiempo 0 y la primera instrucción está programada para ejecutarse cuando el tiempo de simulación alcanza 1 unidad de tiempo en la que asigna x e y a 1. Esta es la cola activa para el tiempo actual, que es 1 unidad de tiempo. Luego, el simulador programa la siguiente declaración después de 1 unidad de tiempo más en la que se asigna 0 a z.

¿Qué hace que la simulación no sea determinista?

Puede haber condiciones de carrera durante la simulación que terminen dando resultados diferentes para el mismo diseño y banco de pruebas. Una de las razones del comportamiento no determinista es que activo los eventos se pueden eliminar de la cola y procesar en cualquier orden.


Verilog

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