SystemC-存储器接口实例
下面我们来看一个接口实例。
我们首先定义一个读接口mem_read_if,然后定义一个存储器的写接口mem_write_if,接着定义一个存储器的复位接口reset_if,最后利用前面的三个接口定义随机存取存储器的接口ram_if。
- //By Chenxi,all rights reserved
- //mem_if.h----define memory interface
- #ifndef _MEM_IF_H
- #define _MEM_IF_H
- #include "syst.h"
- enum transfer_status { TRANSFER_OK = 0, TRANSFER_ERROR};
- template <class T>
- class mem_read_if: publ sc_interface
- {public:
- virtual transfer_status read(unsigned int address,T& data) = 0;
- };
- template <class T>
- 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 T>
- class ram_if: public mem_write_if<T>, mem_read_if<T>, reset_if{
- public:
- virtual unsigned int start_address() const = 0;
- virtual unsigned int end_address() const = 0;
- };
- #endif
从上面存储器接口的定义中我们也可以看出,接口是可以分层的,复杂的接口可以由多个简单的接口继承而得到。我们下面来看一个只读存储器Rom的接口。
- template<class T>
- class rom_if : public mem_read_if<T>, reset_if{
- public:
- virtual unsigned int start_address() const = 0;
- virtual unsigned int end_address() const = 0;
- };
它只提供了读方法。
如果该存储器是支持突发传输(一次传输多个数据单元)的,则它的接口可以定义如下
- template<class T>
- class burst_ram_if: public ram_if<T>{
- public:
- virtual transfer_status burst_read(unsigned int address,unsigned int length,T& data) = 0;
- virtual transfer_status burst_write(unsigned int address,unsigned int length,T& data) = 0;
- };
我们将mem_read_if和mem_write_if定义为模板类是因为抽象的存储器的每一个单元可以存储的内容可以是任何类,如存储一个字节char,一个半字short,一个字int甚至是抽象数据类型如下定义的一个数据包ket。
- #define MAX_LENGTH 1504
- Struct packet{
- char[6] source_addr;
- char[6] destination_addr;
- int length;
- char* payload;
- }
- 上一篇:SystemC-sc_interface
- 下一篇:SystemC中的接口