基于网络编码的多信源组播通信系统,包括源代码,原理图等(二)
模块中的状态和阶段,任何一个模块都可以响应来自PCI总线寄存器的访问和控制要求,而PCI总线寄存器可以通过软件来控制。也就是说,硬件和软件的通信是通过PCI总线完成的。
本文引用地址:https://www.eepw.com.cn/article/201612/326828.htm数据以及控信息在硬件和主机系统之间是通过PCI总线传输的,以Linux网络存储栈作为接口的。NetFPGA向主机发送分组数据的过程如图2.5-2a所示:
分组到达,发往CPU队列;
中断程序通知驱动程序有分组到达;
驱动程序设置和初始化DMA传送器;
NetFPGA通过DMA总线发送分组;
中断程序发送DMA结束信号;
驱动程序把分组传递到网络存储栈;


图2.5-2a:NetFPGA向主机发送数据 图2.5-2b:主机向NetFPGA发送数据
主机向NetFPGA发送分组数据的过程如图2.5-2b所示:
控制软件通过网络socket发送分组,分组被递交给驱动程序;
驱动程序设置和初始化DMA传送器;
中断程序发送DMA结束信号;
主机访问寄存器是通过系统调用系统内核的ioctl( )函数作为接口的。读写寄存器的操作函数如下,这两个函数内部调用了ioctl( )函数。
readReg(nf2device *dev, int address, unsigned *rd_data)
writeReg(nf2device *dev, int address, unsigned *wr_data)
例如: readReg(&nf2, OQ_NUM_PKTS_STORED_0, &val);
主机访问NetFPGA寄存器的过程如下:
(1)控制软件调用ioctl( )函数操作网络socket,由函数ioctl传递给驱动程序;
(2)驱动程序完成PCI寄存器的读写
评论