热度 1| |
硬件描述语言是用来描述硬件工作方式的程序语言。
硬件描述语言已经有了一段不小的历史,早在1995年,当很多人还不知道电脑和程序是什么东西的时候,Cadence Design System公司就已经提交并通过了IEEE1364标准。这就是Vhdl描述语言。 VHDL语言和后来的verilog语言主要用于描述数字电路的行为。它们描述的对象是离散、时间上不连续和逻辑的信号。 大约同一时间,一个名为Analog Verilog International的组织成立了。它希望通过扩展Verilog语言来支持模拟和混合信号仿真。在1996年,该组织公布了它的第一个成果就是Verilog-A。Verilog-A的工作方式和Verilog或者VHDL等描述数字电路行为的语言不相同。它是一个描述连续信号-也就是我们通常称为模拟系统-的语言。它兼容SPICE程序[1]的描述语言。 很快Cadence Design System 公司就在他们的spectre仿真器中支持了Verilog-A语言。
随着实际应用中模拟系统规模的不断扩大,支持Verilog-A的工具也越来越多,同时也为了支持混合信号的仿真, 这个组织在2000年发布了Verilog-AMS标准。Verilog-AMS混合了Verilog和Verilog-A的语法,并且增加了多个混合信号结构,使得Verilog-AMS成为了一个支持模拟、数字和混合信号描述和仿真的语言。 而后,Verilog-AMS还在继续进化中。2003年1月发布的Verilog-AMS的2.1版本标准加入了对Verilog的支持。同时他们也在努力将Verilog-AMS合并入System-Verilog。
[1] SPICE, 全称Simulation Program with Integrated Circuit Emphasis, SPICE。是一种用于电路描述与仿真的语言与仿真器软件,用于检测电路的连接和功能的完整性,以及用于预测电路的行为。以下将使用SPICE仿真程序的代码均称为SPICE模型或SPICE代码。
1.1 Verilog-AMS
Verilog-AMS是Verilog硬件描述语言的一个衍生物。类似Verilog和VHDL语言,Verilog-AMS被设计来创建系统模型,并进行仿真验证。 和Verilog和VHDL不同的是,我们至今还没有办法直接从Verilog-AMS代码“综合”出完整模拟电路模块。也因为如此,Verilog-AMS并没有从一开始就进入模拟电路设计师的设计流程中。现在,随着系统集成度的提高,仿真和验证的难度的加大,Verilog-AMS才越来越多的被人们采用。 Verilog-AMS包含了模拟和混合信号扩展模块。它扩展了Verilog、SystemVerilog等的事件驱动仿真器的回路,通过使用一个连续时间仿真器,可以在模拟域上求解微分方程。在Verilog-AMS里模拟事件可以触发数字行为,反之亦可。Verilog-AMS可以象SPICE模型一样描述非常细节的工作情况,但更多的时候它被用于描述高层的,更加抽象的功能,用于对大规模系统进行前期的,快速高效的仿真验证。
1.2 Verilog-A
Verilog-A是Verilog-AMS的连续时间子集。当我们使用Verilog-AMS描述模拟领域的功能,我们可以说Verilog-A和Verilog-AMS是一样的。
图表 一-1Verilog-AMS的组成
1.2.1 Verilog-A能做什么
使用模拟电路的描述语言,我们可以: - 自顶向下的设计流程
传统的模拟电路设计方法,一切都要从电路开始。当单元电路没有完成的时候,顶层的仿真验证无从谈起,也无法实现自顶向下的设计方法。 - 项目研究阶段的可行性分析
项目开始阶段,对一些关键模块和参数的要求,决定了项目是否能够实现。使用模型进行验证,确定需求,能避免大量时间和人力的浪费。 - 系统级模型搭建和仿真
快捷高效的验证
提供IP模型
对于很多IP的厂商和开发者,提供一个简单的模型,让客户在真正购买之前能够试用你的IP,是一种非常好的事情。以往,需要搭建SPICE模型,其描述难度大大高于Verilog-AMS描述语言。同时对规模比较大的IP,也很难简化描述复杂程度。 - 提供系统级别模型
从IP到芯片,到板级系统,再到整个系统,每一个层次都需要验证。以往缺乏统一的描述方式,或者根本无法描述和验证模拟子系统。现在每一个层次都可以用Verilog-AMS描述,每个供应商都可以提供自己的模型。
1.2.2 使用Verilog-AMS
Verilog-AMS与Verilog-A的差别很大程度上即是允许同一个模块既描述数字行为又描述模拟行为。我们要不要使用Verilog-AMS的数字描述功能?我们何时需要将模拟的描述内容和数字的描述内容放在一起? 数模混合仿真本身没有问题,对大型设计,将数字和模拟分开建模和仿真已经是一个必然的流程。但是Verilog-AMS支持的在一个模块内部同时使用数字和模拟描述则会带来一些困扰。我们什么时候使用这种混合描述,使用了之后带来的是好处还是坏处? EDA厂商们一直强调使用混合信号仿真必定有其道理。相信随着EDA技术的进步,有一天混合信号描述甚至可以非常快捷的生成不包含模拟部分的系统电路原型。 让我们看看我们现在面临的问题。
第一种情况,我们要实现一个复杂的模拟系统,同时里面包含了很少一些逻辑单元,总数不超过100个门。我们需要使用Verilog-A搭建模型来进行模拟部分的仿真。既然是一个只有不超过100个的数字门单元的系统,通常会让模拟电路工程师自己来做这些逻辑模块吧。既然这样,最好不用模拟电路工程师们不熟悉的Verilog数字语法,因为100个门的逻辑可以很容易的可以实现,而且不太会发生错误。
第二种情况,我们要实现一个复杂的混合信号系统。里面有复杂的模拟模块,也有复杂的数字模块,多于1000个的门电路,甚至更多。我们有一个或多个专职的数字工程师。通常情况下,数字工程师继续使用他熟悉的Verilog,模拟工程师使用Verilog-A,合并之后使用混合信号仿真工具进行验证。因为,数字工程师通常不熟悉Verilog-AMS的混合信号书写方法。而且很多数字的仿真器,综合布局布线工具,都不支持Verilog-AMS。因此使用Verilog-AMS基本上对数字设计无用。
第三种情况,我们有一个比较复杂的模块需要建模,它既带有数字信号,又带有模拟信号。即使在这种情况下,我们也应该慎重考虑是否使用混合信号模型。 建立模型的目的是加快仿真,但在后面的章节可以看到,数字和模拟混合描述并不是没有代价的,在简化了数字域仿真的情况下,也带来了额外的数模转换连接模块的仿真时间。因此,分开描述是否能够简化模型,加快仿真是一个问题。 其次,数模混合仿真简化数字域仿真的同时,也丢失了数字域的模拟特性。数字域的延时、噪声、摆率等等是否会对模块的性能有影响,是否能被忽略,也是需要考虑的一个问题。 再次,数模混合的书写,仿真验证平台的搭建,都需要一个额外的学习时间,也都可能带来一些错误和修正的时间。
Verilog-AMS混合信号描述的问题是:
数字工程师熟悉Verilog,它高效而且有大量方便的工具进行各种数字的仿真验证综合布局布线。从数字模块的角度,使用Verilog-AMS没有好处。
Verilog-AMS数模混合的书写方式,模糊了数字和模拟部分的边界,导致系统划分不明确,设计容易出错,而且过多的数模边界元素会导致仿真速度大大下降。
同一个模块内部进行混合信号的描述,并不是简单的拷贝模拟电路的描述代码和数字电路的描述代码。Verilog-AMS实际上要求数字工程师学习模拟的描述语言,又要求模拟工程师学习数字描述语言,增加学习周期。
1.3 SPICE模型
现在模拟设计中广泛使用的是SPICE模型。SPICE模型其实就是SPICE仿真器原生可以识别的网表代码。由于SPICE仿真器在模拟设计中不可动摇的地位,SPICE模型也同样是事实标准。绝大多数厂商都为自己的器件和模块提供SPICE模型以供用户仿真。 SPICE模型的最大优点是精确。它可以用一个带有多达400+个参数的模块来描述单个器件。SPICE模型详细描述各个工艺参数下的各种行为变化,精确的保证仿真结果和实际物理产品高度一致。我们通常所说的对电路进行仿真,一般都是指使用带有SPICE模型的器件搭建电路并进行仿真。
随着高精度而来的是SPICE模型书写复杂、仿真速度慢并且灵活性差。对于描述高层次的功能和行为,SPICE模型会比Verilog-A/AMS代码复杂得多。同时其灵活性差也使得一个SPICE模型的修改相当麻烦,非常不利于模型的复用。 所以,在搭建系统模型,或者提供用户一个简单的产品模型这些任务上,SPICE模型往往不是一个很好的选择。这也是为什么在这些地方,我们需要引入Veirlog-A/AMS语言。
1.4 WREAL
WREAL 是Verilog-AMS支持的一种新的数值模型。WREAL的特殊之处在于它使用有限的浮点数值的点来模拟一条电路工作曲线。而SPICE和Verilog-A的计算结果是一条理论上可以无限精度,包含无限点的的曲线。从某种程度上,WREAL的实现方式类似于Fast-Spice的查表点工作模式,其目的是进一步简化仿真,从而支持更大规模的模拟系统仿真。 使用WREAL的最大好处是速度快。使用WREAL变量的模型在计算的时候无需使用SPICE迭代运算。它使用的是比较简单的,直接推导的函数来模仿模拟电路真正的工作情况。 相比SPICE和Verilog-A的模型必须使用SPICE仿真器的迭代运算,WREAL仿真器使用离散事件触发,就像数字仿真器那样。这给WREAL的计算上带来极大的速度优势。但同时,离散的计算模式使得WREA模型在含有反馈的电路中无法给出准确的结果。在普通电路中它也需要牺牲输出的精度。所以,WREAL并不适用于需要精确度量的模拟电路的模型中。 这是一张多个描述语言的仿真速度的对比。
图表 一-2 描述语言的精度与仿真速度 (来源: Cadence Design Systems)
汤姆·贝克利 -- Cadence设计系统公司高级副总裁,在CDNLive EMEA2012的主题演讲中说:如果你能够将所有的SPICE仿真计算(包括Verilog-AMS)替代为事件驱动和REAL数值仿真,仿真速度能够提高大约300倍。因此,WREAL拥有可观的速度优势。 WREAL的一个问题是,它需要对真正的模拟电路的行为有一个非常好的预测。因为,WREAL的所有计算都是前向的,我们想要用这些前向计算来模拟SPICE仿真器迭代结算的结果,就需要对实际电路工作情况有个很好的了解。然而,模型通常在设计阶段的前期实现,而此时通常不会有很好的对真实电路的预测。如果WREAL模型无法很好的体现SPICE仿真器对真实电路的仿真结果,那模型的意义就不大了。亦或需要在设计后期随着真实电路的开发修改模型,这样就会牺牲一些研发的时间。
有一些相关的研究正在进行中,比如利用简单的电路生成WREAL模型,这样可以作为未来新项目系统的起始WREAL模型。也有一些研究包括迭代WREAL和真实电路仿真,这样可以自动修改WREAL模型等等。但不管怎么,对于WREAL在大规模需要精度的验证中的使用,还是需要一定考虑。 本文对WREAL不做详细介绍。
1.5 仿真工具
目前主流的商用仿真器对Verilog-A的标准的支持都已经非常全面了。
Cadence Design System -- 作为世界上第一个支持Verilog-A标准的EDA厂商以及本身就是Verilog-AMS等标准组织重要成员,Cadence对Verilog-A/AMS语言的支持是全方位的。
参考链接: http://www.cadence.com/products/cic/Pages/default.aspx
Mentor Graphic -- ELDO 和新的ADMS 都能够支持Verilog-A仿真。
参考链接: http://www.mentor.com/products/ic_nanometer_design/analog-mixed-signal-verification/
Synopsis -- 新思还在推进新的Hspice,当然它也支持多种模拟与混合信号描述语言。
参考链接: http://www.synopsys.com/Tools/Verification/AMSVerification/Pages/default.aspx Hspice默认配置并不支持Verilog-A/AMS,你需要购买Hspice_va这个License。
Pspice -- 可能是DOS/Windows平台上最流行的仿真软件。
参考链接: http://www.orcad.com/products/orcad-ee-designer/overview
对于无法使用商用仿真的人来说,现在有很多开源的免费仿真器。它们同样支持SPICE和Verilog-A仿真。
Ngspice -- 一个开源软件,本身只是一个命令行软件,但支持一些外挂的图形界面以方便电路设计。
参考链接: http://ngspice.sourceforge.net/
Querc -- 另一个开源的免费的仿真器,它包含有各种外挂。包括支持图形化的电路和代码输入,也支持Verilog和VHDL的仿真。
参考链接: http://qucs.sourceforge.net/index.html
Ngspice和Querc支持Verilog-A/AMS都使用了一个ADMS的软件包。ADMS可以将Verilog-A/AMS代码转换成为C代码而给类SPICE仿真器使用。 有兴趣研究ADMS可以到这里下载http://sourceforge.net/projects/mot-adms/
免费开源的软件,很适合业余学习和开发。Qurc正在成长为一个可以进行模型设计,电路实现,系统仿真,PCB设计等一整套流程的完整开发平台。而Ngspice灵活的接口,被使用在很多在线仿真和计算上面。本文会在附录里对这两种开源软件如何支持Verilog-A/AMS的使用方式做一些介绍。 本文主要示例使用Cadence环境。不同的仿真器环境差异较大,代码不能保证直接在其他仿真器上100%兼容运行。