fscanf函数的使用

转载:https://blog.csdn.net/winson_cys/article/details/100175964?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

Verilog编写testbench时,系统函数比较常用的一般为display、 display、display、fopen、fclose、 fclose、fclose、fwrite、$fmonitor。但是关于对于读取文件中的数据所采用的fread、fscanf、fgets使用频率相对较少。今天由于需要读取文件中的2进制数据,并且没次只读取文件中的一行,并将数据作为输出。经过好几个小时的折腾,决定写下此篇博文记录从对于该系统函数的一无所知,到正确使用的艰难历程。

首先介绍一下,fscanf函数的基本功能,详细在网络上找的介绍基本是大同小异。$fscanf(文件指针,读取格式,数组)该系统函数每次读取文件中的每一行数据,这当中需要特别注意一点,每一行只能是数据,例如:0011_0001,如果出现0b0011_0001,则无法正常的读取,而且对于初学者还不知道为什么,只是觉得很奇怪,甚至有些初学者觉得这个系统函数太不好用了,实则为自己的无知,这段时间看人类简史,书中提到保持无知是一件重要的事情,但是需要将这种无知转化为追求知识的动力,与参与科技革命的欧洲人一样;

接下来,结合我自身的理解谈一谈该系统函数,文件指针:指向某一文件的开头,举个栗子,f_r = $fopen(‘xxx.txt’, ‘r’),文件指针f_r指向xxx.txt文件的开头。读取格式:%d %b %h为分别表示十进制、2进制、16进制。数组:存放从xxx.txt读取的数据,例如xxx.txt第一行存放0011_0001,则数组a=0011_0001。此时若没有将数组a中的数据及时的进行处理(写入另外一个文件、给寄存器reg1)在读取xxx.txt文件中的下一行(1111_1111)数据时,之前存放于数组a的数据将会被覆盖,即此时数组a中的数据为0011_0001。依次类推。。。。。。。,记得使用完文件之后切记要关闭,使用fclose系统函数。我本人比较好奇fscanf函数的返回值是个啥,通过采用modelsim仿真的结果表明应该涉及一次性读取的数据个数。例如count = $fscanf(fp_r,"%b" ,img_rgb_dat_reg)返回值为1,一次只读取一个数据。可以肯定的是绝对和待操作文件中的内容没有任何关系。得到函数返回值通常采用以下方式:

             1       integer = count;
             2       count=$fscanf(fp_r,"%b" ,reg1) ; //fp_r文件指针,%b读取格式,reg1:数组


这里有一点值得讨论,那就是数组,在前面我们中谈到数组用来存放文件中读取的数据,且不及时对数组中的数据进行处理会发生覆盖问题。涉及到数组那我们就必须对聊一聊位宽的问题,举个例子:reg [7:0]reg1,表示定义8bits的数组一个,该数组最大只能存放8bits的数据,如果读取的数据小于8bits,则在数据的前面补零(亲测)。另一种情况我们没有进行测试,我相信不会报错,应该是存在数据位的丢失。这里的数组与readmenb函数的中使用的数组有很大区别。关于readmenb在这里不做过多的讲述。有兴趣的可以查看此链接的内容:https://blog.csdn.net/weizhl10131729/article/details/78556489。在这里建议采用python处理成符合要求的数据,在使用Verilog进行一系列操作。

罗里吧嗦讲了一大堆,才解释完一个系统函数,但是我觉得按照我这种方式去学习其他的系统函数应有个更加清晰的思路。本文仅仅提供一种学习的思路。显然在学习一个函数关键要知道,该函数可以用来做什么,函数的输入是什么,每个参数对应的含义和需要注意的地方、函数的返回值时扫什么。

最后贴出一个示例以及我学习该函数所参考的网络资料的链接:https://blog.csdn.net/cxc19890214/article/details/41146531,该示例来源于我所编写testbench的部分,有些信号不必理会,看看红框的内容即可,红框的内容较好的体现了上面讲述的内容。

fscanf函数的使用_第1张图片
版权声明:本文为CSDN博主「winson_c」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/winson_cys/article/details/100175964

你可能感兴趣的:(FPGA)