testbench中一些常用的系统命令

news2024/11/27 16:32:21

前言

记录一下自己仿真过程中用到过的一些用于testbench的系统命令,根据自己用到的情况不定时进行补充。

文件操作

$fopen

用于打开文件的命令,格式如下

file = $fopen("file_name","mode")

file_name:要打开的文件名,注意文件路径中要使用  " / ",例如 " D:/test/file.txt "

mode:要对打开的文件进行的操作,通常记住读写两种就可以

                r:只读打开一个文件,只允许读数据

                w:只写打开一个文件,只允许写数据,如果文件存在,原数据会被删除,文件不存在则新建文件

注意:

  • 这里file创建的是一个指向文件的指针
  • file这个参数在仿真中会显示一个固定值,与读取的文件内容无关。如图,file_r显示ffffb1e0,file_w显示ffffb1e1,这是个固定的值,与打开的文件无关

$fscanf

该函数每次读取打开的文件中的一行数据,格式如下

$fscanf(file,"datatype",data)

file:由$fopen创建的指针,即  file=$fopen(‘xxx.txt’,'r')   中的返回值file,指向文件的开头

datatype:'%b'、'%d'、'%h',即二进制、十进制以及十六进制

data:用于存放从xxx.txt读取的数据的数组,要提前创建

注意:

  • 只会读取数字,用空格(多个空格等同一个)或换行符隔开每个数字
  • 超过数据位数的截取低有效位,如图中12345以及23456只读取了低位的45和56
  • 遇到不能识别的符号(数字以及十六进制用到的字母以外的字母或符号)会停止读取,如图中只读取到了23456,jk以及后面的1234都没有读取

$fwrite

想打开的写格式的文件内写入数据,格式如下

$fwrite(file,"datatype",data)

file:由$fopen创建的指针,即  file=$fopen(‘xxx.txt’,'r')   中的返回值file,指向文件的开头

datatype:'%b'、'%d'、'%h',即二进制、十进制以及十六进制

data:向xxx.txt内写入的数据

注意:

  • 数据的写入会无间隔的写在同一行,需要在格式内手动添加 \n (例如·$fwrite(f_r,"%h\n",data)) 进行换行。如下图,所有写入数据都写到了同一行
  • 数据的高位为0时,会写入0。如图,读取时,文件内数据是1,但是存储时是8位的十六进制,显示的是01,写入文件时就会写入01

$fclose

关闭打开的文件,格式如下

$fclose(file)

file:由$fopen创建的指针,即  file=$fopen(‘xxx.txt’,'r')   中的返回值file,指向文件的开头

注意:

  • 仿真结束后会自动的关闭文件,但是如果没有结束仿真,也没有关闭文件,则无法用别的程序读取该文件,该文件大小也会显示为0k

使用示例

