原创 Xilinx System Generator 学习笔记(2)编译 Matlab到FPGA

2017-10-19 09:38 2301 9 9 分类: FPGA/CPLD

一、模型的设计原理

         SysGen 通过使用MCode模块提供了对Matlab的直接支持。MCode模块支持将输入值应用到M函数,用于对使用Xilinx定点数据类型的评估,并且在每个采样周期进行评估。模块通过使用永久的状态变量来保持内部状态。模块的输入端口是由M函数指定的输入变量所决定的,输出端口由M函数的输出变量决定。这个模块为构建有限状态机、控制逻辑等,提供一个便捷的方法。

  下面通过MCode构建两个滤波器,并将两个模块的计算结果进行比较。

二、

simple_fir.m 文件

function y = simple_fir(x,lat,coefs,len,c_nbits,c_binpt,o_nbits,o_binpt)
coef_prec = {xlSigned,c_nbits,c_binpt,xlRound,xlWrap};
out_prec = {xlSigned,o_nbits,o_binpt};
coefs_xfix = xfix(coef_prec,coefs);
persistent coef_vec,coef_vec = xl_state(coefs_xfix,coef_prec);
persistent x_line,x_line = xl_state(zeros(1,len-1),x);
persistent p,p = xl_state(zeros(1,lat),out_prec,lat);
sum = x * coef_vec(0);
for idx = 1:len-1
sum = sum + x_line(idx-1) * coef_vec(idx);
sum  = xfix(out_prec,sum);
end
y = p.back;
p.push_front_pop_back(sum);
x_line.push_front_pop_back(x);



fir_tranpose.m文件

function y = fir_transpose(x,lat,coefs,len,c_nbits,c_binpt,o_nbits,o_binpt)
coef_prec = {xlSigned,c_nbits,c_binpt,xlRound,xlWrap};
out_prec = {xlSigned,o_nbits,o_binpt};
coefs_xfix = xfix(coef_prec,coefs);
persistent coef_vec,coef_vec = xl_state(coefs_xfix,coef_prec);
persistent reg_line, reg_line = xl_state(zeros(1,len),out_prec);
if lat <= 0
error('latency must be at least 1');
end
lat  = lat -1;
persistent dly,
if lat <= 0
y = reg_line.back;
else
dly = xl_state(zeros(1,lat),out_prec,lat);
y = dly.back;
dly.push_front_pop_back(reg_line.back);
end

for idx = len-1:-1:1
reg_line(idx) = reg_line(idx-1) + coef_vec(len-idx-1)*x;
end

reg_line(0) = coef_vec(len-1) * x;


三、系统模型的建立

打开System Generator,然后打开Simulink,新建一个设计。

Libraries找到Xilinx Blockset ,展开Math,2MCode元件加入到设计中。

Xinlinx Blockset,展开Basic Elements,Gateway In Gateway Out 元件加入到设计。

展开Simulink,找到Sources,Band-Limited White Noise 元件加入到设计;

Simulink  Sinks 中找到Scope,加入到设计。

Xilinx Blockset Basic Elements 中将System Generator 符号加入到设计。



双击上面的MCode元件符号,打开参数配置对话框,在Basic标签页,点击Browse,定位到simple_fir.m的路径。单击interface,安下图所示配置。在Advanced标签页,勾选Enable printing with disp


双击下面的MCode元件,在Basic标签页加载fir_transpose.m文件。在Interface标签下,参数如下配置。在Advanced标签页,勾选Enable printing with disp

最后按下图所示连接



四、仿真

Simulink的工具栏文本框中输入100,然后点击仿真按钮,最后双击Scope符号,查看仿真图像




PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条