tag 标签: system generator

相关博文
  • 热度 9
    2017-10-19 09:38
    2301 次阅读|
    0 个评论
    一、模型的设计原理          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, 将 2 个 MCode 元件加入到设计中。 在 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 符号,查看仿真图像
  • 热度 9
    2017-10-19 09:36
    3519 次阅读|
    0 个评论
    下面介绍使用 SysGen 的 FIR 和 FDATools 设计 FIR 滤波器。 FDATools 模块用来定义滤波器的阶数和系数。 FIR 模块用于 Simulink 仿真和在 FPGA 内通过 Vivado 实现设计,并且在实际的硬件上运行这个设计来验证其功能。 一、FIR滤波器设计原理 下面是这个单通道、单数据率滤波器的设计指标: 采样率 Fs=1.5MHz; Fstop1=270kHz; Fpass1=300kHz; Fpass2=450kHz; Fstop2=480kHz; 在通带双边带的衰减 =54dB; 通带纹波  =1; 该设计使用了两种不同的源来仿真滤波器。 Chrip 模块,用来在 0~750kHz 之间进行扫描; 随机源生成器,输出均匀分布的随机信号,范围是 0~1 ;因为它的范围有限,所以均匀分布是用来驱动定点滤波器的最好选择。 二、生成FIR滤波器的系数 打开 System Generator ,打开 Simulink, 新建一个设计。展开 Xilinx Blockset, 选择 DSP ,将 FDATools 元件添加到设计中。双击 FDATools ,按照如下配置 选择 File,Export, 将名字为 Num 的滤波器系数导入到工作空间。 在 Matlab 命令窗口输入 max(Num) 和 min(Num) ,确定滤波器的最大系数值和最小系数值,这些系数值决定了滤波器系数的宽度和二进制的小数点。 三、构建FIR滤波器模型    展开 Xilinx Blockset ,点击 DSP ,将 FIR Compiler 7.2 加入到设计。双击打开参数配置。 找到 Xilinx Blockset, 单击 Basic Elements, 将 Gateway In 加入到设计。它的参数配置: Output Type : Fixed-point Number of bits:8 展开 Simulink, 点击 Sources, 找到 Chirp Signal 加入到设计。双击,参数配置如下: Initial frequency(Hz):0.1 Target time(secs):100 Frequency at target time(Hz):75000 找到 Simulink, 展开 Sources, 将 Random Number 加入到设计。双击,按如下参数配置: Mean:0 Variance:1 Sample time: 1 / 1500000 展开 Simulink, 找到 Signal Routing ,将 Manual Switch 元件加入到设计。 找到 DSP System Toolbox 。找到 Sinks ,将 Spectrum Analyzer 加入到设计。 展开 Xilinx Blockset ,找到  Basic Elements, 将 System Generator 加入到设计。双击,打开配置对话框,选择 Clocking 标签页,设置如下: Simulink system period(sec): 1/1500000 最终系统的连接如下 四、仿真FIR滤波器模型 1、双击Manual Switch 元件符号,将开关切换到Chirp Signal,在工具栏文本框输入100,单击仿真按钮开始仿真。 ​ ​