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ónxcelium> 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ónxcelium> 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ónxcelium> 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ónxcelium> 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
- Tutorial de Verilog
- Concatenación Verilog
- Asignaciones de Verilog
- Bloqueo y no bloqueo de Verilog
- Funciones de Verilog
- Tarea Verilog
- Ámbito de referencia jerárquica de Verilog
- Generador de reloj Verilog
- Funciones matemáticas de Verilog
- Formato de hora de Verilog
- Operaciones de E/S de archivos de Verilog