MATLAB与ISE联合仿真的必备流程

MATLAB与ISE联合仿真的必备流程

一般的仿真流程是,通过MATLAB进行核心算法的仿真,然后从MATLAB产生数据并传给ISE的testbench,运行verilog程序,并将输出数据在Modelsim中仿真,并写回MATLAB中观察(例如频谱等)。

MATLAB写入testbench:

MATLAB:

sin_data=dec2bin(sin_data);

[m,n]=size(sin_data);

fid = fopen('D:\sin.txt','wt');

for i=1:m

    fprintf(fid,'%s\n',sin_data(i,:));

end

 

Testbench:

initial begin

     $readmemb("D:/sin.txt",data_mem);

end

always @(posedge sclk or negedge rst_n)

        begin

            if(!rst_n) begin

                signal_in<=0;

                i<=0;

            end

             else begin

                signal_in<=data_mem[i];

                i=i+1;

            end

        end

说明:因为MATLAB中的数一开始是十进制的,而testbench只能读二进制或十六进制。因此要不将MATLAB转为二进制,testbench用readmemb读,要不转成十六进制,用readmemh读。

 

testbench写回MATLAB:

testbench:

initial f_file = $fopen("D:/fir.txt");

 

always @(i)

        $fdisplay(f_file,"%h",fir_out);

 

MATLAB:

fir = fopen('D:/fir.txt','r');

fa(i) = fscanf(fir, '%x', 1);

 

 

MATLAB输出的是浮点数,一般在MATLAB中要先量化为定点数,例如量化为8位有符号数:

sin_data=round(sin_wave/max(abs(sin_wave))*127);

因为是有符号数,所以负数要转化为补码:

neg=find(sin_data<0);

sin_data(neg)=sin_data(neg)+256;

同时FPGA端要把端口、寄存器、乘法核等都设置成signed有符号的(testbench不用)。

 

同理,若要输出到MATLAB。补码必须还原回去:

if( fa(i)>2^15-1 ) fa(i)=fa(i)-2^16;

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值