occ.dft_spec
a basic OCC DftSpecification举例子:
DftSpecification(cpu, occ_core) {
reuse_modules_when_possible: on;
OCC { Controller(CLK1_OCC) {
// DEFINE ROOT OF CLOCK DOMAIN WHERE OCC SHOULD BE INSERTED clock_intercept_node: /BUF_OCC_1/Y; }
Controller(CLK2_OCC) {
// DEFINE ROOT OF CLOCK DOMAIN WHERE OCC SHOULD BE INSERTED clock_intercept_node: /BUF_OCC_2/Y; }
Controller(CLK3_OCC) {
// DEFINE ROOT OF CLOCK DOMAIN WHERE OCC SHOULD BE INSERTED clock_intercept_node: /BUF_OCC_3/Y; } } }
post_dft_insertion_procedure.tcl
post-DFT插入的Tcl程序。此OCC插入示例包含process_dft_specification.post_insertation过程。
过程名称是一个关键字,它指示process_dft_specification命令在插入指定的dft逻辑后立即执行过程的内容。插入后脚本创建一个扫描链,将所有插入的OCC的移位寄存器连接到一个未压缩的扫描链中。此外,还创建了一个dofile,用于在后续步骤中添加时钟控制扫描链。通常,OCC子链将在扫描插入期间缝合到设计的扫描链上。在这个扫描后插入示例中,post_dft_insertation示例用于演示插入后进行设计编辑 。
proc process_dft_specification.post_insertion {cpu args} {
# Create ports for control scan chain
create_port occ_control_scan_in -direction input##输入
create_port occ_control_scan_out -direction output##输出
# Concatenate OCC condition bit shift registers into new control scan
#chain
set first_inst 1
foreach inst_name [get_name_list [get_instances -of_module cpu_occ_core_tessent_occ]] {
if ($first_inst) {
create_connection occ_control_scan_in $inst_name/scan_in
set first_inst 0
set last_inst_name $inst_name }
else {
create_connection $last_inst_name/scan_out $inst_name/scan_in
set last_inst_name $inst_name } }
create_connection $