首页 > 其他分享 >testbench (verilog)读取文件的细节问题

testbench (verilog)读取文件的细节问题

时间:2022-09-18 17:58:53浏览次数:75  
标签:文件 code 读取 format fd verilog 文本文件 testbench

为什么要用?

在使用数字图像IC设计中,往往需要测试所设计的图像处理模块的功能,此时模块的输入端数据时序要求比较复杂,因此需要通过testbench按照一定的时序关系读取外部的文件中的数据,或者模块计算完后需要将输出的数据导出到外部文件中进行存储。

Verilog 提供了很多可以对文件进行操作的系统任务

文件开、关:$fopen , $fclose , $ferror
文件写入 :$fdisplay , $fwrite , $fstrobe , $fmonitor
字符串写入:$sformat , $swrite
文件读取 :$fgetc , $fgets , $fscanf , $fread
文件定位 :$fseek , $ftell , $feof , $frewind
存储器加载:$readmemh , $readmemb

如何使用?

  • 文件打开: fd = $fopen("filename",mode)
    其中 fd : 为返回的32bit文件描述符 (打开错误时fd为0)
    filename : 打开文件的名字
    mode : 用于指定文件的打开方式
文件打开方式 mode 类型及其描述如下:
r   只读打开一个文本文件,只允许读数据。
w   只写打开一个文本文件,只允许写数据。如果文件存在,则原文件内容会被删除。如果文件不存在,则创建新文件。
a   追加打开一个文本文件,并在文件末尾写数据。如果文件如果文件不存在,则创建新文件。
rb  只读打开一个二进制文件,只允许读数据。
wb  只写打开或建立一个二进制文件,只允许写数据。
ab  追加打开一个二进制文件,并在文件末尾写数据。
r+  读写打开一个文本文件,允许读和写
w+  读写打开或建立一个文本文件,允许读写。如果文件存在,则原文件内容会被删除。如果文件不存在,则创建新文件。
a+  读写打开一个文本文件,允许读和写。如果文件不存在,则创建新文件。读取文件会从文件起始地址的开始,写入只能是追加模式。
rb+ 读写打开一个二进制文本文件,功能与 "r+" 类似。
wb+ 读写打开或建立一个二进制文本文件,功能与 "w+" 类似。
ab+ 读写打开一个二进制文本文件,功能与 "a+" 类似。
  • 文件关闭: fd = $fclose(fd)
    其中 fd : 需要关闭的对应文件
  • 文件写入
    $fdisplay(fd, arguments) ; 按顺序或条件写文件,自动换行
    $fwrite(fd, arguments) ; 按顺序或条件写文件,不自动换行
    $fstrobe(fd, arguments) ; 语句执行完毕后选通写文件
    $fmonitor(fd, arguments) ; 只要数据有变化就写文件

例子:$fdisplay(fd, "New data1: %h", fd) ;

  • 字符串写入
    $swrite(reg, list_of_arguments) ;
    按顺序或条件写字符串到变量 reg 中
    len = $sformat(reg, format_str, arguments) ;
    按格式 format_str 写字符串到变量 reg 中格式与 $display 指定格式时一致不建议省略第二个参数 format_str可返回字符串长度 len。
  • ★★★文件读取
    按字符读文件 c = $fgetc( fd ) ;
    按字符格式将 fd 数据输出给变量 c,c 位宽最少为 8

按字符写缓冲区 code = $ungetc(c, fd ) ;
向文件 fd 缓冲区写字符 c,c 值在下次调用 $fgetc 时返回,文件 fd 自身内容不会发生变化。正常写缓冲时返回值 code 为 0,发生错误时返回值 code 为 EOF

按行读文件 code = $fgets(str, fd) ;
按字符连续读,直至变量 str 被填满,或一行内容读取完毕,或文件结束正常读取时返回值 code 为读取行数(次数),发生错误时 code 为 0

按格式读文件 code = $fscanf(fd, format, args) ;
按格式 format 将文件 fd 中的数据读取到变量 args 中
format 可参考 $display 指定格式说明读取一次的停止条件为空格或换行
读取发生错误时返回值 code 为 0

按格式读字符串 code = $sscanf(str, format, args) ;
按格式 format 将字符串型变量 str 读取到变量 args 中调用格式方法和 $fscanf 一致

按二进制读文件 code = $fread(store, fd, start, count) ;
按二进制数据流格式将数据从文件 fd 读取到数组或寄存器变量 store 中。start 为文件起始地址,count 为读取长度。若 start/count 未指定,数据会全部填充至变量 store 中若 store 为寄存器类型,则 start/count 参数无效,store 变量填充满一次数据后便会停止读取

标签:文件,code,读取,format,fd,verilog,文本文件,testbench
From: https://www.cnblogs.com/powerforme/p/16704899.html

相关文章

  • RCE+CC攻击+目录穿越+任意文件读取...
    目录 目录穿越   目录穿越原理:目录穿越(也被称为目录遍历/directorytraversal/pathtraversal)是通过使用../等目录控制序列或者文件的绝对路径来访问存储......
  • 实例-rust-从json文件中读取数据并将输出写入json文件
    Cargo.toml[package]name="rust-example5"version="0.1.0"edition="2021"#Seemorekeysandtheirdefinitionsathttps://doc.rust-lang.org/cargo/refere......
  • SystemVerilog中动态数组调整大小
    题目:现有一个大小为100的动态数组如下,如何把它定义成大小为200,并且前100个元素仍然保留的数组,请写出具体代码integerdata;data=new[100]; 其实就一句代码:data=ne......
  • 在SystemVerilog中,类成员的private, public, protected 属性分别是什么意思,SystemVerilo
    默认情况下,可以使用类的对象句柄从类外部访问类的成员和方法,即它们是public的。如果我们不希望某些成员和某些方法可以从类外部访问怎么办?为了防止意外修改类成员/方法。,......
  • java读取和设置配置文件中的属性参数
    想必大家和我一样经常在项目中读取一些配置文件,因为读取的配置很少,结构简单又不想搞个读取xml,比较麻烦。所以这时大多采取读取.properties配置文件,我们和大名鼎鼎的log4j......
  • 这个Python读取文件的方法,堪称天花板级别...
    前言嗨喽,大家好呀~这里是爱看美女的茜茜呐又到了学Python时刻~今天咱们来了解一下fileinput。说到fileinput,可能90%的码农表示没用过,甚至没有听说过。这不奇怪,因......
  • verilog基础
    位宽:在芯片设计中,可以理解位连接的线路,位宽数表示线路数量;芯片内部寄存器:芯片内部由1bit的寄存器组合构成不同位宽寄存器  verilog基础数据类型:wire线网:表......
  • Revit二次开发——读取shp
    简单记录一下进展:首先编译shp读写库为X64位,因为本机的Revit2018是64位的。接着编译C#封装库MapTools,AnyCPU,应该是P-Invoke实现的,有些年头不搞C#了,不知道最新技术是啥。......
  • Python读取PDF文档中的表格数据
    #-*-coding:utf-8-*-#在pdfplumber模块中提供了extract_tables()方法importpdfplumberimportpandasaspd#提取PDF文档中的表格defdemo1():withpd......
  • python a+模式读取文件时内容为空
    1.pythona+模式打开文件,然后直接读取,这时候读取出来的内容为空----为什么呢?这是因为打开时是以追加的模式打开的,这时候光标定位在最后,此时读取readline,吃从当前光标开......