您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

基于SYSTEM C的FPGA计划要领

发布日期:2011-05-17

  随着VLSI的集成度越来越高,计划也越趋巨大。一个体系的计划每每不但必要硬件计划职员的参加,也必要有软件计划职员的参加。软件计划职员与硬件计划职员之间的相互和谐就变的分外紧张,它直接干系到事变的服从以及整个体系计划的成败。

  一、概述

  传统的计划要领没有使软件计划事变与硬件计划事变和谐同等,而是将两者的事变分裂开来。软件算法的计划职员在体系计划后期不克不及为硬件计划职员的计划提供任意的资助。同时如今有些大范围集成电路计划中每每带有DSP Core或别的CPU Core。这些都使得单纯地用原理图或硬件形貌语言来计划、仿真这么巨大的体系变得非常困难。System C便是在这些抵牾的背景下提出的。它的出现为巨大的体系计划提供了一条有效的办理途径。

  System C 是由 Synospy Inc. 提出的,如今最新的版本为V2.0。它提出的目标便因此一种体系计划的头脑举行体系计划。它将软件算法与硬件实现很好的连合在一起,进步了整个体系计划的服从和精确性。

  System C 是一个C++ 库,也是一种使计划者可以有效地计划出一个软件算法的正确循环模型,硬件布局以及体系级计划的要领。

  计划者可以用System C开辟东西或在标准C++开辟东西中加如System C库制作体系级模型,快速地仿真和优化计划,以及研究差别的算法,并且为硬件和软件计划职员提供一个计划体系的可实行范例。可实行范例本质上是一个C++步伐,它表现了和计划体系同样的性能,为软件计划职员和硬件计划职员提供了一个计划的标准。

  System C 库提供了创造体系布局模型的必须布局,包括那些在C++没有的成果如硬件时序,并行和触发成果。C++这种面东西语言提供了通过增长类来扩展语言的本领,而这种本领是C语言所不具备的。因此,System C利用大家熟习的C++语言和开辟东西。

  System C 库提供了创造体系布局模型的必须布局,包括那些在C++没有的成果如硬件时序,并行和触发成果。C++这种面东西语言提供了通过增长类来扩展语言的本领,而这种本领是C语言所不具备的。因此,System C利用大家熟习的C++语言和开辟东西。

  二、SYSTEM C的特点

  System C 支持对硬件和软件的连合计划,支持形貌一个既包括硬件部分也包括软件部分的巨大体系布局。它也支持对接口的形貌,有以下几个明显的特点:

  1.System C可以为软件计划职员和硬件计划职员提供一个体系的可实行范例。计划职员利用该可实行范例可以克制计划中抵牾和错误的孕育产生,并确保计划的完备性。这是应为在计划可实行范例时,体系计划者必须计划出也一个和体系具有同样事景况态的步伐,通过这个步伐可以掘客出潜伏的抵牾和错误,并将这些抵牾和错误消除在整个计划的开始阶段,而不是在整个体系举行调试阶段才发明和解决这些抵牾和错误。这个步伐还可以资助计划者确保整个体系计划的完备性。

  2.计划职员利用这个可实行的体系范例,还可以发明计划中见解含糊的地方。无论什么时间,计划职员对计划孕育产生迷惑,就可以运行这个可实行步伐以明白在这个题目上体系计划职员是如那边理惩罚的,从而确保体系计划的精确性。而如今的计划要领不克不及使计划职员方便敏捷的办理这些迷惑。乃至这些迷惑是体系计划职员也未曾思量过,这大概导致体系要重新举行计划。

  3.在体系计划被实现过去,计划职员还可以通过用System C计划的体系可实行范例来验证整个体系计划。如许可以克制由于在体系计划上的失误,而使体系实现不克不及到达请求。如今的计划要领不克不及提供如许的本领在计划完成前举行体系的验证,对体系的验证必须是在体系计划完后。纵然在完成前举行验证,由于不克不及完全模仿实际体系的事变,其结果也只能作为一种参考。

  4.System C计划的可实行范例所利用的TESTBENCH文件可以通过小范畴的修改或直接用在实现后的体系仿真。这就为计划实现职员带来很大的长处,他们不必花很多的时间去编写用来验证明现后体系精确性的TESTBENCH文件。而如今采取的计划要领所利用的TESTBENCH文件却没有提供如许的方便条件。这是应为软件计划职员和硬件计划职员两者的计划头脑和计划本领都是差别的,一个软件计划职员所利用的TESTBENCH文件并不克不及被硬件计划职员利用,乃至不克不及给硬件计划职员任意资助。

  三、SYSTEM C计划与传统计划比较

  如今的体系计划一样平常是由体系工程师用C语言或C++语言计划出一个体系模型,并在体系级层次上查验见解和算法。当这些见解和算法被查验为精确无误时,C/C++模块被分析为成果相对独立的子模块。这些相对对立的子模块由硬件计划职员手工地转化为VHDL或Verilog语言用以硬件实现。

  这种计划流程中我们可以发明以下几个题目:

  1.人工将C\C++步伐转换为HDL步伐容易孕育产生错误。在如今的这种计划要领中,体系工程师先定盼望的计划请求计划出一个C模块,并验证这个模块使其到达盼望的计划请求。然后体系工程师所计划的C模块被硬件计划职员手工转换为HDL模块。这个转换进程不但容易孕育产生错误,并且还很浪费时间。这是由于C\C++语言和HDL语言有着明显的区别。起首,HDL的处理惩罚方法比C\C++的巨大。C\C++步伐采取次序实行的处理惩罚方法,而HDL步伐中既有次序实行也有并行实行的处理惩罚方法。要将C\C++步伐转化为HDL步伐肯定要引入一些控制信号,由这些信号控制HDL步伐的运行,但如许也容易孕育产生错误。其次,C\C++语言不涉及到时序干系。由于C\C++语言不支持对时序的形貌,体系工程师计划的体系模型只是验证了见解和算法,而只能对时间淹灭上有一个大概的预计。这就使得硬件实现时,为餍足体系在时间上的请求,硬件计划职员必须对软件算法举行肯定的改革或优化。而这些改革或优化也有大概引入种种错误。


  2.体系模块和HDL模块间缺乏接洽。当体系模块被转换为HDL模块后,HDL模块成为整个体系计划的内核。为适应硬件实现的特点,硬件计划职员会变动体系计划职员的计划,但这种变动只是在HDL模块中举行,而体系计划职员计划的C模块并没有因此变动。这就使得体系工程师计划的C模块和当前硬件计划职员计划的HDL模块缺乏须要的接洽。当硬件计划职员遇到见解含糊或明白 
