您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制连接到多个接口的端口实例 正文
连接到多个接口的端口实例

连接到多个接口的端口实例

点击数:7522 次   录入时间:03-04 11:39:48   整理:http://www.55dianzi.com   电脑-单片机-自动控制

下面我们给出一个单端口连接多接口的实例。

本设计描述的是一个存储器管理单元(MMU)同时管理着3个RAM(RAM0~RAM2),如图3-3所示。主设备Master通过MMU提供的接口来读写RAM。在它看来只有一个能够完成RAM读写的接口,至于具体读写哪个RAM和这个接口如何实现,则由MMU来完成。这里Master和RAM的设计还是与3.4.2节一样,这里不再重复。

图3-3 一个存储器管理实例

      由于Master模块可能会单个复位某一个RAM,这里我们将ram_if扩展成为multi_ram_if,让它支持单个RAM的复位,而ram_if的方法reset()被用来复位全部的RAM。  multi_ram_if的定义如下

  1. template<class T>  
  2. class multi_ram_if: publIC ram_if<T>  
  3. {  
  4.    virtual bool reset(unsigned int i)=0;  
  5. }; 

     
      MMU提供给Master的接口仍然是multi_ram_if, 而MMU看到的RAM接口是ram_if。下面我们给出MMU的部分设计代码。

  1. //By chenxi,2003.3.30  
  2. #ifndef _MMU_H  
  3. #define _MMU_H  
  4. #include <systEMC.h>  
  5. class mmu  
  6. : public sc_module,  
  7. public multi_ram_if<int>  
  8. {  
  9. public:  
  10.   #ifdef MAX_IS_3  
  11.  //a maximum of 3 memories CAN be connected to ram_port  
  12.   sc_port<ram_if<int>,3> ram_port;  
  13.   #else   
  14.   //any number of memories can be connected to ram_port  
  15.   sc_port<ram_if<int>,0> ram_port;  
  16.   #endif  
  17.  
  18.  // interface methods  
  19.   transfer_status read( unsigned address, int& data )  
  20. {  
  21. for( int i = 0; i < ram_port.size(); i ++ )  
  22.    if( ( address >= ram_port[i]->start_address() ) &&  
  23.    ( address <= ram_port[i]->end_address() ) )  
  24.      return ram_port[i]->read(address, data);  
  25.   return TRANSFER_ERROR;  
  26. }  
  27. bool reset(){  
  28.  for( int i = 0; i < ram_port.size(); i ++ )  
  29.     ram_port[i]->reset();  
  30.   return true;     
  31. }  
  32. bool reset(unsigned int i){  
  33.   if (i<ram_port.size()) {return ram_port[i]->reset();}  
  34.    else {return false;}  
  35. }  
  36. transfer_status write( unsigned address, int& data ){……}  
  37.  
  38. };  
  39. #endif  

      这里我们只给出了read()函数的设计,当它被调用的时候,它首先通过size()函数获得所实际连接到自己的RAM的数量,然后检查address是在哪一个RAM的地址空间内,最后完成所需操作。

      上述代码中使用了条件编译#ifdef…#else…#endif表示了定义sc_port<ram_if<int>,3> ram_port和sc_port<ram_if<int>,0> ram_port对于上面的设计都是允许的。在实际设计中,我们也许并不知道mmu所实际连接的RAM的数目,所以使用sc_port<ram_if<int>,0> ram_port提供了更大的灵活性。

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);}




本文关键字:接口  电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制

上一篇:SystemC Channel

《连接到多个接口的端口实例》相关文章>>>