⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fast_mem.h

📁 《systemc片上系统设计》(科学出版社)一书第六章TLM级总线建模源码
💻 H
字号:
//By Chenxi
#ifndef __fast_mem_h
#define __fast_mem_h
#include <systemc.h>
#include "types.h"
#include "slave_if.h"
class fast_mem
  : public slave_if
  , public sc_module
{
public:
  // constructor
  fast_mem(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(m_start_address <= m_end_address);
    sc_assert((m_end_address-m_start_address+1)%4 == 0);
    unsigned int size = (m_end_address-m_start_address+1)/4;
    MEM = new int [size];
    for (unsigned int i = 0; i < size; ++i)
      MEM[i] = 0;
	
  }

  // destructor
  ~fast_mem();
  // direct Slave Interface
  bool direct_read(int *data, unsigned int address);
  bool direct_write(int *data, unsigned int address);
  // Slave Interface
  status read(int *data, unsigned int address);
  status write(int *data, unsigned int address);
  unsigned int start_address() const;
  unsigned int end_address() const;

private:
  int * MEM;
  unsigned int m_start_address;
  unsigned int m_end_address;

}; // end class fast_mem

inline bool fast_mem::direct_read(int *data, unsigned int address)
{  return (read(data, address) == TRANSFER_OK);}

inline bool fast_mem::direct_write(int *data, unsigned int address)
{  return (write(data, address) == TRANSFER_OK);}

inline status fast_mem::read(int *data
						   , unsigned int address)
{
	if( address<m_start_address || address>m_end_address){
		*data =0;
        return TRANSFER_OK;
	}
  *data = MEM[(address - m_start_address)/4];
  return TRANSFER_OK;
}

inline status fast_mem::write(int *data
						    , unsigned int address)
{
  if( address<m_start_address || address>m_end_address)     
  return TRANSFER_ERROR; 
  MEM[(address - m_start_address)/4] = *data;  
  return TRANSFER_OK;
}

inline  fast_mem::~fast_mem()
{  if (MEM) delete [] MEM;  MEM = (int *)0;}

inline unsigned int fast_mem::start_address() const
{  return m_start_address;}

inline unsigned int fast_mem::end_address() const
{  return m_end_address;}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -