(四)
数据类型
数据类型的选择依赖于值的范围,要求的精度,要求的操作,数据类型的选择影响仿真的速度、合成器和综合的结果。
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
由于仿真SystemC的数据类型会比仿真C++的数据类型慢
2.sc_bigint and sc_biguint
可支持大于64位的数据。
sc_bigint
sc_biguint
4.4 Boolean and Multi-Value Data Types布尔及多值数据类型
1、sc_bit
和sc_bv:
sc_bit NAME...; (表示0、1)
sc_bv
2、sc_logic和sc_lv:
sc_logic NAME[,NAME]...;(表示1、0、X、Z四种逻辑) sc_lv
SC_LOGIC_X和SC_LOGIC_Z分别表示不确定状态和高阻态
4.5 Fixed-Point Data Types定点数据类型
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.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