Modelsim仿真之VCD文件详解

news2024/12/26 11:53:12

目录

一、前言

二、VCD文件格式

2.1 头部

2.2 变量定义    ​

2.3 值打印

2.4 值变化部分

2.5 VCD文件示例

三、VCD文件生成

3.1 工程代码

3.2 modelsim操作

3.3 VCD结果查看

3.4 VCD类型2

四、参考资料


一、前言

    ​VCD(Value change dump)是一个ASCII文件,里面有关于给定设计的头信息,变量的定义,以及指定的变量或所有变量的值变化信息,变量的值变化可以是标量或矢量格式。VCD文件一般是由EDA仿真工具生成。

二、VCD文件格式

    ​VCD文件由头部,变量定义,打印变量,值变化四个部分组成。每一条语句内容都以关键字"$"开头,后面跟着命令名,以关键字“$end”结束,所有的VCD标记以空格,并且字母严格区分大小写。

VCD keywords are marked by a leading $; in general every keyword starts a command which is terminated by an explicit $end. Variable identifiers may also start with a $, but these may be distinguished by context.

All VCD tokens are delineated by whitespace. Data in the VCD file is case sensitive.

2.1 头部

    ​头部包含了时间戳,仿真器版本,时间精度(用于指定在值变化部分中映射时间增量的仿真时间单元)

2.2 变量定义    ​

    ​变量定义包含了在给定范围内的信号初始化信息。每个变量赋值了一个随机值标识,标识是由一个或多个ASCII字符(从!到~,对应的十进制范围为33-126),通常是一个或两个字符。如果仿真器确定多个变量有相同的值,则可以共用一个标识。

    ​每一行变量定义以"$var"开头,后面紧跟的是变量类型,数据宽度,标识符,变量名。

上述中的给定范围中范围类型定义和verilog中的定义一致,类型包括模块,任务,函数,fork块。

2.3 值打印

      该部分以$dumpvars或$dumpports开头,主要是变量的初始值
 

2.4 值变化部分

    ​ 值变化部分包含了仿真模型中信号随时间的变化值信息,变量所处的时间通过“#”加时间值。对于标量信号,信号的值用0或1表示,对于矢量信号(多比特信号),信号值格式用“b”或“B”,后面紧跟二进制值,然后是信号标识。对于实数变量用“r”或“R”开头,数据用%标识

2.5 VCD文件示例

###头部###
$date
   Date text. For example: November 11, 2009.
$end
$version
   VCD generator tool version info text.
$end
$comment
   Any comment text.
$end
$timescale 1ps $end

###变量定义,范围为module模块级####
$scope module logic $end    ###表示变量属于哪一个类型,此处为模块级###
$var wire 8 # data $end    ###此处变量类型为wire,宽度为8,标识符为#,变量名为data
$var wire 1 $ data_valid $end
$var wire 1 % en $end
$var wire 1 & rx_en $end
$var wire 1 ' tx_en $end
$var wire 1 ( empty $end
$var wire 1 ) underrun $end
$upscope $end
$enddefinitions $end  ###表示头信息和变量定义部分的结束

###值打印部分###
$dumpvars
bxxxxxxxx #
x$
0%
x&
x'
1(
0)
$end
#0
b10000001 #
0$
1%
0&
1'
0(
0)
#2211
0'
#2296
b0 #
1$
#2302
0$
#2303

三、VCD文件生成

下面将展示以4种触发器的verilog代码,使用modelsim生成vcd为例

3.1 工程代码

module FF(clk,d,rst,cls,out_syn_clear,out_syn_set,out_asyn_clear,out_asyn_set);
input clk,d,rst,cls;
output out_syn_clear,out_syn_set,out_asyn_clear,out_asyn_set;
//同步清零
always@(posedge clk ,posedge rst )
begin
if(rst)
out_syn_clear<=1'b0;
else 
if (cls)
out_syn_clear<=1'b0;
else
out_syn_clear<=d;
end
//同步置位
always@(posedge clk,posedge cls)
begin
if(rst)
out_syn_set<=1'b1;
else if (cls)
out_syn_set<=1'b0;
else
out_syn_set<=d;
end
//异步清零
always@(posedge clk or posedge cls)
begin
if(cls)
out_asyn_clear<=1'b0;
else 
out_asyn_clear<=d;
end

//异步置位
always@(posedge clk or posedge rst)
begin
if(rst)
out_asyn_set<=1'b1;
else 
out_asyn_set<=d;
end
endmodule

3.2 modelsim操作

    ​modelsim版本为Modelsim SE-64 2020.4,在File->New->Project 新建一个工程

 

在Project Name中输入工程名,此处以FF_project示例,其他选择默认即可

 

因为源文件FF.v已存在,所以选择Add Existing File

 

File Name中选择FF.v的路径

 

project窗口中添加成功的显示

 

在modelsim的Transcript窗口依次执行如下命令

>Vsim FF      #对FF.v文件进行仿真

