您的位置 首页 设计

根据C言语的规划方法

在最近几年中日益流行在高性能嵌入式应用中使用现场可编程门阵列(FPGA)。FPGA已经被证明有能力处理各种不同的任务,从相对简单的控制功能到更加复杂的算法操作。虽然FPGA在某些功能上比ASIC硬件具

在最近几年中日益流行在高功用嵌入式运用中运用现场可编程门阵列(FPGA)。FPGA现已被证明有才能处理各种不同的使命,从相对简略的操控功用到愈加杂乱的算法操作。尽管FPGA在某些功用上比ASIC硬件具有时刻和本钱上的优势,但在面向软件运用中的FPGA比传统处理器和DSP的优势并没有表现出来。这很大程度上是由于曩昔割裂了硬件和软件开发东西和办法之间的联系。

   可是最近FPGA在软件规划东西方面的开展,及器材容量的继续添加为软件开发者发明了新的环境。在这种环境下,FPGA可视为软件编译器的一个或许的方针。现在,东西能够协助软件工程师运用FPGA渠道,一起在结合了传统处理器(或软处理器核)和FPGA的单一方针渠道上,协助这些开发者运用其所具有的高度算法并行性。

   根据FPGA的核算渠道,特别是那些具有嵌入式“软”处理器的渠道,有才能完结十分高功用的运用。经过运用最新一代的硬件/软件协同规划东西,有或许运用多种面向软件的规划办法作为FPGA规划进程的一部分。

   运用根据FPGA的参阅渠道

   FPGA中运用嵌入式处理器的优势之一是能够在单个可编程器材上树立硬件/软件开发方针——等效硬件参阅渠道。 快速下载和测验新的软件/硬件装备的才能也能大大进步规划率。经过运用嵌入式处理器作为测验生成器,独自的硬件部件也能够快速地验证功用。

   这种快速原型渠道的典型比如是Altera公司供给的Nios开发包。Cyclone或Stratix FPGA中都包含这个东西包,除了高功用的Nios 32位软核处理器核之外还包含多种硬件和软件外设接口。在规划进程中能够挑选这种核,运用Altera SOPC Builder东西装备并下载到相应的FPGA中。板上自身的衔接容许直接和各种不同的外部部件衔接,从串口(RS232和USB)到Flash存储器和网络接口。

   在开发进程中运用这种板子并结合Altera东西,容许嵌入式体系规划者用运用原型所需的部件(包含嵌入式处理器)组成方针渠道。然后,软件开发者能够重视运用自身,剖析和试验不同的硬件/软件区分计划。

  权衡硬件和软件资源

   在一些高功用嵌入式运用中,从产品构建费用和开发本钱考虑最佳的资源运用计划是混合处理器计划。在这种计划中非要害功用的功用由主处理器完结(它们或许是或不是嵌入式处理器核),而大核算量的部件是一个或多个DSP芯片、或许其它专用ASIC或FPGA。这种的解决计划一般需求丰厚的硬件规划和东西的常识,可是在功用和本钱方面上具有最佳的收益。

   关于体系中的每个处理单元(即规范处理器、DSP、FPGA或ASIC),需求不同水平的专用技术。例如,尽管DSP是软件可编程的,在东西上的初期投入小,但他们需求在DSP专门的规划技术方面有一些专门经历,一般需求汇编级的编程技术。在另一方面,FPGA在规划和东西经历上需求相对高的投入,在硬件规划言语作为首要的规划输入办法时特别如此。

   可是FPGA和专用ASIC规划所需的经历和东西投入比较,明显FPGA在开发专用硬件上具有更低的危险。确实,相关于专用ASIC计划的简略性和低危险的规划进程是挑选FPGA的要害要素。最近根据软件的FPGA规划东西使这种规划进程取得更大的功率。这反过来让体系规划者和软件运用开发者在实践的硬件上能够更快地测验新的算法办法,运用迭代办法进行规划。

   这种迭代办法重要优点是能够一次改动一个单元(例如将要害的算法移至FPGA)。运用开端是彻底用软件进行原型规划,并验证其正确性,然后由FPGA完结特定的功用,这是在每个进程都要对体系从头进行验证的硬件完结进程。这种办法被证明能大大地缩短调试时刻,下降引进难以调试的体系过错的危险。

   你如安在考虑“将规划的哪部分以硬件完结”上做出最正确的挑选?一个遍及选用的办法是从用C,Matlab,SystemC或其它一些软件编程言语的软件模型开端。跟着运用模型和部件算法的开展,规划者确认并发挥规划中的并行性(或从头设核算法),运用可编程硬件在树立并行结构方面的独有才能。添加并行度一般转化为添加硬件资源。运用软件模型验证假定,树立可重复的测验组,这些测验组能够作为模型,进一步提炼能够进行软件和硬件编译的内容。

  混合软硬件规划办法

   如今怎么开发混合软件和硬件运用呢?假如规划是软件驱动的(如今越来越多的规划是这样),软件或体系工程师从编写代码(如上所述)来树立体系原型。 另一种是,工程师用更高档的东西如Simulink(来自Mathworks),根据UML的东西或其它体系规划环境开端。 在这个进程中,体系规划者或软件工程师将选用更高档的规划笼统以取得最大的功率,可是或许取得很低的功用成果。由于以这种办法主动选用的处理器类型是受限的,为功用转化初级代码的时机相对更少。有经历的嵌入式开发者或许会进一步用汇编言语优化运用的各个部分,或运用专用处理器(即DSP芯片)来进步功用。硬件工程师能够参加优化面向FPGA和ASIC完结的规划中的那部分接口。

   初始体系规划和区分完结之后,需求最高功用的各个部分能够手艺描绘出来,交给硬件工程师。工程师为FPGA或ASIC部分编写低层的HDL代码,他们的规划生产率一般十分低(软件工程师1/10或更少)。成果是体系速度添加了,可是代码和开端的软件代码无法对应,规划周期不再共同,体系规范的改动或许很苦楚。

   在这种情况下,体系规划者有必要作为硬件/软件仲裁者,指定硬件/软件接口,确定规划反映规划的前期时刻。一旦硬件开发认真地打开,或许简直没有时机再次从全体上掌握。

  根据C的规划和原型东西加快开发进程

   在上述的办法中,终究的规划是软件和硬件源文件的组合。 一些需求软件的编译/调试东西流程,其它需求硬件规划流程和专业常识。 可是,跟着根据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渠道之前进行验证。

  编译为硬件

   用规范桌面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程序员,但简直没有硬件规划常识)不用学习硬件规划办法,就能够描绘和运转混合软件/硬件运用。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/192906.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部