sdf setup 违反值

合集下载

每日一题——精选推荐

每日一题——精选推荐

每⽇⼀题每⽇⼀题1.上图是⼀个block (不是chip),问1)有多少timing path2)place之后,假设setup和hold都正好为0ns,然后插⼊时钟树,树的完全平衡的,WC的时钟树insertiondelay是0.2ns,BC 的insertion delay是0.1ns,这时做STA,会看到timingviolation吗?有多少条violation,各违反了多少ns?他们是真的吗?如何解决?ANS: 1) 4条2)会 setup slack(reg2out): -0.2ns ; hold slack(in2reg) -0.1ns假的简单的回答是在input delay上加clock insertion delay的值,在output delay上减去clock insertion delay的值但是当有上千个input和output port时,做起来⽐较⿇烦。

那个简单的办法是:设⼀个虚拟时钟,与clk同频同相,把所有input,output delay都指定到那个虚拟时钟上,CTS后,只要在虚拟时钟上加上(BC 0.1 WC 0.2)的latency就好了2.Why are most interrupts/reset active low?为什么⼤多数的中断和reset是低电平有效?地⽐电源的优越,波动⼩:原因:1-地⽹络/地平⾯最⼤,数字/模拟地也近似于相接,reset接上去之后不会造成电压升。

2-各个电压域的VDD电平各不相同,⽽VSS电平均是03-另外,在板级调试芯⽚中,如果你想reset⼀个3.3V的芯⽚,你在pcb上是找个3.3V信号接上⽅便呢?还是找个地信号⽅便?3. 问题由szp9912收集提供,特此感谢!What is difference between HFN buffer tree and CTS?⼤扇出net的buffer tree和CTS在时序和做法上的区别ANS:buffer tree和clock tree的共同点是它们都是解决high fanout net的问题,只不过要求不同⽽已。

118.PT生成SDF

118.PT生成SDF

118.PT⽣成SDF
1. 想让pt吐出的sdf在进⾏setup和hold检查时⽤$setuphold函数;
⽽在recovery和remove检查时⽤$recrem函数
答:-include RECREM
2. neg value
答:⾸先,SETUP和HOLD这两个时序描述符不⽀持负值,如果限制值是负值的话,仿真⼯具会直接当成0处理
其次,SETUPHOLD这个时序描述符,是SETUP和HOLD两者的联合,并且⽀持负值,如果限制值是负值的话,当仿真⼯具使能了负值检查时,会进⾏负值的时序检查,否则也会当成0处理
然后,我们再讨论这个问题。

⼯具直接把负值当成0处理,是⼀种更悲观的处理⽅式,在时序不紧张的情况下,倒是影响不太⼤。

如果时序相对很紧张,就可能出现很多TIMING VIOLATIONS。

所以,到底关⼼不关⼼这个问题,就要看设计的时序情况了
最后,提出⼀种使⽤SETUPHOLD时序描述符,描述SDF⽂件的⽅法。

write_sdf -version 3.0 -include SETUPHOLD -context verilog xx.sdf
Note:vcs⼯具使能负值时序检查的参数是+neg_tchk
3. 检查
如果⽆法写出来RECOVERY和REMOVAL,再请察看library中是如何定义recovery和removal的时序曲线类型的,关键字:timing_type。

数字后端FAQ

数字后端FAQ

数字后端FAQ(2013-01-18 13:03:52)转载▼数字后端faq分类:工作札记在eetop论坛上看到这个东西,感觉很有用,就转过来了,非常感谢原文作者,下面面链接是论坛网址。

转载自:/thread-316442-1-1.html为了方便大家尽快找到需要的话题,经icfb版主建议,编辑这个数字后端的FAQ。

如果您是初学者,建议先搜索相关的资料,读读其他人的帖子,一些基本概念在那里都已经讨论过了。

如果您已经有2年以上的实战经验,下面这些雕虫小技就不太值得您去浪费时间了。

