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

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

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

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

接口

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

存储器写接口:
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{
}

通道

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

端口

端口:模块通过端口与通道连接
模块的端口的定义要与接口同一类才能连接
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);//通过端口调用功能函数
}
}

SystemC_Basic的更多相关文章

随机推荐

  1. Jmeter之Bean shell使用-常用内置变量

    Bean Shell常用内置变量   JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.l ...

  2. oracle登陆认证方式

    转自:http://blog.itpub.net/14359/viewspace-683064/ 案例: 1,发现此时操作系统认证不成功: C:\Users\Administrator.WIN-201 ...

  3. Spring boot 错误处理机制

    请求方式时,若不存在 浏览器出现White label Error Page 错误页面 其他客户端出现响应一个JSON格式文本包含错误码等信息 浏览器发送请求的请求头: 客户端请求头 这样就能区分来自 ...

  4. oracle 修改字符集 为ZHS16GBK

    一.oracle server 端 字符集查询 select userenv('language') from dual 其中NLS_CHARACTERSET 为server端字符集 NLS_LANG ...

  5. Linux下Mongodb安装和启动配置 原

    1.安装 略 2.配置 01.mkdir /usr/local/mongodb/data 0.touch /usr/local/mongodb/logs 03.cd /usr/local/mongod ...

  6. wx小程序自定义组件与页面之间参数传递

    在开发中,很多页面中会使用相同的组件,这时可以将具有相同信息的部分封装成一个组件,方便开发中调用.在调用中可能会涉及到数据的传递问题,例如页面与组件,组件与组件直接的数据传递. 首先看看页面与组件直接 ...

  7. form表单 获取与赋值

    form表单中使用频繁的组件: 文本框.单选框.多选框.下拉框.文本域form通过getValues()获取表单中所有name的值 通过setValues({key:values})给对应的name值 ...

  8. OPENWRT路由3G拔号实验

    以下摘自:http://www.right.com.cn/forum/thread-155168-1-1.html 首先下载 Barrier Breaker 14.07 固件 配置好网络,可以访问到i ...

  9. angularjs中安卓原生APP调用H5页面js函数,js写法应注意

    安卓原生app调用js方法,js方法应写在html下的script标签内,不能有任何function包裹,例如angular的controller层,这样APP也是获取不到的: 所以只有放在html中 ...

  10. Mysql 6.0安装过程(截图放不上去)

      由于免费,MySQL数据库在项目中用的越来越广泛,而且它的安全性能也特别高,不亚于oracle这样的大型数据库软件.可以简单的说,在一些中小型的项目中,使用MySQL ,PostgreSQL是最佳 ...