ModelSim中将仿真数据/波形/wave保存到txt文件的方法

利用ModelSim进行仿真时,有时需要将数据导出用其他工具如Matlab进行分析,这时可以用fwrite函数来实现,具体方法如下:
假设data_o为256bit位宽的数据,现需要将其保存到txt文件中,每行保存一个有效数据,valid_o为其对应的有效标志信号。

wire			valid_o			 ;//待保存数据有效标志信号,高电平有效
wire	[255:0]	data_o			 ;//待保存数据

reg				valid_flag = 1'b0;
reg		[255:0]	wr_txt			 ;
always@(posedge iclk)begin
	if(valid_o)begin
		valid_flag <= ~valid_flag;
		wr_txt	    <= data_o;
	end else begin
		valid_flag <= valid_flag;
		wr_txt	    <= wr_txt;
	end
end

integer w_file; // w_file 是一个文件描述,需要定义为 integer 类型
//initial w_file = $fopen("/home/work/output_file/data_o.txt");//Linux系统下文件保存路径示例
initial w_file = $fopen("E:/work/output_file/data_o.txt");//win系统下文件保存路径示例

always@(valid_flag) begin//仅在valid_flag变化的情况下才将wr_txt写入文件
	$fwrite(w_file,"%h\n",wr_txt);// %h 十六进制保存,\n:换行符
end

注上述方法保存的txt文件中第一行数据可能出现无效的数值:xxxxxx,可手动删除

最终文件示例如下图所示:
ModelSim中将仿真数据/波形/wave保存到txt文件的方法_第1张图片
去掉上述第一行无效数值的方法:

wire			valid_o			 ;//待保存数据有效标志信号,高电平有效
wire	[255:0]	data_o			 ;//待保存数据

reg				valid_flag = 1'b0;
reg		[255:0]	wr_txt			 ;
always@(posedge iclk)begin
	if(valid_o)begin
		valid_flag <= 1'b1;
		wr_txt	    <= data_o;
	end else begin
		valid_flag <= 1'b0;
		wr_txt	    <= wr_txt;
	end
end

integer w_file; // w_file 是一个文件描述,需要定义为 integer 类型
//initial w_file = $fopen("/home/work/output_file/data_o.txt");//Linux系统下文件保存路径示例
initial w_file = $fopen("E:/work/output_file/data_o.txt");//win系统下文件保存路径示例

always@(posedge iclk) begin//仅在valid_flag变化的情况下才将wr_txt写入文件
	if(valid_flag)
		$fwrite(w_file,"%h\n",wr_txt);// %h 十六进制保存,\n:换行符
end

你可能感兴趣的:(FPGA基础)