testbench中一些常用的系统命令

前言

记录一下自己仿真过程中用到过的一些用于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/1nsmodule pic_tb();reg             clk,rst_n				;
reg [7:0]      data_in					;
reg [7:0]      data_out				     ;initial beginclk = 1;rst_n = 0;#20 rst_n = 1;
end
always #10 clk = ~clk;integer file_r;
integer file_w;
initial beginfile_r = $fopen("D:/BaiduNetdiskDownload/1.txt","r");file_w = $fopen("D:/BaiduNetdiskDownload/2.txt","w");
endreg [7:0] r_cnt;always @(posedge clk or negedge rst_n)beginif(~rst_n)beginr_cnt <= 0;data_in <= 0;endelse if(r_cnt<20)begin$fscanf(file_r,"%h",data_in);r_cnt <= r_cnt +1;endelse beginr_cnt <= 0;$fclose(file_r);end
endalways @(posedge clk or negedge rst_n)beginif(~rst_n)beginr_cnt <= 0;data_out <= 0;endelse if(r_cnt<20)begindata_out <= data_in;$fwrite(file_w,"%h",data_out);r_cnt <= r_cnt +1;endelse beginr_cnt <= 0;$fclose(file_w);end
endendmodule

数据操作

$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.hqwc.cn/news/586010.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

innovus:add text脚本

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 genPinText text.rpt -cells [dbGet top.name] set in [split [exec cat text.rpt] "\n"] foreach line $in { lassign $line name x y layer cell set pt_x [str…

linux监控命令全

1.1 top 1.1.1 命令说明 Top 命令能够实时监控系统的运行状态&#xff0c;并且可以按照cpu、内存和执行时间进行排序 1.1.2 用法 top -hv | -bcisSHM -d delay -n iterations [-u user | -U user] -p pid [,pid ...] 1.1.3 参数说明 命令行启动参数&#xff1a; -b : 批次…

小白的第一次sql注入实战

前言 当时最初接触安全的时候拿下的第一个shell&#xff0c;还是比较兴奋的&#xff0c;忽略一下文章写的很水。 有id尝试sql注入 找这种sql注入的站用sql检索就行了&#xff0c;但是最好挂代理用谷歌搜索&#xff0c;百度的话搜sql注入的很多被别人打过了&#xff0c;导致链…

go入门到精通

初识Go语言 Go语言介绍 Go语言是什么 2009年11月10日&#xff0c;Go语言正式成为开源编程语言家庭的一员。 Go语言&#xff08;或称Golang&#xff09;是云计算时代的C语言。Go语言的诞生是为了让程序员有更高的生产效率&#xff0c;Go语言专门针对多处理器系统应用程序的编…

pytorch yolov5+Deepsort实现目标检测和跟踪+单目测距

最近一直在整理单目测距的内容&#xff0c;想着检测单目测距都写完了&#xff0c;顺手也写个检测跟踪单目测距&#xff0c;算是总结下这部分内容吧&#xff0c;如果有错误&#xff0c;还请不吝赐教&#xff01;&#xff01; 参考文献: YOLOv5DeepSort实现目标跟踪 pytorch yolo…

标准版IP地址证书

IP地址证书是一种网络安全工具&#xff0c;用于确保互联网通信中IP地址的所有权和真实性。它类似于为网站颁发的SSL/TLS证书&#xff0c;但专门针对IP地址。这种证书由受信任的第三方机构&#xff08;如证书颁发机构&#xff09;签发&#xff0c;包含公钥、所有者信息和有效期。…

低噪声、低电压、低功耗运放,提供轨到轨输出能力的芯片D722介绍

产品简介 D722是低噪声、低电压、低功耗运放&#xff0c;应用广泛。D722具有9MHz的高增益带宽积&#xff0c;转换速率为8.5V/μs&#xff0c;静态电流为1.7mA&#xff08;5V电源电压&#xff09;。 D722具有低电压、低噪声的特点&#xff0c;并提供轨到轨输出能力&#xff0c;D…

BGP联盟、对等体组、按组打包

BGP联盟 将大的AS划分为几个子AS&#xff08;成员AS&#xff09;&#xff0c;每个子AS内部建立全连接的IBGP邻居&#xff0c;子AS之间建立EBGP邻接关系。 联盟AS&#xff1a;大AS&#xff0c;就是常说的AS号&#xff0c;一般使用公有AS号。 成员AS&#xff1a;小AS&#xff…

从C到C++:深入理解基础语法差别

C基础语法讲解 前言1.输入输出2.命名空间2.1命名空间的理解&#xff1a;2.2命名空间的使用方式 3.缺省参数3.1概念&#xff1a;3.2分类&#xff1a;半缺省函数注意事项&#xff1a; 3.3使用案例&#xff1a;顺序表的初始化 4.函数重载4.1参数重载类型类型&#xff1a; 5.引用5.…

Type-c转USBA3.0芯片 USBA3.0转Type-c芯片(USB3.1GEN2 多路切换Switch芯片) VL162

VL162具有CC功能的USB Type-C数据开关USB 3.1 Gen2 (10Gbps) VL162 带CC功能的USB Type-C数据开关 支持最高10Gbps 2差分通道&#xff0c;2:1 MUX/DeMUX 兼容10Gbps USB3.1 Gen2 低功耗&#xff0c;6mW在设备模式下有效 高直流共模电压&#xff0c;支持2.0V 28针QFN 3.5 x 4.5m…

Python 多线程 DNS 搜索性能优化

Python中的多线程经常用于IO密集型任务&#xff0c;如网络请求&#xff0c;其中DNS查询是常见的一种场景。由于全局解释器锁&#xff08;GIL&#xff09;的存在&#xff0c;Python的多线程并不适合计算密集型任务&#xff0c;但对于IO密集型任务&#xff0c;如DNS查询&#xff…

HarmonyOS NEXT应用开发案例——阻塞事件冒泡

介绍 本示例主要介绍在点击事件中&#xff0c;子组件enabled属性设置为false的时候&#xff0c;如何解决点击子组件模块区域会触发父组件的点击事件问题&#xff1b;以及触摸事件中当子组件触发触摸事件的时候&#xff0c;父组件如果设置触摸事件的话&#xff0c;如何解决父组…