欢迎来到天天文库
浏览记录
ID:34594667
大小:32.00 KB
页数:3页
时间:2019-03-08
《关于modelsim和matlab的联合仿真》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、关于modelsim和matlab的联合仿真一,如何将matlab里面进行算法时所用的数据源放到modelsim里面进行调用。1,将数据用matlab程序转化为二进制并存储到一个data.dat文件里面,这一步中,二进制的位数与verilog程序里面的输入端口的位数相同;data.dat文件名任意定,后缀名不变就行。下面几句fp=fopen('data.dat','w');fori1=1:100bin_I=int8_to_bin(Routdata(i1));fprintf(fpi,'%d',bin_I);fprintf(fpi,'');endfclos
2、e(fp);就是将100个数据源中的数据Routdata转化为二进制并存储起来,其中的int8_to_bin是自己定义的8位的整型数据转化为二进制的函数。2,在verilog里面打开数据文件data.dat并读取里面的数据。reg[7:0]mem[99:0];//声明一个数组寄存器,位宽为8位,数组长度为100;initial$readmemb("data.dat",mem);//将数据读到数组寄存器中;reg[6:0]cnt;always@(posedgeclkornegedgerst)if(!rst)cnt<=7'b0;elsebegincnt<=
3、cnt1'b1;inI<=mem[cnt];end这样,inI就作为所设计模块的输入,可以进行modelsim仿真了。 二,如何将modelsim里面的仿真结果输出到matlab进行分析。1,将modelsim仿真结果写入.txt文件,integerfid;initialfid=$fopen("dataout.txt","w");reg[6:0]cnt;always@(posedgeclkornegedgerst)if(!rst)cnt<=7'b0;elseif(cnt==7'd100)$fclose(fid);elsebegincnt<=cnt1'b
4、1;$fwrite(fid,"%b",out);end 其中,out为所设计模块处理后的输出,以二进制的形式存储到txt文件中。 2.在matlab中读取数据,进行分析。fid=fopen('dataout.txt','r');st=fseek(fid,0,'eof');n=ftell(fid);st=fseek(fid,0,'bof');data_bin=fread(fid,n,'uchar');fclose(fid);fori1=1:nif(data_bin(i1)==49)
5、
6、(data_bin(i1)==48)break;endend这么多
7、语句,先计算长度文件的长度,再将数据读出,主要是因为数据文件中,开头那一部分可能都是x值,要先去掉这些无效的值。data_start=i1data_bin1=data_bin(i1:n);len_data=length(data_bin1);i2=0;fori1=1:8:(len_data-7)i2=i21;data_int(i2)=bin2int_8(data_bin1(i1(0:7)));endplot(abs(data_int));这样就可以画出图形进行分析了,其中的bin2int_8是自己定义的将8位二进制转化为10进制有符号数的函数。 综上
8、,可以实现仿真的全过程,1,在matlab中生成数据源。2,在matlab中进行算法仿真,看效果。3,用verilog设计实现算法模块。4,将1中生成的数据转化后,在modelsim里面作为输入,进行modelsim仿真。5将modelsim仿真结果输出,再用matlab进行分析,与2中的结果进行比较。
此文档下载收益归作者所有