第1章:混仿概览
时间:2022-10-19 14:30:00
混合过程概述
混仿能够对 有些电路用模拟方法描述,有些电路用数字方法描述 进行仿真。
有三种不同的解决方案:
- 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电路中不能使用重复的端口名,电源节点除外。