Verilog-A Cadence 工具与库
Cadence 环境下建模的现成资源:ahdl 库、Model Writer、SMG 自动生成工具。可以少写很多代码。
ahdl 库(现成 Verilog-A 模型)
- 位置:Cadence 库列表中的 ahdl(analog HDL 库),含大量常用 Verilog-A 模型(比较器、运放等)。
- 用法:像普通器件一样把 symbol 拖入电路,设置参数即可仿真。
- 例:ahdl 比较器支持参数:
sigout_high、sigout_low、sigin_offset、comp_slope(斜率)。 - 代码直接可见:打开对应单元的 veriloga 文件可学习/修改(ahdl 代码注释规范:版本、日期、参数说明、工作原理)。
- 修改示例——给 tanh 比较器加 2mV 磁滞:
real real_offset;
analog begin
real_offset = sigin_offset + (V(sigout)>(sigout_high+sigout_low)/2)?(1e-3):(-1e-3);
V(sigout) <+ 0.5*(sigout_high - sigout_low)
* tanh(comp_slope*(V(sigin, sigref)- real_offset))
+ (sigout_high + sigout_low)/2;
end
Model Writer(快速生成简单模型)
- 新建 cell 选类型 model writer 调出。
- 左侧选单元类型(仅 Verilog-A),右侧显示描述与版本。
- 可修改参数默认值 → 生成代码(修改处红色高亮)→ Finish 自动生成 symbol。
- 适合快速生成比较器、运放等标准单元的骨架模型。
Schematic Model Generator(SMG,示意图建模)
- 用画电路的方式生成 Verilog-AMS/WREAL 代码,无需手写。
- 基于两个库:
smgBasicMSLib(基础,一般 License)和smgAdvancedMSLib(高级,额外 License)。 - 流程:选模型电路 → 连接 SMG 库单元 → 设置属性 → 选输出格式(Verilog-AMS / Wreal / Stub)→ 生成代码存文件或库 view。
- SMG 生成的代码会包含
timescale、smgDefinitions.vams、laplace_nd、$bound_step等标准结构,可作学习模板。
网表中的 Verilog-A(ahdl_include)
ahdl_include "file_name.va";
- 模块 .v/.va 文件通过
ahdl_include加入仿真网表。 - 技巧:注释/替换 ahdl_include 行即可在多个模型版本间切换,无需回图形界面改电路:
//ahdl_include "/home/user/proj/invx0small-verilog.va";
ahdl_include "/home/user/proj/invx0mid-verilog.va";
//ahdl_include "/home/user/proj/invx0large-verilog.va";
模型工艺角(corner)实现
方法 1:SPICE 子电路包(参数传递)
SPICE 参数不能直接传给 Verilog-A 实例参数 → 用子电路包裹:
ahdl_include "verilog.va"
subckt device_m (in, out)
ex (in, out) model_name param1=param_A
ends device_m
- 不同 section 填不同 param_A 值。
方法 2:corner 文件换 va 文件(简单实用)
section m_tntp
ahdl_include "/home/user/proj/invx0mid-verilog.va";
endsection m_tntp
section m_snsp
ahdl_include "/home/user/proj/invx0large-verilog.va";
endsection m_snsp
- 网表内删除原 ahdl_include 避免重复定义。
- 缺点:每加一个 corner 需加一个 va 文件,无法组合多器件 corner。
用 Verilog-A 做验证平台(testbench)
- 把测试平台顶层连接放在一个无端口 Verilog-A 模块中,内部实例化顶层电路 + 理想激励源:
module testbench ();
CircuitTop I1(net_vdd, net2, net3, ...);
vsource #(.dc(5)) I2(net_vdd, gnd!);
vsource #(.type("pwl"), .dc(0), .file("input-signal.txt")) I3(net2, net3);
endmodule
- 优点:修改只需改这个文件(代码量小、不易错),命令行排队仿真方便;测试平台跨项目可复用。
- 注意:测量路径需改为
Itop.I1.netA形式。
命令行仿真示例
spectre input.scs ../psf/spectr.out -format psfxl -raw ../psf
- 命令可从以往仿真 log 中拷贝修改,无需记忆。
相关笔记
- 模块定义 → 05 - VerilogA 模块定义与实例化
- 常用模型 → 15 - VerilogA 常用器件模型
- 建模方法 → 13 - VerilogA 建模与系统设计
- Cadence 其他技巧 → Virtuoso快捷键、Virtuoso ADE Parameter