Mentor-dft 学习笔记 day47-On-Chip Clock Controller Design Description

news2024/11/17 19:40:30
On-Chip Clock Controller Design Description
 有三种类型的片上控制器设计: standard, parent, and child。可以根据设计要求选择它们。使用OCC时,必须考虑本节中讨论的设计元素。
The Standard OCC
标准OCC为快速捕获提供快速时钟,为换档和慢速捕获提供慢速时钟。扫描可编程移位寄存器允许ATPG根据需要抑制或脉冲时钟周期。标准OCC的一种用法是用于pattern重定目标的Intest模式。 标准OCC执行所有三个OCC功能:时钟选择、时钟斩波控制和时钟门控。图17-2显示了标准OCC实施。 标准OCC是推荐用于分层核心的OCC。

 

Design Placement
OCC的插入应确保OCC的快速时钟输入由功能时钟源(通常为PLL)驱动。理想情况下,OCC放置在时钟源(PLL)附近,但应放置在内核内部,以允许pattern重定流所需的本地时钟控制。OCC使用顶级慢速时钟进行换档和慢速捕获,并使用测试pattern信号确定是否向设计提供了测试或功能时钟。

 

没有理由在功能模式的OCC之后添加时钟多路复用器,因为fast_clock在测试模式信号被取消断言时传播。此外,在功能模式和测试模式下具有快速时钟的公共路径简化了时钟树合成和时序关闭。时钟控制设计用于在功能和测试模式下提供时钟。在功能模式下,快速时钟传递给设计。在测试模式下,快速时钟用于全速捕获,而顶级慢速时钟将用于移位和慢速捕获。提供给PLL的参考时钟是自由运行时钟,通常总是脉冲。建议不要在布局期间flatten时钟控制块,以便于定义时钟门控逻辑及其操作的自动化。

Standard OCC Schematic
芯片上时钟控制电路的示意图如图所示。 所示示意图表示在没有IJTAG接口的情况下生成的OCC。

 

Slow Clock Driving Sequential Elements
用于移位和慢速捕获的顶级慢速时钟不能直接控制任何顺序元素,因为慢速时钟在快速捕获模式期间充当捕获的触发器。 在快速捕获期间,工具不会模拟必要的慢速时钟脉冲,这可能导致模拟失配。
Scan Enable Synchronization
为了使顶级扫描使能信号与快速时钟(PLL输出)同步,使用双触发同步单元并由快速时钟计时。这很重要,因为扫描使能被用作将时钟选通到移位寄存器的触发信号。同步单元的输出产生扫描使能信号,该信号与快速时钟同步。

此外,在同步单元的输入侧使用触发器,并由慢时钟的后沿计时。由于scan enable通常扇出到整个电路,并且可能在快时钟之后到达,所以慢时钟上的触发器确保scan enable不会被快时钟同步,直到慢时钟被脉冲化,从而降低竞争条件的风险。为了确保正确的DRC分析和仿真,由同步逻辑驱动的时钟门控单元的输出被定义为捕获内部时钟中的脉冲。当使用TCD流生成pattern时,工具自动将内部时钟定义为捕获时钟中的脉冲。这确保了在load_unload期间正确模拟逻辑,并避免了不必要的DRC冲突。图17-4中所示的同步单元(sync_cell)有一个异步复位端口,如果该端口处于高活动状态,则由scan_en驱动。如果同步单元的复位端口处于低激活状态,则由~scan_en驱动。在RTL描述中,同步单元被描述为一个单独的模块,以便它可以被来自适当库的特定于技术的同步单元替换。

Slow Clock Pulses in Capture
考虑到慢时钟在被快时钟同步之前用于捕获scan enable,它不能直接驱动可能影响扫描操作的任何顺序元件。这是因为假设慢时钟和快时钟不同步,因此在用于快速捕获的external_capture过程中定义了捕获开始时慢时钟上的脉冲:
procedure external_capture ext_fast_cap_proc =
timeplate tmp1 ;
cycle =
force_pi ;
pulse slow_clock;
end;
end;
该工具在计算pattern中的预期值时,不会模拟external_capture过程中定义的时钟脉冲。在ATPG之后,将本程序中定义的时钟脉冲添加到创建的图案中,以确保在快速捕获模式下正确操作。由于时钟门控逻辑的输出被定义为捕获内部时钟中的脉冲,因此该工具不需要模拟首先捕获扫描使能的寄存器上的时钟脉冲。然而,如果慢时钟控制任何其他时序元件,则可能导致模拟失配。
Handling Slow Scan Enable Transitions
根据慢时钟和快时钟的频率的关系,可能需要在快捕获脉冲之前添加更多延迟,以便允许扫描有足够的时间稳定到0。类似地,可能需要在捕获之后和下一个加载/卸载操作之前延迟扫描使能从0到1的转换。这需要将额外的周期添加到external_capture过程中,如下例所示:
procedure external_capture ext_fast_cap_proc =
timeplate tmp1 ;
cycle =
force_pi ;
end;
cycle =
end;
cycle =
end;
cycle =
pulse slow_clock;
end;
cycle =
end;
cycle =
end;
end

