在上述的方式中,最终的设计是软件和硬件源文件的组合。 一些需要软件的编译/调试工具流程,其它需要硬件设计流程和专业知识。 然而,随着基于C的FPGA设计工具的出现,使得在大部分的设计中可以采用熟悉的标准C语言,尤其在那些本身就是实现算法的硬件电路。 后面的性能转换可能会引入手工的硬件描述语言(HDL)取代自动生成的硬件(正如面向DSP处理器的源代码通常用汇编重新编写),但是因为设计直接从C代码编译成最初的FPGA实现,硬件工程师要参与性能转换的时间会进一步提早至设计阶段,系统可以用更高效率的软件设计模式来进行设计。
CoDeveloper工具(Impluse Accelerated Technologies提供)允许C语言的应用编译后以FPGA网表形式建立硬件,包括允许描述高度并行和多过程应用描述所必须的C语言扩展。对于包括嵌入式处理器(如Altera的Nios软核处理器)的目标平台,CoDeveloper可以用来生成必要的硬件/软件接口,及生成特定过程的低级硬件描述。
采用这种工具和硬件/软件方式获得成功的关键是软件和硬件处理资源之间合理的划分。好的划分方案不仅要考虑给定算法部件对计算量的需求,而且要考虑数据带宽需求。这是因为硬件/软件接口可能是主要的性能瓶颈。
合理地利用高并行应用的编程模型也很重要。虽然它试图用传统编程方式如远程过程调用(RPC)将特定功能交由FPGA处理,但是研究表明面向数据流的通信方式更有效率,它不可能引入阻塞或造成应用死锁。在一些情况下,这意味着重新从整体上考虑设计,寻找新的方式对数据进行搬移和处理。这么做的结果是非常显著的:通过增加应用级的并行性,充分利用可编程逻辑资源,这可能将使一般算法比纯软件实现提升几个数量级。
在这种应用的开发过程中(或重新工程化),设计工具是可视化的,能调试多个并行过程的互连。工具有助于量化地给出划分方式的结果,识别可能表示应用瓶颈的高数据吞吐量的区域。用户可以在工具的帮助下,进行更详细的分析和性能调整。
图1,在应用调试和监视过程中连接硬件和软件过程
设计实例:基于FPGA的图像虑波器
为了演示这些工具如何用来把算法过程移至FPGA,我们以图像虑波器为例,其中输入数据流必须非常快速地处理,生成输出数据流。这样的问题可能涉及大量的计算,而且也是对带宽要求非常高。
图2说明一个简单的图像虑波器如何工作。在所示的示例中(边缘检测虑波器),尤其是3×3窗口的像素数据必须以流方式组合和处理。
图2,图像虑波器过程一次处理输入图像一个像素,在最近的八个像素进行卷积
有许多可能的方法实现这种算法。在本例中,两个流水式硬件处理器用C描述完成这种功能:一个过程生成匹配源图像的匹配行像素(以像素流读取),同时第二个过程接受第一个过程的数据流的结果,将对每个像素窗口卷积,生成一个输出图像,用第二个过程中单一的卷积像素流表示。这个过程和流用Impulse C库(见附文《Impluse C编程模型》)提供的C兼容的流I/O例程来声明和读/写。
因为算法是用标准C(外加Impulse C库)描述的,我们能从软件设计(用Microsoft Visual Studio开发)开始,它在桌面仿真环境下完成图像算法。这种设计将两种硬件过程和图像卷积功能结合到软件台设计中(它可以编译,并以基于PC的台式机应用或运行在Nios处理器中的嵌入式应用运行),它从TIFF格式文件中读取数据进行处理。这种设计可以用标准桌面调试工具和CoDeveloper Application Monitor进行设置和运行。在这种方式下,算法结果可以在编译到FPGA平台之前进行验证。
[此贴子已经被作者于2005-12-1 10:56:05编辑过]
编译为硬件
用标准桌面C开发工具仿真它的功能之后,我们准备用Altera Stratix开发原型板,在混合FPGA/处理器目标上实现该应用。Altera Nios开发包包括所有编译和综合至FPGA所需的硬件和软件(包括自动生成的硬件过程的HDL源文件和表示软件过程的C源代码)。Altera提供的软件结合Impulse CoDeveloper,为我们提供了从C语言编译和执行测试应用所需的一切。
我们第一步是为图像滤波器本身生成硬件。为了达到这一目的,我们从CoDeveloper工具中选用Altera Nios Platform Support Package,处理相关的Impulse C源文件。这将产生大约1200行的RTL和相关的硬件/软件接口源文件。
接下来,用Altera Quartus工具建立新的项目,生成包括必要外设的Nios处理器核(用Altera的SOPC Builder)。CoDeveloper输出生成的硬件和软件文件给Quartus。使用Altera的框图工具,我们通过Avalon片内总线将生成的硬件过程和Nios处理器相连。
整个系统用Altera Quartus综合。应用的软件部分(主要由测试生成器和客户功能组成,包括组函数)也导入Quartus项目,用所包含的Nios编译器编译。
最后,用Altera工具生成bit文件,通过提供的并口电缆下载到平台上。在这个平台按预期要求上电和运行。
在这个例子中,显式流水的两个图像滤波器过程和由CoDeveloper C自动为硬件编译器生成的流水在每两个FPGA时钟周期获得最佳的单像素图像处理速率,相当于大约10ms完成整个512×512图像的处理速度。
当然,在FPGA上任何算法的性能是取决于I/O因素及算法本身。在我们的图像滤波器测试方案中,图像数据从Nios上运行的测试生成器通过Avalon片内互连传送到生成的FPGA硬件上,这样可以获得比上述最大像素速率低得多的有效吞吐量。另一个算法版本中,像素数据直接从FPGA硬件接口传送和读取,这样做的结果会最接近最佳的结果。因此考虑带宽的限制是非常重要的。象CoDeveloper这样的工具可以更容易和更快地进行这方面的评估和实验。
附文:Impluse C编程模型
建立软件和硬件相结合的设计需要对并行编程技术有所了解。为了帮助建立高度并行的混合硬件/软件应用,Impulse C库包括了设置和管理多个独立过程的功能,它可以通过数据流、信号和可选的共享存储资源相连接。
Impulse C编程模型(概念上和1980年C.A.R.Hoare描述的通信时序处理模型类似)提供了对硬件/软件划分和同步的系统级控制,同时允许用标准C构造编写和自动优化独立过程。
图a,Impulse C编程模型:通信主要通过数据流(映射为生成硬件中的FIFO),其它需要同步的信号,本地存储器。
使用Impulse C库功能,C语言可用来描述高度并行的应用,具有最小的软件编程复杂度,同时具有用标准C开发环境下编译和调试的能力。例如,使用Impulse C库功能,一个简单的图像滤波器可以用如下的代码风格描述(实际算法省略)
这设计方法的结果是底层硬件平台的实际情况被抽象,用户(他可能是有经验的C程序员,但几乎没有硬件设计知识)不必学习硬件设计方法,就可以描述和运行混合软件/硬件应用。
[此贴子已经被作者于2005-12-1 11:09:59编辑过]
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |