基于SYSTEM C的FPGA设计方法

[11-20 16:12:55]   来源:http://www.88dzw.com  FPGA   阅读:8478

文章摘要:1.精炼的设计方法。使用System C设计系统,系统设计人员不必花费很大的精力将整个系统设计由C语言描述转换为HDL描述。系统设计人员可以通过在C模块中很小的区域范围内加入必要的硬件和时序结构描述,从而将C模块方便准确地转化为一个有效的硬件设计,而避免将另行设计一个硬件模块。利用System C设计方法,设计人员可以很轻松地实现一个设计的更改,或在优化算法时检测出一些设计错误并及时修改。 2.单一语言书写。使用System C设计系统,整个设计都用一种语言设计系统,降低了对设计人员的要求,减少了语言转换时所造成的错误。这一优点也使得设计人员可以在一个比较高的层次上进行系统模块设计。在较高层次

基于SYSTEM C的FPGA设计方法,标签:fpga是什么,fpga教程,http://www.88dzw.com


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<bool> din;
sc_out<bool> 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;//输入时钟

上一页  [1] [2] [3] [4]  下一页


Tag:FPGAfpga是什么,fpga教程FPGA

《基于SYSTEM C的FPGA设计方法》相关文章

分类导航
最新更新
热门排行