在modelsim中不可避免的需要进行文件操作,在窗口中查看代码的操作情况,下面是我自己M序列实验中的一段测试代码
1 integer i,j ,k,m; 2 3 integer m_dataFILE , 4 indataFILE , 5 oudataFILE ; 6 7 reg [3:0] i_data[0:9999] ; 8 9 10 initial 11 begin 12 m_dataFILE = $fopen ("./m_data.dat"); // m序列存储文件 13 indataFILE = $fopen ("./indata.dat"); // 随机数(用于发送的数据)存储文件 14 oudataFILE = $fopen ("./oudata.dat"); // 接收数据的存储文件 15 for(i=0;i<10000;i=i+1) 16 begin 17 i_data[i] = $random%16; 18 $fdisplay (indataFILE,"%b",i_data[i]); 19 end 20 $fclose (indataFILE); 21 end 22 23 always @ (posedge clock) 24 if(reset) 25 begin : wirte_file 26 $fdisplay (m_dataFILE,"%b",my_m.m_sequ); //m序列保存 27 end
下面一段是校验输出,接收和发送的数据如果出现错误就有错误提示
1 reg [3:0] decode_data[0:9999] ; 2 3 always @ (posedge clk1) 4 if(!reset1) 5 begin 6 k <= 0 ; 7 m <= 0 ; 8 end 9 else if((reset)&&(fi_flag)) 10 begin 11 //decode_data[k] <= my_encode.ana_sign; 12 k <= k+ 1; 13 $fdisplay (oudataFILE,"%b",my_encode.ana_sign); // 接收到的数据进行保存 14 15 16 if(i_data[k-2] == my_encode.ana_sign) 17 $display ("%b OK! %b " ,i_data[k-2],my_encode.ana_sign); 18 else 19 begin 20 m <= m + 1 ; 21 $display ("%b ERROR! %b " ,i_data[k-2],my_encode.ana_sign); 22 end
至于i_data[k-2], 这个为什么是-2,是因为数据数据停滞期是2个时钟