Synopsys软件基本使用方法

Synopsys软件基本使用方法

  • [1 文件说明](#1 文件说明)
  • [2 编译流程](#2 编译流程)
  • [3 查看波形](#3 查看波形)
  • [4 联合仿真](#4 联合仿真)

本文主要介绍Synopsys软件vcs、verdi的基本使用方法,相关文件可从 GitHub下载。

1 文件说明

  • 创建verilog源文件add.v、mult.v、top.v

    复制代码
    module add (
      input  signed [31:0]	dina,
      input  signed [31:0]	dinb,
      output signed [31:0]	dout
    );
    
    assign dout = dina + dinb;
    
    endmodule
    
    module mult (
      input  signed [31:0]	dina,
      input  signed [31:0]	dinb,
      output signed [31:0]	dout
    );
    
    assign dout = dina * dinb;
    
    endmodule
    
    module top (
      input                clk,
      input                rstn,
      input  signed [31:0] dina,
      input  signed [31:0] dinb,
      output signed [31:0] dout
    );
    
    wire signed [31:0] add_dout;
    wire signed [31:0] mult_dout;
    
    add add_i(
      .dina(dina),
      .dinb(dinb),
      .dout(add_dout)
    );
    
    mult mult_i(
      .dina(dina),
      .dinb(dinb),
      .dout(mult_dout)
    );
    
    reg signed [31:0] add_inv;
    reg signed [31:0] mult_inv;
    always @(posedge clk) begin
      if (!rstn) begin
        add_inv <= 0;
        mult_inv <= 0;
      end
      else begin
        add_inv <= -add_dout;
        mult_inv <= -mult_dout;
      end
    end
    
    assign dout = add_inv + mult_inv;
    
    endmodule
  • 创建仿真文件tb.v

    复制代码
    `timescale 1ns/1ns
    
    module tb;
    reg                clk;
    reg                rstn;
    reg  signed [31:0] dina;
    reg  signed [31:0] dinb;
    wire signed [31:0] dout;
    
    initial begin
      #0 begin clk = 1; rstn = 0; end
      #4 begin rstn = 1; end
    end
    always #2 clk = !clk;
    
    initial begin
      #0 begin dina <= 3; dinb <= 4; end
      #4 begin dina <= -5; dinb <= 16; end
      #8;
      $finish;
    end
    
    top top_i(
      .clk (clk),
      .rstn(rstn),
      .dina(dina),
      .dinb(dinb),
      .dout(dout)
    );
    
    initial begin
      // 指定文件名称和限制文件大小(单位MB)
      $fsdbDumpfile("./rtl.fsdb", 32);
      // 导出的信号
      // $fsdbDumpvars; //所有信号
      $fsdbDumpvars(0, top_i); //top_i下的所有信号,包括子模块的信号
      // $fsdbDumpvars(1, top_i); //top_i下的所有信号,不包括子模块的信号
      // $fsdbDumpvars(2, top_i); //top_i和下一层子模块add_i和mult_i下的所有信号
    end
    
    endmodule
  • 创建文件流表file.list

    复制代码
    tb.v
    top.v
    add.v
    mult.v
  • 创建编译脚本Makefile

    复制代码
    .PHONY:
      vcs sim verdi clean
    
    vcs:
      vcs -full64 -sverilog -debug_access+all -f file.list -timescale=1ns/1ns \
      -kdb -lca -cpp g++-4.8 -cc gcc-4.8 -LDFLAGS -Wl,--no-as-needed
    # -full64:64位的系统需要添加
    # -sverilog:识别systemverilog的语法
    # -debug_access+all:生成debug所需文件
    # -f file.list:将file.list中所有.v文件进行编译
    # -timescale=1ns/1ns:设置仿真精度
    # -kdb:生成KDB文件,仿真时生成verdi的库文件simv.daidir
    # -lca:支持动态数据类型
    # -cpp g++-4.8 -cc gcc-4.8 -LDFLAGS -Wl,--no-as-needed:指定编译选项
    sim:
      ./simv -verdi
    # -l run.log:记录终端打印信息
    # -verdi:打开verdi进行动态调试
    # +fsdb+functions:抓取function和task内部信号
    verdi:
      verdi -ssf rtl.fsdb
    # -ssf rtl.fsdb:打开波形文件
    clean:
      rm -rf csrc simv* *.lib *.lib++ nLint* verdi_config_file
      rm -rf *.log *.vpd *.fsdb* *.key *log rtl.fsdb*

2 编译流程

  • 执行make vcs对verilog源文件进行编译,编译成功会生成simv文件
  • 执行make sim进行仿真,仿真成功会生成rtl.fsdb文件
  • 执行make verdi打开波形文件

3 查看波形

打开后的verdi界面如下图所示

将Instance栏中的top_i拖动到下面的波形界面添加波形信号,通过工具栏上的工具可进行缩放、移动操作,右键选择操作信号,在Set Radix可更改信号的数据显示格式,通过Set Notation可改变是否为符号数,通过Highlight可改变波形颜色。波形界面可拉出verdi界面单独显示,以此显示更多信号。

直接通过添加信号无法显示模块中的中间变量,如add_inv和mult_inv,点击菜单栏的Signal→Get Signals,选中这两个信号,点击Apply可添加到窗口中。

点击菜单栏的File→Save Signal可保存波形配置为.rc文件,关闭波形窗口后可通过工具栏重新打开一个新的窗口,点击File→Restore Signal重新加载.rc文件打开保存的配置。

4 联合仿真

如果在执行sim的参数中添加了-verdi,可进行vcs和verdi的联合调试,在完成仿真后会打开verdi窗口,可进行上述操作打开窗口并添加信号,点击工具栏的绿色箭头可开始动态仿真,再次点击绿色箭头会重置。此外,工具栏多了很多工具,可进行逐步调试。

相关推荐
I'm a winner1 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20201 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy2 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia2 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20202 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子2 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安3 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议
忆锦紫3 天前
vivado报错及解决【十】
fpga开发·fpga·vivado