designeasy...
TRANSCRIPT
DesignEasy 用户使用简明教程
吕文龙([email protected])
project 简介
DesignEasy(www.ic-designeasy.com)是一个在线模拟电路自动化设计工具,用
户可用使用网站上内置的电路,也可以对自己设计的电路进行优化。本教程针对
用户使用自己设计的电路进行优化的情景,进行简明的介绍,使用户能够较快的
熟悉流程。
要对用户自己设计的电路进行优化,用户需要提供:
1. 一份网表,描述电路的拓扑结构,以及使用”.measure”语句从网表中
提取出的,待优化的变量
2. 一份工艺库,如果用户对 DesignEasy 内置的工艺库比较熟悉的话,
也可以不提供工艺库而使用 DesignEasy 内置的工艺库
3. 一份描述参数、约束、优化目标的 spec 文件。
在这次的教程中,我们使用一个简单的 MOS 管共源放大电路作为例子如下
图所示:
其中,𝑉𝑖𝑛包括一个之流偏置 𝑉𝑖𝑛_𝑑𝑐 和一个交流小信号 𝑉𝑖𝑛_𝑎𝑐 。我们固定 𝑉𝑖𝑛_𝑎𝑐 ,
令其为幅度 0.05V,频率 1kHz 的小信号,则在这个电路中,我们能够定义的参数
有:
1. 栅极的直流偏置 𝑉𝑖𝑛_𝑑𝑐
2. MOS 管 M1 的宽 𝑊 和栅长 𝐿
3. 漏极负载电阻 𝑅𝐷
我们希望 MOS 管工作在饱和区,也就是说,我们有两个约束:
𝑉𝑔𝑠 > 𝑉𝑡ℎ
𝑉𝑑𝑠 − 𝑉𝑔𝑠 > 𝑉𝑡ℎ
确定了可以优化的参数以及必须满足的约束之后,我们来确定希望优化的目
标,我们定义功耗与增益:
𝑔𝑎𝑖𝑛 = 𝑝𝑝(𝑉𝑜𝑢𝑡)/𝑝𝑝(𝑉𝑖𝑛)
𝑝𝑜𝑤𝑒𝑟 = (𝑉𝑑𝑑 − 𝑎𝑣𝑔(𝑉𝑜𝑢𝑡))2/𝑅𝑑
其中,pp 代表峰峰值,avg 代表平均值。我们希望增益尽可能大,而功耗尽
可能小,故此,我们将最终的优化目标 (FOM, figure of merit)定义为𝑓𝑜𝑚 =
𝑝𝑜𝑤𝑒𝑟/𝑔𝑎𝑖𝑛。
至此,我们首先明确了要优化的电路,而后确定了待优化的参数,必须满足
的约束,以及最终的 FOM。
我们希望借助 DesignEasy,找到一组参数值,满足 MOS 管在饱和区的约束,
使得 FOM 尽可能小。
网表测试
DesignEasy 后台使用 hspice 进行仿真(也可以由用户指定仿真工具,但本教程
暂时不涉及这方面的介绍),因此,我们需要提供一份可供 hspice 使用的网表,
因此也需要用户对 hspice 有一定了解。
在这部分,对我们随机指定一组待优化参数,用 hspice 进行测试,此时,测
试目录的结构是这样子的:
其中,”simple_amplifier.sp”是我们的带测试网表,而”035lib”是这次使用的
工衣库,在测试过程中,我们使用”.lib”语句引用这个工艺库,而当用于优化
时,对工艺库路径的说明是放到 spec 文件中的,这在后面会说明。
我们的网表文件如下:
可以看到,网表内容分三部分:
1. 引用工艺库,以及定义参数,这部分只在测试时需要在网表中指
定,实际优化时,我们应该在 spec 文件中指定待优化参数的取值
范围,而不是在网表中指定参数的值,而每次需要仿真时,优化程
序会选出一组参数值,与我们提供的网表拼接起来,进行 hspice 仿
真,同时对工艺库文件的引用,在实际优化时也是在 spec 文件中
指定的,因为用户不知道,也不必知道自己上传的工艺库文件最终
会被放到什么路径,因此用户只需要在 spec 文件中指明相对路径即
可
2. 电路的拓扑结构,即上图网表的中间一部分,这里直接引用了上面
定义的 parameter。
3. 仿真参数与测量语句,这部分也可以定义在 spec 中,但是直接在网
表中指明也可以,而且比较方便。在我们的网表中,我们测量了三
个值:Vout 的直流分量 vout_dc,Vout 的峰峰值 vout_pp,Vin 的峰
峰值 vin_pp,使用这三个测量值,我们可以求出增益以及功耗。
网表写完之后,使用 hspice 进行仿真,测试网表的书写有无错误:
经过测试,网表书写无误,我们开始去写 spec 文件,在其中明确待优化参
数,约束条件以及 FOM。
SPEC 文件书写
Spec 文件的可选内容比较多,详细的介绍可以参考网站上帮助中心的文
档,在这里只介绍几个基本的功能,使用它们即可以完成基本的电路优化工
作。
在这里,我们使用 spec 文件说明了四件事:
1. 待优化参数以及它们的取值范围
2. 使用什么工艺库
3. 待优化的网表是哪一个,从网表中需要提取哪些测量值
4. 约束与 FOM
待优化参数
上图是 spec 文件中的参数段,参数段的格式是 file::parameter is “name”{…};
这样的格式,其中,“name”可以自己定义。我们可以这一段与上一节中网表文件
对比:
可以看到,其内容是一致的,只不过,在 spec 文件中,我们指定的是参数
的范围,于是,优化程序会在我们指定的优化范围中寻找最优的参数组合。参
数也可以定义为常量,如上面参数中的 Vdd 为电源电压,Vth0 为估计的 MOS
管阈值电压(从工艺库中查找得知)。
指定工艺库
上面这一段指定工艺库,针对 typical , ff , ss 这三个工艺角,使
用”035lib/sm046005-1j.hspice”这个库文件。也可以为每个工艺角指定单独的工艺
库,但在这里不介绍。
工艺段的语法格式为 file::process is “name”{};,其中,“name”由自己指定,
这里要注意的是结尾的分号要记得不要忽略。
在 corner 语句中,lib 语句后面跟的是工艺库的相对路径,比如我们的工艺库
是在”035lib”这个文件夹中的,我们最后会需要在网站上上传一份”035lib.tar”的
压缩文件。因而 lib 语句就就以”035lib”开头。这份工艺库最终会被放到后台文件
夹中的某个位置。
指定网表
在这一段中,我们指定网表的名字,同时,指定我们需要获取哪些从网表中
测量的变量,这些变量应该是在网表中由.measure 语句测量,而测量结果会输出
到一个与网表同名,但拓展名为”mt0“的文件中。
上图为我们的 simulation 段,而其中的 netlist 段指明了网表文件名
为”simple_amplifier.sp“,并从中提取三个变量。
指定约束与优化目标
上面是我们在 specification 段中指定约束与优化目标。
这一段的语法格式是 operation::specification is “name”,其中,”name“可以
自己指定。
首先我们定义一些变量,而约束与优化目标都是这些变量的表达式。变量
既可以是从网表中测量得到的测量值,即在前面使用”extract”语句声明的变
量,如下图:
这些变量的引用格式是,circuitname::var_name。
变量还可以是我们在最开始的参数段定义的参数:
这些变量的引用格式是 circuitname::parameter_block_name::var_name。其
中,parameter_block_name 是前面定义的 parameter 段的名字,即 parameter 段
此时将应如此定义 file::parameter is “parameter_block_name”。
定义了这些变量之后,我们来定义我们的约束:
约束使用 constraint 语句定义,而且必须是 var > number 或者 var < number
的格式,其中,”number“为数字常数,而不能是 var1 > var2 或 var1 < var2 这样
的格式,因此,我们先讲需要的约束声明为变量,看上图,constr1 就是 MOS
管的 vgs – vth,而 constr2 就是 vds – vgs – vth,我们希望这两个约束变量都大于
0,保证 MOS 管工作在饱和区。
而后我们定义最终的 FOM:
其中,功耗(power)为电源电压 vdd 乘以 Rd 的直流电流 idc,增益则是输出
与输入峰峰值之比。
最后,使用”fom fom_”语句,指定 fom 是那个变量,注意,这里优化的目
标是使 fom 最小,对于希望越大越好的 fom,可以乘以-1。
网站上传
文件准备
目前,我们已经准备好了所有的文件,等待上传,但是首先要将其转化为合
适的格式,即工艺库与网表是 tar 格式的压缩包,而 spec 为文本文件。
处理前的文件:
在如果可以在命令行(windows 中的 cmd、powershell 或者 linux 中的 terminal)
中执行 tar 命令,可以执行如下命令:
其中,process.tar 就是工艺库的压缩包,netlist.tar 就是网表文件的压缩
包。
如果无法在命令行,例如在 windows 下,可以使用 windows 下的压缩工具
将其压缩为 tar 格式,例如,windows 下,我使用 7-Zip 进行测试:
其他压缩工具,如 winRAR,尚未测试,不知能不能支持 tar 格式。
网站上传
首先登录,进入用户中心,点击”create”按钮:
进入创建 Project 页面,点击”upload”:
填写 project 名与描述
分别选择工艺文件、网表文件、spec 文件:
点击提交:
其中,绿色表示程序正在运行,黑色表示程序运行完毕。
程序运行结果。这一部分还有待完善,暂不详细介绍