一个Hello,SystemC程序
在学习任何一种语言的时候我们都要学习Hello World程序,这里我们给出一个最简单的 Syst 程序。其原代码如下:
- //hello.h
- #ifndef _HELLO_H
- #define _HELLO_H
- #include "syst.h"
- SC_MODULE(hello){
- SC_CTOR(hello){
- cout<<"Hello,SystemC!"<<endl;
- }
- };
- #endif
- //main programme
- //main.cpp
- #include "hello.h"
- int sc_main(int i, char* av[]){// Similar to main function in C
- hello h("hello");
- return 0;
- }
使用C++编译器或者开发环境如Visual C++.net 2005/2008编译(Visual Studio 2008下如何编译SystemC?)后,运行结果是在屏幕上打印出”Hello, S ystemC !”。
这段小代码体现了 SystemC 的几个特点:
首先必须包括systemc.h头文件,保证程序能够正确编译。systemc.h包括了 SystemC 的所有库文件。
与所有的硬件描述语言一样,SystemC的最基本单元是模块SC_MODULE,它是 SystemC 中定义的一个宏,一个由SC_MODULE定义的模块其实就是C++中的一个类,所以它也有构造函数SC_CTOR(hello)。
sc_main是所有 SystemC 设计的顶层函数(也可以说是顶层模块), 近似等价于C语言的main()函数。
就 SystemC 和 SystemVerilog 这两种语言而言, SystemC 是C++在硬件支持方面的扩展,而 SystemVerilog 则继承了 Verilog,并对 Verilog 在面向对象和验证能力方面进行了扩展。这两种语言均支持诸如信号、事件、接口和面向对象的概念,但每一种语言又均拥有自己明确的应用重点:
(1) SystemC 特别适合建模体系结构,开发事务处理级(TL)模型和在验证中描述软件的行为。对于具有很强C++实力的团队和有基于C/C++ IP 集成要求(如处理器仿真器),以及为早期软件开发设计的虚拟原型来说, SystemC 特别适合。
(2) SystemVerilog 是进行RTL设计的最佳语言,不仅在于其描述真实硬件和断言的能力,还在于对工具支持方面的考虑。同时, SystemVerilog 也提供了建模抽象模型和先进的验证平台语言特征,例如受限制随机激励生成、功能覆盖或断言。对于那些没有C/C++ IP 集成要求的项目来讲比较合适,毕竟可以使用一种语言完成全部设计。
当然, SystemC 可以用于验证平台和描述RTL结构,而 SystemVerilog 也可以用于编写高层事务处理级模型。但是,每一种语言都用于自己的重点应用时,它们可以达到最佳的效率。这点对于复杂的项目特别适用,在这种项目中,不同的任务分属于不同的组,通常有不同的技能要求。注重实效的解决方案以及符合设计团队的多种技术要求的方法是同时使用 SystemC 和 SystemVerilog 来开发和验证当今设计流程需要的虚拟原型的事务处理级模型。