您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制3.9 端口与通道的关联 正文
3.9 端口与通道的关联

3.9 端口与通道的关联

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

      首先我们来看看如何将端口与通道相互连接起来,以允许模块内的进程通过端口来调用所连接的通道提供的方法。

      我们来看下面的例子。如图1,这是一个信源与信宿通过FIFO通信的简单系统框图。

图1 信源与信宿通过通道FIFO通信

      我们首先来定义一个FIFO接口。FIFO的接口可以分为读接口和写接口,它们是分开的,我们分别定义。如下面的代码

  1. #include <systEMC.h>  
  2. template<class T>  
  3. class fifo_write_if:publIC sc_interface{  
  4.  //write a piece of data to FIFO  
  5.  bool fifo_write(T data)=0;  
  6.  //How many free place avaiable in FIFO?  
  7.  unsigned int number_free()=0;  
  8. };  
  9.  
  10. template<class T>  
  11. class fifo_read_if:public sc_interface{  
  12.  //将一个数据单位写入FIFO  
  13.  bool fifo_read(T& data)=0;  
  14.  //FIFO中有多少个数据单位?  
  15.  unsigned int number_avaiable()=0;  
  16. }; 


      假设我们已经设计好了一个FIFO通道fifo<T, D>,其中T代表存储的数据类型,D代表FIFO的深度。那么在source模块中就可以通过下面的方式调用FIFO了。

  1. SC_MODULE(Source){  
  2.  sc_port<fifo<int>> fifo_write_port;  
  3.  
  4.  void write_process(){  
  5.   int data=100;  
  6.   if (fifo_write_port->number_free()!=0)  
  7.          fifo_write_port->fifo_write(data);  
  8.  }  
  9.  ......  
  10.  }; 


      write_process()是Source模块的一个进程,它通过端口fifo_write_port来检查fifo的状态。如果FIFO中还有空位置,就将数据data写入FIFO。

      在这里我们已经假设Top的设计如下:

  1. #define DEPTH 64   
  2. SC_MODULE(Top){  
  3.   fifo<int,DEPTH> fifo1;  
  4.  Source Source1;  
  5.  Sink Sink1;  
  6.   ......  
  7.  SC_CTOR(Top){  
  8.      Source1.fifo_write_port(fifo1);  
  9.     Sink1.fifo_read_port(fifo1);  
  10.     ......  
  11.  }  
  12. }; 

      这里语句Source1.fifo_write_port(fifo1)将Source1的fifo_write_port端口与fifo1连接。这样当fifo_write_port->fifo_write(data)执行的时候,data的值就会被写入fifo1的存储单元中。




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