SystemC TLM中的接口

systemc tlm中的接口在systemc tlm中,接口是一个c++的抽象类。抽象类中的所有方法都是用“=0”标识表示的纯虚函数。c++不允许创建抽象类的对象,因为抽象类对象是没有意义的。 在systemc中,sc_interface是所有接口的基类,任何一个接口必须直接或间接继承sc_interface。
此外,接口不包含任何数据成员。下面是一个接口实例,首先定义一个存储器读接口mem_read_if,然后定义一个存储器写接口mem_write_if,接着定义一个存储器的复位接口reset_if,最后利用这3个接口定义随机存取存储器的接口ram_if:
# ifndef _mem_if_h# define _mem_if_h# include “systemc.h”enum transfer_status {transfer_ok=0, transfer_error}; template class mem_read_if : public sc_interface{ public: virtual transfer_status read (unsigned int address, t& data)=0; // 定义存储器读的方法};template class mem_write_if : public sc_interface{ public: virtual transfer_status write (unsigned int address, t& data)=0; // 定义存储器写的方法};class reset_if : public sc_interface{ public: virtual bool reset ( )=0; // 定义存储器复位的方法};template class ram_if : public mem_write_if , mem_read_if , reset_if{public: virtual unsigned int start_address ( ) const=0; //定义获取存储器首地址的方法 virtual unsigned int end_address ( ) const=0; //定义获取存储器终止地址的方法};#endif从上面的存储器接口的定义可以看出,接口是可以分层的,复杂的接口可以由多个简单的接口继承而得到。
systemc tlm中的通道从接口的定义可以看出,在systemc中的接口仅仅定义了一组通信方法,并不包含这些方法的具体实现。为了实现这些方法,使建模的模块具有实用的功能,systemc中针对事务级建模引入了通道的概念。
通道是接口方法的具体实现,通过继承一个或多个接口实现模型的具体功能。针对上述存储器接口ram_if,其通道的定义如下:
#ifndef _ram_h#define _ram_h#include systemc.h#include mem_if.htemplate class ram : public sc_module, ram { public: ram (sc_module_name name, unsigned int start_address, unsigned int end_address) : sc_module (name) , m_start_address (start_address) , m_end_address (end_address){ sc_assert (end_address >=start_address); mem=new t[end_address -start_address];} //构造函数~ ram ( ) { if (mem) {delete mem; mem=0}} //析构函数transfer_status read (unsigned address, t& data){ if (address m_end_address) { data=0; return transfer_error;}data=mem [address -start_address];return transfer_ok;}transfer_status write (unsigned address, t& data){ if (address m_end_address) { return transfer_error; } mem [address -m_start_address]=data; return transfer_ok;}bool reset( ) {...}inline unsigned int start_address ( ) const {...}inline unsigned int end_address ( ) const {...}private: t* mem; unsigned int m_start_address, m_end_address};#endifsystemc tlm中的端口在systemc中,端口与特定的通道接口相连。进程通过特定的端口调用通道的接口提供的方法。对于(1)中提出的基本端口类型sc_in、sc_out以及sc_inout,可以调用的接口方法仅有write ( )和read ( ),但对于事务级建模,这些端口已经不能够满足需求。比如,当端口与总线接口或存储器接口相连时,需要同时提供地址和数据,事务级模型需要执行与数据读写无关的一些操作如复位操作等。
在systemc中,一个端口可以同时连接到一个或多个实现了同一接口的通道之上。端口的定义如下:
sc_port interface type是端口所要连接的通道的接口类型。channelnumber代表端口所要连接的最大通道数,默认值是1。对于上面定义的的接口ram_if,下面的端口定义都是合法的:
sc_port ram_port1; //连接到一个ram上sc_port ram_portn; //连接到n个ram上根据上述存储器接口ram_if及相应通道的定义,可以定义一个模块component通过端口对其进行访问,如下:
sc_module (component) { sc_in_clk clk; sc_port < ram_if > ram_port; // 实例化端口 void action ( ); int data; unsigned int address; sc_ctor ( ) { sc_method (action, clk.pos( ));}};void component :: action ( ){ wait ( ); int i=0; while (i++ write (address, data)) { // 通过端口ram_port调用存储器写方法 cout < < write ram successfully < < endl;}else cout < < write ram fail < read (address, data)) {// 通过端口ram_port调用存储器读方法 cout < < read ram successfully < < endl;} else cout < < read ram fail <

微软以云和AI为基础 焕发第二春
英伟达收购数据存储和管理公司SwiftStack
市场乏力 更多DRAM制造商加入减产行列
利用集成式工业接口数字隔离器减少尺寸与成本
电影同名VR游戏上线,玩家能够畅享影片和游戏的双重乐趣
SystemC TLM中的接口
芯片怎样才能继续强大起来?异质整合或是最好的选择
国家新一代人工智能开放创新平台在科大讯飞智汇谷举行
5G蓬勃发展,成为促进中国经济增长的重要引擎
工控机对于我们生活的影响有哪些呢?
佛山采用物联网传感器技术全方位监测城市安全
光机扫描器的应用类型及扫描方式介绍
彩电行业竞争激烈 互联网电视阵营正在触发新一轮的行业“价格战”
火到爆炸的AirPods棋逢对手:众筹超过600万的石墨烯无线耳塞
科技部副部长吴朝晖为国家高新区创新驱动高质量发展专题研讨班作开班报告并调研燧原科技等科技创新工作
HK32MCU应用笔记(三)| 航顺芯片在5G光纤测试仪的应用
连接器在电子行业供应艰难的原因
苹果欲摆脱对高通依赖?
丰田油电混动技术装车带来诸多好处
为了征服年轻人 欧拉做了些什么