正如我们在第三篇-C节中提到的,HLS是一种使用高级编程语言设计硬件的抽象方法。基于FPGA和协同设计的SDR的开发人员可以从HLS中受益,因为他们不需要以前的硬件设计经验。与其他开发工具不同,HLS工具共享一个共同的主题并提供类似的特性。因此,在本篇中首我们首先讨论HLS。接下来,我们将回顾在SDR设计和实现过程中常用的用于不同设计方法的开发工具。

  • A.高层次综合(HLS)

十多年来,HLS一直是一个热门的研究话题,学术界和产业界都试图让开发人员能更容易地进行硬件设计。HLS是将高级编程语言描述的设计算法规范转换为RTL实现的过程。通过探索微架构和硬件约束,HLS提供了一个新的设计抽象级别。由此产生的RTL在功率、吞吐量和延迟方面都进行了高度优化,并且与手工调优的代码相当。图4描述了这个过程。

图4 HLS设计流程

RTL和C的主要区别在于在高层次模型中没有时间约束,这仅仅是对系统的行为描述,而没有底层硬件的详细信息。第二个区别是处理架构:当GPP架构被固定,最好的处理架构是由FPGA编译器构建的。此外,HLS可以将开发周期(上市时间)从几个月缩短到几个星期。这是因为生成优化RTL的任务由HLS工具处理,开发人员的工作重点是描述系统的算法描述。

此外,我们还要向你介绍LegUP,一种开源的HLS工具。该工具能够分析代码,以识别硬件加速代码中经常执行的部分(例如:把它们移到FPGA结构上)。有研究表明,HLS编译器及其提供功能区域和时序精确估计的能力时,发现它与手工调整硬件设计的结果相当。

为了帮助开发人员做出正确的决定,选择一个能够为其应用程序产生最佳结果的HLS工具,目前进行了一项研究,通过开发LDPC解码器来比较了三种行业工具,即Vivado HLS、Intel FPGA OpenCL SDK和MaxCompiler,这些解码器经常用作SDR中的纠错块。这三个工具都成功地合成了LDPC解码器,并在Intel和Xilinx FPGA板上实现。然而,不同之处在于逻辑的利用能力和性能。同样地,也有研究使用几个金融工程问题(例如:基于Monte Carlo的期权定价)对上述工具进行了定量和定性的比较,并比较了几个FPGA板的性能。结果表明,Intel-OpenCL和MaxCompiler的FPGA SDK都比Vivado HLS有更好的性能,因为它们能够更有效地提取并行性。在本文中,还全面回顾了最近的HLS工具,并通过仔细的分析,提供了一种基于C基准的方法来比较这些工具及其优化特性。实现的各种基准表明,某些工具比其他工具更适合某些应用程序,因为没有特定的工具主导HLS领域。此外,开源的HLS工具,如LegUP,可以和商业工具一样有效。其他调查和分析包括专注于开源工具,以及研究HLS生成的设计的一些权衡,以及当错误发生时它们的可靠性。所有的研究都证明了HLS工具生成RTL码的可行性和可靠性,尽管有不同的开发和优化解决方案。

HLS工具的例子包括Xilinx Vivado HLsandSDSoC、OpenCL的Intel FPGA SDK、Cadence Stratus高层次综合(将Cadence C-to-Silid和Forte Cynthesizer结合)、Synopsys Synphony C编译器、Maxeler MaxCompiler、MATLAB HDL编码器和LegUP,与其他工具不同的是,这些工具与厂商无关(适用于各种类型的FPGA板,如Xilinx、Intel、点阵和Microsemi)。

表7汇总了商用HLS工具。虽然有些工具是供应商自定义的,但有些工具可以与各种FPGA板一起工作。表中提到的示例都提供了一组面积和时序优化,例如资源共享、定序和流水线。然而,并不是所有的人都能为设计生成测试结果。

表7 HLS工具

  • B.工具

在本节中,我们将回顾现有的SDR开发软件工具。对于每种设计方法,我们讨论了一个兼容的开发工具,并列出了它的特性。我们还提供了它们之间的总体比较,以突出差异。

1)MATLAB和Simulink:大多数设计人员首先使用Mathworks MATLAB和SIMULINK对系统进行建模和仿真。通过提供广泛的内置功能和工具箱,特别是用于信号处理和通信的工具箱,开发和测试应用程序变得非常普遍和广泛。但是,为了在不同的平台上使用这些模型,开发人员需要使用MATLAB编码器和Simulink编码器来生成C/C++代码。生成的代码可以与嵌入式编码器一起使用来优化它们,并生成与AXI驱动程序的软件接口,以便在嵌入式处理器和微处理器上运行,比如ZedBoard上的双ARM皮质A9 MPcore。或者,开发人员可以使用HDL编码器生成可综合的RTL(Verilog或VHDL)代码,以便在FPGA或ASIC上应用。它还支持Xilinx和Intel SoC设备,提供有关资源利用和分布式流水线的一些信息和优化。图5显示了上述工具提供的SoC平台的设计流程及其连接方式。使用RTL-SDR这类非常低成本、类似于U盘的SDR(~100多块钱)和一台式电脑设计了一个教学DSP和通信理论的学术课程。

图5 Mathworks SoC设计流程

2)Vivado HLS和SDSoC:Xilinx Vivado HLS是一个高层次综合的设计环境。该工具提供了多种功能来调整和改进RTL Netlist输出,它兼容和优化Xilinx FPGA板。它接受用几种语言描述的输入规范(例如,C,C++,SystemC和OpenCL)和用Verilog或VHDL生成硬件模块。开发人员可以通过使用指令(优化过程指南)和RTL优化的实用程序,在区域和时序方面优化解决方案。这些优化包括循环展开、循环流水线和操作链。SDSoC是Xilinx的另一个工具。这两种工具的主要区别在于后者能够为SoC提供解决方案。SDSoC建立在Vivado HLS之上,具有相同的C-RTL转换能力。使用SDSoC的主要优点是它可以自动生成数据移动器,数据移动器负责在处理器上的软件和FPGA上的硬件之间传输数据。

与SDSoC类似的开源工具是LegUP。它在多伦多大学作为一项学术研究工作开发,目的是设计一个HLS工具,该工具能够将C代码作为输入并提供三种可能的输出:一个FPGA的综合RTL代码,一个纯软件可执行文件,一个SoC的硬件/软件协同设计解决方案。

3)GNU Radio:它是一个开源软件开发工具包,通过提供信号处理块来实现SDR,可以在台式机或便携式计算机上运行,加上简单的硬件,如USRP B200,就可以建立一个基本的SDR。它经常被学术界和研究界用来模拟和快速建立SDR平台。与接收系统工具和Simulink类似,它包含不同类型的模块,如解码器、解调器和滤波器。它还能够连接这些块并以可靠的方式管理数据传输。此外,它还支持USRP系统。GNU Radio的一个吸引人的功能是能够定义和添加新的块。可以通过C++或Python编程来实现。使用GNU Radio的例子有:让它与USRP一起实现不同类型的收发机,如TDMA和CSMA,并展示了它的一些功能。同样,还可以利用USRP和RTL-SDR成功地实现两台计算机之间的实时通信。

4)LabVIEW:这是美国国家仪器公司一种广泛使用的工具,它为工业界和学术界使用的测试、自动化和控制应用程序提供了一个可视化的编程环境。它类似于GNU Radio和SIMULINK,其中的设计可以通过连接不同的块链来实现,每个块都具有一定的功能。它还提供了对USRP的完整支持,支持通信系统的原型速成。可以使用高级语言(如C或MATLAB)或使用图形数据流来设计系统的不同块。利用LabVIEW开发了一个SDR平台,其中描述了一个结合USRP和LabVIEW的无线通信课程设计,因为它们易于使用,以帮助学生传授基本概念。同样,还设计了SDR平台——FRAMED-SOFT,它包含两种类型的USRPs,并用于学术环境。

5)CUDA:由NVIDIA开发,负责发布和管理GPU上数据并行计算的计算平台和编程模型。当GPU作为处理架构的一部分时,开发人员通常使用CUDA作为协处理器,并且希望通过加快应用程序来充分利用它们的能力。正如在第三篇-A2节中所讨论的,为了确定应该在GPP上运行的应用程序组件和应该由GPU加速的部分,我们需要查看手头的任务。CUDA中可以使用的编程语言包括C、C++、Python、Fortran和MATLAB。除了与GPU相关的加速函数的丰富文库之外,该工具包还包括一个编译器、开发工具和CUDA运行时,用于开发应用程序并将其优化为包含GPU的系统。