Mentor-dft 学习笔记 day51-State Stability Examples

news2025/3/2 1:06:40
State Stability Examples
以下为 包含状态稳定性报告的示例,显示了状态稳定性分析中的不同行为。 示例基于图B-1所示的设计。该设计具有以下三个时钟:
clk1 — The only scan clock
clk2 — Clocks a particular non-scan flip-flop
reset — Resets four non-scan flip-flops connected as a register
该设计有五个引脚(A、B、C、D和E),这些引脚在程序中使用,以具体显示状态稳定性分析。电路具有以下特性:

•引脚D具有C0引脚约束。没有其他受约束的接点。

•非扫描触发器ff00由clk1计时,并由引脚A驱动。触发器在test_setup中初始化,但在测试_setup后脉冲化时失去状态。

•非扫描触发器ff10由clk1计时,并由引脚D驱动。注意,由于引脚约束,该触发器被初始化并“卡住”(转换为TIE0)。

•非扫描触发器ff20由clk2计时并由引脚A驱动。

•非扫描触发器ff32是串行移位寄存器中的第四个触发器。寄存器中的第一个触发器是ff30,由引脚A驱动。触发器都由clk1计时,并由复位信号复位。ff32在test_setup中重置,通过第一次应用shift保持状态,但随后失去稳定性。

•一个扫描链包含三个扫描单元:sff1、sff2和sff3。

第一个(基本)示例中使用的计时器和程序如下所示:

timeplate gen_tp1 =
force_pi 0;
measure_po 10;
pulse clk1 20 10;
pulse clk2 20 10;
pulse reset 20 10;
period 40;
end;
procedure capture =
timeplate gen_tp1;
cycle =
force_pi;
measure_po;
pulse_capture_clock;
end;
end;
procedure shift =
scan_group grp1;
timeplate gen_tp1;
cycle =
force_sci;
measure_sco;
pulse clk1;
force C 0;
end;
end;
procedure test_setup =
scan_group grp1;
timeplate gen_tp1;
// First cycle, one PI event (force)
cycle =
force clk1 0;
force clk2 0;
force reset 0;
force A 0;
force B 0;
force C 0;
force D 0;
force E 0;
end;
// Second cycle, two PI events (pulse on, pulse off)
cycle =
pulse reset;
pulse clk2;
end;
// Third cycle, three PI events (force, pulse on, and pulse off)
cycle =
force A 1;
pulse clk1;
end;
end;
procedure load_unload =
scan_group grp1;
timeplate gen_tp1;
// First cycle, one PI event (force)
cycle =
force clk1 0;
force clk2 0;
force reset 0;
force scan_en 1;
force B 1;
force C 1;
end;
apply shift 3;
end;
Example 1 — Basic Example
在基本示例中,可以在设计中调用工具并发出以下命令
add_clocks 0 clk1 clk2 reset
add_scan_groups grp1 scan1.testproc
add_scan_chains c0 grp1 scan_in1 scan_out1
add_input_constraints D -c0
set_gate_report drc_pattern state_stability
set_system_mode analysis
report_gates A B C D E

此操作的结果是:

•在test_setup中显式强制引脚A到E。

•引脚A、B、C和E强制加载卸载。

•引脚D受到约束(但在load_unload中不强制),是捕获期间唯一具有显式值的引脚。

ff00中说明了一个典型的初始化问题。图B-2显示了test_setup过程中似乎初始化此触发器的相关电路和语句。

在这种情况下,您可能希望在初始化后输出始终为1,因为test_setup过程的第三个周期强制输入a和脉冲clk1为1。为了进行比较,以下是报告的state_stability数据以及为load_unload和shift报告的数据。特别注意Q输出: 

 

 从状态稳定性显示中可以看到,在test_setup之后,Q的输出设置为1。在load_unload的第一个应用程序中,它仍然是1,但在第一个shift中它变为X。将其与显示的“drc_pattern load_unload”和“drc_pattern shift”进行比较。

通过对ff00执行类似于ff10的操作,可以更好地实现稳定的初始化值,其中D输入连接到受约束的D引脚:

 另一个有趣的观察结果是ff32。该触发器位于4位移位寄存器的末尾,在测试设置期间,所有触发器都被重置,如图B-3所示。

 注意,在这种情况下,对于load_unload和shift的第一个应用程序,Q是稳定的,但是在最后一次shift(~之后)之后的稳定状态是X。(将此输出与示例9-将稳定性检查设置为Off和All_shift进行比较。)

 非扫描触发器ff20由不是移位时钟的clk2计时。如图B-4所示,该触发器也在test_setup期间初始化。

 Q输出在捕获过程中受到干扰,而不是在移位过程中,因为移位过程中未执行此元素:

 请注意,ff32和ff20的load_unload和shift数据几乎相同(除了时钟数据),但state_stability数据使您可以看到它们以非常不同的方式变得不稳定。

