vivado tcl 常见问题

module top();
reg a, b;
generate
begin: ts_gen
    for (i = 0; i < 4; i = i + 1) 
    begin: ts_gen_for

        ts u_ts (
            ......
        );

    end
end
endgenerate
endmodule

# --------------------------------------------------

module ts();
    ....
    generate
    begin: cnt_gen
        if (parameter == "A") begin: cnt_gen_A
            ...
        end
        else if (parameter == "B") begin: cnt_gen_B
            ...
        end
    end
endmodule

在vivado的tcl中通过

get_objects

objects 很玄学,比如这个路径

/u_top/ts_gen.ts_gen_for[2].u_ts/cnt_gen.cnt_gen.u_counter

上述路径分割成几个部分

u_top                      #不涉及begin命名块,开头不加\,结尾不加空格
\ts_gen.ts_gen_for[2].u_ts #涉及begin命名块,开头加\,结尾加空格,块内用.做分隔符连接
\cnt_gen.cnt_gen.u_counter #涉及begin命名块,开头加\,结尾加空格,块内用.做分隔符连接

generate块里例化的实例最后都是空格结尾,且不能省!!!上述三个部分通过分隔符/链接即

get_objects {/u_top/\ts_gen.ts_gen_for[2].u_ts /\cnt_gen.cnt_gen.u_counter }

如果传入变量i进行索引,由于[]和\在双引号块内需要转义,因此添加 \ 进行转义

set i 2
get_objects "/u_top/\\ts_gen.ts_gen_for\[$i\].u_ts /\\cnt_gen.cnt_gen.u_counter "
作者:odjvnrij  创建时间:2024-12-27 17:52
最后编辑:odjvnrij  更新时间:2024-12-28 15:30