Instancia y entidad de Timing Analyzer en secuencias de comandos

author-image

Por

Cuando escriba secuencias de comandos personalizadas para Timing Analyzer, debe tener en cuenta cómo las diferentes funciones de la API de Tcl manejan y devuelven los nombres de entidad e instancia en los nombres de nodos. Hay una configuración en el software Quartus® II llamada Mostrar nombre de entidad para el nombre de nodo que controla si los nombres de nodo se muestran con o sin nombres de entidad.
La función de API de Tcl get_registers siempre puede aceptar nombres que incluyan entidades para su filtro, independientemente de la configuración Mostrar nombre de entidad para el nombredel nodo . La función get_registers siempre devuelve nombres según la configuración Mostrar nombre de entidad para el nombre del nodo.
La Tabla 1 muestra ejemplos del nombre de nodo devuelto por el comando get_registers <filter>,donde un diseño incluye un registro denominado ram:my_ram|ctrl:ctrl_1|addr[0].

Las funciones de la API de Tcl get_pins y get_cells comportarse de manera diferente a get_registers. Las funciones get_pins y get_cells solo aceptan y devuelven nombres que contienen nombres de instancia. No aceptan ni devuelven nombres con entidades, independientemente del valor de Mostrar nombre de entidad para nombre de nodo.
La Tabla 2 muestra ejemplos del nombre de nodo devuelto por get_pins <filter>,donde un diseño incluye un registro denominado ram:my_ram|ctrl:ctrl_1|addr[0] con un pin de reloj denominado clk. La función get_cells se comporta de la misma manera, aunque acepta y devuelve los nombres de las celdas.

Nota:

  1. La función de get_pins genera una advertencia que indica que el filtro especificado no pudo coincidir con un pin.

Cuando es consciente de la diferencia en la forma en que get_registers, get_pinsy get_cells manejar y devolver nombres de nodos que incluyen entidades, puede evitar problemas ligeros que pueden ocurrir cuando combina las funciones. El siguiente ejemplo muestra el código que funciona cuando El nombre de la entidad para mostrar para el nombre del nodo está desactivado, pero falla cuando está activado.

foreach_in_collection reg_id [get_registers foo*] {
    establecer reg_name [get_node_info -name $reg_id]
    # ...
    establezca pin_id [get_pins ${reg_name}|clk] # Si reg_name incluye
    entidades, la get_pins llamada siempre falla
}

Cuando El nombre de la entidad para mostrar para el nombre del nodo está desactivado, la variable reg_name no incluye nombres de entidad, por lo que la get_pins llamada se realiza correctamente. Cuando Se muestra el nombre de la entidad para el nombre del nodo, la variable reg_name incluye nombres de entidad, por lo que se produce un error en la llamada get_pins.

Soluciones

La manera más fácil de evitar posibles problemas es desactivar Mostrar nombre de entidad para el nombre de nodo y utilizar solo nombres de instancia para hacer referencia a nodos. Esta solución garantiza que los nombres devueltos por get_registers sean nombres solo para instancias y que funcionen con get_pins y get_cells.

Si no desactiva Mostrar nombrede entidad para el nombre de nodo y transfiere los nombres devueltos por get_registers a get_pins o get_cells,debe asegurarse de eliminar todos los nombres de entidad. Puede utilizar una simple expresión de regsub para eliminar la mayoría de los nombres de entidad. El siguiente comando de Tcl elimina todos los nombres de entidad de un nombre de nodo, siempre que los nombres de entidad contengan solo letras, dígitos y guiones bajos (caracteres en \w character class).

regsub -all {\w*:} $reg_name {} reg_name

El patrón de expresión regular que aparece en la lista no maneja todos los caracteres válidos en los identificadores HDL. No maneja nombres de entidad generados que incluyan barra invertido (\), el carácter de signo de dólar ($) en identificadores de HDL Verilog sencillos, identificadores de enlace verilog HDL o identificadores extendidos en VHDL. Puede construir expresións regulares más avanzadas para controlar los nombres de entidad con esos caracteres, pero es más fácil desactivar Mostrar nombre de entidad para el nombre de nodo.
El siguiente ejemplo muestra cómo integrar la expresión regsub con el ejemplo anterior que no funciona. En el siguiente ejemplo, la expresión regsub elimina los nombres de entidad del nombre del registro (sujeto a las exclusiones de caracteres descritas), por lo que no se produce un error en la llamada get_pins. El ejemplo funciona independientemente del valor de Mostrar nombre de entidad para nombre de nodo.

foreach_in_collection reg_id [get_registers foo*] { establecer
    reg_name [get_node_info -name $reg_id]
    regsub -all {\w*:} $reg_name {} reg_name
    nro. de reg_name ya no incluye el número de entidades
    ...
    establezca el número pin_id [get_pins ${reg_name}|clk] # reg_name
    ya no incluye entidades, por lo que get_pins tiene éxito
}

El contenido de esta página es una combinación de la traducción humana y automática del contenido original en inglés. Este contenido se ofrece únicamente para su comodidad como información general y no debe considerarse completa o precisa. Si hay alguna contradicción entre la versión en inglés de esta página y la traducción, prevalecerá la versión en inglés. Consulte la versión en inglés de esta página.