您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制一个sc_port实例 正文
一个sc_port实例

一个sc_port实例

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

      我们利用3.3节介绍的随机读写存储器接口ram_if来引出一个端口实例。这里我们首先需要定义一个通道ram。来看下面的代码:

  1. // By Chenxi,2003.2.25  
  2. // ----------------------  
  3. // CHANNEL : ram  
  4. // ----------------------  
  5. #ifndef _RAM_H  
  6. #define _RAM_H  
  7. #include "systEMC.h"  
  8. #include "mem_if.h"   
  9.  
  10. template <class T>  
  11. class ram : publIC sc_module,ram_if<T>   
  12. {  
  13. public:  
  14.  ram(sc_module_name name_, unsigned int start_address, unsigned int end_address)  
  15.   :sc_module(name_)  
  16.   ,m_start_address(start_address)  
  17.   ,m_end_address(end_address){   
  18.  
  19.   sc_assert(end_address>=start_address);  
  20.      mem =new T[end_address-start_address];  
  21.  }   
  22.  
  23.  ~ram(){   
  24.   if(mem) {delete mem; mem=0;}  
  25.  }   
  26.  
  27.  transfer_status read( unsigned address, T& data )  
  28. {  
  29.  if( address<m_start_address || address>m_end_address){  
  30.   data=0;   
  31.   return TRANSFER_ERROR;  
  32.  }  
  33.  data = mem[address - m_start_address];  
  34.  return TRANSFER_OK;  
  35. }   
  36.  
  37.  transfer_status write( unsigned address, T& data )  
  38. {  
  39.  if( address<m_start_address || address>m_end_address){   
  40.       return TRANSFER_ERROR;}  
  41.  mem[address-m_start_address]=data;  
  42.  return TRANSFER_OK;  
  43. }   
  44.  
  45. bool reset(){  
  46.  for (int i=0;i<(m_end_address-m_start_address);i++)  
  47.   mem[i]=(T)0;  
  48.  return true;  
  49. }   
  50.  
  51. inline unsigned int start_address()const{  
  52.   return m_start_address;  
  53. }   
  54.  
  55. inline unsigned int end_address() const {  
  56.  return m_end_address;  
  57. }   
  58.  
  59. private:  
  60.    T* mem;  
  61.    unsigned int m_start_address,m_end_address;  
  62. };  
  63. #endif  

      定义好了通道ram,接下来就可以定义一个模块通过端口来访问它了。我们接下来定义一个Master模块来访问RAM。下面的代码是一段准代码。

 

  1. SC_MODULE(Master){  
  2. sc_in_clk clk;  
  3. sc_port<ram_if<int>> ram_port;//端口实例  
  4. void main_action;  
  5. int data;  
  6. unsigned int address;  
  7. SC_CTOR(){  
  8. SC_CTHREAD(main_action,clk.pos());  
  9. }  
  10. };  
  11. void Master::main_action(){  
  12. wait();  
  13. int i=0;  
  14. while(i++<100){  
  15. address=0;//any valid address  
  16. if(transfer_status status=ram_port->write(address,data)){//端口操作  
  17. cout<<”Write RAM at address ”<<address<<”to RAM,Data is ”<<data<<endl;  
  18. }  
  19. else cout<<”RAM write fail,possibly caused by address out of range”<<endl;   
  20.  
  21. if(transfer_status status=ram_port->read(address, data)){  
  22. cout<<”Read RAM at address ”<<address<<”from RAM,Data is ”<<data<<endl;  
  23. }  
  24. else cout<<”RAM read fail,possibly caused by address out of range”<<endl;  
  25. wait();  
  26. address++;  
  27. }  
  28. sc_stop();  



本文关键字:暂无联系方式电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制

上一篇:SystemC-sc_port<IF, N

《一个sc_port实例》相关文章>>>