SystemC From The Ground Up学习笔记中文.docx
- 文档编号:1070051
- 上传时间:2022-10-16
- 格式:DOCX
- 页数:19
- 大小:41.70KB
SystemC From The Ground Up学习笔记中文.docx
《SystemC From The Ground Up学习笔记中文.docx》由会员分享,可在线阅读,更多相关《SystemC From The Ground Up学习笔记中文.docx(19页珍藏版)》请在冰豆网上搜索。
SystemCFromTheGroundUp学习笔记中文
(一)
(二)SystemCFromTheGroundUp学习笔记中文
(三)systemC简介
SystemC是一种系统设计语言。
严格讲,SystemC是一个能够描述系统和硬件的C++类库。
和其他硬件描述语言(如Verilog、VHDL)一样,SystemC支持RTL级建模,然而SystemC最擅长的却是描述比RTL更高层、更抽象的系统级和结构级。
SystemC可以使得系统设计工作早期便达到很好的软硬件协同,这对于及早发现设计中的问题有很大帮助。
SystemC支持多种技术来实现现代设计的复杂性。
Abstraction
Designreuse
Teamdiscipline
Projectreuse
Automation
(二)TLM-BASEDMETHODOLOGY
2.1Transaction-LevelModelingOverview
1、事务级建模主要用途为
·硬件体系结构的性能分析和行为分析。
·软硬件划分和协同设计。
·作为底层设备驱动和硬件仿真模型的接口。
·集成操作系统仿真器和硬件模拟器。
·作为精确到周期的模型和交易级模型的仿真平台。
·作为测试图样,或者模拟设计的系统环境。
2、特点
·交易层是将理想的结构映射到需要考虑资源分配和设计约束的结构中。
·存储器和寄存器的映射是精确的。
·允许多线程通信。
·可以通过对数据类型的约束来对总线的突发传输或者突发传输的片断进行建模。
·事件驱动的仿真机制,带有时间估计。
·能够基于传输量和延时约束进行延时性能估计。
性能估计能够采取基于报告的方式。
也就是说,时间驱动的通道能够根据总线宽度和总线协议计算并报告一个交易需要多少个时钟周期。
或者通过插入延时来仿真时间。
·能够利用参数来精细的调整设计规范,以解决约束过紧或者过松的情形。
·利用参数来对不同的总线协议和信号接口进行建模。
3、TLM
·交易可以理解为系统模型中两个组件之间的一次数据交换。
这个交换与所采用的协议无关,因为交易级的模型通常不牵扯到具体的总线时序等细节。
·一个数据交易可能是在系统组件之间传输的单个的字,多个字或者整个数据结构。
例如:
一次DMA,一次存储器读或者写、一次寄存器读或者写都可以看成是一个交易。
4、交易级建模提供的一个非常重要的用途就是可以在整个设计的比较早的阶段就开始进行嵌入式软件的开发。
好处是:
并行开发、仿真速度快、协同设计与验证
更早进行软件开发
更早更好的硬件功能验证测试
建立一个从客户需求到详细软硬件规范的完整清晰路径
5、交易级建模与SystemC的通信机制
SystemC的通信机制有两个特点特别适合TLM建模:
·功能与通信分离。
也就是实现具体算法的部分与实现数据和事件传输的部分分离。
功能由SystemC的模块(sc_module)来实现,而通信由通道(channel)来实现。
·接口方法调用(InterfaceMethodCall,IMC)。
一组给定的通信方法(method)被称为接口(interface),包括数据接口和控制接口。
通道(channel)是由一个或者多个接口来实现。
模块能够使用它的端口(port)调用实现了相应接口并关联到该端口的通道实例方法。
(三)SystemC概述
1、主要组件
2、SystemCCompilationFlow
3、面向硬件的特征
Themajorhardware-orientedfeaturesimplementedwithinSystemC:
Timemodel(sc_time、sc_clock)
Hardwaredatatypes
Modulehierarchytomanagestructureandconnectivity
Communicationsmanagementbetweenconcurrentunitsofexecution(通道)
Concurrencymodel(SC_METHOD、SC_THREAD、SC_CTHREAD)
4、SystemCComponents
5、SystemCSimulationKernel
(四)数据类型
数据类型的选择依赖于值的范围,要求的精度,要求的操作,数据类型的选择影响仿真的速度、合成器和综合的结果。
4.1NumericRepresentation
字符串表示:
4.2NativeDataTypes
SystemC支持所有的C++内建数据类型,包括int、longint、shortint、unsignedint、unsignedlongint、unsignedshortint、double、float、char、bool,以及C++的string类型。
在任何情况下,C++内建数据类型在仿真速度和内存使用上是最有效的。
4.3ArithmeticDataTypes算术数据类型
提供两类算术数据类型,一类是位宽1到64,另一类位宽大于64位
1.sc_intandsc_uint
对应于C++内建的int和unsignedint,不同点是可以指定数据的位宽(1到64位),使用格式为:
sc_int
sc_uint
由于仿真SystemC的数据类型会比仿真C++的数据类型慢
2.sc_bigintandsc_biguint
可支持大于64位的数据。
sc_bigint
sc_biguint
4.4BooleanandMulti-ValueDataTypes布尔及多值数据类型
1、sc_bit和sc_bv:
sc_bitNAME...;(表示0、1)
sc_bv
在SystemC中,SC_LOGIC_1和SC_LOGIC_0是分别表示1和0的数据常量。
sc_bit和sc_bv支持与(&)、或(|)、异或(^)操作,以及位选择([])和范围选择操作(range())。
2、sc_logic和sc_lv:
sc_logicNAME[,NAME]...;(表示1、0、X、Z四种逻辑)
sc_lv
SC_LOGIC_X和SC_LOGIC_Z分别表示不确定状态和高阻态
4.5Fixed-PointDataTypes定点数据类型
SystemC提供sc_fixed、sc_ufixed、sc_fix、sc_ufix以及它们的_fast后缀变种,来表示定点数据类型。
要使用这些数据类型,必须在头文件包含语句#incluede
WL表示字长度、IWL表示整数字长度,例如:
(i:
整数位;f:
分数位;s:
符号位)
sc_fixed<5,5>表示 iiiii.
sc_fixed<5,3>表示 iii.ff
sc_fixed<5,0>表示 .fffff
sc_fixed<5,7>表示 iiiii.00
sc_fixed<5,-2>表示.ssfffff
fix和fixed的区别是fixed的定点数据类型在编译后便不能再改变。
_fast后缀的类型在仿真时更快,因为它们的精度被限制为53位。
4.6SystemC数据类型的操作符
(五)模块SC_MODULE
5.1程序起始点:
sc_main
所有程序都有一个起始点。
在C/C++中,这个起始点叫做main,例如:
intmain(intargc,char*argv[]){
BODY_OF_PROGRAM
return0;
}
在SystemC中,这个起始点被叫做sc_main。
例如:
intsc_main(intargc,char*argv[]){
ElABORATION
sc_start(); //<--Simulatioinbegins&endsinthisfunction!
[POST-PROCESSING]
returnEXIT-CODE;//Zeroindicatessuccess
}
在sc_main中,代码执行分三个阶段:
Elaboration、Simulation和Post-processing。
Elaboration阶段描述系统的结构和相互连接关系,包括时钟、设计模块和通道的例化等;
Simulation阶段完成整个仿真行为;从第一次遇到sc_start()开始到预先设定的仿真时间结束或者遇到sc_stop()。
Post-processing阶段是可选的,取决于设计者是否需要在完成仿真后还要进行其他处理。
5.2设计的基本单元:
SC_MODULE
复杂系统都是由许多独立的的功能模块组成的,这些模块代表硬件、软件或者物理实体,它们可大可小。
在SystemC中用SC_MODULE来表示这些模块。
的语法如下:
#include
SC_MODULE(module_name) {
MODULE_BODY
};
SC_MODULE实际上一个C++宏:
#defineSC_MODULE(module_name)\
structmodule_name:
publicsc_module
MODULE_BODY可由以下元素构成:
Ports端口
Memberchannelinstances成员通道的例化
Memberdatainstances成员数据的例化
Membermoduleinstances(sub-designs)成员模块的例化
Constructor构造函数(必须的)
Destructor析构函数
Processmemberfunctions(processes)成员过程
Helperfunctions
5.3SC_MODULE的构造函数:
SC_CTOR
SC_MODULE的构造函数SC_CTOR主要完成以下任务:
Initializing/allocatingsub-designs初始化和分配子设计
Connectingsub-designs连接子设计
RegisteringprocesseswiththeSystemCkernel注册过程
Providingstaticsensitivity提供静态敏感表
Miscellaneoususer-definedsetup其他用户定义的设置。
SC_CTOR的语法如下:
5.4执行的基本单元:
SystemCProcess
过程是SystemC的基本执行单元。
其语法如下:
voidPROCESS_NAME(void);
SystemC过程没有参数,也没有返回值。
最简单的过程是SC_THREAD,它和软件概念上的thread很相似。
SC_THREAD只被调用一次便结束。
5.5注册最简单的过程:
SC_THREAD
一旦定义了过程,就必须要让仿真内核识别和注册它。
过程的注册是在构造函数SC_CTOR中进行的。
注册SC_THREAD过程的语法如下:
SC_THREAD(proc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SystemC From The Ground Up学习笔记中文 Up 学习 笔记 中文