传统上,系统工程师使用基于HDL的硬件流程(如Verilog HDL或VHDL)在FPGA中实现DSP系统。Intel工具(如DSP Builder)使设计者可以在针对FPGA的同时遵循软件的设计流程。用于Intel FPGA的DSP Builder工具简化了DSP功能的硬件实现,为并不熟悉HDL设计流程的工程师提供了系统级的验证工具,并允许工程师无须学习HDL即可在FPGA上实现DSP功能。用于Intel FPGA的DSP Builder提供了从MATLAB的Simulink工具直接到FPGA硬件实现的接口。
DSP Builder是一种高级综合技术,可以将高级、未定时网表优化为目标FPGA器件和所需时钟速率的底层流水线硬件。用于Intel FPGA的DSP Builder由几个Simulink库构成,可以让设计者轻松地实现DSP设计。DSP Builder通过与软件和仿真器集成的脚本将硬件实现为VHDL或Verilog HDL。
通过DSP Builder,设计者可以创建设计而无须知道所使用FPGA器件的内部细节,并生成可以运行在具有不同硬件架构FPGA系列器件上的设计。DSP Builder允许设计者手工描述算法功能并基于规则的方法来生成硬件优化的代码。DSP Builder提供的Advanced Blcoksets(高级块集)特别适合以连续数据流和偶发控制位特征的流算法。例如,使用DSP Builder创建包含长滤波器链的RF卡设计。在指定了所需的时钟频率、目标器件系列、通道数和其他顶层约束之后,DSP Builder将生成的RTL流水线化,以实现时序收敛。通过分析系统级约束,DSP Builder可以优化设计以平衡延迟与资源,而不需要手工编辑RTL描述。
DSP Builder高级模块集包括其自己的时序驱动IP模块,这些模块可以生成高性能FIR、CIC和NCO模型。
将DSP Builder设计组织到分层Simulink子系统中。每个顶层设计都必须包含一个Control块,可综合的顶层设计必须包含一个Device块,如图4.1所示。这些块在“Simulink Library Browser”窗口的下面位置:DSP Builder for Intel FPGAs-Advanced Blockset→Design Configuration。
图4.1 Design Configuration中的块
注 :DSP Builder设计中只能有一个可综合的顶层设计,其中可以包含许多子系统(原语块和IP块)来帮助组织你的设计。任何原语块都必须在原语子系统层次结构内,并且任何IP块都必须在原语子系统层次结构之外。
如图4.2所示,显示了可综合的顶层设计与原语子系统的关系,必须包含的块用灰色背景的方块符号标注。
图4.2 可综合的顶层设计与原语子系统的关系
DSP Builder高级模块集的顶层设计包括:
(1)Simulink测试平台,提供设计输入,并允许分析输入和输出;
(2)顶层配置块;
(3)可选的存储器接口规范和激励块。
① 外部存储器块,用于配置外部存储器接口。
② BusSimulus和BusStimulusFileReader块可以在仿真过程中激励Avalon-MM接口。
③ Edit Params块可被用作打开一个脚本setup_<model name>.m以进行编辑的快捷方式。
顶层设计必须有一个Control块,以指定RTL输出目录和顶层的阈值参数。
注 :每个DSP Builder设计必须有Control块,用来允许设计者对设计进行仿真或编译。不要在顶层设计中放置Device块。DSP Builder将数据类型从测试平台传递到可综合的顶层设计。
可综合的顶层设计是Simulink子系统,其中包含一个Device块,该块设计目标FPGA的系列、器件和速度等级。可综合的顶层设计位于生成硬件文件的顶层。可综合的顶层设计可以包含具有原语子系统的其他层次结构。
注 :(1)在原语子系统中只使用原语块。
(2)设计者可以包含更多的LocalThreshold块(可选),以覆盖在更高层次结构中定义的阈值设置。
原语子系统是用于原语块和IP库的调度域。一个原语子系统必须有:
(1)SynthesisInfo块,其综合类型设置为Scheduled,以便DSP Builder可以最佳方式流水线和重新分配存储器,以达到所需要的时钟频率。
(2)边界块,其界定了原语子系统,其如下内容。
① ChannelIn(通道化输入)。
② ChannelOut(通道化输出)。
③ GPIn(通用输入)。
④ GPOut(通用输出)。
使用系统接口块划定子系统内调度域的边界。在这些边界框内,DSP Builder会优化你通过原理图指定的实现。DSP Builder插入流水线寄存器以达到指定的系统时钟速率。当DSP Builder插入流水线寄存器时,它为需要保持同步的并行信号增加了等效的等待时间,以便DSP Builder能够将它们一起进行调度。DSP Builder调度贯穿相同输入边界块(ChannelIn或GPIn)的信号以便在相同的时间点开始。经过相同输出边界块(ChannelOut或GPOut)的信号在同一时间点结束。DSP Builder会添加你所有的流水线延迟,以平衡整个设计中的信号。DSP Builder将校正应用于边界块处的仿真,以解决HDL生成中的这种延迟。整个原语子系统保持周期精确。在包含原语块的原语子系统中,设计者可以指定其他层次结构,但不能指定其他原语边界块或IP块。
仅使用SampleDelay块来指定数据流的相对采样偏移量,不要用于流水线。
DSP Builder提供的块类型如表4.1所示。
表4.1 DSP Builder提供的块类型
续表
如表4.2所示,其列出了MATLAB中所提供的Simulink库,并描述了这些库中的DSP Builder块。
表4.2 Simulink中提供的用于DSP Builder的库
DSP Builder高级块支持以下器件系列,包括Arria II、Intel Arria 10、Arria V、Arria V GZ、Cyclone IV、Cyclone V、Intel Cyclone 10、Intel MAX 10、Stratix IV、Stratix V和Intel Stratix 10。在使用DSP Builder工具时,需要注意下面的事项。
(1)本书使用的是Intel Quartus Prime Pro 19.4集成开发环境,该集成开发环境所支持的MATLAB版本包括R2016b、R2017a、R2017b、R2018a、R2018b和R2019a。
(2)读者需要在MathWorks公司官网(网址为http://www.mathworks.com)上下载正版的MATLAB软件。
(3)当使用Windows 10操作系统时,需要设置许可文件的路径,包括:
① 通过开始→Windows系统→控制面板,打开控制面板界面。
② 在控制面板界面中,单击“系统和安全”按钮,打开系统和安全界面。
③ 在系统和安全界面中的右侧窗口中,单击“系统”按钮,打开系统界面。
④ 在系统界面的左侧,单击“高级系统设置”按钮,打开系统属性界面。
⑤ 在系统属性界面中,单击“高级”标签。在该标签页中,单击“环境变量(N)…”按钮。在用户变量窗口下面单击“新建”按钮,弹出“新建用户变量”对话框。
⑥ 在 “新建用户变量”对话框的 “变量名 (N)”右侧的文本框中输入 “LM_LICENSE_FILE”;在 “变量值(V)”右侧的文本框中输入许可文件所在的路径,如F:\quartus_li-cense.dat。
注 :需要事先得到授权,并生成许可文件.dat。
DSP Builder的设计流程如图4.3所示,其中:
图4.3 DSP Builder的设计流程
(1)在MATLAB或Simulink中验证。使用该早期验证来关注算法的功能,然后在需要的时候迭代设计实现。
(2)在设计中探索“权衡”。在进行硬件验证之前,及早获取资源利用率的估计值,从而使设计者可以尽早尝试实现各种优化。通过修改阈值参数,访问存储器-逻辑进行“权衡”或逻辑-乘法器进行“权衡”。
(3)用C++软件模型验证DSP Builder设计。DSP Builder支持C++软件模型,该模型用于支持位精确仿真的设计中。
(4)在ModelSim Simulator中验证DSP Builder Advanced Blockset设计。使用自动测试平台流程在Simulink或ModelSim仿真器中验证设计。此外,在所有可综合的IP和原语子系统上,将Simulink结果与所生成的RTL进行比较。
(5)在硬件中验证DSP Builder设计,或者在系统处于循环状态下时验证硬件。
(6)将DSP Builder Advanced Blockset Design集成到硬件中。在顶层设计中,将DSP Builder advanced blockset设计作为一个黑盒设计,集成到Platform Designer中以创建一个完整工程,该工程集成了处理器、存储器、数据路径和控制。