在DFT(面向可测试性设计)中: 信号 "dft_glb_gt_se"、"dft_syn_gt_se" 、"dftcgen" 在设计的不同阶段和测试环境中被用来控制集成时钟门(ICG)的扫描使能(SE)端,从而管理扫描路径的开闭。 通过控制这些时钟门,设计可以在不影响正常功能的情况下,进入适合进行ATPG(自动测试模式生成)或MBIST(内建自测试内存)的测试模式。 "dft_glb_gt_se"通常是在RTL(寄存器传输级)阶段前端设计代码中手动实例化的ICG的SE端的控制使能信号。 "dft_syn_gt_se"通常是在综合阶段,由综合EDA工具插入的ICG的SE端的控制使能信号。 "dftcgen"是ARM代码中的一个常用信号,对实例化的ICG的SE端进行了集成处理,以确保在ATPG模式下的时钟可控。 根据模式的不同,这些信号在不同的场景下操作: 在MBIST模式下,可能需要将 "dft_glb_gt_se" 配置为1,而 "dft_syn_gt_se" 配置为0,"dftcgen" 根据具体需求进行配置。 例如,sharebus mbist 的情况下,一般不应将"dftcgen"配置为1,否则可能会引入错误的读写latency行为。非sharebus的dftcgen的值取决于集成时钟路径的设计,核心是保证到mem上的时钟通路。 在ATPG模式下,需要在移位时将dft_syn_gt_se ,dftcgen,dft_glb_gt_se和其他与DFT测试区域相关的时钟ICG设置为1,以确保扫描路径的正常运行。 简而言之,在ATPG过程中,我们希望在移位过程中时钟可控,在捕获过程中,为了覆盖率和测试成本,又希望ICG的SE端在捕获时能为0也能为1。 如何实现?? 要实现这一点,我们首先可以添加一个控制TPI: TPI可以以各种方式实现。工具默认提供的TPI样式如图1所示。 有AND控制和OR控制的测试点,可以使用这些控制测试点的使能来在需要时关闭测试点。 附上观察型测试点(如图2所示)来提高特定节点的可观察性。 那么问题来了? 单独加入控制测试点能否满足我们上面的要求? 在ATPG过程中,我们希望在移位过程中时钟可控,在捕获过程中,为了覆盖率和测试成本,又希望ICG的SE端在捕获时能为0也能为1。 答案考虑一下就有了:除了测试点之外需要和dft_scan_en的信号做一个或操作。 在此基础上还希望能够用tdr控制,允许配置为一个固定模式。 这里给一个verilog代码实现,不画图了。可以自己根据理解用visio画出很好看的图形,以增强tpi的结构理解。 提出一个问题: 对dft_syn_gt_se这个信号,如下的代码中tpi与scan_en的或放在最前面,是否合适呢? module tpi( input wire scan_mode, input wire dft_scan_en, input wire tdr_in, input wire tdr_sel, input wire func_in, output reg dft_syn_gt_se ); //定义寄存器dft_syn_gt_se_tpi_reg reg dft_syn_gt_se_tpi_reg; // 定义或门 wire dft_syn_gt_se_scan_en_or; assign dft_syn_gt_se_scan_en_or = dft_scan_en | dft_syn_gt_se_tpi_reg; // 定义mux dft_syn_gt_se_mux_choose_tpi wire dft_syn_gt_se_mux_choose_tpi; assign dft_syn_gt_se_mux_choose_tpi = (scan_mode) ? dft_syn_gt_se_scan_en_or : func_in; // 定义mux dft_syn_gt_se_mux_choose_tdr always @(tdr_sel or dft_syn_gt_se_mux_choose_tpi) if (tdr_sel) dft_syn_gt_se = tdr_in; else dft_syn_gt_se = dft_syn_gt_se_mux_choose_tpi; endmodule |