Tareas de visualización de Verilog
Las tareas del sistema de visualización se utilizan principalmente para mostrar mensajes informativos y de depuración para rastrear el flujo de simulación de los archivos de registro y también ayudan a depurar más rápido. Existen diferentes grupos de tareas de visualización y formatos en los que se pueden imprimir valores.
Mostrar/Escribir tareas
Sintaxis
Ambos $display
y $write
mostrar argumentos en el orden en que aparecen en la lista de argumentos.
$display(<list_of_arguments>);
$write(<list_of_arguments>);
$write
no añade el carácter de nueva línea
hasta el final de su cadena, mientras que $display
lo hace y se puede ver en el ejemplo que se muestra a continuación.
Ejemplo
module tb;
initial begin
$display ("This ends with a new line ");
$write ("This does not,");
$write ("like this. To start new line, use newline char
");
$display ("This always start on a new line !");
end
endmodule
Registro de simulación ncsim> run This ends with a new line This does not,like this. To start new line, use newline char Hi there ! ncsim: *W,RNQUIE: Simulation is complete.
Luces estroboscópicas Verilog
$strobe
imprime los valores finales de las variables al final del paso de tiempo delta actual y tiene un formato similar como $display
.
module tb;
initial begin
reg [7:0] a;
reg [7:0] b;
a = 8'h2D;
b = 8'h2D;
#10; // Wait till simulation reaches 10ns
b <= a + 1; // Assign a+1 value to b
$display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);
$strobe ("[$strobe] time=%0t a=0x%0h b=0x%0h", $time, a, b);
#1;
$display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);
$strobe ("[$strobe] time=%0t a=0x%0h b=0x%0h", $time, a, b);
end
endmodule
Tenga en cuenta que $strobe
muestra el valor actualizado final de la variable b en el tiempo 10ns que es 0x2E y $display
recoge eso solo en el siguiente delta de simulación a las 11 ns.
ncsim> run [$display] time=10 a=0x2d b=0x2d [$strobe] time=10 a=0x2d b=0x2e [$display] time=11 a=0x2d b=0x2e [$strobe] time=11 a=0x2d b=0x2e ncsim: *W,RNQUIE: Simulation is complete. ncsim> exit
Monitores continuos Verilog
$monitor
ayuda a imprimir automáticamente valores de variables o expresiones cada vez que cambia la variable o expresión en su lista de argumentos. Logra un efecto similar al llamar a $display
después de cada vez que alguno de sus argumentos se actualice.
module tb;
initial begin
reg [7:0] a;
reg [7:0] b;
a = 8'h2D;
b = 8'h2D;
#10; // Wait till simulation reaches 10ns
b <= a + 1; // Assign a+1 value to b
$monitor ("[$monitor] time=%0t a=0x%0h b=0x%0h", $time, a, b);
#1 b <= 8'hA4;
#5 b <= a - 8'h33;
#10 b <= 8'h1;
end
endmodule
Tenga en cuenta que $monitor
es como una tarea que se genera para ejecutarse en segundo plano del subproceso principal que supervisa y muestra los cambios de valor de sus variables de argumento. Un nuevo $monitor
La tarea se puede ejecutar cualquier número de veces durante la simulación.
ncsim> run [$monitor] time=10 a=0x2d b=0x2e [$monitor] time=11 a=0x2d b=0xa4 [$monitor] time=16 a=0x2d b=0xfa [$monitor] time=26 a=0x2d b=0x1 ncsim: *W,RNQUIE: Simulation is complete.
Especificadores de formato de Verilog
Para imprimir variables dentro de las funciones de visualización, los especificadores de formato apropiados tienen que ser dadas para cada variable.
Argumento | Descripción |
---|---|
%h, %H | Mostrar en formato hexadecimal |
%d, %D | Mostrar en formato decimal |
%b, %B | Mostrar en formato binario |
%m, %M | Mostrar nombre jerárquico |
%s, %S | Mostrar como una cadena |
%t, %T | Mostrar en formato de hora |
%f, %F | Mostrar 'real' en formato decimal |
%e, %E | Mostrar 'real' en formato exponencial |
module tb;
initial begin
reg [7:0] a;
reg [39:0] str = "Hello";
time cur_time;
real float_pt;
a = 8'h0E;
float_pt = 3.142;
$display ("a = %h", a);
$display ("a = %d", a);
$display ("a = %b", a);
$display ("str = %s", str);
#200 cur_time = $time;
$display ("time = %t", cur_time);
$display ("float_pt = %f", float_pt);
$display ("float_pt = %e", float_pt);
end
endmodule
Registro de simulación ncsim> run a = 0e a = 14 a = 00001110 str = Hello time = 200 float_pt = 3.142000 float_pt = 3.142000e+00 ncsim: *W,RNQUIE: Simulation is complete.
Secuencias de escape de Verilog
Algunos caracteres se consideran especiales, ya que sirven para otros fines de visualización, como saltos de línea, tabuladores y fuentes de formulario. Para imprimir estos caracteres especiales , cada ocurrencia de dichos caracteres tiene que ser escapada .
Argumento | Descripción |
---|---|
Carácter de nueva línea | |
Carácter de tabulación | |
El personaje | |
" | El carácter " |
%% | El carácter % |
module tb;
initial begin
$write ("Newline character
");
$display ("Tab character stop");
$display ("Escaping " %%");
/*
// Compilation errors
$display ("Without escaping "); // ERROR : Unterminated string
$display ("Without escaping ""); // ERROR : Unterminated string
*/
end
endmodule
Registro de simulación ncsim> run Newline character Tab character stop Escaping " % ncsim: *W,RNQUIE: Simulation is complete.
Verilog
- Tutorial de Verilog
- Concatenación Verilog
- Asignaciones de Verilog
- Bloqueo y no bloqueo de Verilog
- Funciones de Verilog
- Tarea Verilog
- Compilación condicional de Verilog `ifdef
- Ámbito de referencia jerárquica de Verilog
- Generador de reloj Verilog
- Tareas de visualización de Verilog
- Funciones matemáticas de Verilog