SystemC_Basic

1、http://baike.baidu.com/view/1018980.htm

百度百科介绍的很好,举例很清晰。

2、SystemC的三个基本进程:SC_METHOD,SC_THREAD,SC_CTHREAD及其举例。

①SC_METHOD:当敏感列表上有事件发生时,才被调用,(用法很像verilog中描述组合逻辑)调用后迅速返回;
②SC_THREAD:能够被挂起和重新激活,当敏感表上有事件发生,线程被重新激活运行到新的wait()语句再重新挂起,(主要用于对程序的验证);
③SC_CTHREAD:继承于线程进程,只能在时钟的上升沿或者下降沿被触发或者激活,(用于时钟精确的建模)。

1、SC_METHOD实例:

#ifndef_FULLADDER_H
#define_FULLADDER_H
#include<systemc.h>
SC_MODULE(FullAdder)
{
sc_in<sc_bit>A,B,Ci;
sc_out<sc_bit>S,Co;
void do_add()
{
S=(A.read())^ (B.read())^(Ci.read());
Co= (A.read())&(B.read())|
(B.read())&(Ci.read())|
(A.read())&(Ci.read());
};
SC_CTOR(FullAdder) //systemc的 构造函数
{
SC_METHOD(do_add); //表示do_add对A,B,Ci敏感
sensitive<<A<<B<<Ci;
}
};
#endif

2、SC_THREAD实例:

#ifndef_MONITOR_H
#define_MONITOR_H
#include<systemc.h>
SC_MODULE(Monitor)
{
sc_in<sc_bit>m_a,m_b,m_cin,m_sum,m_cout;
void pre_monitor()
{
while⑴{
cout<<m_a.read()<<m_b.read()<<m_cin.read();
wait(); //当执行到时程序被挂起,当敏感列表被触发时程序继续执行
cout<<m_sum.read()<<m_cout.read();
}
};
SC_CTOR(Monitor)
{
SC_ THREAD(pre_monitor); //表示当变量发生变化时, pre_monitor被激活或者重新激活;
sensitive<<m_a,m_b,m_cin,m_sum,m_cout ;}
};
#endif

3、SC_CTHREAD实例

#ifndef_DRⅣER_H
#define_DRⅣER_H
#include”systemc.h”
SC_MODULE(Drive){
sc_in_clk clk;
sc_out<sc_bit> d_a,d_b,d_cin;
void prc_drive();
SC_CTOR(Drive){ //表示prc_drive对时钟上升沿敏感
SC_CTHREAD(prc_drive,clk.pos());
}
} ;
#endif

3、接口

接口:集合一组固定的通信方法

存储器写接口:
Class mem_read_if: public sc_interface
{public:
virtual transfer_status read(…)=0;//读 虚函数(没有数据)
}
存储器读接口:
Class mem_write_if: public sc_interface
{public:
virtual transfer_status write(…)=0;//写 虚函数(没有数据)
}
存储器接口(将读接口与写接口封装):
Class ram_if: public mem_read_if,mem_write_if{
}

4、通道

通道实现了接口的内容,即它是一个实现通信功能的“模块”,只不过它仅完成通信功能。
例子:Ram通道:
Class ram :public sc_module,ram_if{
Transfer_status read(…)//定义读函数(需要用户自己定义具体功能)
{
}
Transfer_status write(…)//定义写函数(需要用户自己定义)
{
}
}

5、端口

端口:模块通过端口与通道连接
模块的端口的定义要与接口同一类才能连接
SC_MASTER(Master){
sc_in_clk clk;
sc_port<ram_if>ram_port; //实例化端口
Int data;
Unsigned int address;
void main_action{ //需要用户自己定义
Transfer_statusstatus=ram_port->write(address,data);//在功能函数中通过端口
… ;调用通道函数
Transfer_statusstatus=ram_port->read(address,data);//通过端口调用功能函数
}
}
 

转载于:https://www.cnblogs.com/littleMa/p/5819538.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值