`timescale   1ns/1ns
`define    time_period 20


/*
本测试文件是为了将一个包含1023行的32位16进制的数据的文本,导出到modesim中。然后将其转换成带符号的十进制数据输出到另外一个文本中
*/

module data_convert;

reg               clk;
reg               rst_n;
parameter         data_num = 1023;
integer           Pattern;
integer           file_out;
integer           i;
reg signed [31:0] stimulus[1:data_num];                                   //这样才能导出带符号的数据
reg signed [31:0] data_in [1:data_num];                                   //导出带符号的数据

always #(`time_period/2)clk=~clk;

initial begin
//时钟和复位初始化
   clk=1'b0;
   rst_n=1'b0;
   #(`time_period/2) 
   rst_n =1'b1;
//读文件 $readmemh是按照16进制读取文本数据、$readmemb是按照二进制读取文本数据
   $readmemh("C:/Users/Administrator/Desktop/digital_control/fifo_data.txt",stimulus);
	Pattern=0;
	repeat(30) begin 
     repeat(data_num) begin
		Pattern = Pattern+1;
		data_in[Pattern] = stimulus[Pattern];
		#32;
       end
        Pattern = 0;
    end 
//将数据按照带符号的十进制输出到另外一个文本	 
	file_out = $fopen("C:/Users/Administrator/Desktop/digital_control/data_out.txt");
        i = 0;
      for(i=0;i<=1022;i=i+1)begin
        wait(clk);
         #20
//这里是输出函数,一行一行输出,循环1023次,将1023行数据输出完成
        $fdisplay(file_out,"%d",stimulus[i]);
       if(i == 1022)
        $fclose(file_out);
        end 
      #((`time_period/2)*100000 );
      $stop;
end

endmodule


更多推荐

使用modesim将文本中16进制数据导入,将数据转换成带符号的10进制导出