在脉冲slow_clock的周期之前添加没有slow_clock脉冲的external_capture周期,延迟快速时钟脉冲,以给scan enable足够的时间过渡到0。slow_clock上的脉冲后的空周期,延迟加载/卸载操作,以使scan enable有足够的时间过渡到1。

Fast Clock With Slower Frequency Than Slow Clock
如果快时钟的频率比慢时钟的频率慢,则需要使用两个不同的timeplate进行移位和加载卸载。大多数情况下,您都可以使用相同的timeplate。

在这种情况下,程序需要使用(较慢)快速时钟周期的额外周期,并且必须在dofile中指定额外的后换档周期,以确保并联测试台的正确操作。有关此设置的示例,请参阅以下文件。采样dofile的变量设置仅为示例值;这些设置是特定于设计的,并包含在此处以供参考。该图说明了如何使用这些变量:

Sample Dofile
## <Read in and set up the design>
########## variable settings ############
set test_clock_period 40
set scan_en_mcp 3
set slowest_fast_clock_period 45
set measure_po_percent 45
set test_clock_rise_percent 50
set_test_clock_pulse_width_percent 25
import_scan_mode int_mode -fast_capture_mode on
set_current_mode int_mode_fast
source ../data/ import_procedures.tcl
set_fault_type transition
set_external_capture_options -pll_cycles $pll_cycles ltest_capture_cycle
set_atpg_limit -pattern_count 128
create_patterns
write_tsdb_data -replace
write_patterns corea_[get_current_mode]_serial.v -verilog -serial \
-replace -end 2 -parameter_list [list SIM_TOP_NAME TB]
write_patterns -corea_[get_current_mode]_parallel.v -verilog -replace \
-parameter_list [list SIM_TOP_NAME TB SIM_POST_SHIFT $SIM_POST_SHIFT ]

 

The import_procedures.tcl file computes the timing, pll_cycles, and SIM_POST_SHIFT:
import_procedures.tcl
set test_clock_period_slow [expr $scan_en_mcp * $test_clock_period]
set test_clock_period_shift_cycle $test_clock_period
set measure_po_shift_cycle [expr \
{round(0.01*$measure_po_percent*$test_clock_period)}]
set test_clock_rise_shift_cycle [expr \
{round(0.01*$test_clock_rise_percent*$test_clock_period)}]
set test_clock_width_shift_cycle [expr \
{round(0.01*$test_clock_pulse_width_percent*$test_clock_period)}]
set test_clock_period_capture_cycle $test_clock_period_slow
set measure_po_capture_cycle [expr \
{$test_clock_period_capture_cycle - ($test_clock_period_shift_cycle- \
$measure_po_shift_cycle)}]
set test_clock_rise_capture_cycle [expr \
{$test_clock_period_capture_cycle - ($test_clock_period_shift_cycle- \
$test_clock_rise_shift_cycle)}]
set test_clock_width_capture_cycle $test_clock_width_shift_cycle
if {$scan_en_mcp <= 2} {
set test_clock_period_pre_shift_cycle $test_clock_period_shift_cycle
set measure_po_pre_shift_cycle $measure_po_shift_cycle
set test_clock_rise_pre_shift_cycle $test_clock_rise_shift_cycle
} else {
set test_clock_period_pre_shift_cycle [expr \
{$test_clock_period_capture_cycle - \
$test_clock_period_shift_cycle}]
set measure_po_pre_shift_cycle [expr \
{$test_clock_period_pre_shift_cycle - \
($test_clock_period_shift_cycle-$measure_po_shift_cycle)}]
set test_clock_rise_pre_shift_cycle [expr \
{$test_clock_period_pre_shift_cycle - \
($test_clock_period_shift_cycle-$test_clock_rise_shift_cycle)}]
}
set test_clock_width_pre_shift_cycle $test_clock_width_shift_cycle
set_procfile_name ../data/ procedures.def
set capture_width 4
set pll_cycles 1
if {![info exists slowest_fast_clock_period]} {
display_message -warning "The variable 'slowest_fast_clock_period' is \
not defined. Assuming the fast_clock to slow_clock period \nratio \
is such that 2 fast_clock cycles fits inside one slow_clock cycle. \
If you are not sure, \nspecify the period of the slowest \
fast_clock as it exists at the input of each OCCs."
incr pll_cycles [expr {int(ceil((2+$capture_width) * 0.5))}]
set SIM_POST_SHIFT 1
} else {
incr pll_cycles [expr {int(ceil((2.0+$capture_width) * \
$slowest_fast_clock_period/$test_clock_period_slow))}]
set SIM_POST_SHIFT [expr {int(ceil(2.0*$slowest_fast_clock_period/ \
$test_clock_period) - 1)}]
}
puts "pll_cycles = $pll_cycles"
puts "SIM_POST_SHIFT = $SIM_POST_SHIFT"
This import file uses a procedures DEF file with three different timeplates:
procedures.def
timeplate ltest_shift_cycle =
force_pi 0 ;
measure_po $measure_po_shift_cycle ;
pulse_clock $test_clock_rise_shift_cycle $test_clock_width_shift_cycle ;
period $test_clock_period_shift_cycle ;
end;
timeplate ltest_capture_cycle =
force_pi 0 ;
measure_po $measure_po_capture_cycle ;
pulse_clock $test_clock_rise_capture_cycle \
$test_clock_width_capture_cycle ;
period $test_clock_period_capture_cycle ;
end;
timeplate ltest_pre_shift_cycle =
force_pi 0 ;
measure_po $measure_po_pre_shift_cycle ;
pulse_clock $test_clock_rise_pre_shift_cycle \
$test_clock_width_pre_shift_cycle ;
period $test_clock_period_pre_shift_cycle ;
end;
set default_timeplate ltest_capture_cycle ;
procedure shift =
scan_group grp1 ;
timeplate ltest_shift_cycle ;
cycle =
force_sci ;
measure_sco;
end;
end;
procedure load_unload =
scan_group grp1 ;
timeplate ltest_shift_cycle;
cycle =
timeplate ltest_pre_shift_cycle ;
end;
apply shift 2;
end;
下图显示了此设置的波形图。这些数字从上到下包括以下信号:
shift_capture_clock
edt_clock
edt_update
scan_enable

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java字节流的使用:字节输入/输出流、文件输入/输出流、字节数组输入/输出流