>vcd file test.vcd      #创建名称为test的vcd文件

>vcd add /FF/*   #将FF中的所有信号添加到vcd文件中

>run 10ms   #运行仿真,时间为10ms

>quit -sim     #停止仿真

>pwd     #查看vcd文件的生成路径使用pwd命令

 

3.3 VCD结果查看

$date
	Sat Aug 03 13:52:16 2024
$end
$version
	ModelSim Version 2020.4
$end
$timescale
	1fs
$end

$scope module FF $end
$var wire 1 ! clk $end
$var wire 1 " d $end
$var wire 1 # rst $end
$var wire 1 $ cls $end
$var reg 1 % out_syn_clear $end
$var reg 1 & out_syn_set $end
$var reg 1 ' out_asyn_clear $end
$var reg 1 ( out_asyn_set $end
$upscope $end
$enddefinitions $end
#0
$dumpvars
x%
x&
x'
x(
z!
z"
z#
z$
$end

3.4 VCD类型2

上述方式生成的vcd文件只有四种状态0,1,X,Z,还有一种方式可以生成更多信息,包含参数的全部变化状态,信号强度和端口驱动数据。

命令如下

>Vsim FF      #对FF.v文件进行仿真

>vcd dumpports -file test2.vcd /FF/*      #创建名称为test2的vcd文件,同时使用dumpports打印

>run 10ms   #运行仿真,时间为10ms

>quit -sim     #停止仿真

 

vcd结果如下图,和之前的vcd文件区别是后面的dumpvars变成了dumpports,也包含端口的变化

$comment
	File created using the following command:
		vcd file test2.vcd -dumpports
$end
$date
	Sat Aug 03 14:00:39 2024
$end
$version
	dumpports ModelSim Version 2020.4
$end
$timescale
	1fs
$end

$scope module FF $end
$var port 1 <0 clk $end
$var port 1 <1 d $end
$var port 1 <2 rst $end
$var port 1 <3 cls $end
$var port 1 <4 out_syn_clear $end
$var port 1 <5 out_syn_set $end
$var port 1 <6 out_asyn_clear $end
$var port 1 <7 out_asyn_set $end
$upscope $end
$enddefinitions $end
#0
$dumpports
pZ 0 0 <0
pZ 0 0 <1
pZ 0 0 <2
pZ 0 0 <3
pX 6 6 <4
pX 6 6 <5
pX 6 6 <6
pX 6 6 <7
$end
$vcdclose
#10000000000000
$end

四、参考资料

https://en.wikipedia.org/wiki/Value_change_dump

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mv:自动对焦代码

try:# The camera will now focus on whatever is in front of it.sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS) except:raise (Exception("Auto focus is not supported by your sensor/board combination."))

说说ip地址和mac地址的区别

随着互联网的飞速发展&#xff0c;网络连接已成为我们日常生活中不可或缺的一部分。然而&#xff0c;在享受网络带来的便利时&#xff0c;你是否曾好奇过那些让设备能够相互通信的关键技术&#xff1f;IP地址与MAC地址&#xff0c;作为网络通信中的两大基石&#xff0c;它们各自…

2023华为od机试C卷【API集群负载统计】Python实现

思路 统计第二层级上computing出现的次数的时候&#xff0c;只需要for循环寻找computing是否在字典的键中。 如果找到&#xff0c;计数的时候是加上computing对应的值 def main():import collectionslength_char int(input())node_info {}for i in range(length_char):char…

### 微软的传奇与未来:从车库到云端的飞跃

今天我要和大家聊聊科技界的超级明星——微软。这家公司几乎每个人都听过&#xff0c;从90年Windows全家桶&#xff0c;到现在的云端革命&#xff0c;微软的故事简直有点儿像科技界的“美国梦”。 #### **车库里的梦想** 一切都得从1975年说起。当时&#xff0c;比尔盖茨和保…

【博客22】缤果Android_USB串口调试助手V1.0(高级篇)

超级好用的Android_USB调试助手 ( Android Studio Java) 开发工具: android-studio-2022.2.1.20-windows.exe usb-serial-for-android 目录 一、软件概要&#xff1a; 二、软件界面&#xff1a; 1.App演示 2.其他扩展展示 2.1 USB枚举 2.2 波特率 2.3 自定义指令集 2.…

一种别样的Unicode Python编码方式,完美转换表情和阿拉伯语

我们可能有时候在处理字符时需要处理到非ASCII的字符&#xff0c;比如将表情、阿拉伯语转换为Unicode字符&#xff0c;从而避免在传输时会出现乱码的情况。 Unicode验证网站&#xff1a; unicode转换网站 目的&#xff1a;转换下面除ASCII字符外的字符为Unicode字符&#x1f…

Upload-labs靶场Pass01-Pass21全解

文章目录 Pass-01 前端JSJS绕过上传或者用burp抓包的方式 Pass-02 MIME检测Pass-03 特殊文件后缀黑白名单绕过特殊文件名绕过 Pass-04 .htacess上传Pass-05 user.ini文件上传Pass-06 大小写绕过Pass-07 空格绕过Pass-08 .绕过Pass-09 ::$DATA绕过Pass-10 .空格.绕过Pass-11 双写…

⾃定义类型:联合和枚举详解

本章讲述的是自定义类型中联合和枚举&#xff0c;在本章我们将会认识联合体&#xff0c;枚举的声明&#xff0c;使用&#xff0c;以及联体的大小&#xff0c;枚举类型的优点。 1.联合体 1.联合体类型的声明 像结构体⼀样&#xff0c;联合体也是由⼀个或者多个成员构成&#…

重新设计 Baklib 中的分析数据处理

数据库是任何应用程序性能最关键的部分之一。当谈到 Baklib 时&#xff0c;考虑到高度可扩展的 SaaS 环境&#xff0c;我们总是致力于提高应用程序的性能。 我们不断尝试提高应用程序的性能&#xff0c;在密切监视应用程序是否有任何挫折和改进的同时&#xff0c;我们发现每天…

推动未来的引擎:人工智能大模型的现状与发展

推动未来的引擎&#xff1a;人工智能大模型的现状与发展 一、引言 随着人工智能技术的迅速发展&#xff0c;人工智能大模型作为其中的重要组成部分&#xff0c;正逐渐成为推动科技进步的重要引擎。无论是在自然语言处理、计算机视觉&#xff0c;还是智能推荐等领域&#xff0…

快讯 | 苹果携手OpenAI,ChatGPT即将登陆iOS 18

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

MATLAB预测模型(3)

一、前言 在MATLAB中&#xff0c;实现不同类型的预测模型&#xff0c;如马尔科夫预测、神经网络预测、模糊预测和灰色预测&#xff0c;需要用到不同的函数和工具箱。下面我将为每种预测模型提供一个基本的示例代码。 二、实现 1. 马尔科夫预测 马尔科夫预测通常用于处理具有无…

四大内存区域揭秘:你真的了解你的程序吗?

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好!我是你们的技术小伙伴小米,今天我们来聊聊操作系统中的进程空间。作为一名技术爱好者,我特别兴奋地为大家拆解一下进程空间的四大区域:栈区…

嵌入式实习--MobaXterm连接开发板与SSH远端服务器详细使用教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、前期准备二、安装USB串口模块驱动1.1驱动未自动安装 二、MobaXterm安装使用2.1 MobaXterm 软件安装2.2 MobaXterm 软件使用2.2.1连接开发板2.2.2 远程SSH连…

图论-最小生成树

Prim算法 算法描述 dist[i]<-- for(i 0;i<n;i) t<--找到集合外最近的点 用t更新其他点到集合的距离&#xff08;这个集合就是已经确定的最小生成树的点和边&#xff09; st[t] true; dist[i] <-- 无穷 这一步是初始化所有节点到集合的最小距离为无穷大。dist[i] 表…

科普文:微服务之Spring Cloud 服务调用组件Openfeign

一、概述 Feign是声明式Web服务客户端&#xff0c;它使编写Web服务客户端更加容易。 Feign不做任何请求处理&#xff0c;通过处理注解相关信息生成Request&#xff0c;并对调用返回的数据进行解码&#xff0c;从而实现简化HTTP API的开发。 如果要使用Feign&#xff0c;需要创…

项目相关内容 ----- 2实现打印 ---- 图片与字符

目录 1 . 实现图图片的打印 1&#xff09;结构体定义 2&#xff09;画点线 3&#xff09;清屏 4&#xff09;图片显示 5&#xff09;主函数部分 2 . 实现字符的打印 1) 定义BMP位图文件的头部信息以及信息头​ 2&#xff09;实现打印字符的绘制​ 3 . 打印文本内容​ 附…

你会在Vision Pro里编程吗?

你会在Vision Pro里编程吗&#xff1f; Vision Pro作为一位开发者&#xff0c;你会考虑将Vision Pro应用到编程中吗&#xff1f;你认为Vision Pro有可能改变开发者的工作模式与效率吗&#xff1f; 初见Vision Pro有点陌生&#xff0c;不太了解Vision Pro是什么。那么这里先来了…

顶点着色器片段着色器

/* * FileName : OpenGL_Tutorial.cpp * Time : 2024-08-03 10:00:00 * Author : XuMing * Email : 920972751qq.com * description : 使用OpenGL进行顶点输入和着色器编译的详细解析 */#include <glad/glad.h> #include <GLFW/glfw3.…

【论文阅读visual grounding】QRNet论文解读与关键代码实现

Shifting More Attention to Visual Backbone: Query-modulated Refinement Networks for End-to-End Visual Grounding 论文链接&#xff1a;https://arxiv.org/abs/2203.15442 代码链接&#xff1a;https://github.com/z-w-wang/QRNet Motivation 视觉定位&#xff08;visua…