ModelSim对.txt文件的读写——十进制格式

ModelSim和matlab同为两款强大的软件,前者工作的重心在于硬件设计的仿真,后者则是强大的数学分析,当硬件系统处理的信号比较复杂时,就可能会涉及到使用matlab来对ModelSim仿真输出的结果进行分析处理的情况,这是两款软件的联合仿真就显得尤为重要。

本文介绍一种以“文本文件”为媒介的联合仿真过程,即通过文件读写的方式实现二者的交互。比如通过matlab软件生成测试数据并写入.txt文件中,由ModelSim软件通过内部函数(如fscanf)将文件中的数据依次读入系统内模拟数字信号的采样值进行处理;ModelSim对数据完成处理后,将最终的结果再次通过系统函数(如fdisplay)将数据写入.txt文件中,由matlab软件读取进行后期信号分析处理。

本博客层转载过一篇文章通过文件读写方式实现Matlab和Modelsim的联合仿真,(http://5460521xp.blog.163.com/blog/static/69087569201052111923399/),里面详细讲解了联合仿真的具体实现过程,这里不再重复赘述。

本文重点介绍一种更实用的ModelSim读写.txt文件的方法。

 

读文件:

以待读取数据为16bit为例。

integer fid_in;                                                                                      

integer data_in_int;                                                                             

fid_in = $fopen("real_input.txt","r");                                                  

always @ (posedge clk  or negedge rst_n)                                      

begin                                                                                                    

    if(!rst_n)                                                                                           

         begin                                                                                          

             data_in <= 16'd0;                                                                  

         end                                                                                              

    else                                                                                                  

        begin                                                                                            

             rc_x = $fscanf(fid_in,"%d",data_in_int);                              

             data_in <= data_in_int;                                                         

        end                                                                                               

end                                                                                                       

系统函数将数据以32bit整型格式读入内存中,由于多位宽数据向少位宽数据赋值时,综合工具默认将多位宽数据的低位赋给少位宽数据,因此数据得以以原始大小传入ModelSim的输入数据寄存器内。

由于为了方便大家使用,同样附上matlab写.txt的代码:

fid = fopen('data_in.txt','w');                                                                

fprintf(fid,'%d\n',data_in);                                                                    

fclose(fidro);                                                                                       

需要注意的时,matlab生成数据的设置位宽(其量化值对应的位宽)应同ModelSim内仿真要求的数据位宽相一致,这样才能保证数据的大小不会在传输中出现误差。

 

写文件:

以待写入数据位宽16bit为例。

parameter          MAXVAL_c = 2**(16 -1);                                        

parameter          OFFSET_c = 2**(16);                                             

initial                                                                                                     

   fid = $fopen("data_output.txt");                                                       

end                                                                                                        

integer data_int;                                                                                   

always @ (posedge clk)                                                                     

    begin                                                                                                 

        if(data_valid)                                                                                

            begin                                                                                         

               data_int = data;                                                                     

               $fdisplay(fid, "%d", (data_int < MAXVAL_c) ? data_int : data_int - OFFSET_c);

            end                                                                                             

    end                                                                                                     

其中参数MAXVAL_c 为数据以补码形式表示时,向上溢出的临界值,即16bit位宽的数据转换成整型数据(integer,高位补零转成32位整型数据),当转换结果大于或等于MAXVAL_c 时,表示数据溢出。

实际上,只有16bit的数据为负数时,才会出现上述所提到的溢出情况,这个时候就要对其进行修正,使得matlab或者其他软件在读取转换后的整型数据时仍然能得到原始的数据值。这时就用到了偏移量OFFSET_c,直接整型转换后的结果减去OFFSET_c就得到了32位整型数据表示的原始数据值。

将待写入数据进行了以上整型转换后就可以直接写入.txt文件中。matlab软件可以使用load命令直接从txt文件中读取上述数据,得到最初的处理输出结果。

matlab读取命令为:data= load('data_output.txt');

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值