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

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.

Registro de simulación
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.

Registro de 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

  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. Compilación condicional de Verilog `ifdef
  8. Ámbito de referencia jerárquica de Verilog
  9. Generador de reloj Verilog
  10. Tareas de visualización de Verilog
  11. Funciones matemáticas de Verilog