Synopsys软件基本使用方法

Synopsys软件基本使用方法

  • 1 文件说明
  • 2 编译流程
  • 3 查看波形
  • 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窗口,可进行上述操作打开窗口并添加信号,点击工具栏的绿色箭头可开始动态仿真,再次点击绿色箭头会重置。此外,工具栏多了很多工具,可进行逐步调试。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/947298.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux-Redis哨兵搭建

环境资源准备 主机名IP端口号角色vm1192.168.64.156379/26379mastervm2192.168.64.166379/26379slavevm3192.168.64.176379/26379slave 6379为redis服务暴露端口号、26379为sentinel暴露端口号。 安装Redis # 包文件下载 wget https://github.com/redis/redis/archive/7.2.2…

【python】unittest单元测试

文章目录 基本使用不同启动方式的区别 基本使用 下面是根据文档写的一个demo&#xff0c;主要的内容基本都包含了&#xff0c;使用时导入自己的业务类测试类中的方法就行。 import unittest# 测试类不强制test开头&#xff0c;仅作为规范。但必须继承unittest.TestCase class…

基于SpringBoot的野生动物保护发展平台的设计与实现(源码+SQL+LW+部署讲解)

文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…

Linux一些问题

修改YUM源 Centos7将yum源更换为国内源保姆级教程_centos使用中科大源-CSDN博客 直接安装包&#xff0c;走链接也行 Index of /7.9.2009/os/x86_64/Packages 直接复制里面的安装包链接&#xff0c;在命令行直接 yum install https://vault.centos.org/7.9.2009/os/x86_64/Pa…

ELK 使用教程采集系统日志 Elasticsearch、Logstash、Kibana

前言 你知道对于一个系统的上线考察&#xff0c;必备的几样东西是什么吗&#xff1f;其实这也是面试中考察求职者&#xff0c;是否真的做过系统开发和上线的必备问题。包括&#xff1a;服务治理(熔断/限流) (opens new window)、监控 (opens new window)和日志&#xff0c;如果…

04-spring-理-ApplicationContext的实现

实现1&#xff1a;ClassPathXmlApplicationContext 1、内部维护了 DefaultListableBeanFactory 2、通过XmlBeanDefinitionReader 读取配置文件将结果加入到 DefaultListableBeanFactory 3、没有维护 bean后置处理器 &#xff0c;可以通过在xml配置 <context:annotation-c…

【linux板卡】lubancat通过vnc远程访问桌面

鲁班猫开发板通过远程VNC连接桌面&#xff1a; 硬件&#xff1a;lubancat2&#xff0c;网线 软件&#xff1a;ssh软件&#xff0c;vnc viewer 参考链接&#xff1a;https://training.eeworld.com.cn/video/38821 1、ssh连接lubancat2 &#xff0c;输入ifconfig查看ip 2、输入 …

HarmonyOS Next ArkUI @State @Prop @Link @Provide @Consume笔记

学习目标&#xff1a; State装饰器 Prop装饰器 Link装饰器 Link装饰器 Provide装饰器 Consume装饰器 学习内容&#xff1a; GrandsonComponent Component export struct GrandsonComponent {Consume(provideValue) consumeValue: numberbuild() {Column(){Text(孙组件).font…

【GPT】Coze使用开放平台接口-【8】创建应用

coze 可以用来创建简单的应用啦&#xff0c;这样测试起来会比原本的 Agent 更加方便&#xff0c;我们来看看如何创建一个“语音Real不Real”的应用。这个应用就是来检测语音是否是伪造的&#xff0c;克隆或者是合成的。先看下原本 Agent 的样子&#xff1a; 深度伪造语音检测&a…

选择器(结构伪类选择器,伪元素选择器),PxCook软件,盒子模型