以下是分类2楼:时序约束,STA3楼:综合DC/RC4楼:APR (floorplan, place, CTS,route)5楼:验证(LEC,DRC,LVS等)6楼:DFT7楼:低功耗8楼:面试9楼:名词解释时序约束,STA(1) clockQ1.1 什么是同步时钟?时钟频率是整倍数,并且相互之间的相位是固定而且相差可预知的,才可以称得上是同步时钟。

其他的都算异步时钟。

比如,5M,10M是同步2M,3M一般算异步一个时钟,输出到另一个芯片中,转一圈后,以同样的频率返回到自己的芯片,因为无法确定时钟在另一个芯片里面的latency,所以输出的时钟与输入的时钟算异步一个时钟进到2个PLL,就算那2个PLL的输出频率相同,一般也算是异步时钟,除非你de-skewQ1.2 如何处理同步时钟?设计要求严格的公司,就算是同步时钟,数据在同步时钟间传送时,依然要用meta-stability FF,可以set_false_path如果放松要求,不用meta-stability FF,则同步时钟之间是real path,做CTS时,同步时钟要clock tree balance。

注意不同频率的同步时钟的最小时间间隔被用来检查setup如果上升下降沿混用的话,setup的时间间隔就只有半个时钟周期了Q1.3 如何处理异步时钟?很简单,set_false_path注意要from A to B,同时要from B to AQ1.4 如何定义时钟?create_clock 如果指定某个pin/port,就是实时钟,如果没有指定pin和port,就是虚拟时钟巧妙利用waveform选项可以做出不同波形的时钟被定义成时钟的net,在综合时,自动带有ideal network和dont_touch的属性。

fd_set参数过大

fd_set参数过大

fd_set参数过大
`fd_set`是用于文件描述符集合的宏,通常在处理I/O多路复用时使用,比如在`select()`或`poll()`函数中。

`fd_set`参数过大可能会导致一些问题。

首先,`fd_set`的第一个参数不能超过`FD_SETSIZE`。

在大多数系统上,
`FD_SETSIZE`被定义为1024,意味着集合中最多可以包含1024个文件描述符。

如果你尝试将超过这个数量的文件描述符添加到集合中,可能会导致未定义的行为。

其次,如果`fd_set`参数过大,可能会影响程序的性能。

因为每次调用
`select()`或`poll()`函数时,都需要遍历整个文件描述符集合,检查哪些文件描述符已经准备好进行读写操作。

如果集合中的文件描述符数量很大,那么遍历整个集合的时间就会增加,从而导致程序的性能下降。

因此,在设计使用`fd_set`的程序时,应该根据实际需要合理地选择集合的大小,避免参数过大导致的问题。

如果需要处理大量的文件描述符,可以考虑使用其他的方法,比如使用非阻塞I/O或者异步I/O等。

vcs仿真指南(第二版)

vcs仿真指南(第二版)

