Cómo escribir un resumen del banco de pruebas
El estímulo de entrada correspondiente al módulo bajo prueba se establece en tipo reg y la salida se establece en tipo cable. La prueba necesita manejar el puerto bidireccional de entrada y salida.
Método 1: Establecer la variable intermedia inout_reg del puerto bidireccional en el registro de salida de inout. El puerto de entrada y salida debe definirse como una variable de línea en la plataforma de prueba y luego la dirección de transmisión se controla mediante la habilitación de salida.
Por ejemplo:
inout[0:0]bi_dir_port;
cable[0:0]bi_dir_port;
bi_dir _ port _ reg
Registrar bi_dir_port_oe
¿Asignar bi_dir_port=bi_dir_port_oe? bi_dir_port_reg: 1 'BZ;
Bi_dir_port_oe se usa para controlar la dirección de los datos del puerto y el registro de variable intermedia se usa para cambiar su valor. Equivale a la interconexión entre dos módulos con puertos bidireccionales de entrada y salida. Puerto de escritura (es decir, módulo de entrada)
Método 2: utilizar declaraciones de fuerza y liberación. Este método no refleja con precisión los cambios de señal en el puerto bidireccional, pero puede reflejar los cambios de señal en el bloque. Como se muestra en detalle:
Prueba del módulo();
datos del cable _ inout
reg data _ reg
Enlace de registro;
# xx//Retraso
forzar datos _ inout = 1 ' bx; //Forzar como puerto de entrada
..... .....
# xx
Publicar datos_inout//Liberar puerto de entrada
Finalizar módulo
Desde archivo de texto Leer y escribir vectores
1) Leer archivos de texto: utilice la tarea del sistema $readmemb para leer un vector binario (puede contener incentivos de entrada y expectativas de salida) de un archivo de texto. $readmemh se utiliza para leer archivos hexadecimales. Por ejemplo:
reg[7:0]mem[1:256]//Una palabra de 256 bits de 8 bits define la memoria.
Inicial $readme MH("mem.data",mem) //Leer. El archivo dat está escrito para registrar mem.
Inicial $readme MH("mem.data",mem,128,1) //El parámetro siempre es la dirección del registro donde se cargan los datos.
2) Archivo de texto de salida: ¿se utiliza para abrir el archivo de salida? Tome $fopen como ejemplo:
Integer out_file//out_file es una descripción de archivo y debe definirse como un tipo entero.
out _ file = $ fopen(" CPU . data "); // cpu.data es el archivo que debe abrirse y es el texto de salida final.
Los valores de señal en el diseño se pueden usar a través de los comandos $fmonitor, $fdisplay,
2.Verilog y Ncverilog usando archivos de biblioteca o directorios de biblioteca.
Ej). ncverilog -f ejecutar .f -v lib/lib . v// El archivo de compilación general está en run.f, el archivo de biblioteca está en lib.v y. Busque automáticamente el sistema de archivos v en el directorio lib2.
Al utilizar archivos de biblioteca o directorios de biblioteca, solo necesita compilar los módulos necesarios, no todos.
Tareas del sistema para 3.3.
Grabación de señales de la plataforma de prueba Verilog:
1). La base de datos SHM puede registrar cambios de señales durante el proceso de simulación de diseño. Solo registra los cambios de señal de la sonda que configuró durante el tiempo válido de la sonda.
ejemplo). $shm_open(" waves . shm "); //Abre la base de datos de formas de onda
$shm_probe(top, "AS"); //Establece la sonda en "top",
Segundo parámetro: A - señal para una barra de desplazamiento específica.
Puertos S en el rango especificado e inferiores, excluidas las unidades de biblioteca
Puertos C en el rango especificado e inferiores, incluidas las unidades de biblioteca
AS en el rango especificado y debajo Señales, excluidas las unidades de biblioteca
Señales de comunicación dentro del rango especificado y debajo, incluidas las unidades de biblioteca
También hay una m, que indica la memoria del alcance actual, que puede ser combinado con el "AM" anterior, "AMS" y "AMC" se utilizan en combinación.
No hay ningún puerto que represente el alcance actual;
$shm_close //Cerrar la base de datos.
La base de datos VCD también puede registrar cambios de señal durante el proceso de diseño y simulación. Solo registra cambios en la señal que seleccionas.
ejemplo). $ dump file(" nombre de archivo "); //Abre la base de datos
$dumpvars(1, top . u 1); //scope = top.u1, profundidad = 1
No. Un parámetro representa la profundidad y cuando es 0, se registran todas las profundidades; el segundo parámetro representa el rango y se omite el rango actual de la tabla.
$dumpvars//profundidad=todos los rangos=todos
$ dump vars(0);//profundidad=todos los rangos=actual
$dumpvars(1 , top . u 1); //profundidad = 1 alcance = top . u 1
$dumpoff //Detener la grabación de cambios de datos, los cambios de señal no se escribirán en el archivo de la biblioteca.
$dumpon //Continuar grabando
3). La base de datos Debussy fsdb también puede registrar cambios de señal. Su ventaja es que se puede combinar con Debussy para facilitar la depuración.
Si desea registrar señales durante la simulación de ncverilog, primero debe configurar Debussy:
a.setenv LD_LIBRARY_PATH: $ LD_LIBRARY_PATH
(La ruta del debpli .so archivo (/share/PLI/NC _ XL//NC _ load PLI 1))
b. Al llamar a ncverilog, use la opción ncloadpli1.
ncverilog -f run . f debug ncloadpli 1 = debpli:deb_PLIPtr
El archivo de base de datos fsdb se registra utilizando las funciones del sistema $fsdbDumpfile y $fsdbDumpvars. Consulte VCD para obtener instrucciones de uso.
Nota: Cuando se utiliza ncverilog, para registrar formas de onda correctamente, se debe utilizar el parámetro "access rw", de lo contrario no habrá permisos de lectura ni escritura.
Al grabar una señal o forma de onda, es necesario indicar la ruta de la señal grabada, como tb.module.u1.clk