第1章:混仿概览
混仿流程概述
混仿能够对 部分电路用模拟方法描述,部分电路用数字方法描述的设计 进行仿真。
根据采用的模拟仿真器的不同,有三种不同的解决方案:
- CustomSim® VCS/VCS MX tool
- FineSim™ VCS/VCS MX tool
- HSIM® VCS/VCS MX tool
根据混合信号设计使用的语言不同,有三种不同的flow:
- Verilog-SPICE flow
- VHDL/Verilog-SPICE Flow
- Verilog-AMS-SPICE
三种解决方案部分或全部支持三种flow,关系如表
| 解决方案 | Flow #1 | Flow #2 | Flow #3 |
|---|---|---|---|
| Verilog-SPICE | VHDL/Verilog-SPICE Flow | Verilog-AMS-SPICE | |
| VCS AMS | ✓ | ✓ | ✓ |
| FineSim VCS Cosim | ✓ | ✓ | |
| HSIM VCS Cosim | ✓ | ✓ |
混仿设置检查
网表相关问题
模块/电路名称一致
multi-view 的概念:如果一个模块既有verilog形式的描述,又有SPICE形式的描述,则该模块就被称为 multi-view cell。
对于一个multi-view cell,verilog模块名和SPICE电路名必须一致,同时管脚的数量和名字也必须相同。
大小写敏感
对于一个multi-view cell,verilog模块名和SPICE电路名的大小写必须一致,同时管脚名的大小写也必须相同。需要注意HSPICE网表会将每个名称默认当作小写。
馈电电源
在Verilog顶层中例化SPICE电路,需要为SPICE连接馈电电源。
方法1:SPICE和verilog中没有馈电引脚时
如果SPICE电路中没有馈电引脚,则需要在SPICE网表中使用.global声明将电源连接到SPICE电路。
// SPICE网表中定义全局的电源和地
v_vdd vdd 0 1.8
v_vss vss 0 0
.global vdd vss.subckt inv in out
m1 out in vdd vdd p_tran l=0.25u w=10.0u
m2 out in vss vss n_tran l=0.25u w=10.0u
.ends
// verilog 实例化 inv 时不用加电源和低引脚
module verilog_top(…);
…
inv i1 (.in(d_in), .out(d_out));
…
endmodule
方法2:SPICE和verilog中有馈电引脚时
-
使用带
powernet选项的d2a指令// vcsAD.init
d2a powernet hiv=1.2 lov=0 node=top.vdd;
d2a powernet hiv=1.2 lov=0 node=top.vss;如果verilog线网定义为"supply0" 或 “supply1” 线网,则不需人为设置d2a powernet,工具会自动完成相关设置。
-
创建一个新的双端口SPICE电路
通过新创建的SPICE电路给原电路供电.subckt inv in out vdd vss
m1 out in vdd vdd p_tran l=0.25u w=10.0u
m12out in vss vss n_tran l=0.25u w=10.0u
.ends// The spice_pwr_supply subcircuit supplies the vdd and vss power supply signals
.subckt spice_pwr_supply vdd vss
v_vdd vdd 0 1.8
v_vss vss 0 0
.endsmodule verilog_top (…);
…
// Power pins included in the inverter instance
inv i1 (.in(d_in), .out(d_out), .vdd(vdd_wire), .vss(vss_wire));
…
// spice_pwr_supply supplies VDD and VSS for the design
spice_pwr_supply s1 (.vdd(vdd_wire), .vss(vss_wire));
…
endmodule
方法3:混合馈电引脚
SPICE电路中有馈电引脚,verilog中没有馈电引脚。
需用使用port_connect指令连接理想电源。
复杂…举例略。
网表声明
必须使用模拟仿真器支持的声明语句。
仿真时间
仿真时间可以在数字域定义,也可以在模拟域定义。数字域使用$finish或$stop,模拟域使用.tran。
$finish 或 .tran 执行后,仿真退出;$stop执行后,仿真停止并进入 Unified Command Line Interface (UCLI) 交互模式;
如果数模域同时定义了仿真时间,时间小的一个决定退出时间。
如果需要混仿工具报告仿真完成比例,SPICE中必须有.tran声明。
端口相关问题
端口映射
使用 use_spice , use_verilog or use_vhdl 指令的port_map选项进行端口映射。
如果端口数量不一致,使用 port_connect 指令解决。比如例化子模块有电源管脚,但本模块没有,这时可以使用 port_connect 将没有连接的管脚接到其它端口。
SPICE下例化verilog时,默认采用位置映射。
verilog下例化SPICE时,位置映射和名称映射。
-
位置映射
// Verilog instantiation
nor1 i1 (out1, in1, in2);*SPICE subckt
.subckt nor1 zn a b
.ends -
名称映射
// Verilog instantiation
nor2 i2(.a(in1), .b(in2), .zn(out2));*SPICE subckt
.subckt nor2 zn a b
.ends
映射bus端口
要求:SPICE的bus成员必须连续定义(不能在两个bus成员中定义其它信号),且必须与verilog中定义的序号顺序一致(升序或降序)
// Verilog instantiation
addr i3(.a(ai[3:0]),
.b(bi[3:0]), .cin(ci),
.s(su[3:0]), .cout(co));
*SPICE subckt
.subckt addr a[3] a[2] a[1] a[0]
+b[3] b[2] b[1] b[0]
+cin s[3] s[2] s[1] s[0]
+cout
.ends
端口重复
SPICE电路中不能使用重复的端口名,电源节点除外。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
