tag 标签: modesim,matlab,交互

相关博文
  • 热度 12
    2015-4-9 23:03
    2226 次阅读|
    4 个评论
    在进行modesim仿真时,由于matlab强大的数据处理能力,时常需要比较复杂的激励或者需要把仿真结果保存下来用matlab来处理。利用matlab工具来辅助modesim仿真显得十分重要。。 第一步:matlab产生数据源 close all;clc;clear all N = 256; n = 1:N; x = fix(128 + (2^7 - 1) * sin(2*pi*n/N));%把波形抬高,有符号转为无符号不是这么转的 plot(x) fid = fopen('sin.txt','wt'); fprintf(fid,'%x\n',x); fclose(fid);   数据波形如下:     第二步:简单的modesim仿真代码,modeism读取matlab产生的数据:   part1: module test( input clk, input rst, input data_in, output reg data_out );   always @(posedge clk or negedge rst) begin if(!rst) data_out = 8'd0; else data_out = data_in; end   endmodule   part2:   module test_tb(); reg clk; reg rst; reg data_in; wire data_out;   test test_d1( .clk(clk), .rst(rst), .data_in(data_in), .data_out(data_out) );   initial begin     clk =0;     rst = 0;      #10 rst = 1; end   reg data_mem ; //定义一个8bit X 256的数组 integer i; initial begin     $readmemh("sin.txt",data_mem); //将sin.txt中的数据读入存储器data_mem end   always @(posedge clk) begin     if(!rst)         begin         data_in = 8'd0;         i = 9'd0;         end     else         begin         data_in = data_mem ; //将存储器中的数据输出         i = i + 9'd1;         end end     always #4 clk = ~clk;    integer w_file;  initial begin      w_file = $fopen("data_out.txt"); end   always @(i) begin     $fwrite(w_file,"%h\n",data_out);      if(i == 9'd258)    //共写入256个数据      $stop; end   endmodule     第三步:matlab读取modesim 产生的数据: close all;clc;clear all; fid = fopen('data_out.txt','r');     for i = 1 : 259;         data(i) = fscanf(fid, '%x', 1);    %这句话的意思是从fid所指的文件以16进制方式读出一个数据。     end fclose(fid); plot(data(4:259));               下面总结下modesim几个读写函数的用法: (以下内容转载自网络)   $fdisplay    这个命令需要有触发条件,才会把数据写入文件,例如,上例的触发条件就是always(i),当i变化的时候才写入。每写入一次数据会自动增加一个换行符。 $fmonitor    这个命令不需要触发条件,只要有变化就可以将数据写入文件。例如可以通过以下语句: initial $fmonitor(w_file,"%h",data_out); 这样可以将整个仿真过程产生的data_out数据都写入文件中。 $fwrite    这个命令和$fdisplay基本相同,也是需要触发条件才会写入,不同的是每写入一个数据不会自动添加换行符。例如可以通过以下语句: always @(posedge clk) begin     $fwrite(w_file,"%h\n",data_out); end       关于这几个命令的详细介绍,大家可以参考Verilog的相关数据。         简单总结一下上面用到的几个函数: 关于Matlab的函数有:fopen, fscanf,fclose。  关于Modelsim的函数有:$fopen, $fclose,$readmemh,$readmemb,$fmonitor,$fdisplay,$fwrite。