Cadence高速系统设计流程及工具使用
上一章已经谈到,在Cadence的高速设计流程中,有两个重要的工具SigXP和Constrain Manager(CM约束管理器)。SigXP是仿真分析工具和约束生成工具,我们就是使用这个工具对关键信号进行仿真的。SI工程师通过对仿真结果的分析验证,从具体的数据中抽象出在高速设计中“可以实现”的设计规则。
SI工程师需要通过约束生成器(工具的英文名称为Set Constraints,约束生成器是作者个人偏好的叫法),将验证过的结果转换为PCB布局布线工具所能识别的设计规则,存储在CM约束管理器中。前面讲过,CM约束管理器是约束规则的管理工具,它贯穿于整个高速设计的各个环节,使约束能够无缝地在整个设计流程中进行信息传递,甚至从原理图开始就可以使用CM约束管理器进行约束管理。本章将从软件工具的角度出发,概要地介绍这两个工具在高速系统设计流程中的作用和使用方法。
下一章我们将结合实际的设计例子,对照我们要解决的问题,进一步详细地讲解Cadence高速设计系统中的两个主要工具:SigXP和Constrain Manager的使用方法和技巧。
5.1 高速电路设计流程的实施条件分析
回顾一下上一章中,我们讨论过的Cadence高速设计流程(如图4-2所示)。在这里请读者一起思考一个问题,如果我们是EDA开发的软件工程师,按照这个流程框架所显示的信息流向和信息交换控制点,我们该如何设计软件系统来实现功能,并且除了完成这些基本的软件功能外,不仅要考虑工程软件的严谨性,还要考虑到客户软件的易用性,该如何在各个功能模块之间进行及时的信息交换,使用户在完成大规模的工程仿真任务的同时,又能很快地理解软件的结构和使用理念。在读者继续阅读下面章节之前,请读者能够在这里停留几分钟,从软件系统实施的角度,思考一下这两个问题。
好,相信读者经过思考,已经有了一些想法。那么我们就一起把这些想法罗列出来,看看如果要进行仿真,仿真系统软件该怎么设计,或者说,要使用一个设计好的仿真系统软件,我们期望软件提供哪些功能,以及该怎样配合流程,使用好这些软件功能。
首先,我们都明确,这里一直在谈的是高速系统设计的仿真。那么谈到仿真,就离不开模型,所以,第一个问题就是,要进行高速信号的仿真就需要通过各种资源找到所使用器件的仿真模型。但是在获得了器件模型之后,并不意味着就能马上使用,还需要对模型进行处理和验证,以保证仿真器能够有效地组织并正确使用该模型。除了器件的模型之外,器件之间的互连模型,也即传输线的模型,需要从PCB的叠层结构中加以提取,所以在进行仿真之前,PCB的叠层结构也需要定义好。
接下来,为了能够进行信号的仿真,还需要设置一些仿真条件,这些条件包括:器件模型的速度、温度,以及器件工作环境,比如器件的静态工作点及偏置电压等条件设置。我们的真的目的是研究信号的传输质量,那就离不开信号的连接关系和拓扑结构。连接关系在原理图设计结束后(网表)就可以得到,而具体的拓扑结构,需要结合系统的(预)布局,才能确认。有了这些信息,再加上该信号的传输特征(激励模式),就可以进行信号仿真了。
然而仿真不是最终目的,通过对仿真结果的分析,得到关于该信号的系统设计规则,用来指导和约束实际的PCB设计工作,最终得到传输性能和仿真分析结果一致的PCB产品,这才是我们想要的。所以,如何把SI工程师的想法和意图,通过对仿真结果的分析,转化成PCB工程师能够识别并可行的设计规则,用来指导布局布线,在各个不同的工具之间实现信息传递和共享,也是需要我们解决的问题。正如上一章中所讲,Cadence高速设计流程中的Constrain Manager出色地完成了这个任务。
现在,我们来总结一下,要实现高速系统设计流程,进行高速信号分析,需要解决哪些具体问题,参见表5-1。
在接下来的章节中,我们逐个介绍如何在Cadence的高速设计流程中实现这些仿真条件,通过仿真分析,得到高速设计的约束条件和实施设计的约束。
5.2 IBIS模型和DML模型
5.2.1 IBIS模型介绍
在讨论如何获得和使用IBIS模型之前,我们有必要先来了解一下什么是IBIS模型。
众所周知,SPICE(Simulation Program with Integrated Circuit Emphasis)模型是随着集成电路发展起来的,SPICE模型仿真技术在集成电路业界已成为晶体管级电路描述的非正式标准。它基于晶体管和二极管特性参数建模,仿真精度高,但由于运算量大、运算耗时,因此只能在仿真精度和运算耗时之间进行折中。另外,SPICE模型一般不支持耦合线(或有损传输线)的仿真,而这正是高速电路设计中信号完整性仿真的关键因素。所以在它的应用领域中,大多数只用于电路原理方面的仿真,对于像PCB板级的仿真它就显得力不从心了。
同时,由于SPICE模型是对电路内部结构和参数的详细描述,这样从技术信息保密的角度来讲,就给交流带来了一定的障碍。为了能够和外部电路互连,进行仿真,同时又不至于泄露技术细节,一些EDA厂商联合开发了一种叫做IBIS(Input/Output Buffer Information Specification)模型的标准,它基于V/I曲线,对I/O Buffer快速建模,它提供了一种标准的文件格式来记录诸如激励源输出阻抗、上升/下降时间及输入负载等参数,非常适合做振荡器和串扰等高频效应的系统级仿真与仿真。IBIS是一个简单的模型,计算量小、速度快、精度高,当做简单的带负载仿真时,比相应的SPICE三极管级模型仿真要节省10~15倍的计算量。
它提供驱动器和接收器的行为描述,但不泄漏电路内部构造的知识产权细节。换句话说,销售商可以用IBIS模型来说明它们最新的门级设计工作成果,而不会给其竞争对手透露过多的产品信息。也正因为如此,本质上讲,IBIS模型并不能叫做一种“模型”,它只是描述器件行为的数据文件。
读者是否还记得我们在这本书的开始,就提到了1993年这个时间,以及随着PCI技术的发展而兴起的信号完整性这个事件么?事实上,IBIS模型也是在这个时间,随着PCI技术的发展应运而生的。这也是为什么作者说1993年,对电子工程师而言是个值得纪念的年代。
在PCI技术还处于研发阶段的时候,Intel公司内部为了对PCI信号进行研究和仿真,采用了一种新的信息交流方法,它只记录一些PCI信号的输入和输出特征,而没有PCI电路结构特征的具体描述。这种新的文件结构在Intel公司内部得到了广泛的应用,尤其适用于那些没有将SPICE作为仿真工具的部门系统级别的仿真,并取得了很大的成功。
随着1993年,PCI在业界得到了广泛的应用,为了方便客户尽快使用这种技术,Intel总结自己的设计和使用经验,决定联合其他一些EDA厂商,制定IBIS标准,将这种新的设计方法在业界进行推广。本着为了保护厂商的知识产权屏蔽电路细节,同时又需要方便用户对电路I/O特性进行描述,按照通用的电子器件中I/O电路结构,IBIS模型对实际的电路结构进行了抽象,定义了如下的IBIS模型电路结构,如图5-1所示。
为了描述这种I/O电路特性,对应于上述电路结构,IBIS模型需要提供如下一些信息。
- 四个V/I曲线
- Pullup & POWER clamp,上拉和电源钳位V/I曲线。
- Pulldown & GND clamp,下拉和地钳位V/I曲线。
- 两个转换时间曲线
- Ramp up,也即dV/dt_rise,信号上升特性dV/dt曲线。
- Ramp down,也即dV/dt_fall,信号下降特性dV/dt曲线。
- I/O电路的电容
- C_comp,I/O电路中总的寄生电容,不包括封装部分的寄生电容。
- 芯片封装寄生参数
- RLC values,封装寄生参数。
说明*:由于器件和工艺技术的发展,对于Ramp曲线的定义和测量,为了适应最新的器件特性要求,在IBIS版本的更新中不断地得到加强。例如,对CMOS器件,Ramp曲线实际上是四个,分别在不同的驱动和负载条件下测量。读者要注意到这一点,在阅读IBIS文件的时候,首先要注意文件的版本号,然后再看当前器件使用的是什么工艺,因为具体的IBIS数据曲线会根据版本和器件工艺的不同而变化。在我们后面的实际设计例子当中,我们会通过这个问题。
这些曲线数据的获得,需要通过SPICE仿真或者实际测量得到。而对于IBIS模型数据的测量和最后IBIS文件的生成,还需要一些特殊的工具,比如各个曲线的电压测量范围选取,对于Pullup V/I数据的参考电压调整及对100个数据采样点的选取,和对线性区间的估值等。这些模型数据处理的方法和技巧,对于生成一个准确的IBIS模型至关重要。任何一个器件厂商都非常重视与产品相关的IBIS文件生成,这部分工作一定是由专门的部门或者人员来负责。对于高速设计工程师而言,了解IBIS模型的基本原理,能够在使用过程中发现错误并对错误定位也就足够了。所以在本节中对于IBIS模型的数据测量和文件生成,不再展开讲,有兴趣的读者,可以参阅更多的资料加以学习。
5.2.2 IBIS文件介绍
在IBIS模型数据测量之后,再经过一定的后处理,需要按照一定的格式写入到IBIS文件中。同时为了方便交流和管理,IBIS文件中除了这些曲线数据的基本信息之外,还包括一些其他的辅助信息。IBIS文件有一些特定的语法和说明,例如文件名、器件名称及文件版本号等,这些信息在IBIS文件中以关键字的形式,分成几个节(Section)对器件信息和模型数据进行组织和描述。一般情况下,IBIS模型由以下三个部分构成。
1. 关于文件本身和器件名字的信息,这些信息用以下的关键词描述。
[IBIS Ver]——IBIS的版本号;
[File Name]——文件的名称;
[File Rev]——文件的版本号;
[Component]——器件的名称;
[Manufacturer]——器件的制造商;
[Disclaimer]——关于文件使用条件或其他声明;
[Copyright]——器件制造商的版权声明。
2. 关于器件的封装电气特性和管脚与Buffer模型的映射关系这些信息,用以下的关键词描述。
[Package]——器件封装寄生参数RLC;
[Pin]——器件中所有管脚列表,以及管脚属性和相应模型的映射关系。
3. 器件管脚模型数据描述,有如下关键字。
[Model]——用来标识一个模型信息,以及关于该模型的数据开始。在此关键字以下有一些参数定义,用来描述该模型的工作条件。
Model_type——I/O Buffer的类型,Input或者Output等;
Vinh,Vinl——Buffer工作的电平门限值;
C_comp——Buffer内部电容。
跟随在[Model]关键字后面的一些关键词描述,比如[Pullup]、[Pulldown]、[GND_clamp]、[POWER_clamp]和[Ramp]等,就是对于这个Buffer具体的具体曲线数据。当然,不是所有的模型都需要上面的全部关键词来描述,如OC和漏极开路电路就不需要[Pull-up]的数据信息,而对于Input类型的Model,当然就不需要[Pull-up]和[Pull-down]数据。
我们以如下的一个例子来讲解IBIS文件的组织结构和信息管理,如表5-2所示。
在这个例子中,我们看到的信息有,一个名称为“Sample.ibs”的文件,版本为2.1。这个文件中有一个名为“Test”的器件,且只有一个管脚为Driver。这个管脚是Output类型,使用的是一个名称为“out”的模型,但是对于该管脚的封装寄生参数RLC没有描述。“[Model] out”下面的信息,就是对于此模型的[Pulldown]、[Pullup]、[GND_clamp]、[POWER_clamp]及[Ramp]的曲线信息描述,并且被分为Typical、Minimum和Maximum三种工作情况。
在[Ramp]一节中,通常会使用关键词[Rising Waveform]和[Falling Waveform]来描绘上升曲线和下降曲线,但此时关键词[Ramp]仍然是必需的。这是因为[Ramp]是用来表示输出晶体管由逻辑低变为逻辑高所需要的时间。dv作为[Ramp]的一部分数据,代表的是电压范围的20%到80%的数值,Ramp 式由如下公式定义,并且这个公式在整个IBIS模型的生成和使用过程中是通用的,不能被改变。
dv/dt= 20%到80%的电压范围值/电压从20%变化到80%所需的时间
以上就是对IBIS文件的基本介绍,任何一个IBIS模型文件,都是按照这个组织原则进行的,只是随着器件、管脚及模型的数量的不同,文件数据量大小会有不同。但是按照这个文件结构进行对比解读,还是能够很快理解的。希望读者通过了解这些基本信息,对于正确地使用IBIS模型进行仿真分析会有帮助。
5.2.3 DML模型
虽然IBIS模型已经是业界描述有源器件的一种标准,但是对于系统的仿真而言,我们不仅仅需要关注于有源器件模型,还需要增加对离散器件、接插件、电缆及系统之间的互连模型。只有这样才能有效地描述一个系统,从而对系统的整体性能进行仿真。为了支持这种需求,Cadence开发了DML语言,用于对所有类型的器件模型进行描述和封装,从而使得一个系统能够在一个统一的环境下进行仿真。
DML(Device Modeling Language)是Cadence专用的模型语言,在Cadence的高速设计环节中所有的器件模型都以DML格式存储并使用。也就是说不管用户使用的是什么类型的模型文件,IBIS也好,SPICE也好,或者类似Quad等其他类型的模型文件,在仿真之前,都需要经过格式转换,存储成DML格式的文件才能被Cadence的仿真引擎所识别并使用。DML中既包含行为模型的语法描述,也包含类似于SPICE中的子电路结构模型的语法,因此可以用DML格式来描述其他类型的器件模型,比如IBIS和SPICE。
我们通常会把IBIS文件和IBIS模型混为一谈,那是因为,一般情况下一个IBIS文件中仅仅包含了一个器件(或者一种I/O)所相关的模型信息。而DML文件所涵盖的内容要比DML模型的范围大得多。通常,DML文件中可以包含很多种器件和很多种I/O的DML模型,在一个DML文件中可以包含有源器件、离散器件甚至连接电缆的模型描述。还有一种DML文件,它的扩展名为.ndx,这种DML文件仅仅是其他一些DML文件的索引信息。DML文件也是基于文本格式的,可以使用文本编辑器或者Model Integrity工具来对DML文件进行创建和编辑。
在Cadence的仿真环境中,还有一种语言IDL(Interconnect Description Language),它是用来描述如PCB走线和过孔等互连模型的语言。IDL的文件结构和DML是一样的,有很多读者经常会搞不清楚Cadence中所使用的几种模型语言,DML、IDL及ESPICE和KSPICE之间的关系,表5-3对这几种模型语言进行了对比,希望能对读者有一些帮助。
如上所说,DML文件中可以包含任何形式的器件模型,表5-4中介绍了在DML中可使用的7种类型的器件模型。
在了解了器件模型的分类之后,我们进一步来看看DML文件的组织结构,和IBIS文件类似的是,DML也使用关键字、参数和子参数的方式来组织文件。但不同的是,在DML文件结构中,关键字是有严格的层次概念的。在文件的表现形式上,是参照软件的编码规范进行缩进编排的,即同一个层次的关键字在同一个缩进位置上,而隶属于某个层次对象的参数和子参数信息则要增加一个缩进位置,并且位于一个大括号之内,这颇有些C语言的编写规范。虽然缩进的要求是为了增强可读性,但是隶属于同一对象的参数需要用大括号括起来,则是严格的语法要求。例如,在表5-5中就是对于DML文件格式的详细说明。
为方便读者的理解,下面再给出一个实际的DML文件的例子,如表5-6所示,对照上面讲的DML文件结构,相信读者很容易明白这个例子中所描述的信息。
在上面的DML文件实例当中,还出现了一些新的关键字,比如(Manufacturer "SPEElectronic")。这些关键字是可选项,它们是Copyright、Disclaimer、LibraryVersion、Manufacturer、ModelDate、ModelSource、ModelVersion和Notes等。需要注意的是,正如前面所讲的,在DML文件描述中,关键字出现的位置是有严格的层次关系限制的,所以像Copyright、Disclaimer和Notes是要放在DML文件名所限制的第一个层次范围内,而ModelDate、ModelSource、ModelVersion和Manufacturer等关键字是要放在出特定器件模型的控制层次范围内。如果不这样做,那就犯了DML的语法错误。
还有一点需要提醒读者的是,在DML模型当中,有一些默认的数量单位缩写,如表5-7所示,了解这些,对于正确使用DML模型是有帮助的。
Cadence用户不用过多地担心DML文件的语法及使用问题。一般情况下,如果用户能够正常地使用IBIS2 SigNoise将IBIS文件转换成DML模型,就可以在Cadence的仿真环境下使用这个DML模型了。也就是说,如果IBIS文件没有问题,那么所有的转换工作都由软件自动完成,不需要用户参与,除非用户想去创建一个自己的DML模型。
除了作者在这里介绍的关于DML使用的基本信息外,DML还有很丰富的功能,比如如何在DML模型中建立各种类型的器件模型,如何封装和使用SPICE模型进行仿真等。这些功能在多系统复杂仿真中都具有非常重要的实用价值,在本书中只是点明了要在Cadence中实现这些方法的可行性,具体的实现步骤希望有能力的读者进一步参照Cadence的帮助文档“Allegro SI Device Modeling Language User Guide.pdf”深入学习。
5.2.4 如何获得IBIS模型
在刚刚使用Cadence进行高速设计时,很多工程师都被仿真信的问题所困扰。他们经常会问道:“到哪里才能找到我所需要的仿真模型?”这里,我们就谈谈如何获得合适的仿真所需的模型。
首先我们要知道,Cadence的信号仿真工具SigXP具有两种仿真引擎,一个是TLsim,一个是Hspice。所以,在Cadence中进行仿真,既可以使用IBIS模型,也可以使用Hspice模型。但问题是除非你额外购买并安装了Hspice的仿真器,否则是不能使用Hspice模型仿真的。另外一个类似鸡和蛋的问题是,如果你已经有了Hspice的仿真器并且已经知道了如何使用Hspice模型,那么也就不需要再去了解该如何获得IBIS模型(因为IBIS模型的数据一般都是从SPICE模型中得到的),可以直接将SPICE模型包装在DML Model中,在SPICE的仿真环境中做仿真,然后根据对结果数据的分析来设置规则约束等。因此,这里讨论的是,在大多数用户使用TLsim仿真器的情况下,从一开始设计,如何获得合适的IBIS模型。
在上一节中,我们了解了IBIS模型的发展历史,也就理解了IBIS模型可以通过以下几种方式获得。
- 可以从器件厂商处直接获取,用户无须对模型付额外开销。大部分的模型可以直接从器件厂商的网站上获得。有些器件厂商为了掌握市场信息,需要客户提供一定的项目资料之后才肯提供IBIS模型,虽然过程复杂了一些,但是最终还是能够得到的。另外,这些免费的IBIS模型,也可以通过网上搜索得到,比如“http://www.eigroup.org/”是一个关于IBIS模型发展的技术组织网站,可以从这里找到大量关于IBIS的资料和各类器件模型。
- 也可以从Hspice模型的输出结果LIS文件,转换成IBIS模型文件。Model Integrity新的Hspice-to-IBIS转换模式,可以为设计所提供从SPICE输出文件(.lis)直接创建IBIS模型的方法。Cadence在Hspice-to-IBIS处理过程中采用的曲线拟合算法和数据抽取算法是与有着10年以上IBIS模型开发经验的业界领先的半导体生产商共同协作开发,具有非常高的精确度。但这种方式需要用户对SPICE模型的使用和IBIS模型原理都非常了解才可以使用,否则可能费力不讨好,也就是花了很多精力去创建一个IBIS模型,结果还有很多错误。
- 最后,可以找些适当的替代模型。用户可以参照某个产品参数,按照同一厂家的产品系列,选择一个类似的器件模型作为替代模型。但这样做的时候要非常小心,一定要对你所使用的器件有足够了解,这样你才可以通过寻找与之工艺参数、性能匹配的器件模型来代替。
一般来讲,通过以上三种方式,我们可以找到大部分所需的IBIS模型,但是一旦找不到,也可以参照器件手册提供的曲线波形或者数据,按照经验进行“估计”。但这种对模型的估计,是凭着丰富的设计经验,甚至一些直觉,没有什么可以遵循的规律,所以只能祝你好运了。
5.2.5 在Cadence中使用IBIS模型
作者常常看到一些刚刚涉足高速设计领域的工程师,当拿到一个器件的IBIS模型之后,迫不及待地想一试身手,恨不得马上能够跑完所有的仿真,得到分析结果,生成约束,然后在约束的驱动下,完成PCB的设计(其实当初作者初学仿真分析时的心情也是一样的,所以有必要在这里提醒后来者,不要重复同样的错误)。
从图4-2的Cadence高速设计流程中,细心的读者会发现,这个高速设计流程成功的基础是在一个正确的IBIS模型上做的仿真分析,并将分析结果转化为高速设计的约束,所以如果获得的IBIS模型是错误的,那么后续的所有工作都将是徒劳无功的,甚至是你职业生涯的一个大灾难,这就是所谓的“Garbage in, garbage out”。
保证模型的正确性及正确地使用模型,对设计成功而言是至关重要的。所以,当你得到了一个器件模型之后,切记一定不能马上用它开始仿真分析,有多种原因需要在使用前对所获得的模型进行完整性检查。这些原因包括,在创建IBIS模型过程中的人为失误、IBIS模型生成过程中的数据测量错误及IBIS文件格式错误等。并且IBIS模型不是一个严格的工业标准,在模型生成过程中,有很多语法可选项,每个仿真器对这些可选项的处理也不相同。
总之,为了确认你的仿真器能够正确使用获得的IBIS模型,一定要对IBIS模型进行检查。图5-2的内容是依据IBIS模型文件V1.1版本所做的文件结构说明。图的右半部分的内容有[...]的是IBIS模型中的关键词,没有方括号的条目则代表的是子参数的标题,同时字符“Y”表明该内容在IBIS模型中是必选项,而“N”则是表明该内容在IBIS模型中为任选项。
为了验证IBIS模型的正确性,以及将IBIS模型整理成Cadence所能识别的模型,需要使用Cadence中的Model Integrity工具对IBIS模型进行验证和整理。Model Integrity是基于Windows平台的IBIS模型编辑器,它不但可以检查IBIS的语法错误,而且还可以以图形方式显示IBIS模型的I/O曲线。在Cadence中使用IBIS进行仿真之前,要用Model Integrity对模型进行检查。通常我们遇到的错误就是语法错误,以Warning的形式报告给用户,如图5-2中所显示的一些关键字和选项的缺失。这个一般可以不用理睬,除非是关键的语法错误和数据错误。还有一类常见的“错误”就是IBIS模型的单调性问题。
理论上讲,IBIS模型中的数据要有严格的单调性,也就是说V/I曲线变化过程是单调的,但实际上由于测量的精度(或者误差)、测量过程中的噪声干扰,以及器件的物理特性变化,IBIS文件中的数据会发生不符合单调性的情况,这个就要具体问题具体分析了,如果只是非常细微的变化,对单调性影响不大,就可以忽略。但是如果曲线上的非单调性非常明显,那就是真正的错误了,要寻找原因加以修正。
另外一个使用Model Integrity的原因是,前面所讲到的,Cadence的高速信号分析工具SigXP并不能直接使用IBIS模型。为了有效地使用各种器件模型,Cadence对这些器件模型进行了二次封装,通过这样的封装,它可以在一个统一的环境下使用多种器件模型。经过二次封装后,在Cadence中使用的最终模型有两种,器件模型DML(Device Model Language),互连接插件模型IML(Interconnection Model Language)。对于输入的是IBIS模型而言,DML模型基本上就是对IBIS的再封装,互连接插件模型是对接插件等互连器件的ESPICE模型的再封装,经过DML和IML再封装的模型和原模型没有本质上的区别,只是文件格式不同。
读者可以打开原来的IBIS模型和封装后的DML模型加以比较,还是很容易能够读懂的。IBIS模型可以通过Model Integrity自动转换成DML模型,如果转换的过程中发生错误,用户还可以通过Model Integrity对IBIS模型进行编辑、修改,但是也一定要切记,修改的依据是什么?所做的修改对将来的仿真结果有什么影响?如果不能明确地回答这两个问题,建议还是不要随意修改。因为,模型不准确,不仅会使得仿真结果不可信,而且有可能对基于这样的仿真结果设计的系统带来灾难性的后果。
5.2.6 IBIS2 SigNoise的警告和错误参考
在Cadence仿真分析环境设置过程中,需要执行IBIS2 SigNoise将IBIS模型转换为DML模型,而在模型的转换过程中,可能会遇到各种各样的问题。Cadence软件提供了有可能遇到的所有的警告和错误信息,以及关于这些警告和错误的可能产生原因和推荐解决办法。
为了使读者阅读和设计中及时参考,同时也为了保证Cadence的版权,在见下的表5-8和表5-9两个表中,如实地提供了Cadence软件中的原始信息,没有进行翻译。这样做的另外一个原因是,作者在实际工作中,很少遇到如下的这些警告和错误提示,反而会经常遇到一些其他的错误,因此只是将Cadence中提供的参考信息列举在这里,而关于实际应用中遇到的问题,我们留在下一章中对照实际的设计实例加以讲解。这样,读者能够对模型中的各种实际问题有个切实的感受。
相关文章:
Cadence高速系统设计流程及工具使用
上一章已经谈到,在Cadence的高速设计流程中,有两个重要的工具SigXP和Constrain Manager(CM约束管理器)。SigXP是仿真分析工具和约束生成工具,我们就是使用这个工具对关键信号进行仿真的。SI工程师通过对仿真结果的分析…...
Unity:AddTorque()(增加旋转力矩)
目录 什么是 AddTorque()? 第一性原理出发:什么是 Torque(力矩)? Torque 公式 Unity 中 AddTorque 的工作原理 参数属性 🔍 Linear Drag(线性阻力) 线性阻力模拟的现实情况&…...
嵌入式硬件设计全解析:从架构到实战
一、嵌入式硬件设计核心架构与系统组成 1. 处理器选型与架构设计 (1)处理器类型与应用场景 处理器类型 代表架构 / 型号 典型应用场景 核心优势 微控制器(MCU) ARM Cortex-M3/M4、STM32F 系列 低功耗控制、小型设备 集成外设、低功耗、低成本 微处…...
R7打卡——糖尿病预测模型优化探索
🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 1.检查GPU import torch.nn as nn import torch.nn.functional as F import torchvision,torch# 设置硬件设备,如果有GPU则使用,没有…...
win10开了移动热点,手机无法连接,解决办法(chatgpt版)
提问: win10连着网线上网,有无线网卡intel Wireless-AC 9560网卡 可以用电脑开移动热点给手机连接吗?如何设置?我现在可以开热点,但是手机连不上,显示正在获取ip地址后就连不上了 chatgpt回答:…...
下载core5compat 模块时,被禁止,显示 - servese replied: Forbbidden. -->换镜像源
怎么解决? --->换镜像源 方法 1:使用命令行参数指定镜像源 在运行 Qt 安装器时,通过 --mirror 参数指定镜像源: # Windows qt-unified-windows-x64-online.exe --mirror https://mirrors.ustc.edu.cn/qtproject# Linux/macO…...
《MATLAB实战训练营:从入门到工业级应用》高阶挑战篇-《用无人机仿真玩转PID控制:MATLAB四旋翼仿真建模全攻略》
《MATLAB实战训练营:从入门到工业级应用》高阶挑战篇-✈️ 用无人机仿真玩转PID控制:MATLAB四旋翼仿真建模全攻略 🚁 欢迎来到这篇超级详细的MATLAB四旋翼无人机仿真教程!无论你是控制理论爱好者、无人机发烧友,还是M…...
GESP2024年3月认证C++八级( 第二部分判断题(1-5))
孙子定理参考程序: #include <iostream> #include <vector> using namespace std;// 扩展欧几里得算法:用于求逆元 int extendedGCD(int a, int b, int &x, int &y) {if (b 0) {x 1; y 0;return a;}int x1, y1;int gcd extende…...
PHP的现代复兴:从脚本语言到企业级服务端引擎的演进之路-优雅草卓伊凡
PHP的现代复兴:从脚本语言到企业级服务端引擎的演进之路-优雅草卓伊凡 一、PHP的历史误解与现实真相 1.1 被固化的陈旧认知 当卓伊凡浏览知乎上关于PHP的讨论时,发现大量回答仍然停留在十年前的刻板印象中。这些误解包括但不限于: “PHP只…...
手表功能RunModeTasks
RunModeTasks 功能解释 “RunModeTasks 执行特定于当前模式的功能 根据模式控制作行为”这句话是指 OV-Watch 智能手表项目中的一组任务,这些任务负责管理设备的运行模式并根据不同模式控制设备的行为。 主要组成部分 RunModeTasks 主要由以下三个部分组成&#…...
Qt6.8中进行PDF文件读取和编辑
1.环境配置 在 .pro 文件中添加 PDF 模块依赖: QT core gui pdf # 添加 pdf 模块 注意:独立 pdf 模块的起始版本是Qt 5.15,建议需要 PDF 功能的开发者优先选择此版本或更高版本 2.读取PDF 文件 核心类:QPdfDocument…...
Barrett Reduction算法优化:更紧的界限消除冗余的减法
1. 引言 Barrett Reduction 是一种被广泛使用的模 m m m 运算算法。在zkSecurity 受NEAR团队所委托的(针对RustCrypto: NIST P-256 (secp256r1) elliptic curve——https://github.com/RustCrypto/elliptic-curves/tree/master/p256)进行的 Rust p256 …...
Node.js 是什么?
Node.js 是什么? Node.js 是一个基于 Chrome V8 JavaScript 引擎 的 跨平台 JavaScript 运行时环境,用于在服务器端运行 JavaScript 代码。它使开发者能够使用 JavaScript 编写后端(服务端)程序,而不仅仅局限于浏览器端(前端)。 1. Node.js 的核心特点 (1) 基于 Chrom…...
数据结构中 数组、链表、图的概念
数据结构是计算机存储、组织数据的方式,数组、链表和图是三种常见的数据结构,下面为你详细介绍它们的概念: 数组 数组是一种线性数据结构,它由一组相同类型的元素组成,这些元素存储在连续的内存位置上。每个元素都可…...
基于PPO的自动驾驶小车绕圈任务
1.任务介绍 任务来源: DQN: Deep Q Learning |自动驾驶入门(?) |算法与实现 任务原始代码: self-driving car 在上一篇使用了DDPG算法完成自动驾驶小车绕圈任务之后,继续学习了PPO算法&…...
Three.js + React 实战系列 - 客户评价区细解教程 Clients 组件✨(回答式评价 + 评分星级)
对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦!!谢谢大家!!! 在这篇博客中,我们将实现一个简洁的 Hear from My Clients 客户评价区域。这个区块在个人主页中可以突显用户体验和专业度,帮…...
2048游戏(含Python源码)
前言 相关参考游戏: 像素飞机大战(含Python源码)-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/147693018?spm1001.2014.3001.5501使用DeepSeek定制Python小游戏——以“俄罗斯方块”为例-CSDN博客https://blog.csdn.n…...
百度golang开发一面
讲一下数据库的事务机制?acid特性是靠什么实现的? 持久性 redo log 原子性 undo log 隔离性 MVCC或next-lock锁 四个隔离级别是什么,分别解决什么问题? 可串行化实现原理 mysql锁机制?介绍锁的类型,以及原理…...
【Springboot知识】Springboot计划任务Schedule详解
文章目录 Spring Boot 定时任务从原理到实现详解一、核心原理分析1. 架构分层2. 核心组件3. 线程模型 二、基础实现步骤1. 添加依赖2. 主类配置3. 定时任务类 三、高级配置技巧1. 自定义线程池2. 动态配置参数3. 分布式锁集成(Redis示例) 四、异常处理机…...
大模型推理--从零搭建大模型推理服务器:硬件选购、Ubuntu双系统安装与环境配置
自从大模型火了之后就一直想自己组装一台机器去深入研究一下大模型,奈何囊中羞涩,迟迟也没有行动。在下了很大的勇气之后,终于花了接近4万块钱组装了一台台式机,下面给大家详细介绍一下我的装机过程。 1.硬件配置 研究了一周&am…...
如何使用QWidgets设计一个类似于Web Toast的控件?
如何使用QWidgets设计一个类似于Web Toast的控件? 前言 笔者这段时间沉迷于给我的下位机I.MX6ULL做桌面,这里抽空更新一下QT的东西。这篇文章是跟随CCMoveWidget一样的文章,尝试分享自己如何书写这份代码的思考的过程,和笔者…...
博图V20编译报错:备不受支持,无法编译。请更改为受支持的设备。
使用高版本博图打开低版本博图的工程文件时,hmi编译报错不通过,报错提示:备不受支持,无法编译。请更改为受支持的设备。 原因:当前版本的博图软件没有或不支持该组态设备的固件版本。 解决办法:1、安装报错…...
凸性(Convexity)
凸性(Convexity)是一个跨学科的重要概念,广泛应用于数学、优化理论、金融等领域。其核心含义是描述某种结构(如函数、集合)在特定条件下的“无凹陷”性质。 1. 数学中的凸性 1.1 凸函数与凹函数 在数学分析中&#…...
Vuex使用指南:状态管理
一、什么是状态管理?为什么需要 Vuex? 1. 状态管理的基本概念 在 Vue 应用中,状态指的是应用中的数据。例如: 用户登录状态购物车中的商品文章列表的分页信息 状态管理就是对这些数据的创建、读取、更新和删除进行有效管理。 …...
kotlin中枚举带参数和不带参数的区别
一 ✅ 代码对比总结 第一段(带参数 工具方法) enum class SeatPosition(val position: Int) {DRIVER_LEFT(0),DRIVER_RIGHT(1),SECOND_LEFT(2),SECOND_RIGHT(3);companion object {fun fromPosition(position: Int): SeatPosition? {return SeatPosi…...
【Python】Python好玩的第三方库之二维码生成,操作xlsx文件,以及音频控制器
前言 🌟🌟本期讲解关于python的三种第三方库的使用介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么…...
VTK 交互类介绍
基本概念 交互器(Interactor): 处理用户输入事件的基础类 交互样式(InteractorStyle): 定义具体的交互行为 Widgets: 可交互的UI组件,如滑块、按钮等 Picker: 用于选择场景中的对象 常用交互类 类名功能描述vtkRenderWindowInteractor渲染窗口交互器vtkInteractorStyle交互样式…...
在Window10 和 Ubuntu 24.04LTS 上 Ollama 在线或离线安装部署
Ollama 是一个开源的大型语言模型(LLM)服务框架,旨在通过轻量化、跨平台的设计,简化大模型在本地环境中的部署与应用。其基于 Go 语言开发,通过 Docker 容器化技术封装模型运行环境,提供类似命令行工具的交…...
语音合成之十一 提升TTS语音合成效果:低质量数据清洗、增强与数据扩增
低质量数据清洗、增强与数据扩增 1. 引言:TTS的基石——数据质量2. 基础:TTS数据准备工作流2.1 规划:定义蓝图2.2 执行:从原始数据到训练就绪格式2.3 最佳实践与可复现性 3. 攻克缺陷:低质量语音数据的清洗与增强3.2 手…...
RGB三原色
本文来源 : 腾讯元宝 RGB三原色(红绿蓝)详解 RGB(Red, Green, Blue)是光学的三原色,通过不同比例的混合可以产生人眼可见的绝大多数颜色。它是现代显示技术(如屏幕、投影仪)…...
BUUCTF 大流量分析(一) 1
BUUCTF:https://buuoj.cn/challenges 文章目录 题目描述:密文:解题思路:flag: 相关阅读 CTF Wiki BUUCTF:大流量分析(一) 题目描述: 某黑客对A公司发动了攻击,以下是一段时间内我们…...
虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅
虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅 code review! 文章目录 虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅1.电源管理2.显卡优先设置3.拯救者支持FnQ性能模式切换,建议开发前切至“野兽模式”或高性能模式。4.NVIDIA 驱动设置5.VS2022中…...
suna工具调用可视化界面实现原理分析(一)
这是一个基于React构建的工具调用侧边面板组件,主要用于展示和管理自动化工具调用流程。以下是代码功能解析及关键组件分析: 一、核心功能模块 多工具视图切换系统 • 动态视图加载:通过getToolView函数根据工具名称(如execute-c…...
【将你的IDAPython插件迁移到IDA 9.x:核心API变更与升级指南】
文章目录 将你的 IDAPython 插件迁移到 IDA 9.x:核心 API 变更与升级指南为什么 API 会变化?关键不兼容性一:数据库信息访问 (inf_structure)关键不兼容性二:窗口/视图类型判断 (BWN_* 和 form_type)其他可能的 API 变更迁移策略建…...
《Python星球日记》第31天:Django 框架入门
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、Django…...
读《人生道路的选择》有感
读完戴维坎贝尔的《人生道路的选择》,深有感触,虽然只有短短的108也,但作者强调了在复杂的生活环境之中“选择”的重要性。这也是我想要探讨的话题,选择到底会对我们人生产生怎样的影响。 在我们人生当中,确实有许多的…...
opencv+opencv_contrib+cuda和VS2022编译
本文介绍使用OpenCV和OpenCV_Contrib源码及Cuda进行编译的过程,编译过程中会用到OpenCV、OpenCV_Contrib、Toolkit、Cmake、VS2022等工具,最终编译OpenCV的Cuda版本。 一、OpenCV下载地址 OpenCV官网下载地址:https://opencv.org/releases/#࿰…...
STC单片机与淘晶驰串口屏通讯例程之01【新建HDMI工程】
大家好,我是『芯知识学堂』的SingleYork,今天笔者给大家一起学习这款“SYK-0806-A2S1”控制板与淘晶驰串口屏通讯的例程,本例使用的是淘晶驰的4.3寸电阻触摸屏TJC4827T143_011R_I_P20,分辨率为480272,详细参数大家可以查看这个屏的手册。 先来看下本例程整体的效果: 那么…...
PE文件结构(导出表)
导出表 什么是导出表? 导出表是PE文件中记录动态链接库(DLL)对外提供的函数或数据的列表,包含函数名称、序号和内存地址等信息,供其他程序调用 我们写一个dll来查看一下导出函数 int exportFunc1(int a, int b) {ret…...
网络安全自动化:精准把握自动化边界,筑牢企业安全防
在当今数字化时代,网络攻击的威胁日益严峻,企业网络安全的重要性不言而喻。随着海量资产与复杂架构的出现,网络安全自动化成为了众多企业关注的焦点。网络安全维护看似简单的修补系统、删除旧账户、更新软件,在大型企业中却极易变…...
实战设计模式之中介者模式
概述 中介者模式是一种强大且灵活的设计模式,适用于需要优化对象间通信的场景。中介者模式通过引入一个中介对象,来封装一系列对象之间的交互。在没有中介者的情况下,这些对象之间可能会直接相互引用,导致系统中的类紧密耦合&…...
价格识别策略思路
该策略是一种基于价格形态和市场条件的交易算法,旨在通过识别特定的价格模式来生成买入和卖出信号。 价格形态识别 策略的核心在于识别价格的高点和低点形态。通过比较当前周期及其前几个周期的最高价和最低价, 策略定义了一系列条件来判断价格是否形成了…...
Kotlin带接收者的Lambda介绍和应用(封装DialogFragment)
先来看一个具体应用:假设我们有一个App,App中有一个退出应用的按钮,点击该按钮后并不是立即退出,而是先弹出一个对话框,询问用户是否确定要退出,用户点了确定再退出,点取消则不退出,…...
【NLP】32. Transformers (HuggingFace Pipelines 实战)
🤖 Transformers (HuggingFace Pipelines 实战) 本教程基于 Hugging Face 的 transformers 库,展示如何使用预训练模型完成以下任务: 情感分析(Sentiment Analysis)文本生成(Text …...
[ 设计模式 ] | 单例模式
单例模式是什么?哪两种模式? 单例模式就是一个类型的对象,只有一个,比如说搜索引擎中的索引部分,360安全卫士的桌面悬浮球。 饿汉模式和懒汉模式:饿汉模式是线程安全的,懒汉模式不是线程安全的…...
用网页显示工控仪表
一.起因 现在工控也越来越多的使用web页面来显示电压,电流,温度,转速等物理量.本例使用js控制网页显示速度仪表. 二.代码 <html> <head><script type"text/javascript">var ctx;var px0;var movePoint{x0:0,x1:0};function init(){drawFace();m…...
Spring项目改造Solon版,使用体验,对比
概述 对于Solon有些人可能并不了解,在官方概述中,称其是新一代Java企业级应用开发框架,从零开始构建,有自主的标准规范与开放生态。近16万行代码。 并有更快、更小、更简单的特点 什么样的Java项目用Solon好? 按正常…...
2.CFD 计算过程概述:Fluent在散热计算中的优势
1.主流散热软件 2.电子产品热设计的基本要求 3.失效率与温度之间的关系 4.电子产品热设计的基本要求 5.电子产品必须要做散热设计 6.主动散热与被动散热 7.高效山热方案 8.热交换模型 9.Fluent中传热模型...
【Java ee初阶】多线程(6)
一、阻塞队列 队列的原则:“先进先出”,队列分为普通队列,优先级队列等等。在数据结构中,堆是特殊的完全二叉树,一定不要把堆和二叉搜索树混淆。 阻塞队列是一种特殊的队列,也遵循“先进先出”的原则。 …...
Unity:Surface Effector 2D(表面效应器 2D)
目录 什么是表面效应器 2D? 🎯 它是做什么的? 🧪 从第一性原理解释它是怎么工作的 📦 重要参数解释 为什么不直接用 Rigidbody(刚体)来控制运动 ? 所以什么时候该用哪个&#…...