Example 2 — Multiple Cycles in Load_unload Prior to Shift
本示例与基本示例之间的主要区别在于,在load_unload过程中,applyshift语句之前有多个循环(本示例中的新语句以粗体突出显示)。
procedure load_unload =
scan_group grp1 ;
timeplate gen_tp1 ;
// First cycle, one PI event (force)
cycle =
force clk1 0 ;
force clk2 0 ;
force reset 0 ;
force scan_en 1 ;
force B 1;
force C 1;
force E 1;
end ;
// Second cycle, three PI events
(force, pulse on, pulse off)
cycle =
force E 0;
pulse clk2;
end ;
// Third cycle, two PI events
(pulse on, pulse off)
cycle =
pulse clk2;
end ;
apply shift 3;
end;
作为结果,在第二组状态稳定性数据中显示多个事件。注意现在有三个循环。以下gate报告摘录显示了六位数据,与事件总数相对应。第一个比特来自第一个周期(一个事件),接下来的三个比特来自第二个周期(三个事件)。最后两个比特来自具有两个事件的第三个周期。
// /E primary_input
// (ts)( ld )(shift)(cap)(stbl)
// E O ( 0)( 100000 )(000~0)(XXX)( X)
// /A primary_input
// (ts)( ld )(shift)(cap)(stbl)
// A O ( 1)( XXXXXX )(XXX~X)(XXX)( X)
// /clk2 primary_input
// (ts)( ld )(shift)(cap)(stbl)
// clk2 O ( 0)( 001010 )(000~0)(0X0)( 0)
// /ff20 dff
// (ts)( ld )(shift)(cap)(stbl)
// CLK I ( 0)( 001010 )(000~0)(0X0)( 0)
// D I ( 1)( XXXXXX )(XXX~X)(XXX)( X)
// Q O ( 0)( 00XXXX )(XXX~X)(XXX)( X)
// QB O ( 1)( 11XXXX )(XXX~X)(XXX)( X)
请注意,对于load_unload模拟,A是如何转到X的。这是因为它没有在load_unload过程中显式强制(或使用add_input_constrats命令约束)。
Example 3 — Drc_pattern Reporting for Pulse Generators
如果电路包含具有用户定义定时的脉冲发生器(PG),该工具将对PG的输出变化执行额外的模拟步骤。当上升沿事件发生在其输入端时,PG在一定延迟后输出1,工具将其模拟为附加事件。

在另一个延迟之后,PG的输出信号返回到0,这也被模拟为一个单独的事件。两个输出事件都添加到输入事件后面的一对括号([])内的报告中。假设前面示例的非扫描触发器ff20由PG计时,如图B-5所示。下图摘录显示了PG事件如何出现在gate报告中。

