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

Alcance de la escala de tiempo de Verilog

Escala de tiempo predeterminada

Aunque se espera que los módulos de Verilog tengan una escala de tiempo definida antes del módulo, los simuladores pueden insertar una escala de tiempo predeterminada. La escala de tiempo real que se aplica en cualquier ámbito en una jerarquía elaborada de Verilog se puede imprimir utilizando la tarea del sistema $printtimescale que acepta el alcance como argumento.

  
  
module tb;
	initial begin
		// Print timescale of this module
		$printtimescale(tb);
		// $printtimescale($root);
	end
endmodule

  

Vea que aunque no se colocó una directiva de escala de tiempo antes de este módulo, el simulador terminó aplicando un valor de escala de tiempo de 1ns/1ns.

Registro de simulación
xcelium> run
Time scale of (tb) is  1ns /  1ns
xmsim: *W,RNQUIE: Simulation is complete.

Alcance de escala de tiempo estándar

De forma predeterminada, una directiva de escala de tiempo colocada en un archivo se aplica a todos los módulos que siguen la directiva hasta la definición de otra directiva de escala de tiempo.

  
  
`timescale 1ns/1ps

module tb;
  des m_des();
  alu m_alu();
  
  initial begin
    $printtimescale(tb);
    $printtimescale(tb.m_alu);
	$printtimescale(tb.m_des);
  end
endmodule

module alu;
  
endmodule

`timescale 1ns/10ps

module des;
  
endmodule

  

En el ejemplo anterior, tb y alu terminan con una escala de tiempo de 1ns/1ns mientras que des obtiene una escala de tiempo de 1ns/10ps debido a la ubicación de la directiva antes de la definición del módulo de des

Registro de simulación
xcelium> run
Time scale of (tb) is  1ns /  1ps
Time scale of (tb.m_alu) is  1ns /  1ps
Time scale of (tb.m_des) is  1ns /  10ps
xmsim: *W,RNQUIE: Simulation is complete.

Alcance entre archivos Verilog

Se pueden incluir otros archivos en el archivo actual usando un `include directiva que es una directiva de preprocesador y hace que el compilador coloque el contenido del archivo incluido antes de la compilación. Entonces, esto es equivalente a simplemente pegar todo el contenido del otro archivo en este archivo principal.

  
  
// main.v
`timescale 1ns/1ps

module tb;
  des m_des();
  alu m_alu();
  
  initial begin
    $printtimescale(tb);
    $printtimescale(tb.m_alu);
	$printtimescale(tb.m_des);
  end
endmodule

`include "file_alu.v"
`include "file_des.v"

// file_alu.v
module alu;
endmodule

// file_des.v
`timescale 1ns/10ps

module des;
  
endmodule

  

Ver que los resultados son exactamente los mismos que en el ejemplo anterior. alu obtiene una escala de tiempo de 1ns/1ps porque fue la última directiva la que se mantuvo válida hasta que el compilador encontró la definición de alu a pesar de colocarla en un archivo diferente. des obtiene una escala de tiempo de 1ns/10ps porque la directiva fue reemplazada antes de su definición.

Registro de simulación
xcelium> run
Time scale of (tb) is  1ns /  1ps
Time scale of (tb.m_alu) is  1ns /  1ps
Time scale of (tb.m_des) is  1ns /  10ps
xmsim: *W,RNQUIE: Simulation is complete.

El intercambio de archivos puede cambiar la escala de tiempo

El orden de inclusión de los archivos juega un papel importante en la redefinición de las directivas de escala de tiempo, lo cual es evidente en el siguiente ejemplo.

  
  
// main.v
`timescale 1ns/1ps

module tb;
  des m_des();
  alu m_alu();
  
  initial begin
    $printtimescale(tb);
    $printtimescale(tb.m_alu);
	$printtimescale(tb.m_des);
  end
endmodule

// NOTE! Swapped order of inclusion
`include "file_des.v"
`include "file_alu.v"

// file_alu.v
module alu;
endmodule

// file_des.v
`timescale 1ns/10ps

module des;
  
endmodule

  

Vea que el módulo alu ahora obtiene una escala de tiempo de 1ns/10ps.

Registro de simulación
xcelium> run
Time scale of (tb) is  1ns /  1ps
Time scale of (tb.m_alu) is  1ns /  10ps
Time scale of (tb.m_des) is  1ns /  10ps
xmsim: *W,RNQUIE: Simulation is complete.

Esta es una de las razones para tener una directiva de escala de tiempo en la parte superior de los archivos para que todos los módulos en ese archivo asuman la escala de tiempo correcta independientemente de la inclusión del archivo.

Sin embargo, este enfoque puede dificultar la compilación con una precisión de escala de tiempo diferente (valor que sigue al oblicuo) sin alterar cada archivo. Muchos compiladores y simuladores también brindan una opción para anular los valores de escala de tiempo predeterminados que se aplicarán a todos los módulos.


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. Ámbito de referencia jerárquica de Verilog
  8. Generador de reloj Verilog
  9. Funciones matemáticas de Verilog
  10. Formato de hora de Verilog
  11. Operaciones de E/S de archivos de Verilog