SystemC是什么前端
首先, SystemC不是一门新的语言,而是基于C++开发的library;所以,你所熟悉的C++知识均可以在SystemC建模时使用;理论上来讲,SystemC library和常见的boost库没有任何本质差异。此外,这也告诉咱们只需一个支持C++的环境,咱们就能够进行SystemC建模和仿真,无需任何其余工具,这相比其余软硬件建模语言来讲,所需环境极其简单。算法
注:最多见的硬件描述语言Verilog,它的仿真须要仿真工具支持,如VCS、modelsim等,它们都是价格昂贵的EDA工具,且使用复杂。编程
其次,SystemC是由Accellera组织拥有的开源库,它使用Apache 2.0开源协议;Apache2.0协议是一种对商业应用友好的许可,因此,不论用户用之开发的产品是否商用,均可以放心使用,不用担忧侵权行为。架构
可是,SystemC是干什么用的呢?SystemC的命名已经代表了它的用途,它是一种系统建模语言;咱们经常用系统来形容复杂的东西,一台电脑、一块芯片、一个公司均可以称之为一个系统。系统有不少特征,如模块化、并行性、通讯机制、规则下办事等等。以电脑为例,CPU、GPU、内存、显示器等都是一个个独立的模块,各自完成各自的任务;它们老是并行工做,同时又经过接口相互通讯。如何为一个系统建模呢?原生的编程语言都是串行执行的,没法建模并行系统;即便你建模了一个系统,但最终都要在CPU上跑仿真,而CPU老是串行执行的。咱们知道,硬件是大量并行运行单元的组合,必须可以支持对并行操做的模拟;SystemC正是为此而生,为软硬件系统建模提供了强有力的支持。框架
总结:SystemC是一个支持系统建模的开源的C++ library;编程语言
SystmeC的做用模块化
现代的芯片老是包含硬件和软件,软件部分能够是固件或者驱动;芯片市场是一个充满竞争的市场,几乎全部的芯片公司对产品都有严格时间规划;如何让产品尽快面市,如何减小产品bug几乎是全部芯片公司都须要面对的难题。SystemC可让软硬件并行开发,加快产品面市时间。工具
以下左图所示,传统的设计流程中在FPGA原型出来以前,硬件和软件开发之间几乎没有交流;只有在通过漫长的“设计-验证-综合”流程后(通常几个月),软件才能在FPGA平台上测试本身的代码,因为软件设计时没有平台测试,此时测试必然有不少错误,这种错误须要修改硬件或软件,并从新迭代,这将浪费大量的时间。在计算机领域,有一个至理名言:越早发现bug,损失就越小。显然,传统的设计流程与此目标不符。性能
以下右图所示,在软硬件设计以前,先开发抽象SystemC模型(如TLM模型),而后硬件部门将此模型转化为RTL,软件部门在此模型上开发软件。如此一来,软硬件的任何错误都能尽早被发现并修改,大大节省了开发时间。测试
常见疑问1:开发SystemC模型不也增长了设计流程时间吗?
答:是的,开发SystemC模型确实须要时间;不过因为C++是高级语言,并且这里的模型不须要精确到clock级别,只须要达到TLM级别,因此开发难度相比与硬件设计验证和软件开发来讲很是低,所耗时也是能够忽略的。
常见问题2:为何不在RTL上开发软件呢?
答:首先,等到一个能运行的RTL出来须要很长的时间;其次,RTL的仿真速度比TLM模型速度慢至少100x倍;因此RTL平台开发软件是不现实的。
其实SystemC的用途远不止如此,下面大体总结下SystemC的用途:
总结:SystemC模型在芯片前端流程中重用度很是高,几乎能够做为各个部门(架构组,算法组,设计组,验证组,软件组)之间的桥梁,使得部门之间的沟通合做更加有效,大大增长工做效率。
几种使用SystemC模型的灵活测试案例:
在RTL可用以前,将SystemC model封装于System Verilog内,而后做为DUT搭建测试平台,并编写test cases。如今,如VCS等仿真软件已经内置了对SystemC的支持,无需使用DPI接口,就能将SystemC模型封装成System Verilog module。
按照上述方法搭建测试平台后,随着一个个模块或IP的RTL设计完成,逐渐用它们替换测试平台中相应的SystemC模型,而后运行测试用例,便可测试真实的RTL。
虽然SystemC模型仿真速度要比RTL仿真快100x-1000x,可是依然没有FPGA速度快;所以在FPGA平台稳定以后,在FPGA平台上继续开发软件会更加高效。不过FPGA平台昂贵,面积有限,想将整个SOC放进FPGA是不可能的,可是驱动开发每每须要整个SOC的平台,这时能够将SOC的SystemC模型中本身关注的IP模型替换成FPGA实现,其余部分依然使用SystemC模型。
SystemC的优点
芯片设计前端的流程很长,和芯片前端相关的语言也不少,好比Verilog、VHDL、System Verilog、SystemC、Matlab、C/C++等等,但没有一个语言可以作到适合于整个前端流程,包括本文所说的SystemC也不行;每种语言都有适合使用的领域,只有在整个前端流程的不一样节点上选择最合适的语言工具,并加以整合,才能加速产品开发。
注:本图引用自《SystemC: From the Groud Up》
如上图所示,它显示了各类语言工具适合使用的场所,其中:
咱们熟知的Verilog/VHDL/System Verilog是最多见的硬件建模语言(更准确的说是硬件描述语言,即HDL),可是众所周知,HDL的开发难度大、故障率高、运行速度慢、与软件语言兼容性差,HDL用于开发RTL很是合适,可是用于抽象程度更高的建模就显得难堪大任。
C++属于高级语言,开发速度快、运行效率高(仅次于C)。考虑到几乎全部的底层软件都是用C/C++开发的,使用C++进行硬件建模,使得软硬件能够在同一种语言开发,从而让软硬件协同仿真更加方便高效。
SystemC library
下图是SystemC的框架图; SystemC的底层是C++及其标准库,固然也可包括其余的C++库,如boost库。
SystemC library包含多种功能,最核心的有以下几项:
SystemC内核用于调度SystemC process,其功能和Verilog和VHDL仿真内核很是类似;若是你不了解Verilog仿真内核,也能够认为它和Linux内核类似,只不过比Linux内核简单地多。
SystemC process是由用户定义的,用来模拟硬件和软件的行为。Process是并行运行的,由SystemC内核调度执行。
和Verilog仿真内核同样,SystemC内核是事件驱动型内核,因此理解event很是重要;SystemC event是指在特定时间点发生的事件。
SystemC module用于将建模对象模块化、层次化;
SystemC channel/interface/port/export用于实现模块间的通讯;
SystemC中文教程安排
咱们将分红6个部分来讨论SystemC,每一个部分又包含2-6个课程。
第一部分 SystemC简介
第二部分 SystemC Object和Module
第三部分 SystemC process
第四部分 SystemC通讯
第五部分 SystemC其余
第六部分 TLM2.0简介