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