Ejemplo de Tcl quartus® II: nodos elaborados en grupos de tiempo

author-image

Por

Los grupos de tiempo son una manera eficiente de realizar las asignaciones de tiempo. Puede especificar las matrices que incluyen nodos que coincidan con el patrón en el grupo y especificar las aficiones que excluyen los nodos que coincidan con el patrón del grupo. Es posible que tenga que ver una lista de todos los nodos del grupo de tiempo para verificar que haya especificado los patrones de participante adecuados.

Estos scripts elaboran los nodos en un grupo de tiempo en su diseño. El script itera en cada nodo de sincronización en su diseño, comparando el nombre del nodo de sincronización con cada patrón de inclusión de grupos de tiempo y, a continuación, con cada patrón de exclusión de grupo de tiempo.

Hay una limitación con este script; no maneja grupos de tiempo anidados. Incluir o excluir un grupo de tiempo como elemento de otro grupo de tiempo es válido, pero no es compatible con este script.

A fin de incluir todos los bits de un bus en un grupo de tiempo, utilice un poco de agrado después del nombre del bus en las versiones 4.2 y inferiores del software Quartus II. A partir de la versión 5.0, se puede especificar el nombre de un bus sin una indicación de sitio. El script incluye una verificación de este comportamiento, según el número de versión de software.

quartus global
load_package advanced_timing load_package proyecto # Determine si el script se está ejecutando en la versión

4.2 y antes,
# o 5.0 y posteriores. 5.0 y posteriores reconoce <bus name> como # una entrada de grupo de 
tiempo válida, mientras que 4.2 y antes de requerir
n.° <bus name>* como entrada de grupo de tiempo.
regexp {^Version (\d)} $quartus(versión) coincida con qver
if { $qver < 5 } { establecido need_asterisk
    1 } else { establecido
need_asterisk
    0 } project_open

[lindex $quartus(tos) 0]

create_timing_netlist establecer tg_name

[lindex $quartus(pulg.) 1]

post_message "Los siguientes nodos son miembros del grupo de tiempo $tg_name:"

conjunto tg_name [escape_brackets $tg_name]
establecido tg_members [timegroup -get_members $tg_name]
establecido tg_exceptions [timegroup -get_exceptions $tg_ nombre] # Este ciclo pasa por cada nodo de

sincronización en el diseño foreach_in_collection node_id 
[get_timing_nodes -type all] {

    establecer node_name [get_timing_node_info -info name $node_id]

    # Si el nombre del nodo no está en un bus, borre la bus_name.
    N.º De lo contrario, configure el número.
    if { ! [regexp {(.*?) \[\d+\]} $node_name match bus_name] } { establecer bus_name "" } # Ahora que tenemos el nombre del nodo, verifique si coincide con # cualquier patrón en el conjunto de grupos de tiempo especificado que
    coincida con  
    0 foreach_in_collection miembro  
    $tg_members {

        establecer esc_name [escape_brackets [lindex $member 2]]
        si { [cadena match $esc_name $node_name] } {
            set matches 1 }
        elseif { ! $need_index && \
            [cadena de coincidencia $esc_name $bus_name] } {
            conjunto coincide con 1 } } Cantidad Si $matches es

    1 aquí, el nodo de sincronización coincide con un número de nombre de miembro  
    en el grupo de tiempo. Sin embargo, todavía podría coincidir con una excepción.  
    No. Verifique eso aquí.
    if { $matches } {
        
        foreach_in_collection excepción $tg_exceptions {
            
            establecer esc_name [escape_brackets [lindex $exception 2]] si { [coincidencia de
            cadena $esc_name $node_name ] } {
                set matches 0 }
            elseif { ! $need_rescatado && \
                [string match $esc_name $bus_name] } {
                set matches 0 } } }
            # Hemos

    mirado todas las excepciones. Si $matches sigue siendo 1,
    el nombre del nodo coincide con el patrón de miembro y no coincide con un patrón de
    excepción, así que imprima el nombre del nodo.
    if { $matches } {
        post_message $node_name
    } }

project_close

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.