// /clk2 primary_input
// (ts)( ld )(shift)( cap )(stbl)
// clk2 O ( 0)(00 1 [11]0 1 [11]0)(000~0)(0X[X]0)( 0) /pg1/clk
// /pg1 pulse_gen
// (ts)( ld )(shift)( cap )(stbl)
// clk I ( 0)(00 1 [11]0 1 [11]0)(000~0)(0X[X]0)( 0) /clk2
// out O ( 0)(000[ 10 ]00[ 10 ]0)(000~0)(00[X]0)( 0) /ff20/CLK
// /ff20 dff
// (ts)( ld )(shift)( cap )(stbl)
// CLK I ( 0)(000[10]00[10]0)(000~0)(00[X]0)( 0) /pg1/out
// D I ( 1)(XXX[XX]XX[XX]X)(XXX~X)(XX[X]X)( X) /A
// Q O ( 0)(000[XX]XX[XX]X)(XXX~X)(XX[X]X)( X)
// QB O ( 1)(111[XX]XX[XX]X)(XXX~X)(XX[X]X)( X)
clk2上的上升沿事件启动pg1的两个输出脉冲(以粗体突出显示)。请注意,脉冲不会与引起它们的输入变化同时显示。这是与输入变化同时出现的输出变化的典型显示的例外,如ff20所示。还请注意,ff20的CLK输入处的活动时钟边沿比clk2的活动边沿晚一个事件,并且由于括号的原因,被视为PG信号。
Example 4 — Single Post Shift
此示例在load_unload过程中有多个循环。新增的是single post shift
procedure load_unload =
scan_group grp1 ;
timeplate gen_tp1 ;
// First cycle, one PI event (force)
cycle =
force clk1 0 ;
force clk2 0 ;
force reset 0 ;
force scan_en 1 ;
force B 1;
force C 1;
end ;
// Second cycle, three PI events (force, pulse on, pulse off)
cycle =
force E 0;
pulse clk2;
end;
apply shift 2;
apply shift 1;
end;
在这种情况下,状态稳定性数据在主移位和捕获周期之间有一个附加组(以粗体显示)。这对应于后移的第一次应用:
// /ff32 dffr
// (ts)( ld )(shift) (shift) (cap)(stbl)
// R I ( 0)(0000)(000~0) ( 000) (0X0)( 0) /reset
// CLK I ( 0)(0000)(010~0) (010 ) (0X0)( 0) /clk1
// D I ( 0)(0000)(000~X) ( XXX) (XXX)( X) /ff31b/Q
// Q O ( 0)(0000)(000~X) ( XXX) (XXX)( X)
// QB O ( 1)(1111)(111~X) ( XXX) (XXX)( X)
你可以看到ff32在第一次应用shift时非常稳定。如果在这种情况下使用set_stability_check All_shift命令,则输出略有不同:
set_stability_check all_shift
set_system_mode setup
set_system_mode analysis
report_gates ff32
// /ff32 dffr
// (ts)( ld )(shift) (shift) (cap)(stbl)
// R I ( 0)(0000)(000~0) ( 000) (0X0)( 0) /reset
// CLK I ( 0)(0000)(010~0) (010 ) (0X0)( 0) /clk1
// D I ( 0)(0000)(000~1) ( 1XX) (XXX)( X) /ff31b/Q
// Q O ( 0)(0000)(000~0) ( 011) (1XX)( X)
// QB O ( 1)(1111)(111~1) ( 100) (0XX)( X)
请注意,ff32在整个主移位应用程序中现在是0,但在后移位期间设置为1。这是由于在test_setup中将A设置为1,并且该脉冲计时通过。

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

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

相关文章

燕山大学软件学院硕士研究生指导教师情况

燕山大学信息科学与工程学院(软件学院)简介 燕山大学信息科学与工程学院源于东北重型机械学院自动控制系,始建于 1960 年。1983 年,无线电技术、计算机及应用两个专业脱离自动控制系,于东北重型机械学院组建计算机 工…

Java中的.length与.length()

目录一. .length1. .length究竟有多长?2. 为什么会有.length呢?3. 二维数组的创建方法4. 数组是对象二. .length()1. .length()怎么用呢?2. char数组怎么转换为String3. String怎么转换为char数组三. 对比1. 为什么数组不像String&#xff0c…

【 uniapp - 黑马优购 | 商品详情 】详情页UI结构设计、商品导航区域实现

个人名片: 🐼作者简介:一名大二在校生,讨厌编程🎋 🐻‍❄️个人主页🥇:小新爱学习. 🐼个人WeChat:hmmwx53 🕊️系列专栏:&#x1f5bc…

SVN使用教程

SVN使用教程 常见图标状态 1、常规:绿色圈带白色对勾,主要是表示自己电脑上的文件或者文件夹与SVN服务器上对应的文件一致,在自己电脑没有进行任何修改。 2、修改:红色圈带白色感叹号,当你开始编辑一个文件&#xff…

C语言实现笛卡尔树