错误的地方时,每每不克不及顿时从C模块中得到明白的解答。此时,C模块的计划职员也不肯定能为HDL计划职员提供有效的资助。

  3.多体系测试。不但C模块要转换为HDL模块,对C模块的测试也要人工转换为在HDL环境下的测试。这种转换也很巨大,并且浪费时间。HDL计划职员是根据他所计划的HDL模块和体系请求来计划TESTBENCH,这使得硬件计划职员不大概利用软件计划职员所利用的测试文件。同时,HDL职员要计划出一个好的TESTBENCH也必要比较长的时间。

  为办理在如今计划流程中所带来的种种弊端,一种全新的计划流程被提出,这便是System C计划流程。它能很好的办理上面所提到的种种计划弊端,大大进步计划服从。图2是System C的硬件计划流程。

  这种计划要领与如今常用的计划要领相比有很多好处:

  1.精粹的计划要领。利用System C计划体系,体系计划职员不必耗费很大的精力将整个体系计划由C语言形貌转换为HDL形貌。体系计划职员可以通过在C模块中很小的地区范畴内参加须要的硬件和时序布局形貌,从而将C模块方便正确地转化为一个有效的硬件计划,而克制将另行计划一个硬件模块。利用System C计划要领,计划职员可以很轻松地实现一个计划的变动,或在优化算法时检测出一些计划错误并及时修改。

  2.单一语言誊录。利用System C计划体系,整个计划都用一种语言计划体系,低落了对计划职员的请求,淘汰了语言转换时所导致的错误。这一好处也使得计划职员可以在一个比较高的层次上举行体系模块计划。在较高层次的计划会导致孕育产生小的计划代码,使计划和仿真的速率比传统的计划要领要快很多。这一点是很明显的。

  四、SYSTEM C根本见解

  1.模块

  模块是System C计划中的根本计划单位。模块可以使得计划者将一个巨大的体系支解为一些更小但易于办理的部分。System C模块的成果和作用与HDL语言中的模块是相雷同的,这使得一位风俗于用HDL举行计划的计划职员可以很容易的转向用System C举行计划。

  模块在System C中的关键字为SC_MODULE。紧随着关键字后的是模块的名称,如SC_MODULE(fifo),这就定义了一个叫fifo的模块。定义的模块也可以像HDL语言一样包括端口、信号、别的模块、处理惩罚进程和布局体,这些单位实现用以实现模块的成果。通过端口可以将几个模块连接起来。

  模块被生存为.h文件。要是在一个模块中调用别的模块,只需像C++中引入库一样将要调用的模块作为一个库引入即可。

  2.进程

  模块中的处理惩罚进程(process)雷同于C语言中的子步伐,与C语言中的子步伐差别的的是它具有HDL语言中的触发成果。处理惩罚进程(process)的详细事变部分被生存为.cpp文件。处理惩罚进程的调用雷同于在C语言中子步伐的调用。根据差别的请求,SystemC中有三种处理惩罚进程。

  ● Methods : SC_METHOD()

  ● Threads : SC_THREAD()

  ● Clock Threads : SC_CTHREAD()
  
  SC_METHOD是用来形貌组合逻辑,它由输入信号的变革触发,但不克不及在两次调用中生存控制状态。并且在SC_METHOD中不克不及包括无穷循环。由于组合逻辑有大概导致毛刺的孕育产生,从而影响体系性能,以是SC_METHOD不易太巨大。 下面是一个大略的SC_METHOD例子:

  SC_MODULE(example) {

  sc_in din;


  sc_out dout;//端口

  void inverter();//处理惩罚进程声明

  SC_CTOR(example) {

  SC_METHOD(inverter);

  sensitive(din);//处理惩罚进程由输入变革触发

  }

  };

  处理惩罚进程inverter如下:

  void example::inverter() {

  bool internal;

  internal = din;//输入数据取反后由输出端口输出

  dout = ~internal;

  }

  SC_THREAD是最常用的处理惩罚进程,根本上可以用在任意地方。它是由输入信号的变革触发,但与SC_METHOD差别的是它可以在两次调用这生存控制状态。它的成果雷同于积蓄器的成果。SC_THREAD中可以包括有wait()函数,这使得处理惩罚进程可以被挂起。

  SC_CTHREAD是SC_THREAD的一种特别环境。SC_CTHREAD能孕育产生更好的综合结果。SC_CTHREAD中可以利用wait()函数。在差别的状态 