结构为类选择器 伪元素选择器 PxCook 盒子模型 (内外边距&#xff0c;边框&#xff09; 内外边距合并&#xff0c;塌陷问题 元素溢出 圆角 阴影: 模糊半径&#xff1a;越大越模糊&#xff0c;也就是越柔和 案例一&#xff1a;产品卡片 <!DOCTYPE html> <html lang&q…

[极客大挑战 2019]Knife1

这里很显然&#xff0c;根据提示可以猜测&#xff0c;已经有一句话木马上传了&#xff0c;但是路径这里不是很清楚&#xff0c;不知道路径在哪里&#xff0c;不过还是用菜刀连一下试试&#xff1a; 连接成功&#xff0c;在根目录下发现flag。不过如果不用菜刀&#xff0c;可以用…

面试手撕笔记ML/DL

数据集 数据集的批处理迭代器 Deep-ML | Batch Iterator for Dataset 实现一个批量可迭代函数&#xff0c;该函数在numpy数组X和可选numpy数组y中进行采样。该函数应该生成指定大小的批量。如果提供了y&#xff0c;则该函数应生成&#xff08;X, y&#xff09;对的批次&#…

flink cdc oceanbase(binlog模式)

接上文&#xff1a;一文说清flink从编码到部署上线 环境&#xff1a;①操作系统&#xff1a;阿里龙蜥 7.9&#xff08;平替CentOS7.9&#xff09;&#xff1b;②CPU&#xff1a;x86&#xff1b;③用户&#xff1a;root。 预研初衷&#xff1a;现在很多项目有国产化的要求&#…

JavaWeb开发(五)Servlet-ServletContext

1. ServletContext 1.1. ServletContext简介 1.1.1. ServletContext定义 ServletContext即Servlet上下文对象&#xff0c;该对象表示当前的web应用环境信息。 1.1.2. 获取ServletContext对象: &#xff08;1&#xff09;通过ServletConfig的getServletContext()方法可以得到…

ubuntu 如何使用vrf

在Ubuntu或其他Linux系统中&#xff0c;您使用ip命令和sysctl命令配置的网络和内核参数通常是临时的&#xff0c;这意味着在系统重启后这些配置会丢失。为了将这些配置持久化&#xff0c;您需要采取一些额外的步骤。 对于ip命令配置的网络接口和路由&#xff0c;您可以将这些配…

2024秋语法分析作业-B(满分25分)

特别注意&#xff1a;第17条产生式改为 17) Stmt → while ( Cond ) Stmt 【问题描述】 本次作业只测试一个含简单变量声明、赋值语句、输出语句、if语句和while语句的文法&#xff1a; 0) CompUnit → Block 1) Block → { BlockItemList } 2) BlockItemList → BlockItem…

SQL-leetcode-197. 上升的温度

197. 上升的温度 表&#xff1a; Weather ---------------------- | Column Name | Type | ---------------------- | id | int | | recordDate | date | | temperature | int | ---------------------- id 是该表具有唯一值的列。 没有具有相同 recordDate 的不同行。 该表包…

C#编写的金鱼趣味小应用 - 开源研究系列文章

今天逛网&#xff0c;在GitHub中文网上发现一个源码&#xff0c;里面有这个金鱼小应用&#xff0c;于是就下载下来&#xff0c;根据自己的C#架构模板进行了更改&#xff0c;最终形成了这个例子。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b; 1) 初始化&#xff1b; 将样…

通过无障碍服务(AccessibilityService)实现Android设备全局水印显示

一、无障碍功能简介 首先我们先来了解下无障碍功能的官方介绍&#xff1a; 无障碍服务仅应用于帮助残障用户使用 Android 设备和应用。它们在后台运行&#xff0c;并在触发 AccessibilityEvents 时接收系统的回调。此类事件表示用户界面中的某些状态转换&#xff0c;例如焦点已…

【Blackbox Exporter】prober.Handler源码详细分析

http.HandleFunc(path.Join(*routePrefix, "/probe"), func(w http.ResponseWriter, r *http.Request) {sc.Lock()conf : sc.Csc.Unlock()prober.Handler(w, r, conf, logger, rh, *timeoutOffset, nil, moduleUnknownCounter, allowedLevel)})我们了解到blackbox_ex…