FPGA开发中Testben读取外部文件的方式

1. 文件读写的作用

为什么需要使用Verilog语言读取/写入文件呢,主要是由于我们有时候需要将数据准备和分析的工作从Testbench中隔离出来,便于协同工作,需要调试一些寄存器的值,就需要通过文本中获取数据,然后来调试Verilog程序;这些文本信息可以通过C/C++、Excel表格、Matlab等工具生成测试数据,在代码测试的时候有助于你分析你的程序逻辑是否正确。

2. Testbench文件包括哪些操作

(1)打开文件

系统函数$fopen用于打开一个文件,将文件和integer指针关联,语法如下:

integer file_point = $fopen(file_name);  这里的 file_name 是一个路径,文件名存储的路径,用双引号“”包括。

你可以使用相对路径也可以使用绝对路径,一般将文件放在工程testbench文件同一级的目录下,你只需要在双引号之中写入文件名即可。

(2)关闭文件

系统任务$fclose用于关闭一个文件,格式如下:

$fclose(file_point);

(3) 从文件中读取数据

从文件中读取数据有两类方法,第一类为$fscanf系统任务,第二类为$readmemb 和 $readmemh,上述两种任务都可以从文本文件中读取数据,并将数据加载到存储器,被读取的文件可以包含空白空间、注释、二进制(如$readmemb)或十六进制(如$readmemh)数字,每个数字用空白空间隔离

下面将一下两种类型的语法

【$fscanf】

integer file, count;

count = $fscanf(file, format, args);

【$readmemb 】

readmemb( "文件名", 存储器名, 起始地址,终止地址);

【$readmemh】

readmemh( "文件名", 存储器名, 起始地址,终止地址);

3、文件操作的实例

写一个从文件中读取数据的操作,以十六进制方式读取一个文本文件1.txt中的内容:

readmemh_demo.v  文件

`timescale 1ns/1ps

module readmemh_demo;

	parameter data_period = 4;   //每个数据占据4个字节
	parameter data_num = 15;   // 读取数据的个数
	parameter BUF_SIZE = 32;  // 保证能存放字符的最大值,位宽
	
	// read_buf 
	reg [BUF_SIZE-1:0] read_buf[0:data_num -1];
	reg [BUF_SIZE-1:0] data;
	
	// 读取文本信息,采用$readmemh,将文本信息放到read_buf中
	initial $readmemh("1.txt", read_buf);
	
	// 显示读取的内容
	integer i = 0;
	initial begin
		#(data_period);
		$display("Content of read_buf after reading data file:");
		for(i = 0; i

创建modelsim工程

编译-》运行仿真-》run all

结果如下:

FPGA开发中Testben读取外部文件的方式_第1张图片

这时候的文本内容为:

FPGA开发中Testben读取外部文件的方式_第2张图片

波形图: 

你可能感兴趣的:(FPGA开发)