间参加wait()函数,计划职员可以用SC_CTHREAD来实近况态机。这种计划魄力魄力是简便的并且容易明白。SC_CTHREAD只能由时钟信号沿触发,而SC_THREAD可以由别的非时钟信号触发。要是在时钟上跳边触发,可以利用pos()函数,反之用neg()。

  为进一步阐明SC_CTHREAD,下面给出了一个SC_CTHREAD的例子。

  SC_MODULE(example) {

  sc_in_clk clock;//输入时钟

  sc_in trigger, din;

  sc_out dout;

  void invert();

  SC_CTOR(example) {

  SC_CTHREAD(toggler, clock.pos());//时钟上升沿触发

  }

  }

  void example::invert() {

  bool last = false;

  for (;;) {

  wait_until(trigger.delayed() == true);//比及下个时钟上升沿 //且trigger=1再实行

  last = din; dout = last; wait();

  last =~din; dout = last;wait();//下个上升沿才变动数据

  }

  }

  3.端口与信号

  与HDL语言相似,利用System C库就可以在C步伐中参加端口和信号。这些原先C语言中没有的成果,使计划更复合硬件计划的请求。

  模块与模块之间是通过端口信号加一接洽。只要两个端口被连接在一起,信号就可以在它们之间举行转达。对付这一点习惯用HDL举行计划的计划职员是很容易明白和担当的,由于这和HDL中端口的成果是一样的。 信号只是在一个模块的内部利用,这也是和HDL中信号的用法是同等的。 下面给出端口和信号声明的例子。

  sc_in<“范例”> din// 输入端口din

  sc_out<“范例”> dout// 输出端口dout

  sc_inout<“范例”> q// 输入输出端口q

  sc_signal i[16]; //创建一个具有16比特的逻辑型信号i

  4.数据范例

  思量到硬件计划的请求,System C中也参加了一些硬件计划中常用的数据范例。详细如下:

  sc_int 有标记整数范例,最大有64个比特位。

  sc_uint 无标记整数范例,最大有64个比特位。

  sc_bigint 有标记整数范例,恣意比特位,其最大比特位定义在

  sc_constants.h中。

  sc_biguint 无标记整数范例,恣意比特位,其最大比特位定义在

  sc_constants.h中。

  sc_bit 二值数据,单比特位。

  sc_logic 四值数据,单比特位。

  sc_bv 二值数据,恣意比特位。

  sc_lv 四值数据,恣意比特位。

  sc_fixed 参数牢固的有标记定点数。

  sc_ufixed 参数牢固的无标记定点数。

  sc_fix 参数不牢固的有标记定点数。

  sc_ufix 参数不牢固的无标记定点数。

  User defined structs 用户自定义布局

  以上是一些System C的根本见解。

  五、结论

  System C是一种很有效的计划要领,它不但可以资助计划职员完成一个巨大的体系计划,还可以克制传统计划中的种种弊端,并进步计划职员的事变服从。它的这些好处使System C在巨大的体系计划中大有作为。并且习惯用HDL的计划职员,可以很容易地转到用System C计划。