深亚微米半导体技术的进展和成熟使复杂的片上系统(SoC)设计变得越来越普遍,同时对传统的ASIC设计方法和流程提出了挑战。一些新的设计语言被研发出来以支持这些设计技术,例如SystemC[1]、SystemVerilog[6]等。Open SystemC Initive(OSCI)提出的基于C 的SystemC语言,已逐渐被许多设计者用来对SoC体系结构进行建模以进行体系性能的分析及软件和硬件联合设计。SystemC的一个重要特性是他支持系统设计各个层次的模型抽象,包括算法层次的模型、无时间信息的功能模型、含时间信息的功能模型、业务级模型、行为级模型、寄存器传输级模型等[8]。这样在系统研发的各个阶段,不同的设计研发团队能够运用同一个设计语言,使用基于同一种设计语言描述的设计平台。
SystemC在1999年正式推出,并由Open SystemC Initiative (OSCI) 负责支持、维护和发展。这个组织包含了范围广泛的公司、研究机构、大学和个人成员。被选举出OSCI理事会成员(Board Member Coreporations)包括:ARM Ltd.,Cadence Design Systems, Inc.,CoWare,Fujitsu,Mentor Graphics,Motorola,NEC,Synopsys,Inc. [1],涵盖了系统厂商、半导体厂商、EDA工具厂商、IP供给商等。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
SystemC是建立C 基础上的开放的系统级设计语言。实际上SystemC由一系列用来进行系统描述的C 类构成,并包含了一个用来对系统行为进行模拟的仿真核。SystemC语言的发展大致经历了两个大的阶段:SystemC1.0和SystemC2.0。SystemC1.0能够用来进行硬件描述。SystemC2.0的推出使SystemC成为真正的系统级设计语言,能够用来对SoC体系结构进行更加自然和有效的描述。这样就使SystemC语言涵盖了从系统概念直到实现的针对系统软、硬件建模的能力。
SystemC的以下特性使他能够支持RTL或行为级的硬件描述[2]。
● 数据类型 标准C/C 语言不提供能够用来进行硬件设计所需要的数据类型。SystemC语言支持任何的C/C 数据类型,同时SystemC所定义的以下数据类型能够用来进行定点或硬件设计和描述:sc_bit, sc_logic, sc_int, sc_uint, sc_bigint, sc_biguint, sc_lb, sc_lv, sc_fixed, sc_ufixed, sc_fix, sc_ufix 等。例如使用sc_int<8>能够表示一个8比特的有符号整数,或使用sc_uint<8>表示一个8比特的无符号整数。sc_(u)fix, sc_(u)fixed是定点数据类型,HDL语言不?支持类似的数据类型。丰富的数据类型使得SytemC能够支持从算法描述直到可综合的RTL描述。
● 设计描述 SC_MODULE是个基本的用来进行设计描述的SystemC类。他类似和VHDL的ENTITY或VERILOG的MODULE。在SC_MODULE中能够定义输入、输出管脚,内部信号等,或实例化另外一个SystemC MODULE。设计的行为能够使用SC_METHOD或SC_THREAD进行描述。SC_METHOD或SC_THREAD在SC_MODULE的构造函数中进行声明,并能够指定相应的敏感信号列表。
下面简单的例子给出了使用SystemC描述一个加法器的代码。更普遍的描述会使用一个头文档定义模块的接口及所包含方法、函数等的声明,而在一个或几个C 文档中实现所定义的方法、函数。实际上上面的例子是个加法器的RTL描述,所定义的方法myadd_method()在时钟clk的上升沿被执行。现在已有这样的工具支持对RTL的SystemC代码进行综合优化,并使用FPGA、ASIC或SoC完成硬件实现的设计流程[3]。
#i nclude
SC_MODULE(myadd)
{
//interface define
sc_in
sc_in
sc_in
sc_out
void myadd_method()
{
out1 = in1.read() in2.read();
};
// default constructor
SC_CTOR(myadd)
{
SC_METHOD(myadd_method);
//sensitive list for the process
sensitive_pos << clk;
}
}; // end module myadd
2 SYSTEMC2.0
SystemC2.0语言发布的一个主要目的是使用户能够在(相对于RTL)更高的层次对SoC系统进行描述。SystemC2.0引入了新的特性、概念以支持更方便、有效地对系统进行建模,包括:channel, interface, event等。HDL语言的RTL模型很适合于对一个特定的硬件模块进行建模,但通常很难高效率的对构成整个SoC的各模块之间的通信、同步机制进行描述。主要基于这个原因,Transaction Level(TL) 的建模思想被引入到了SoC设计流程之中[4]。TLM(Transaction Level Model)主要用来对整个SoC的体系结构进行描述,进而对系统结构进行仿真、分析、优化。同时TLM使得设计者在系统硬件的RTL描述完成之前就能够对SoC所包含的大量软件进行验证。使用SystemC2.0提供的channel、interface等概念连同基于此的Interface Method Call(IMC)的思想能够对SoC系统的TL模型进行描述,建立SoC虚拟平台。
为了更自然、更容易的对整个SoC体系结构进行描述,SystemC2.0引入了一些新的概念[5]:
●Interface interface是一组通信或同步方法的定义,使用这些方法能够对其对象进行访问。但interface本身并不包含这些方法的具体实现描述。
●Channel channel是个对象,他具体的实现了一个或几个interface。同时一个interface也能够由多个channel在不同的抽象层次来实现。
实际上interface和channel的引入起到了对方法的封装的作用,是面向对象的设计思想在SoC描述上的具体应用,类似的思想在另一个新的硬件设计和验证语言SystemVerilog[6]中也有反映。这样使用了某一interface作为其管脚(port)类型的SoC模块能够通过方法调用的方式使用在interface中定义的方法,即interface method call。
图1是个很简化的SoC系统模型。
在这个简单的SoC系统中包含若干master模块,在真实的系统中,他们能够是CPU或DSP核或专有的硬件等。这个系统还包含若干slave模块,在真实的系统中他们能够是memory,buffer等。这些模块通过一个总线连结起来。总线协议中定义了各种总线访问方法,这些方法描述了基于这个总线的各SoC模块之间的通信、同步方法,例如read, write, burst_read, burst_write、direct_read、direct_write等。我们能够使用SystemC的interface来定义这个总线所提供的各种方法。然后能够由一个channel具体地实现所定义的方法。例如右面的代码分别给出定义了这个总线所支持的direct_read、direct_write的方法、实现这些interface的channel的部分代码。定义了一个interface之后,一个模块能够声明一个以这个interface为“类型”的管脚(port),并通过这个port调用在interface中所定义的方法。右面的代码也包含一个采用simple_bus_direct_if接口的master的例子。
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