先来回顾一下笛卡尔树的性质:笛卡尔树是这样一个二叉树,它能保持原序列的先后顺序,并且具备堆的性质。这里假设序列中无相等元素。假设有一个序列{9,3,7,1,8,12,10&#…

GitLab入门

极狐GitLab gitlab实现⾃动部署的原理1、部署机上,需要安装插件 gitlab-runner2、部署机安装 gitlab-runner之后,向gitlab服务器注册3、gitlab服务器收到commit事件之后,通知部署机拉取代码,执⾏部署。4、部署机执⾏什么操作&…

pytorch和numpy的互相转换、数学计算公式

格式转换 使用torch.from_numpy() 将numpy的array转化为torch的张量。 结果如下: 而把张量转为numpy的数组:tensor2array torch_data.numpy() 计算绝对值 torch.abs() data [-1,-2,1,2] tensor torch.FloatTensor(data) …

HoloLens2 Visible-Light Tracking Camera (VLC) 内参获取

HoloLens2 Visible-Light Tracking Camera(VLC)内参获取问题描述求解方法总结参考链接问题描述 OpenCV中的许多功能都需要输入相机内参(Camera Intrinsics)。然而,HoloLens2并没有提供直接获取相机内参的API,what is provided is …

初阶指针(详细版)

目录 一、指针是什么 1、内存 2、内存的管理与使用 3、指针变量的使用 二、指针和指针类型 1、指针类型的意义 2、指针 或 - 整数 3、指针解引用 三、野指针 1、野指针成因 2、如何规避野指针 四、指针运算 1、指针-整数 2、指针 - 指针 指针 - 指针的运用…

11_6、Java集合之Map接口(包括HashMap在内的子接口)的使用

一、引入Map与Collection并列存在。用于保存具有映射关系的数据:key-value (双列集合框架),Map 中的 key 和 value 都可以是任何引用类型的数据 。Map 中的 key 用Set来存放,不允许重复,即同一个 Map 对象所对应 的类&…

Android Studio生成自己的so库

一、创建Native项目 1、新建 Native 项目 1)新建项目 选择最下面的 Native C 下一步即可 2)填写项目信息 3)选择C版本可以直接选择默认 2、下载并配置NDK及CMake 1)进入Studio 设置 SDK 设置界面 这里选择需要的 NDK 和 CMake…

c++之 OpenGL(1)-安装与概述

目录概述fedora下安装编写OpenGL应用程序测试hello,world概述 OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于…

Linux开发工具的使用(一)

文章目录Linux开发工具的使用(一)1. Linux软件包管理器yum1.1 查看软件1.2 下载软件1.3 卸载软件2.vim编辑器的介绍和使用2.1 vim的介绍2.2 vim的基本操作2.3 vim命令模式命令集(必须是命令模式下)2.3.1 移动光标2.3.2 删除文字2.3.3 复制文本内容2.3.4 …

C++ 不知树系列之二叉堆排序(递归和非递归实现上沉、下沉算法)

1. 前言 什么是二叉堆? 二叉堆是有序的 完全二叉树,在完全二叉树的基础上,二叉堆 提供了有序性特征: 二叉堆 的根结点上的值是整个堆中的最小值或最大值。 当根结点上的值是整个堆结构中的最小值时,此堆称为最小堆。…

xpath获取标签之间的文本内容

目前在学习xpath,需要取一个package信息,如图: 标题 "package"在span里面,比较方便取,用这个xpath就行: //div[idartikeltabelle]/table/tbody/tr[1]/td[2]/span[classinsertlabela and text()pa…

/mmcv/_ext.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN3c107Warning

报/mmcv/_ext.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN3c107Warning 就是mmcv或者mmcv-full编译有问题; 尝试了mmcv_full-1.7.1-cp36-cp36m-manylinux1_x86_64.whl pip 安装,都不是对应版本; 在安装mmcv或者mmcv-full都是无…

如何用PPT画出好看的科研图

前言 好看的科研图可以从前人的作品中进行借鉴,今天介绍2副精美的科研图以及他们在PPT中的绘制方法,话不多说,先摆上标准科研图 1. 黑色粗体边框以及淡填充颜色 黑色粗体边框和淡填充颜色真的让矩形一下子变得很有质感,在学习的…

VMware Fusion设置静态IP+端口转发(macOS)+内网穿透

很少有资料提到配置macOS上VMware Fusion的端口转发,因此我在这里进行了一些记录打开网络设置解锁并添加新的网络适配器只有新的网络适配器才允许配置转发,默认的不允许这样做。设置NAT转发虚拟机选择使用新创建的虚拟网络适配器Ubuntu配置静态IP/DNS服务…

linux xshell用户免密登录设置

最重要准备工作 ​编辑linux xshell用户免密登录设置步骤 1.在xshel进行密钥获取操作 2.创建mkdir ~/.ssh目录(检查有没有这个目录,没有自己添加) 3.在该目录创建authorized_keys目录。注意(目录权限为600) 4.将刚…

Android Studio arctic Fox(北极狐)导入openCV

Android studio arctic Fox在引入opencv的时候按照正常的File->New->Import Module操作时,出现无法点击“Next”和“Finish”的情况。如下图 所以我们使用另外的方法进行引入。 准备工作: 1,Android Studio 2,下载opencv…