1 前言
也许大家有时候在仿真中可能会遇到这样的情况:某些时候我们需要对一个系统进行时域仿真,而这个系统中却偏偏存在一个类似 PLL 之类的时钟电路。如果将这个时钟电路替换为理想的时钟源或者是使用这个时钟在稳定状态时的输出,那么只需要跑几百纳秒即可获得正确的系统输出结果。但是由于这个时钟的存在,系统仿真时往往需要等待相当长的时间,以使得时钟的输出稳定下来,这样在系统级的后仿中,会极大拖长仿真运行的时间,降低效率。因此,假设如果我们能够只进行一次这样的相当长时间的仿真,并且将此时时钟电路输出的稳态波形保存起来,提供给后续的电路仿真使用,这样就能在几乎不损失精度的情况下极大的提升仿真的速度。而这就是本文接下来要描述的一种仿真方法。
2 方法介绍
2.1 波形导出
这里本人使用一个理想的方波源加上一个反相器 buffer 和一个电容负载的简单电路来对该方法进行介绍,如下图:
这里时钟源的频率设置为 12 GHz,随后对这个电路进行一个 200 ns 的时域仿真,得到的 CLK 处的波形如下图所示:
首先我们需要将这个波形导出为一个波形文件。具体的操作方式为在左侧栏这个波形上面右键,并选择「Send To」->「Export」即可,如下图:
这时会让大家来选择保存波形文件的位置,并且设置文件名称以及文件类型。这时只需要找到大家提前准备好的保存文件的路径,并设置好文件名称和类型就可以了。文件类型可以设置成默认的 VCSV 格式,如下图。
2.2 波形调用
设置好波形后,就可以在其他的仿真中对波形进行调用了。在进行波形调用时,首先找到「anlaogLib」库,并在其中找到「vsource」,并将其添加到原理图中去,如下图。
随后只需要对这个 vsource 进行一些简单的设置,就可以调用刚才导出的波形文件了。
使用快捷键 Q 即可对 vsource 进行设置。需要设置的主要有 4 处,具体位置如下图:
首先需要将「Source type」选成「pwl」,并且在「File name」出输入文件的路径和名称(也可通过「Browse and select file」功能来选择文件),随后设置「Time scale factor」以及「Amplitude scale factor」(这里先设置为 1,具体用途随后会说明),即可正常的使用该波形文件。
设置完成后,我们再次运行一个 200 ns 的时域仿真,即可得出 vsource 输出的波形和原波形如下图所示:
可以看出,vsource 输出的波形和原波形几乎没有区别,两者不能说完全一致吧,也只能说是一模一样。因此通过使用 vsource 加上导出的波形文件即可正常的完成对输出波形的存储和调用。
2.3 「vsource」部分设置的功能说明
接下来主要是对 vsource 中的部分常用到的设置功能进行说明。
Time scale factor:该选项为对输入波形文件中的波形进行时间域映射。可以简单的理解为将输出波形的 X 轴拉长或者压缩某一个设定的倍数。例如,如果设置为 0.5,那么原来的 X 轴总时长为 200n,设置完成后总时长就会变成 100n,相当于频率变成原来的 2 倍。
Amplitude scale factor:该选项为对输入文件的波形进行电压域映射。可以简单的理解为将输出波形的 Y 轴拉长或者压缩某一个设定的倍数。例如,如果设置为 1.8,那么原来的 Y 轴最高为 1 V,设置完成后输出波形的 Y 轴最高会变为 1.8 V。
Delay time:使得波形延时一会后再开始输出,延时时波形将一直保持为波形文件中的第一个值。
DC offset:给波形添加一个固定的 DC 偏置电压,相当于在波形文件中的每一个点的 Y 轴上都加上和一个固定值。
Period:设置输出波形的周期。设置后将会使得输出波形具有一个周期特性,可以理解为输出将会以设置值为周期不停的重复原来 0 – Period 时间内输出的内容。如果不设置,则文件读取结束后,余下的仿真时间内 vsource 的输出将会一直保持为文件中的最后一个电压值。
Period start time:设置周期的开始时间。
下图是一个将这几项设置进行一些变化后的输出波形与原波形的对比图以及对应的仿真设置,大家可以参考这副图片来了解各个设置的功能(图中 CLK 为 vpulse 输出的波形,CLK1 为前述设置的输出波形,CLK2 为图中新设置的输出波形,对应同一个波形文件且仿真时间为 400 ns)。
(2024.1.29 更新) 对于 Delay time 参数,在实际使用时发现,其不仅可以取正值,也可以取负值。如果这个参数取为负值,那么意义将变为:将波形文件整体向左平移 「Dealy time 的绝对值」个时间单位。也就是说,如果有一段波形,它的前一部分时间 t1 是不稳定的,而 t1 时间后才会稳定,此时如果仿真时想直接从稳定状态开始仿真,可以将 Delay time 参数设置为「-t1」,那么此时电压源将从一开始就会得到一个稳定的输出,如下图:
3 后记
在对大规模电路进行仿真时,合理的使用该方法通常能够提升一定的仿真效率并减少重复劳动时间。同时,该方法还可以应用在某些需要数模混仿的电路中。对于某些只需要使用 Verilog 文件来产生特定的激励信号而不需要使用 Verilog 来获取电路的反馈的仿真情况,可以先行使用 Verilog 文件并配合上几个 buffer 电路进行一个小的数模混仿,随后将 buffer 输出的波形储存后,再使用存储的波形文件进行普通仿真即可。这样做可避免复杂而又慢速的大规模 AMS 数模混合仿真的使用,能够提升仿真效率。
很棒的文章,up有心了
牛啊 大佬