FORCE “primary_input_pin” <value> <time>;  
 
 此命令用于在给定时间强制选定主输入引脚上的值(0,1、X或Z)。时间值不得低于该程序的先前时间值。每个程序的时间在时间0再次开始。主输入引脚将用双引号括起来。
 
 
 
  APPLY “scan_group_procedure_name” <#times> <time>; 
 
 
 
  此命令指示所选程序名称将从所选时间开始应用所选次数。扫描组过程名称将用双引号括起来。此命令只能在加载和卸载过程中使用。 
 
 
 
  FORCE_SCI “scan_chain_name” <time>;  
 
 
 
  该命令指示移位过程中的时间,值将被放置在扫描链输入上。扫描链名称将用双引号括起来。
 
 
  
  
   MEASURE_SCO “scan_chain_name” <time>;  
  
 
   
 
  该命令指示移位过程中扫描链输出上测量值的时间。扫描链名称将用双引号括起来。
 
 
  
  
   Functional_Chain_Test   
  
 
  
   functional_chain_test部分包含要测试电路中所有扫描链的功能扫描链测试的定义。对于每个扫描链组,扫描链测试将包括加载交替的双0和双1(00110011…),然后卸载组中所有扫描链的这些值。
  
 
   
   
    The format is as follows:  
   
 
   
    CHAIN_TEST =  
   
 
   
    APPLY “test_setup” <value> <time>;  
   
 
   
    PATTERN = <number>;  
   
 
   
    APPLY “scan_group_load_name” <time> =  
   
 
   
    CHAIN “scan_chain_name1” = “values....”;  
   
 
   
    CHAIN “scan_chain_name2” = “values....”;  
   
 
   
    ....  
   
 
   
    ....  
   
 
   
    END;  
   
 
   
    APPLY “scan_group_unload_name” <time> =  
   
 
   
    CHAIN “scan_chain_name1” = “values....”;  
   
 
   
    CHAIN “scan_chain_name2” = “values....”;  
   
 
   
    ....  
   
 
   
    ....  
   
 
   
    END;  
   
 
   
    END;  
   
 
    
    如果setup_Data部分中有测试设置过程,则在功能链测试模式的开头应用可选的“test_setup”行。pattern的编号是从零开始的pattern编号,其中要测试电路中所有扫描链的功能扫描链测试。扫描组加载和卸载名称以及扫描链名称将用双引号括起来。加载和卸载扫描链的值将用双引号括起来。在扫描链加载期间,相应扫描链的每个值都将放置在其扫描链输入引脚上。移位程序将通过扫描链移位值,并继续移位下一个值,直到所有扫描链的所有值都已加载。由于移位的数量由最长扫描链的长度决定,所以X(不必在意)放在较短扫描链的开头。这将确保正确加载扫描链的所有值。在扫描链卸载期间,将在其扫描链输出引脚处测量相应扫描链的每个值。移位程序将值移出扫描链,并继续移位下一个值,直到所有扫描链的所有值都已卸载。同样,由于移位的数量由最长扫描链的长度决定,所以X(不测量)位于较短扫描链的末端。这将确保扫描链的所有值都将被快速卸载。
 
    
     CHAIN_TEST =  
    
 
    
     APPLY “test_setup” 1 0;  
    
 
    
     PATTERN = 0;  
    
 
    
     APPLY “g1_load” 0 =  
    
 
    
     CHAIN “c2” = “XXXXXXXXX0011001100110011001100”;  
    
 
    
     CHAIN “c1” = “XXXXXXXXXXXXX001100110011001100”;  
    
 
    
     CHAIN “c0” = “0011001100110011001100110011001”;  
    
 
    
     END;  
    
 
    
     APPLY “g1_unload” 1 =  
    
 
    
     CHAIN “c2” = “0011001100110011001100XXXXXXXXX”;  
    
 
    
     CHAIN “c1” = “001100110011001100XXXXXXXXXXXXX”;  
    
 
    
     CHAIN “c0” = “0011001100110011001100110011001”  
    
 
    
     END;  
    
 
    
     END;  
    
 
     
     
      Scan_Test   
     
 
     
      The scan_test section contains the definition of the scan test patterns that were created by  
     
 
     
      Tessent Shell.  
     
 
      
      
       A scan pattern will normally include the following:  
      
 
      
       SCAN_TEST =  
      
 
      
       PATTERN = <number>;  
      
 
      
       FORCE “PI” “primary_input_values” <time>;  
      
 
      
       APPLY “scan_group_load_name” <time> =  
      
 
      
       CHAIN “scan_chain_name1” = “values....”;  
      
 
      
       CHAIN “scan_chain_name2” = “values....”;  
      
 
      
       ....  
      
 
      
       ....  
      
 
      
       END;  
      
 
      
       FORCE “PI” “primary_input_values” <time>;  
      
 
      
       MEASURE “PO” “primary_output_values” <time>;  
      
 
      
       PULSE “capture_clock_name1” <time>;  
      
 
      
       PULSE “capture_clock_name2” <time>;  
      
 
      
       APPLY “scan_group_unload_name” <time> =  
      
 
      
       CHAIN “scan_chain_name1” = “values....”;  
      
 
      
       CHAIN “scan_chain_name2” = “values....”;  
      
 
      
       ....  
      
 
      
       ....  
      
 
      
       END;  
      
 
      
       ....  
      
 
      
       ....  
      
 
      
       ....  
      
 
      
       END;  
      
 
       
       pattern的编号表示加载扫描链、放置和测量值、脉冲任何捕获时钟以及卸载扫描链的pattern编号。pattern编号从零开始,必须以零开始。如果使用transition fault,将在每个测试pattern的开始处应用额外的force陈述。扫描组加载和卸载名称以及扫描链名称将用双引号括起来。pattern的所有时间值不得低于该pattern中的先前时间值。加载和卸载扫描链的值将用双引号括起来。
 
       主要输入值将与设置部分中定义的主要输入一一对应。主输出值也将与设置部分中定义的主输出一一对应。如果setup_Data部分中有一个test_setup过程,则应用测试设置过程的第一个事件必须在应用第一个pattern之前发生:
 
       
        APPLY “test_setup” <value> <time>;  
       
 
       
 
       
        如果有任何写入control lines,则在主输入端施加值后,将对其进行脉冲处理:
       
 
        
        
         PULSE “write_control_input_name” <time>;  
        
 
         
         如果有捕获时钟,则在主输出端测量值后,它们将在相同的选定时间脉冲。可以使用任何扫描时钟将数据捕获到被观察到的扫描单元中,扫描pattern将参考适当的测试程序,以定义如何控制和观察扫描单元。如果要将主机的内容放入其扫描单元的输出中,可以通过应用卸载操作进行观察,则必须在卸载扫描链之前应用master_observe程序:
 
         
          APPLY “scan_group_master_observe_name” <value> <time>;  
         
 
         
          如果要将shadow的内容放入扫描单元的输出中,通过应用卸载操作可以观察到shadow,则必须在卸载扫描链之前应用shadow_observe程序:
         
 
          
          
           APPLY “scan_group_shadow_observe_name” <value> <time>;  
          
 
          
           如果扫描单元的主单元和slave单元将处于不同的检测值,则必须在加载扫描链后应用skew_load procedure : 
          
 
           
           
            APPLY “scan_group_skew_load_name” <value> <time>;  
           
 
           
            每个扫描pattern都具有独立于所有其他扫描pattern的特性。正常pattern模式将包含以下事件: 
           
 
            
            
             1. Load values into the scan chains.  
            
 
            
             2. Force values on all non-clock primary inputs.  
            
 
            
             3. Measure all primary outputs not connected to scan clocks.  
            
 
            
             4. Exercise a capture clock. (optional)  
            
 
            
             5. Apply observe procedure (if necessary)  
            
 
            
             6. Unload values from scan chains. 
            
 
            
             卸载最后一个pattern时,工具将再次加载最后一个pattern,以完全移动最后一个捕获周期的内容,从而使输出与计算值匹配。尽管加载和卸载操作是单独给出的,但强烈建议在测试仪上应用pattern时,加载与卸载前一pattern同时进行。 
            
 
             
             为了观察连接到时钟的主要输出,将有一种额外的扫描pattern,其中包含以下事件: 
 
             1.将值加载到扫描链中。 
 
             2.强制所有主要输入值,包括时钟。 
 
             3.测量连接到扫描时钟的所有主输出。 
 
             
 
             
              Scan_Cell   
             
 
             
              scan_cell部分包含电路中使用的扫描单元的定义。 
              扫描单元数据的格式如下: 
             
 
              
              
               SCAN_CELLS =  
              
 
              
               SCAN_GROUP “group_name1” =  
              
 
              
               SCAN-CHAIN “chain_name1” =  
              
 
              
               SCAN_CELL = <cellid> <type> <sciinv> <scoinv>  
              
 
              
               <relsciinv> <relscoinv> <instance_name>  
              
 
              
               <model_name> <input_pin> <output_pin>;  
              
 
              
               ....  
              
 
              
               END;  
              
 
              
               SCAN_CHAIN “chain_name2” =  
              
 
              
               SCAN_CELL = <cellid> <type> <sciinv> <scoinv>  
              
 
              
               <relsciinv> <relscoinv> <instance_name>  
              
 
              
               <model_name> <input_pin> <output_pin>;  
              
 
              
               ....  
              
 
              
               END;  
              
 
              
               ....  
              
 
              
               END;  
              
 
              
               ....  
              
 
              
               END;  
              
 
               
               扫描单元存储元件的element如下: 
 
               •cellid-标识扫描链中扫描单元位置的数字。数字0表示最接近扫描输出引脚的扫描单元。 
 
               •type-扫描存储元件的类型。类型可以是MASTER、SLAVE、SHADOW、OBS_HADOW、COPY或EXTRA。 
 
               •sciinv-扫描单元库输入引脚相对于扫描链输入引脚的反转。该值可以是T(反转)或F(无反转)。 
 
               •scoinv-扫描单元库输出引脚相对于扫描链输出引脚的反转。该值可以是T(反转)或F(无反转)。 
 
               •relsciinv—存储元件相对于扫描单元库输入引脚的反转。值可以是T(反转)或F(无反转) 
 
               •relscoinv—存储元件相对于扫描单元库输出引脚的反转。该值可以是T(反转)或F(无反转)。 
 
               •instance_name—扫描单元中内存元素的顶层边界instance名称。 
 
               •model_name—扫描单元中内存元素的内部实例路径名(if used - blank otherwise)。 
 
               •input_pin-扫描单元的库输入引脚(if used - blank otherwise)。 
 
               •output_pin-扫描单元的库输出引脚(if used - blank otherwise) 
 
               
 
               
                Example Circuit   
               
 
               
                Figure 12-1 
                 illustrates the scan cell elements in a typical scan circuit 
               
 
                
               
                BIST Pattern File Format   
               
 
               
                上一节中描述的所有测试pattern文件格式也直接适用于BIST模式。然而,一组额外的BIST特定格式被添加到ASCII模式文件格式中。 
                BIST特定格式在本节中描述 
               
 
                
                
                 BIST Pattern Setup_Data   
                
 
                
                 BIST的setup_data部分包含定义BIST pattern特定地配置。本小节包括BIST pattern中 
                 signature register 
                 (prpg_register和misr_register)的文件版本标识符和定义。 
                 BIST特定语句用于标识以下配置是特定地 
                 BIST pattern 
                 。BIST特定语句的格式如下: 
                
 
                
                 declare bist pattern specific configuration =  
                
 
                
                 version标签用于指示BISTpattern version。version标记的格式如下:
                
 
                 
                
               
             
              BIST_ASCII_PATTERN_FILE_SUBVERSION  
             
 
             
 
              
              
               Here is an example of a BIST pattern-specific statement combined with a version tag statement:  
              
 
              
               declare bist pattern specific configuration =  
              
 
              
               BIST_ASCII_PATTERN_FILE_SUBVERSION = 1;  
              
 
              
               pattern_internal_view开关,指示BIST模式内部视图是否被写入pattern文件;其可能值为“ON”或“OFF”。如果开关设置为on,如以下示例所示,BISTpattern将包含在pattern文件中。关于pattern格式类型的信息: 
              
 
              
               pattern_internal_view = “on”  
              
 
               
              
             
           
            prpg_register和misr_register标识符定义BIST pattern中的signature寄存器,如prpg和misr。signature寄存器语句使用以下格式:
           
 
            
            
             gnature_register <name of signature register> =  
            
 
            
             length = <length of the register>;  
            
 
            
             type = <type of the register>;  
            
 
            
             init_value = <initial state of the register>;  
            
 
            
             end;  
            
 
            
             Here are some examples of signature register statements:  
            
 
            
             prpg_register “decomp1” =  
            
 
            
             length = 22;  
            
 
            
             type = PRPG;  
            
 
            
             init_value = “0000000000000000000000”;  
            
 
            
             end;  
            
 
            
             prpg_register “decomp2” =  
            
 
            
             length = 12;  
            
 
            
             type = PRPG;  
            
 
            
             init_value = “000000000000”;  
            
 
            
             end;  
            
 
            
             prpg_register “prpg1” =  
            
 
            
             length = 16;  
            
 
            
             type = PRPG;  
            
 
            
             init_value = “0000000000000000”;  
            
 
            
             end;  
            
 
            
             prpg_register “prpg2” =  
            
 
            
             length = 16;  
            
 
            
             type = PRPG;  
            
 
            
             init_value = “0000000000000000”;  
            
 
            
             end;  
            
 
            
             misr_register “misr1” =  
            
 
            
             length = 32;  
            
 
            
             type = MISR;  
            
 
            
             init_value = “11111111111111111111111111111111”;  
            
 
            
             end;  
            
 
            
             misr_register “misr2” =  
            
 
            
             length = 24;  
            
 
            
             type = MISR;  
            
 
            
             init_value = “111111111111111111111111”;  
            
 
            
             end;  
            
 
             
             
              Scan_Test for BIST   
             
 
             
              每个BISTpattern包括一个lfsm_snapshot语句。在pattern语句中,关键字pre_load、pre_unload或post_unload,后跟一个寄存器名,以指示何时获取寄存器的快照。 
             
 
              
              
               The keywords are applied as follows:  
              
 
              
               •  
               pre_load  
                — Used for PRPG type registers.  
              
 
              
               •  
               pre_unload  
                and  
               post_unload  
                — Used for MISR type registers 
              
 
               
               快照语句的组成使得每个BISTpattern的模拟独立于所有其他pattern: 
 
               •给定PRPG寄存器的pre_load值,可以计算每个BISTpattern的加载数据。 
 
               •给定MISR寄存器的预卸载值,可以计算并验证卸载后的MISR寄存器。 
 
               
 
               
                pattern = 0;  
               
 
               
                lfsm_snapshot =  
               
 
               
                pre_load “decomp1” = “0000000000000000000000”;  
               
 
               
                pre_load “decomp2” = “000000000000”;  
               
 
               
                pre_load “prpg1” = “1111111111111111”;  
               
 
               
                pre_load “prpg2” = “1111111111111111”;  
               
 
               
                pre_unload “misr1” = “11111111111111111111111111111111”;  
               
 
               
                pre_unload “misr2” = “111111111111111111111111”;  
               
 
               
                post_unload “misr1” = “11111111110001111110111111101111”;  
               
 
               
                post_unload “misr2” = “111111110000000011111111”;  
               
 
               
                end;  
               
 
               
                apply “grp1_load” 0 =  
               
 
               
                ...  
               
 
               
                end;  
               
 
               
                force “PI” “....” 1;  
               
 
               
                measure “PO” “....” 2;  
               
 
               
                apply “grp1_unload” 3 =  
               
 
               
                ...  
               
 
               
                end;