InputStream 是 Java 所有字节输入流类的父类&#xff0c;OutputStream 是 Java 所有字节输出流类的父类&#xff0c;它们都是一个抽象类&#xff0c;因此继承它们的子类要重新定义父类中的抽象方法。 这里首先介绍上述两个父类提供的常用方法&#xff0c;然后介绍如何使用它们…

springboot整合shiro + jwt + redis实现权限认证(上手即用)

目录前言项目结构依赖导入建数据库表建表语句使用插件生成增删改查添加MyRealm添加ShiroConfig添加JwtFilterJWT相关得类JwtTokenJwtAudienceJwtHelper添加BeanFactory只贴出主要得类&#xff0c;具体得可以看我的gitee&#xff0c;接口都自测过的。前言 最近项目中涉及到使用…

NEST.JS使用心得

最近部门分享了nest.js技术&#xff0c;旨在前端人员通过项目积累将可重复使用的数据或者自己需要的数据通过nest设计出接口方便快速开发&#xff0c;不需要等待后端开发人员的数据。学习了两天发现nest很有意思&#xff0c;所以来分享下最近两天的学习心得。 nest中文文档&am…

linux下使用命令TC进行网络限流 —— 筑梦之路

Linux 下的流量控制原理 通过对包的排队&#xff0c;我们可以控制数据包的发送方式。这种控制&#xff0c;称之为数据整形&#xff0c;shape the data&#xff0c;包括对数据的以下操作: 增加延时 丢包 重新排列 重复、损坏 速率控制 在 qdisc-class-filter 结构下&#x…

