【Synopsys工具使用】VCS使用与Makefile脚本调用

2023-11-03 05:52

本文主要是介绍【Synopsys工具使用】VCS使用与Makefile脚本调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、文件导入
  • 二、VCS仿真(使用可视化界面)
  • 三、VCS仿真(使用Maefile文件)
    • 3.1 Makefile文件编写
    • 3.2 仿真文件编写规范
    • 3.3 Makefile文件使用


一、文件导入

  新建一个文件夹新建一个文件夹(图中IC_work)
在这里插入图片描述  创建一个目录,用来存放文件(图中test)
在这里插入图片描述  将要操作的文件复制到文件夹下:在这里插入图片描述  此时打开终端,输入命令ls可以查看文件是否存在。在这里插入图片描述

二、VCS仿真(使用可视化界面)

  输入下面指令,对设计文件进行编译:

vcs -full64 -sverilog -debug_all -timescale=1ns/ns uart_dtx.v uart_tb.v -l com.log

  输入后终端显示如下:
在这里插入图片描述  目标文件夹下会多出一些文件
在这里插入图片描述  输入以下指令,打开VCS可视化界面:

dve &

在这里插入图片描述  点击simulate -> set up
在这里插入图片描述
  选择simv文件,点击ok
在这里插入图片描述  右击文件,选择Add to Waves->creat new group
在这里插入图片描述  在dve终端输入run 1s表示总共跑1s
在这里插入图片描述  即可看到仿真波形;
在这里插入图片描述

三、VCS仿真(使用Maefile文件)

3.1 Makefile文件编写

c编写Makefile文件可以让上述过程变得更简单。
  输入gvim Makefile编辑Makefile文件,在其中写入以下内容。
  Makefile文件内容:

all:find com sim run_dve  find:find -name "*.v" > file.list
com:                                                                        vcs -full64 +vcs+vcdpluson -sverilog -debug_all -f file.list -l vcs.log
sim:./simv -l vcs.log  run_dve:                            dve -full64 -vpd vcdplus.vpd &  clean:                              rm -rf *.vpd csrc *.log *.key *.vpd simv* DVE*

find:
  执行 find -name “*.v” > file.list 指令,将目录下的所有.v文件名写入file.list文件中。
com:
  执行 vcs -full64 +vcs+vcdpluson -sverilog -debug_all -f file.list -l vcs.log 指令,对file.list列出的设计文件进行编译。其中+vcs+vcdpluson必须,可生成接下来的vcdplus.vpd文件。
sim:
  执行./simv -l vcs.log 命令,对设计文件进行仿真。
run_dve:
  执行dve -full64 -vpd vcdplus.vpd & 命令,启动可视化界面,并读入波形文件。


3.2 仿真文件编写规范

  使用Makefile进行仿真时,测试文件的编写需要满足一定的规范。
  示例的测试文件如下:

`timescale 1ns/10ps
module uart_tb (
);reg                 uart_ref_clk;//system clock referencereg                 uart_tx_nrst;//system reset signalreg  [31:0]    uart_baunds_div;//baunds rate divisionreg  [7:0]        uart_tx_data;//uart tx 8bits data input   reg          uart_tx_data_qvld;//send data valid signalwire            uart_tx_finish;//uart send data finish flagwire              uart_tx_busy;//uart tx module busy flagwire              uart_tx_dout;//serial data outputinitial beginuart_ref_clk = 0;forever begin#1 uart_ref_clk = ~uart_ref_clk;endendinitial beginuart_tx_nrst = 0;uart_baunds_div = 4;#2 uart_tx_nrst = 1;uart_tx_data = 8'h33;uart_tx_data_qvld = 1'b1;#2 uart_tx_data_qvld = 1'b0;endinitial begin#1000;$finish;endinitial  begin$vcdpluson;end uart_dtx uart_dtx_inist0(.       uart_ref_clk(       uart_ref_clk),//system clock reference.       uart_tx_nrst(       uart_tx_nrst),//system reset signal.   uart_baunds_div(  uart_baunds_div),//baunds rate division.      uart_tx_data(     uart_tx_data),//uart tx 8bits data input   . uart_tx_data_qvld(uart_tx_data_qvld),//send data valid signal.    uart_tx_finish(   uart_tx_finish),//uart send data finish flag.      uart_tx_busy(     uart_tx_busy),//uart tx module busy flag.      uart_tx_dout(     uart_tx_dout) //serial data output
);
endmodule 

  其中需注意,在第1行要添加`timescale 1ns/10ps仿真时间;
  第31-34行添加整个仿真结束命令&finish,当仿真文件执行到此处,则退出仿真。若缺少该语句,则Makefile会卡死在sim过程(vcs仿真过程)。也可以不使用KaTeX parse error: Expected 'EOF', got '&' at position 25: …须在命令中指出仿真结束时间。 &̲emsp; 第36-…vcdpluson来产生vpd文件。

3.3 Makefile文件使用

  使用Makefile文件来进行仿真,只需要打开终端,写入make all指令即可,输入命令后,终端显示如下说明仿真成功:
在这里插入图片描述  等待片刻后,会打开VCS可视化界面。
在这里插入图片描述  选中需要查看的信号,右击选择Add To Waves -> New Wave View即可观察波形。
在这里插入图片描述
在这里插入图片描述

这篇关于【Synopsys工具使用】VCS使用与Makefile脚本调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/336044

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没