`timescale 1ns/1ns

module pic_tb();

reg             clk,rst_n				;
reg [7:0]      data_in					;
reg [7:0]      data_out				     ;

initial begin
	clk = 1;
	rst_n = 0;
	#20 rst_n = 1;
end
always #10 clk = ~clk;

integer file_r;
integer file_w;
initial begin
    file_r = $fopen("D:/BaiduNetdiskDownload/1.txt","r");
    file_w = $fopen("D:/BaiduNetdiskDownload/2.txt","w");
end

reg [7:0] r_cnt;

always @(posedge clk or negedge rst_n)begin
	if(~rst_n)begin
		r_cnt <= 0;
		data_in <= 0;
	end
    else if(r_cnt<20)begin
        $fscanf(file_r,"%h",data_in);
        r_cnt <= r_cnt +1;
    end
    else begin
        r_cnt <= 0;
        $fclose(file_r);
    end
end

always @(posedge clk or negedge rst_n)begin
    if(~rst_n)begin
		r_cnt <= 0;
		data_out <= 0;
	end
    else if(r_cnt<20)begin
		data_out <= data_in;
        $fwrite(file_w,"%h",data_out);
        r_cnt <= r_cnt +1;
    end
    else begin
        r_cnt <= 0;
        $fclose(file_w);
    end
end

endmodule

数据操作

$readmemb/$readmemh

从文件中读取数据,格式如下

$readmemb("file_name",data,addr_start,addr_end)

file_name:要读取的文件名,注意文件路径中要使用  " / ",例如 " D:/test/file.txt "

data:用于存储读取的数据的数组,要注意大小需要足够容纳要读取的数据

addr_start:开始地址,非必须参数

addr_end:结束地址,非必须参数

注意:

  • $fscanf是一个数据一个数据的对文件进行扫描读取,$readmemb是一次性读取
  • data需要是数组,即  reg [7:0] mem [255:0] 格式创建的,大小要足够容纳一次性读取的数据
  • 除了$readmemb,还有$readmemh,最后的b和h表示读取数据的进制类型,readmemb以二进制读取数据,readmemh以十六进制读取数据

系统函数

$finish

结束仿真,testbench运行到该行会停止运行,格式如下

$finish

$display

在tcl输出内容,相当于printf,格式如下

$display("hello")

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

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

相关文章

CTK插件框架学习-事件监听(04)

CTK插件框架学习-插件注册调用(03)https://mp.csdn.net/mp_blog/creation/editor/136989802 一、主要流程 发送者注册消息事件接收者订阅消息事件接收者相应消息事件 事件监听比插件接口调用耦合性更弱&#xff0c;事件由框架维护&#xff0c;不需要指定发送方和接收方 二、…

“创新强基·应用强链”2024第104届上海电子展会

2024第104届上海电子展会 2024 Shanghai electron Expo 时间:2024年11月18--20日 地点:上海新国际博览中心 主题:创新强基应用强链 上海与长三角各地产业协同发展&#xff0c;到2025年&#xff0c;初步建成具有全球影响力和竞争力的世界级电子信息产业集群。产业链稳定性和韧…

如何在Facebook直播?手把手教你进行Facebook Live!

做跨境电商和外贸的朋友们&#xff0c;你们有试过用直播来卖货吗&#xff1f;现在有很多海外直播带货平台&#xff0c;像TikTok、YouTube等平台就受到许多卖家青睐。但是&#xff0c;作为社媒营销主阵地之一的 Facebook&#xff0c;它的直播功能 Facebook Live 却常常被许多卖家…

全氟化合物的变异系数

采用变异系数&#xff08;the coefficient of variation&#xff1b;CV&#xff09;来评价PFAAs的离散程度[1]。CV≤10%表示弱变异水平&#xff0c;10% < CV≤100%表示培养中等变异&#xff0c;CV > 100%表示强变异。CV的计算方法如下&#xff1a; 其中&#xff0c;s为标…

python爬虫----了解爬虫(十一天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

【云服务选购指南】4月 阿里云99续费统计 集体降价20% 京东云全网保价 博客建站 游戏服务器 2-64G大盘点

本文纯原创&#xff0c;侵权必究 【云服务器推荐】价格对比&#xff01;阿里云 京东云 腾讯云 选购指南视频截图 《最新对比表》已更新在文章头部—腾讯云文档&#xff0c;文章具有时效性&#xff0c;请以腾讯文档为准&#xff01; 【腾讯文档实时更新】2024年-幻兽帕鲁服务器…

computed计算属性、watch侦听器、生命周期

计算属性 点击查看 Vue文档 基础语法 多次使用计算属性&#xff0c;计算属性方法也只执行一次&#xff0c; 调用计算属性的方法不能加() 直接修改计算数学的值 计算属性不能通过双向绑定修改&#xff08;默认不能改&#xff09; 想要修改计算属性&#xff0c;就必须使用计…

如何防止亚马逊账户关联问题?

亚马逊风险控制是亚马逊为了防止买家账户欺诈而实施的规则。具体的风险控制算法是亚马逊技术部门的少数人所独有的&#xff0c;因此我们难以获知其中的细节。为了提高销量&#xff0c;一些卖家可能会采取一些措施&#xff0c;但是由于风控措施的严格&#xff0c;许多卖家深感头…

使用CMake搭建简单的Qt程序

目录结构 代码 CMakeLists.txt&#xff1a; cmake_minimum_required(VERSION 3.15)set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON)# set the project name project(xxx)# 设置Qt的路径 # 例如 E:/Qt/Qt/aaa/msvc2019_64 # aaa 为Qt的版本号 set(QT_PATH…

如何生成一个指定长度的空数组?

简便写法&#xff1a;使用constructor构造函数进行创建&#xff0c;第一个空数组 [ ] 表示创建一个空数组&#xff0c;然后调用 constructor 属性并传入参数指定数组长度。 [].constructor(17)可用于遍历&#xff0c;例如使用ngFor进行单纯的遍历&#xff0c;参数为遍历次数。

常见的设备通讯协议分析

不同的通信协议根据其设计目的和应用场景&#xff0c;各有其优缺点。在选择通信协议时&#xff0c;需要根据具体的应用需求和场景&#xff0c;权衡各种协议的优缺点&#xff0c;选择最适合的协议。例如&#xff0c;对于实时性要求高的工业控制系统&#xff0c;可能会选择CAN或M…

GWO-CNN-BiLSTM多输入时序预测|灰狼群算法优化的卷积-双向长短期神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&…

【Leetcode每日一题】 动态规划 - 不同路径(难度⭐⭐)(49)

1. 题目解析 题目链接&#xff1a;63. 不同路径 II 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 这个问题就像是在一个迷宫中找路&#xff0c;只不过这个迷宫有些格子是不能走的&#xff0c;也就是那些“障碍物”。…

简单几步轻松实现电脑快速切换IP地址

在数字化时代&#xff0c;网络已经成为我们日常生活和工作中不可或缺的一部分。IP地址作为网络设备的标识符&#xff0c;扮演着至关重要的角色。然而&#xff0c;在某些特定场景下&#xff0c;我们可能需要快速切换IP地址&#xff0c;以满足不同的网络需求或保护个人隐私。虎观…

算法基础--递归

&#x1f600;前言 递归是一种重要的算法思想&#xff0c;常用于解决问题的分解与求解。在计算机科学中&#xff0c;递归是指一个函数在其定义中调用自身的情况。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 算法基础--递归递归入门例题递归实现指数型枚举递归实现排…

gulp的基本使用(一)

gulp的基本使用 开始全局安装gulp-cli本地项目初始化gulp插件的安装查看是否安装成功项目根目录创建gulpfile.js文件运行命令测试结果 开始 全局安装gulp-cli 命令 npm install --global gulp-cligulp-cli作用&#xff1a; gulp的命令行工具&#xff0c;它需要全局安装&…

华为交换机维护——管理接口

常见的设备管理方式有SNMP、Web、Telnet以及通过Console口管理等。从技术的角度分析&#xff0c;网络管理可分为带外管理和带内管理。所谓带内管理&#xff0c;是指网络中的管理数据和业务数据在相同的链路中传输。当管理数据的流量较少时&#xff0c;对整个网络的性能影响不明…

前后端开发之——文章分类管理

原文地址&#xff1a;前后端开发之——文章分类管理 - Pleasure的博客 下面是正文内容&#xff1a; 前言 上回书说到 文章管理系统之添加文章分类。就是通过点击“新建文章分类”按钮从而在服务端数据库中增加一个文章分类。 对于文章分类这个对象&#xff0c;增删改查属于配…

Windows提权—数据库提权-mysql提权mssql提权Oracle数据库提权

目录 Windows 提权—数据库提权一、mysql提权1.1 udf提权1.1.2 操作方法一 、MSF自动化--UDF提权--漏洞利用1.1.3 操作方法二、 手工导出sqlmap中的dll1.1.4 操作方法三、 moon.php大马利用 1.2 mof提权1.3 启动项提权1.4 反弹shell 二、MSSQL提权MSSQL提权方法1.使用xp_cmdshe…

项目管理工具的魔力:团队合作的秘诀大揭秘!

我们知道项目的成败往往取决于人。假如一个项目团队组织不善&#xff0c;即使项目经理能力很强也无法力挽狂澜&#xff0c;甚至被团队束缚。创建更好的项目团队可以从多方面下手其中项目管理工具就是重要的一项&#xff0c;如何利用项目管理工具组建更好的项目团队&#xff1f;…