第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 #1Flow #2Flow #3
Verilog-SPICEVHDL/Verilog-SPICE FlowVerilog-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
    .ends

    module 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电路中不能使用重复的端口名,电源节点除外。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部