VCS仿真指南(第二版)Edit b y 阿憨ahan.mail@VCS-verilog compiled simulator是synopsys公司的产品.其仿真速度相当快,而且支持多种调用方式;使用的步骤和modelsim类似,都要先做编译,在调用仿真.Vcs包括两种调试界面:Text-based:Command Line Interface(CLI) 和 GUI-based(VirSim);仿真主要的两个步骤是编译,运行:>vcs design.v//编译verilog的源文件并且生成一个可执行文件simv>simv//运行simv一般情况下都存在vcs 做编译的时候的compile_time_options和运行时候的run_time_options,这些我们在下面再具体介绍.一.VCS的三种调试模式使用vcs存在三种调试模式:CLI调试模式,VirSim交互调试模式和VirSim后处理调试模式.下面举例说明:1. CLI调试模式CLI调试模式存在两种调用方法,一种是编译后马上执行,一种是把编译执行分开处理>vcs source.v +cli+3 –R –s或者>vcs source.v +cli+3>simv source.v –s其中+cli+[1 2 3 4]是指调试时候交互调试的能力.+cli+[<module_name>=]1|2|3|4Enable CLI debugging.1 enables you to see the values of nets and registers and deposit values to registers.2 also enables breakpoints on value changes of nets and registers.3 also enables you to force a value on nets.4 also enables you to force a value on a register.You can specify a module to enable CLI debugging only for instances of the module.-line 能够支持单步调试但是这些都是会增加运行时间的.这里不详细介绍CLI 命令具体可以参考usrerguide.注意我们也可以把CLI的命令写成一个script的文件在vcs编译时调用.>vcs source.v –R –s –include script_file或者在cli下调用cli>source script_file2. VirSim交互调试模式启动VirSim交互调试模式和调用CLI一样也是有两中方法.>vcs source.v –RI –line +vcsd +cfgfile+filename或者>vcs source.v –I –line +vcsd>vcs source.v -RIG +cfgfile+filename其中-RI 作用有两个:编译生成可以在VirSim中可执行的文件并且编译后马上启动Virsim; 要编译成可以在VirSim中可执行的文件必须在编译阶段加-I,在要生成vcd或vpd时这个参数一定要添加;-RIG通过一个已编译完成的默认的simv文件启动Virsim,在启动之前一定要通过vcs –RI或者-I对源文件做过编译.使用vcs编译源文件之后会发现目录下多了simv和/csrc等文件,其中simv是默认的可执行文件,可以在vcs做编译的时候 –o filename改变输出的名字,/csrc是存的增量编译的结果,/simv.daidir如果设置中使用到了PLI就会创建.具体如何使用VirSim做交互调试这里也不具体介绍,可以参考VirSim的userguide和vcs 安装下面的doc的tutorial.3. VirSim的后处理调试模式注意什么时候用后处理调试模式,什么时候使用交换模式那?在初步仿真的过程使用交互模式,若是调试一个成熟的设计或者很多人一起做调试这样子可以使用post-processing mode.其主要的方法是通过仿真运行dump数据在vcd或者vpd文件中,运行结束后通过vcd 或者vpd观察运行过程的情况,交互调试能力相对较差,但是通过记录的数据可以观察出其中异常的地方;也就是包括两个步骤Write VCD+ file,View result.>vcs source.v –line –R -PP +vcsd其中-R自动运行,并且生成vcd+文件(在testbench中添加系统命令dump vcd或者vpd)-PP编译的时候是faster VirSim post_processing,提高编译的速度+vcsd 打开Direct Kernel Interface(DKI),可以提高处理VCD+文件的能力>vcs –RPP source.v +vpdfile+vcdplus.vpd注意:VirSim只能处理VCD+ file.VCD文件可以被转换成VCD+格式的文件.VCD+和VCD有什么不一样那?更快,更小.VCD+系统任务可以在testbench中使用也可以在仿真的时候添加.(注意使用到这些系统函数时,在vcs编译的时候一定要添加-I或者-RI或者-PP.)$vcdpluson(level_number,module_instance,….|net_or reg,….)level_numbers指定记录的层次0- 记录整个指定module_instance的所有信号1- 记录指定module_instance顶层信号n- 记录从顶层开始到下面的n层例化模块的信号module_instance 指定例化名net_ or reg 指定特定的wire或者reg作为记录的对象,默认是所有信号.$vcdplusoff(module_instance,….|net_ or reg,…)其他系统函数可以参见VCS quick reference.二. 其他情况注意区别的两个方面:1. –R –I 不同于-RI-R –I是编译成VirSim的可执行文件而且马上运行仿真, -RI是编译成VirSim的可执行文件并且调用VirSim.2. –R –PP 不同于-RPP-R –PP是编译成VirSim的可执行文件并且在运行的时候加快输出VCD+文件-RPP是在存在VCD+的条件下调用VirSim进行post processing的调试.门级仿真需要反标SDF文件,可以在testbench中添加$sdf_annotate系统函数.并且在编译的时候注意要使用standcell的仿真库.三.如何加速仿真3.1 RTL上的加速仿真方法:+rad编译时的命令开关,尝试通过提高抽象层次和为快速的事件和周期仿真解析代码来优化设计,通常指Radiant Technology。

