SystemC From The Ground Up学习笔记中文 - 图文(2)

2019-08-30 19:33

(四)

数据类型

数据类型的选择依赖于值的范围,要求的精度,要求的操作,数据类型的选择影响仿真的速度、合成器和综合的结果。

4.1 Numeric Representation

字符串表示:

4.2 Native Data Types

SystemC支持所有的C++内建数据类型,包括int、long int、short int、unsigned int、unsigned long int、unsigned short int、double、float、char、bool,以及C++的string类型。

在任何情况下,C++内建数据类型在仿真速度和内存使用上是最有效的。

4.3 Arithmetic Data Types算术数据类型

提供两类算术数据类型,一类是位宽1到64,另一类位宽大于64位

1. sc_int and sc_uint

对应于C++内建的int和unsigned int,不同点是可以指定数据的位宽(1到64位),使用格式为:

sc_int NAME...; sc_uint NAME...;

由于仿真SystemC的数据类型会比仿真C++的数据类型慢

2.sc_bigint and sc_biguint

可支持大于64位的数据。

sc_bigint NAME...;

sc_biguint NAME...;

4.4 Boolean and Multi-Value Data Types布尔及多值数据类型

1、sc_bit

和sc_bv:

sc_bit NAME...; (表示0、1)

sc_bv NAME...;(位向量,长度大于1的0、1序列) 在SystemC中,SC_LOGIC_1和SC_LOGIC_0是分别表示1和0的数据常量。 sc_bit和sc_bv支持与(&)、或(|)、异或(^)操作,以及位选择([])和范围选择操作(range())。

2、sc_logic和sc_lv:

sc_logic NAME[,NAME]...;(表示1、0、X、Z四种逻辑) sc_lv NAME[,NAME ]...;(logic vector)

SC_LOGIC_X和SC_LOGIC_Z分别表示不确定状态和高阻态

4.5 Fixed-Point Data Types定点数据类型

SystemC提供sc_fixed、sc_ufixed、sc_fix、sc_ufix以及它们的_fast后缀变种,来表示定点数据类型。

要使用这些数据类型,必须在头文件包含语句#incluede 前面加上#define SC_INCLUDE_FX。

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.6 SystemC数据类型的操作符

(五)模块 SC_MODULE

5.1 程序起始点: sc_main

所有程序都有一个起始点。在C/C++中,这个起始点叫做main,例如: int main(int argc, char* argv[]) { BODY_OF_PROGRAM return 0; }

在SystemC中,这个起始点被叫做sc_main。例如: int sc_main(int argc, char* argv[]) { ElABORATION

sc_start(); // <-- Simulatioin begins & ends in this function! [POST-PROCESSING] return EXIT-CODE;// Zero indicates success }

在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++宏:

#define SC_MODULE(module_name) \\

struct module_name: public sc_module MODULE_BODY可由以下元素构成: Ports端口

Member channel instances成员通道的例化 Member data instances成员数据的例化

Member module instances (sub-designs)成员模块的例化 Constructor构造函数(必须的) Destructor析构函数

Process member functions (processes)成员过程

Helper functions

5.3 SC_MODULE的构造函数:SC_CTOR

SC_MODULE的构造函数SC_CTOR主要完成以下任务:

Initializing/allocating sub-designs 初始化和分配子设计 Connecting sub-designs 连接子设计

Registering processes with the SystemC kernel 注册过程 Providing static sensitivity 提供静态敏感表

Miscellaneous user-defined setup 其他用户定义的设置。 SC_CTOR的语法如下:

5.4 执行的基本单元: SystemC Process

过程是SystemC的基本执行单元。 其语法如下:

void PROCESS_NAME(void);

SystemC过程没有参数,也没有返回值。

最简单的过程是SC_THREAD,它和软件概念上的thread很相似。SC_THREAD只被调用一次便结束。

5.5 注册最简单的过程:SC_THREAD

一旦定义了过程,就必须要让仿真内核识别和注册它。过程的注册是在构造函数SC_CTOR中进行的。

注册SC_THREAD过程的语法如下:

SC_THREAD(process_name); //Must be INSIDE constructor


SystemC From The Ground Up学习笔记中文 - 图文(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:脱口秀主持人Ellen 杜兰大学2009毕业典礼演讲

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: