tfpwl_lj的个人空间 https://blog.eetop.cn/1638430 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Asic设计学习总结-数模混合仿真

热度 2已有 12827 次阅读| 2018-3-7 20:12 |系统分类:芯片设计

一、前言

       每一个Asic芯片项目都是由模拟电路和数字电路组合而成,前面的章节讨论的都是数字电路的仿真和综合,在本章节将会讨论数模混合仿真的问题。本章节讨论的数模混合仿真,仍然是基于前面章节所使用到的UARTRTL代码。然而,由于本人对于模拟电路不是很熟悉,不能自行设计复位及振荡电路。因此,本章节的示例无法在工具软件中进行实际运行,但会把除了模拟网表之外的各类必备文件都交代清楚。说到数模混合仿真,原本cadence IC5141也具备这个功能,网络上也有相应的教程,但问题在于其仿真速度太慢,而且还有各种限制,这导致基于IC5141的数模混合仿真一点都不实用。

二、工具

数模混合仿真的工具很多,VCS+NANOSIM是常用的一对组合。后期NANOSIM升级为了XA,仿真流程没有变化,但是各项配置文件参数有相应的改变。

推荐文档,http://bbs.eetop.cn/thread-556128-1-1.html,该文档介绍了更多的nanosim可以选择的命令。也给出了一个示例,该示例是通过修改官方示例所得。

三、示例

    基于VCS+NANOSIM仿真的流程总共分为两类,一个是基于模拟网表为顶层的所谓spice_top流程,另外一个是基于Testbench为顶层verilog_top流程,本章节是基于Testbench为顶层verilog_top流程。

所需文件aTestbenchb,全部UARTRTL代码,cvcsAD.initdcfg模拟配置文件,e,模拟电路网表,fmakefile启动脚本。所有文件见附件,除了模拟电路网表文件内容不全以外,其余文件内容均齐全(可能还需要修改)。文件结构图如下图,

 

仿真流程:准备好所需文件,注意文件的依赖关系及路径,在终端运行makefile启动文件即可。

另外有一个官方自带的仿真示例可以参考,路径在安装好的nanosim软件的路径下面:/home5/EDATools/synopsys/ns/E-2010.12/doc/ns/tutorials/nanosim/NS-VCS

官方示例中的run启动文件经过适当修改之后可以运行。

 

四、附件

Testbench红色部分为相对原testbench修改的部分,针对模拟电路给的不同的rst_b复位时间长度,还需要修改“b,激励信号“的延迟时间才能运行。