ADI Blackfin DSP处理器-BF533的开发详解64:电子相册的设计(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 代码实现功能 代码实现了将 SD 卡根目录下的所有文件进行文件列表&#xff0c;然后将 480*272 尺寸的 JPEG 文件进行 JPEG 解码&#xff0c;将解…

校园跳蚤市场平台/校园二手交易系统

摘 要 本文论述了校园跳蚤市场平台的设计和实现&#xff0c;该网站从实际运用的角度出发&#xff0c;运用了计算机网站设计、数据库等相关知识&#xff0c;网络和Mysql数据库设计来实现的&#xff0c;网站主要包括学生注册、学生登录、浏览商品、搜索商品、查看商品并进行购买…

Blender——“苹果”建模

效果图 1.调出点线面面板&#xff0c;衰减编辑 1.1打开blender&#xff0c;点击常规&#xff0c;按A全选物体&#xff08;摄像头、光源、正方体&#xff09;&#xff0c;按delete删除。 1.2 在3D视图中添加一个经纬球。点击添加&#xff0c;选择网格—>经纬球。 1.3 点击下…

前端JS也可以连点成线(Vue中运用 AntVG6)

前言 什么是 G6&#xff1f;G6 是一个图可视化引擎。它提供了图的绘制、布局、分析、交互、动画等图可视化的基础能力。旨在让关系变得透明&#xff0c;简单。让用户获得关系数据的 Insight。其实说白了就是我们前端中的绘图工具&#xff1b;基于 G6&#xff0c;用户可以快速搭…

Linux基础知识-文件目录结构及基本属性

1、前言 上一篇我们讲到了Linux 文件类型7种类型&#xff0c;本篇我们说说Linux文件目录结构。 2、Linux 目录树 所有可操作的计算机资源都存在于目录树这个结构中&#xff0c;对计算资源的访问&#xff0c;可以看做是对这棵目录树的访问。Linux 的目录结构如下&#xff1a;…

常见日志框架使用及日志打印规范设计

文章目录一、slf4j 简介二、常用日志框架1&#xff09;log4jpom 依赖log4j.properties 文件配置测试参考2&#xff09;logbackpom 依赖logback.xml 配置测试参考3&#xff09; java.util.logging4&#xff09;commons loggingpom 依赖配置测试参考5&#xff09;slf4j-simplepom…

MFC UI控件相关

文章目录UI控件相关CDialog::OnInitDialog() 对话框初始化手动添加UpdateData() 刷新窗口数据DoDataExchange()数据与控件动态绑定afx_msg: 声明一个消息响应函数void AFXAPI DDX_Control( CDataExchange* pDX, int nIDC, CWnd& rControl );DDV_MaxChars()UI控件相关 CDia…

20天学会Rust第一天之Helloword

阿sir今天开始学习Rust了&#xff0c;至于为什么学习呢&#xff1f; 以后再说 我们都知道&#xff0c;程序设计 数据结构 算法。 因此&#xff0c;我们依次学习Rust中数据结构的定义&算法的实现&#xff0c;然后用它们实现一个简单的“hello world” 数据结构 Rust提供…

什么是IoC和AOP

IoC是什么&#xff1f; 控制反转&#xff1a;面向对象的设计的理念。上层建筑依赖下层建筑 理解&#xff1a;行李箱设计 轮子 --> 底盘 --> 箱体 --> 行李箱 如果改动轮子&#xff0c;则底盘、箱体、行李箱都需要进行调整。 依赖注入&#xff1a;将底层类作为参数…

Spring之底层架构核心概念-BeanFactory 与ApplicationContext

目录1.BeanFactory2.ApplicationContext3.关系4.总结1.BeanFactory BeanFactory是一个接口 public interface BeanFactory {xxx... }2.ApplicationContext ApplicationContext 也是一个接口&#xff0c;继承自ListableBeanFactory, HierarchicalBeanFactory public interfa…

非零基础自学Golang 第15章 Go命令行工具 15.2 代码获取(get) 15.3 格式化代码(fmt)

非零基础自学Golang 文章目录非零基础自学Golang第15章 Go命令行工具15.2 代码获取(get)15.3 格式化代码(fmt)第15章 Go命令行工具 15.2 代码获取(get) go get命令用于从远程仓库中下载安装远程代码包&#xff0c;这是我们常用且非常重要的指令。 我们在开发程序时往往需要引…

Gateway网关-网关作用介绍

为什么需要网关&#xff1f; 如果允许任何人访问微服务&#xff0c;查看我们的敏感业务&#xff0c;这样数据是不是不安全。如果是我们的工作人员并且有相应的查看权限&#xff0c;我们才提供访问权限。那谁来做这件事呢&#xff1f;就是我们的网关。 网关的功能作用 1&#xf…

鼎镁科技冲刺上交所:年营收18亿 拟募资13亿

雷递网 雷建平 12月21日鼎镁新材料科技股份有限公司&#xff08;简称&#xff1a;“鼎镁科技”&#xff09;日前递交招股书&#xff0c;准备在上交所主板上市。鼎镁科技计划募资12.86亿元。其中&#xff0c;8.84亿元用于轻量化新材料生产、研发建设项目&#xff0c;2.53亿元用于…

消息号F5155处理办法

消息号F5155&#xff08;没有公司代码XDJT中买卖双方的资金权限&#xff09;处理办法 OBA4先检查用户的FI容差组 OB57查看分配用户给容差组&#xff0c;确认是否书写正确的容差组。

《疫情下的编程岁月》序言导读目录

导读 《疫情下的编程岁月》是一部为初学者编写的编程指南&#xff0c;作者是一名 13 岁的编程学习者和优质技术博主。在这部指南中&#xff0c;作者分享了自己在过去 5 年里学习编程技术的经历&#xff0c;并提供了宝贵的建议和技巧&#xff0c;帮助初学者更好地了解编程学习的…