Asic设计学习总结-验证(一)

上一篇 / 下一篇  2018-03-07 19:54:34

一、前言

借助于前文RTL设计中提到的UART代码,本章节将在后面给出对应的testbench以及说明如何在questa/modelsimVCS+DVEVCS+Verdi工具中使用。推荐书籍:《vcs User Guide 2016

二、Testbench

Testbench的结构,正如上文提到的,主要由a,复位和时钟,b,激励产生电路,c,系统监视器,d,结果比较电路,e,波形产生函数,f,待验证的MODULE,g,控制仿真时间这几个部分组成。本章节提供的testbench只包含a,b,e,fg部分,至于c,d更高级的内容,暂时无法涉及,questa/modelsim将不会使用到e部分的代码,使用questa/modelsim仿真时要屏蔽掉全部e段的内容同样,在使用VCS+DVE进行仿真时要屏蔽VCS+VERDIe段内容

三、工具使用

 3.1modelsim仿真

对于modelsim仿真,  仿真文件包含:1verilog源文件(前文已全部提供)2testbench文件(后面会提供)

modelsim使用教程:https://wenku.baidu.com/view/db638e25b9d528ea81c779cc.html

有关在modelsim软件中如何使用本示例请参考以上教程。

仿真结果图:


3.2 VCS+DVEVCS+VERDI仿真

对于VCS+DVEVCS+VERDI, 仿真文件包含:1verilog源文件(前文已全部提供)2testbench文件(后面会提供),3,包含verilogtestbench文件路径的uart.f文件(必要时需自行修改),4makefile仿真启动文件。在终端中运行make命令即可运行仿真,一定要注意文件路径问题。

makefile教程:http://blog.csdn.net/liang13664759/article/details/1771246

VCS+DVE 使用教程,https://wenku.baidu.com/view/48912cf558fb770bf68a55b4.html

DVEVCS软件自带的波形查看器。

本章实例对应的VCS+DVE makefile启动脚本:

all:VCS DVE

 

VCS:

      vcs -f uart.f   -full64 -debug_all -R

DVE:

      dve -vpd wave.vpd -mode64

将以上内容复制到文本文件中,并将该文本文件改名为makeflile

uart.f内容:

/home/Lance/synopsys/UART/testbench.v //必须放在文件中的第一行。

/home/Lance/synopsys/UART/UART_XMTR.v

/home/Lance/synopsys/UART/Control_Unit.v  

/home/Lance/synopsys/UART/Datapath_Unit.v

/home/Lance/synopsys/UART/UART_RCVR.v

/home/Lance/synopsys/UART/Control_Unit2.v

/home/Lance/synopsys/UART/Datapath_Unit2.v  

DVE波形查看器启动命令:

dve -vpd wave.vpd -mode64

此外,在运行makefile启动脚本之前,还需要在testbench中添加如下代码:

initial

  begin

     $vcdplusfile("wave.vpd");//保存的波形文件名字

     $vcdpluson(1,tb);//tb对应testbench文件的内的module名字

end

该段代码为e,波形产生函数,主要是生成DVE波形查看器使用的VPD格式的波形文件。

仿真结果图:


VCS+VerdiVerdidebussy的升级版,是一个独立的软件,这对软件组合使用方式与VCS+DVE差不多。

VCS+Verdi makefile启动脚本:

all:VCS VERDI

 

VCS:

      vcs +v2k -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 &

将以上内容复制到文本文件中,并将该文本文件改名为makeflile

注意:-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主要是调用Verdi的接口函数以生成fsdb波形。

 

Verdi波形查看器启动命令:

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

此外,在运行makefile启动命令前,还需要在testbench中添加如下代码:

  initial

    begin

     $fsdbDumpfile("wave.fsdb");

     $fsdbDumpvars(0,tb);

    end

以生成Verdi波形查看器使用的FSDB格式的波形文件。

仿真结果图:


注意: 启动脚本相关问题,需要学习makefile有关内容,有关VCSVerdi的详细使用教程,还请参考其它资料。

 

四、Testbench代码附件:

`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                      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

    $finish;

  end

//f,待验证的MODULE

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),

  


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2018-08-19  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 14981
  • 日志数: 26
  • 建立时间: 2017-05-17
  • 更新时间: 2018-03-07

RSS订阅

Open Toolbar