sdf解释

sdf解释

1 sdf文件的内容1.1 表头部分示例:(DELAYFILE(SDFVERSION "2.1")(DESIGN "sj_maf")(DATE "07/25/2005 16:24:43")(VENDOR "Altera")(PROGRAM "Quartus II")(VERSION "Version 4.2 Build 178 01/19/2005 Service Pack 1 SJ Full Version") (DIVIDER .)(VOLTAGE 4.75 : 4.75 : 4.75)(TEMPERATURE 85 : 85 : 85)(TIMESCALE 1 ps)解释:SDFVERSION:表示此SDF部分遵循哪一个版本的SDF标准所产生的,在1.0版本中SDFVERSION是一定必要的,其后所接的QSTRING(引号内的部分)可以省略。

2.1版以后的版本SDFVERSION和QSTRING都可以省略。

DESIGN:表示产生timing数据的设计名称。

DATE:表示产生SDF文件的时间。

PROGRAM:表示产生SDF文件的工具。

VERSION:表示产生SDF文件的工具的版本。

DIVIDER:表示此SDF文件中用来分隔层次式架构的分隔符,一般使用(/)或者(.),缺省是(.)。

VOLTAGE:表示此SDF中三种状态(best、normal、worst)下的电压值,在上例中仅提出了normal state,所以三种电压值皆相同。

PROCESS:表示此SDF文件中三种状态(best、normal、worst)数值所乘上的上例中仅提出了normal state,所以三种状态下的factor值皆相同。

TEMPERATURE:表示此SDF文件中三种状态(best、normal、worst多少。

VCS使用SDF文件进行后仿反标

VCS使用SDF文件进行后仿反标

VCS使⽤SDF⽂件进⾏后仿反标概述从概念上来说,数字验证包含两⽅⾯的内容,⼀个是验证功能,另⼀个是验证时序。

对应的仿真模型(不论是model,standard cell等)也不外乎这两个部分,功能部分由逻辑,udp元件或gate构成,时序部分则包括了时序反标和时序检查两⼩块。

平时我们所说的功能验证,也就是前仿真,实现了对功能进⾏验证的⽬的,时序被默认为理想情况,不包含延迟信息。

门级仿真,也称为后仿真,除了功能验证外,最主要就是⽤来检查时序是否满⾜,有没有时序违例的情形。

门级仿真根据⽹表不同,⼜可以分为综合后仿真,以及pnr后仿真。

前者是⽤综合后的⽹表进⾏仿真,这时由于hold没有修,所以会出现不少时序违例的情况,真正timing clean的⽹表是后端做完布局布线,修修补补完timing的⽹表,我们称为pnr⽹表。

进⾏pnr⽹表的后仿真时,我们需要告知仿真⼯具cell与cell之间的延迟,D端到Q端的延迟,这⾥,我们就要请出主⾓SDF⽂件,闪亮登场!什么是SDF⽂件?SDF(Standard delay file)⽂件是把布局布线过程中器件延时和线延时的信息保留下来,据此就可以在路径时序分析时将整条路径的时序计算出来,再判断时序约束条件就能知道是否满⾜时序要求了。

如何反标SDF⽂件?反标SDF⽂件有两种⽅法,⼀种作为elaboration的选项指定,另⼀种是在bench中调⽤系统函数$sdf_annotate来完成。

作为elaboration的选项-sdfmin|typ|max:instance_name:file.sdf如vcs-sdf min:top.i_test.:test.sdf使⽤系统函数$sdf_annotate$sdf_annotate (“sdf_file”[, module_instance] [,“sdf_configfile”][,“sdf_logfile”][,“mtm_spec”] [,“scale_factors”][,“scale_type”]);这⾥除了sdf_file必须给出外,其他参数可以使⽤默认值,如:$sdf_annotate(“test.sdf”);要说明下参数scale_type,sdf⽂件中时序信息都会由3个数字组成,分别对应是minimum,typical,maximum三种情形下的延迟(当然,有时候会只有minimum和maximum的情况,那么typical的延迟没有就省略)scale_type的可取值为:FROM_MINIMUX选择SDF⽂件中mininum timingFROM_TYPICAL选择SDF⽂件中typical timingFROM_MAXIMUM选择SDF⽂件中maximum timingFROM_MTM系统默认如何确认成功反标呢?反标完成后,可以从log中看到这样⼀句话:例⼦这样我们就反标完成了,接下来让我们通过后仿波形,验证下设计中延迟和sdf⽂件中延迟是否⼀致。

后仿----转载

后仿----转载

后仿----转载1.后仿是否必要随着芯⽚规模的增⼤,关于IC设计流程中的后仿是否必要,有多种声⾳。

认为不必要的理由是:布局布线后的⽹表,已经可以通过STA保证时序,后仿只不过是确认⼀遍电路的时序。

⽽且随着电路规模不断增⼤,仿真⼯具的仿真速度的提升仍不明显,后仿必然是⼀个很耗时的步骤,时间代价⼤⽽收益不明显。

认为有必要的理由是,从公司以往多个项⽬的经验来看,后仿中也发现了⼀些问题。

⽽对于有些设计,STA并不能完全覆盖所有的路径。

后仿的⼯作是对后端实现最后的check。

本⽂认为,以公司现阶段的研发⼒量,后仿还是必须的。

2.前后仿的区别前仿:RTL的仿真后仿:门级仿真。

⼜分为综合后仿真和布局布线后仿真a.关注点不同;前仿:关注RTL在功能上是否正确(符合设计)后仿:关注电路在各种⼯作条件下,插⼊了延时后,功能是否依然正确。

b.仿真对象不同;前仿:仿真的对象是RTL后仿:仿真的对象是门级⽹表+sdf⽂件(可能包括⼀些IP的sdf)综合后仿真⽤的是综合后的⽹表+PreSTA产⽣的sdf(⽆net延时,cell延时不准确,时钟树不准确)布局布线后仿真⽤的是PR后的⽹表+PostSTA产⽣的sdfc.外部激励与响应检查;所⽤的激励和响应检查应⼀致后仿可能让时钟漂移以模拟极端的情况3.后仿的各种组合情况如果考虑OSC漂移以及三种Corner,可以组合以下六种情况Fast OSC + Fast SDFSlow OSC + Fast SDFFast OSC + Typ SDFSlow OSC + Typ SDFFast OSC + Slow SDFSlow OSC + Slow SDF说明:对于普通的设计,实际只需考虑3中sdf即可。

对于osc偏移可能带来的影响(如,flash编程),则后仿需要考虑更多Osc偏移带来的影响(时序不满⾜)4. 认识sdf⽂件sdf = 标准延时⽂件请参考附录1中对于sdf⽂件的注释5. Sdf反标反标:vcs将sdf⽂件中的延时信息添加到门级⽹表中对应的地⽅6.后仿违背的类型a.时序器件Setup/hold违背(posedge D -> posedge CK , negedge D -> posedge CK)Recovary/Removal违背(posedge CDN -> posedge CK ,posedge SDN -> posedge CK)Width违背(CK,CDN,SDN)b.IP时序违背IP接⼝时序不符合datasheet7.针对违背采取的措施a.同步处理第⼀级寄存器的违背i.⽅法⼀1,建⽴⽂件Sync.v,格式如下:initial beginforce Top.uXX.uYY.uZZ_reg.notifier = 1'b0;…………end2,在SimTop中的include此⽂件;解决了寄存器输出为x的情况,但仿真会报很多warningii.⽅法⼆1,建⽴⽂件Sync.v,格式如下instance {Top.uXX.uYY.uZZ_reg,……} {noTiming}2,在runsim⽂件中加⼊ +optconfigfile+./Sync.vb.其他i.时序约束是否存在问题ii.时钟树是否合理iii.电路设计是否有潜在风险iv.接⼝设计是否遵循datasheet8.后仿脚本1,+neg_tchk寄存器可能出现负的setup limit和hold limit。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SDF Setup 违反值
1. 任务背景
在进行软件开发时,我们通常需要进行一些初始化和配置工作,以确保系统能够正常运行。

SDF(Software Development Framework)是一种常用的开发框架,用于
简化软件开发过程。

在使用SDF进行项目配置时,我们需要遵循一定的规范和准则,以确保项目的稳定性和可维护性。

然而,在实际的开发过程中,我们可能会遇到一些违反SDF Setup规范的情况。

这些违反值可能导致项目出现各种问题,如性能下降、安全漏洞、代码冗余等。

因此,我们需要深入了解这些违反值,并提供相应的解决方案。

2. 违反值分析
2.1 缺少必要的依赖项
在使用SDF进行项目配置时,我们通常会依赖一些第三方库或框架。

如果缺少必要的依赖项,则可能导致编译错误或运行时异常。

解决方案:检查项目依赖项是否完整,并及时安装或更新缺失的依赖项。

2.2 配置文件错误
SDF通常会使用配置文件来管理项目的各种参数和设置。

如果配置文件中存在错误
或不合理的配置,可能导致系统运行异常或功能失效。

解决方案:仔细检查配置文件,确保其中的参数和设置符合规范,并及时修复错误。

2.3 不规范的命名
在SDF中,良好的命名习惯是非常重要的。

不规范的命名可能导致代码可读性差、维护困难等问题。

解决方案:遵循命名规范,使用有意义且符合约定的变量、函数和类名。

对于已存在的不规范命名,可以考虑进行重构。

2.4 冗余代码
冗余代码是指在项目中存在重复或无用的代码片段。

冗余代码不仅增加了项目的体积和复杂度,还可能导致逻辑错误和性能下降。

解决方案:定期检查项目中的冗余代码,并进行优化和清理。

可以使用工具来帮助识别和删除冗余代码。

2.5 安全漏洞
在SDF Setup过程中,如果忽略了安全性相关的配置或措施,则可能导致系统出现安全漏洞,如跨站脚本攻击、SQL注入等。

解决方案:确保在SDF Setup过程中考虑到安全性需求,并采取相应的措施,如输入验证、密码加密等。

2.6 缺乏文档和注释
良好的文档和注释是项目开发和维护的重要部分。

如果缺乏文档和注释,则可能导致团队成员之间的沟通困难,代码可读性差等问题。

解决方案:编写清晰、详细的文档和注释,包括项目说明、函数说明、接口说明等。

定期更新文档,并确保团队成员都能够方便地访问和使用。

3. 解决方案
为了避免SDF Setup违反值带来的问题,我们可以采取以下解决方案:
•在项目初始化阶段,仔细检查依赖项,并及时安装或更新缺失的依赖项。

•针对配置文件,制定明确的规范,并进行仔细检查。

可以使用工具来验证配置文件的正确性。

•建立统一的命名规范,并在项目中严格遵守。

可以使用代码静态分析工具来检查命名是否符合规范。

•定期进行代码审查和重构,以识别并清理冗余代码。

•在SDF Setup过程中,始终关注安全性需求,并采取相应措施进行防护。

•编写清晰、详细的文档和注释,确保团队成员能够理解和使用项目。

4. 总结
SDF Setup违反值可能导致项目出现各种问题,影响开发效率和系统稳定性。

为了
避免这些问题,我们需要在SDF Setup过程中注意依赖项、配置文件、命名规范、冗余代码、安全性和文档注释等方面的要求。

通过遵循规范,并采取相应的解决方案,我们可以确保项目的质量和可维护性。

希望本文对于理解SDF Setup违反值及其解决方案有所帮助,并能在实际开发中提供指导。

相关文档
最新文档