`timescale 1ns/1ns

 

module tb;

 

  parameter                 num = 500;

  reg  [7 : 0]              Data_Bus;

  reg                       Load_XMT_datareg;

  reg                       Byte_ready;

  reg                       T_byte;

  reg                       read_not_ready_in;

 

  //reg                       Clock;

  //reg                       rst_b;

 //reg                       Sample_clk;

wire                       Clock;

 wire                       rst_b;

 wire                       Sample_clk;

 

  wire                      serial;

  wire                      Error1,Error2;

  wire [7:0]                RCV_datareg;

  wire                      read_not_ready_out;

//a,时钟和复位部分

/*

initial

  begin

    rst_b      = 1;

    Sample_clk = 0;

    Clock      = 0;

    #100;

    rst_b      = 0;

    #100;

    rst_b      = 1;

  end

 

always #(8*num)     Clock      = ~Clock;

always #num         Sample_clk = ~Sample_clk;

*/

//b,激励产生部分

initial

  begin

    Data_Bus          = 8'b1110_0101;

    Load_XMT_datareg  = 1'b1;

    Byte_ready        = 1'b0;

    T_byte            = 1'b0;

   

    read_not_ready_in = 1'b0;

//        

    #(2*8*num);

    Load_XMT_datareg  = 1'b0;

    #(2*8*num);

    Byte_ready        = 1'b1;

    #(2*8*num);

    T_byte            = 1'b1;

//        

    #(2*8*num)

    Load_XMT_datareg  = 1'b1;

    Byte_ready        = 1'b0;

    T_byte            = 1'b0;

   

  end

//c,系统监视器

//d,结果比较电路

//e,波形产生函数

//vpd

/*

initial

  begin

     $vcdplusfile("wave.vpd");

     $vcdpluson(1,tb);

end

*/

//fsdb

  initial

    begin

     $fsdbDumpfile("wave.fsdb");

     $fsdbDumpvars(0,tb);

    end

 

//g,控制仿真时间

initial

  begin

    #1000_000;

    $finish;

  end

//f,待验证的MODULE

//将模拟电路模块示例化,模拟电路与数字电路的接口部分只需要一个复位//信号和两个时钟信号,Sample_clk频率为Clock频率的8倍,具体缘由请查//书籍《Verilog HDL高级数字设计》

analog analog(

.Clock(clock)

.Sample_clk(Sample_clk)

.rst_b(rst_b));

UART_XMTR m0(

    .Serial_out(serial),

   

    .Data_Bus(Data_Bus),

    .Load_XMT_datareg(Load_XMT_datareg),

    .Byte_ready(Byte_ready),

    .T_byte(T_byte),

    .Clock(Clock),

    .rst_b(rst_b)

);

UART_RCVR m1(

 

   .RCV_datareg(RCV_datareg),

   .read_not_ready_out(read_not_ready_out),

   .Error1(Error1),

   .Error2(Error2),

  

   .Serial_in(serial),

   .read_not_ready_in(read_not_ready_in),

   .Sample_clk(Sample_clk),

   .rst_b(rst_b)

);

endmodule

 

全部UARTRTL代码见前文。

vcsAD.init:

use_spice -cell analog;//调用模拟网表中的顶层单元analog

choose nanosim -n analog.spi -C cfg ;//选择仿真的模拟hspice网表analog.spi及模拟仿真配置文件cfg

bus_format _%d;//设置模拟网表总线表示格式

rmap_file resis_map;

analog.spi:在进行混合仿真前,确保analog.spi可以使用nanosim进行仿真,以排除模拟网表的问题,很多问题的产生都源于模拟网表没有修改好。如何用nanosim仿真模拟网表?简单的直接用启动命令:nanosim -n analog.spi -C cfg,如何查看波形?观察cfg文件中是设置的fsdb还是vpd。再决定启动verdi还是dve

.inc  <hspice仿真库文件路径,工艺厂商提供的工艺库中>

<cadence IC5141中导出的hspice模拟网表文件,并修改相关参数,使其可以用nanosim单独仿真,关于如何导出hspice网表请自行百度>

.global vdd gnd //设定全局电源地

vse vdd gnd vpwl 0 0 5n 5v 1m 5v //添加模拟电源激励

.tran 15n 1m //控制仿真时间为1ms,仿真步进为15ns.

.end//结束标志

cfg:

print_node_v * //打印所有节点电压

print_node_i * //打印所有节点电流

print_node_logic * //打印所有节点逻辑信号

set_print_format for=fsdb //设定打印格式,有fsdbvpd两种可选,分别对应verdidve两种波形查看器的格式

makefile:

all:VCS VERDI

 

VCS: +ad参数即为调用nanosim进行联合仿真

     vcs +v2k +ad=vcsAD.ini -sverilog -debug_all -P /usr/synopsys/Verdi/K-2015.09/share/PLI/VCS/LINUX64/novas.tab /usr/synopsys/Verdi/K-2015.09/share/PLI/VCS/LINUX64/pli.a +vcs+lic+wait -f uart.f -y ./ +libext+.v -full64  -R

VERDI:

     verdi -f uart.f -ssf wave.fsdb &

uart.f:

/home/Lance/synopsys/uart/nanosim/src/testbench.v

/home/Lance/synopsys/uart/nanosim/src/UART_XMTR.v

/home/Lance/synopsys/uart/nanosim/src/Control_Unit.v  

/home/Lance/synopsys/uart/nanosim/src/Datapath_Unit.v

/home/Lance/synopsys/uart/nanosim/src/UART_RCVR.v

/home/Lance/synopsys/uart/nanosim/src/Control_Unit2.v

/home/Lance/synopsys/uart/nanosim/src/Datapath_Unit2.v  

2

点赞

刚表态过的朋友 (2 人)

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 72

    粉丝
  • 38

    好友
  • 41

    获赞
  • 52

    评论
  • 4340

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-28 22:48 , Processed in 0.026990 second(s), 15 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部