FPGA入门教程 FPGA架构教程 Verilog Verilog-2001SystemC
返回首页
当前位置: FPGA主页 > FPGA教程 > SystemC >

3.9 端口与通道的关联

时间:2010-03-31 20:52来源:未知 作者:admin 点击:
首先我们来看看如何将端口与通道相互连接起来,以允许模块内的进程通过端口来调用所连接的通道提供的方法。 我们来看下面的例子。如图1,这是一个信源与信宿通过FIFO通信的简单

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

      我们来看下面的例子。如图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的存储单元中。

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名:密码: 验证码:点击我更换图片
推荐内容