本文是该系列的第6篇。第2篇中以数字滤波器的设计为主题,介绍了System Generator的完整设计流程;第4篇对设计进行了资源分析。本文将在此基础上,讨论如何对设计进行优化,以及介绍System Generator可以导入MATLAB的工作区(workspace)变量的特性。
优化设计
在第4篇中我们进行了设计的资源分析,结果如下:
该设计使用了6个DSP单元,这是因为该FIR滤波器系数有11个,且具有对称性,因此需要使用6个乘法器并行运算。打开FDATool,点击上方的“Filter Coefficients”按钮,可查看滤波器系数:
System Generator中FPGA时钟设置为20MHz;Gateway In block的采样率也为20MHz。这样每个时钟都要处理一个数据,因此在实现滤波器时采用了并行结构,占用了6个乘法器。
我们可以设置过采样模式来优化设计的资源使用率。在System Generator block中将FPGA clock period设置为8.33ns(120Mhz);Simulink system period设置为1/120e6(120MHz);Gateway In的采样率比便。这样每6个时钟处理一个数据,期望所有的乘法操作能共用一个乘法器。
点击Generate导出设计,此时Simulink会提示一个警告:
主要提示我们采样率和时钟的设置,本设计是故意采用这种设置方式的,因此不用在意这个警告。运行结束后,生成资源分析报告:
看到DSP单元只使用了一个,其它资源也节省了超过一半,符合预期。总而言之,在进行System Generator设计时,要综合考虑设计指标和硬件实际情况来对设计进行针对性优化。
导入MATLAB变量
Simulink已经提供了足够强大的功能,但有些设计还是需要在MATLAB中进行(比如考察位宽对数据量化的影响)。System Generator提供了该特性:可以将MATLAB的workspace中的变量直接用于block参数配置。
假设在MATLAB中已经确定某一数据的最佳位宽,workspace如下:
打开Gateway In block(或其它需要配置该值的block),在编辑框里直接输入workspace中的变量名称即可:
所有的block都支持该特性。