基于IP核的PCI接口与具体功能的FPGA芯片设计

摘 要:采用ip核的设计方法,将外设组件互连标准(pci)总线接口与具体功能应用集成在一个fpga上芯片, 提高了系统的集成度。在对pci ip核进行概述的基础上,介绍了ip核的设计方法,实现了pci总线接口,并设计dma 控制器解决了接口和主机间的数据传输瓶颈问题,最后说明了驱动程序的设计方法。通过在pci机箱的实验测试,设计在功能和时序上均符合pci技术规范,而且硬件工作稳定可靠,达到预期目标。
0引言 外设组件互连标准(peripheralcomponentinterconnection,pci)是一种由intel公司1991年推出的用于局部总线的标准。pci总线位宽32bit工作频率33mhz,数据速率132mbps,同时支持总线宽度扩展到64bit, 工作频率66mhz,数据速率528mbps。pci总线具有即插即用,中断共享,高速 数据传输等功能 [1,2] 。
pci总线系统可以满足通信与网络的需求,在 嵌入式系统中具有广泛的应用前景。尤其是很多其 他的总线,如pxi和pcie都是由pci总线发展而来的。嵌入式系统可以在pci总线上安装各种扩展卡以实现不同的功能。总线的定义对协议、时序、负载、电器性能和机械性能都有严格的规定,充分保证运行的可靠性和兼容性。
pci总线接口的主要完成不同信号环境间的转换,使得数据传输可以顺畅进行。
1pci总线接口 pci总线接口的实现方法有很多种。设计者可 以根据实现的难度, 成本以及板卡的尺寸限制等实际情况加以选择[3,4]
1.1 专用接口芯片
如plx公司的pci9054、 pci9656等。采用这些芯片的优点是可靠性高,设计者可以避开复杂的pci 总线接口关系。缺点是用户可能只是用到部分功能, 会造成一定的资源浪费,并且设计上也缺乏灵活性。
1.2 专用ip核
优点是开发速度快,灵活性好,缩短开发周期。缺点是ip核价格昂贵。例如xilinx公司的logicore。
1.3自行开发
cpld或fpga自行设计。优点是可以灵活实现pci功能。节省系统的逻辑资源,方便系统升级。缺点是需要详细了解pci总线协议,实现难度大。
2 xilinxpciip核概述 xilinx公司的pciip核版本是initiator/target v4.13forpci。此ip核支持存储器读写、i/o读写、配置空间读写3种读写方式。其最多有3个地址空间,每个大小都可根据用户需要具体设置。如果有 不使用的bar最好被禁用,以优化其性能 [5,6] 。
pciip核对fpga设备是预先实现和经过验证的模型。在fpga芯片内的管脚定义和资源的相关位置是定义好的,利用用户约束文件控制关键路径以确保设计的pci接口的时序满足要求。用户通过选择合适的芯片和用户约束文件,包括管脚定义约 束和时序约束, 以满足运行在33/66mhzpci时钟下的时序要求。每种芯片和封装都有特定的时序约束来保证接口的性能,所以用户约束文件最好是在ip核推荐文件的基础上增加用户部分的时序约束。
此ip核文件还提供仿真测试文件,用户可以改 变参数和时序, 完成应用设计后对顶层文件进行仿真验证设计功能的正确性。
其主要的功能是将左边复杂的pci接口信号转换成右边的用户接口数据和控制信号,完成用户设备与pci总线的信息传递。具体应用时只需要关心 用户侧的信号, 具有很强的灵活性。根据用户性质的不同,用户侧的信号分为相对简单的2组独立的target(被动)模式和initiator(主动)模式的信号。用户根据实际需要来确定应用哪种模式,并选用相应控制信号和状态机信号作为接口。
3 应用说明 3.1 target操作
pciip核支持target模式下的单个数据传输和多个数据传输。而且只要涉及到initiator模式的数据传输就必须用到target模式的接口,反之是不需要的。下面对target模式下用户侧重要信号进行简 单介绍[6] 。
addr_vld:地址总线上的地址有效;
s_data_vld:adio_out总线上的数据有效;
s_wren:‘1’标志target写,‘0’标志target读;
s_cbe[3:0]:总线命令和字节有效;
base_hit[7:0]:基地址寄存器译码;
s_ready:数据传输准备好; s_data:设备处于数据传输状态。
3.2 initiator操作
ip核作为pci总线主设备进行initiator写操作时, dma控制器与initiator控制逻辑模块共同将fifo缓存输出的数据通过dma操作发送到ip核 的本地端;initiator读操作时, initiator控制逻辑模块将ip核本地端的数据通过dma操作发送到fifo缓存的输入端。下面对initiator模式下用户侧重要信号进行简单介绍。
request:用来请求initiator传输;
m_data_vld:总线发生数据传输;
m_src_en:数据指针增加;
m_ready:准备好传输数据;
m_addr_n:表示当前操作的地址;
m_data:表示数据传输的状态。
4 ip核在fpga上的具体实现 在xilinx公司芯片xc5vlx50t-1i上利用pci的ip核实现pci接口的读写。fpga的内部结构如 图1所示。
图1fpga内部结构图
4.1 寄存器读写
在target模式下进行数据传输,设备能做的就是响应主设备的命令,接收数据完全处于被动状态。设计只实现target模式的单个数据传输,因此时序相对简单。
4.2dma操作
在initiator模式下进行数据传输必须严格按照pci局部总线规范进行。实际应用时,将fpga的数据通过pci总线写入到计算机内存,若传输要求的速度高,通常以dma方式实现,由硬件设备代替cpu接管总线并负责数据传输,省去了由cpu负责传输时所必须的寻址指令。dma控制器在ip核initiatorburst写操作基础上完成。
dma部分的设计是本地逻辑的重要部分,设计的优劣会影响到数据的传输速率。参看参考文 献[ 6]中的具体的控制流程状态机,如图2所示。
图2dma控制状态机
req_s:主设备开始向总线仲裁器申请总线;然后根据dir确定进入读状态还是写状态。
write_s:写状态;数据传输结束时,判断是否需要重新申请总线。
read_s:读状态;数据传输结束时,判断是否需要重新申请总线。
dead_s:致命错误的终结状态;oops_s:传输评估状态。
根据dma控制器程序的设计,需要设置的参数有目标初始地址(start_addr)、目标结束地址(end_addr)、读写设置(dir)、burst长度(burst_length)和开始标志(start)。
initiatorburstwrite模式实际工作时,在chipscope软件中观察到的时序图如图3所示。
图3用户端dma接口时序
4.3 驱动程序开发
在windowsxp操作系统下,以vc++6.0为 开发环境, 利用windriver工具开发pci接口的驱动程序。寄存器写操作直接采用windriver提供的函数xxx_writedword();寄存器读操作采用函数xxx_readdword()。
dma操作分为2部分:①申请一段连续的内存, 用函数wd_dmalock()申请指定大小的连续数据缓冲区;②写参数至fpga相应寄存器中,最后 启动传输, 传输结束后,用dma->puseraddr访问存放数据的数据缓冲区。
由此可见,利用windriver开发pci的驱动程序是较为方便的。另外,在驱动程序开发完成后,还可以很方便地打包成安装文件,从而使驱动程序可以独立运行。
5结束语 基于pci总线的接口设计已经不是一个新鲜的课题,但随着设计开发提出的指标越来越高,开发的难度并未减弱。xilinx公司的pciip核集成在fpga中,完成接口功能,并与用户逻辑配合工作,实现数据的缓存和传输。相比较采用专用处理芯片的方法,虽然增加了设计的复杂度,但是系统的可移植性好,系统升级也容易。经过实践测试,大大缩小 电路板面积, 更有灵活、稳定、可靠的特点。对于dma控制器的设计能提高数据传输的速率, pci总线的性能得到充分发挥,相信以后会得到更广泛的应用。

二三极管在65W快充产品中的应用
汽车水泵/汽车风机/汽车油泵专用车规级MCU案例展示(LCA037BT(K)32EU8)
华为65英寸和55英寸智慧屏上架,其他尺寸也已跟上脚步
物联网是什么,它会为我们带来哪些影响
光伏测试介绍
基于IP核的PCI接口与具体功能的FPGA芯片设计
友猫拓展坞仅是USB转接头?怎么可能,有你意想不到的功能!
关于运算放大器和仪表放大器的区别分析
SUNLORD顺络小尺寸一体成型功率电感MWTC新品发布
每日一课 | 智慧灯杆5G覆盖规划之覆盖规划流程及覆盖方式的选择
思必驰对于智能家居的预测
台系LED厂迈入MiniLED小量出货阶段 LED产业市况将从谷底逐渐攀升
半导体参数测试的关键问题之一:探针的接触电阻
基于MCU的色彩控制LED系统是怎样设计的
欧胜推出最新D类数字输入扬声器放大器WM8996和WM9082
带你认识40G单纤双向光模块-QSFP+ BiDi光模块
凌力尔特推出3A低压差线性稳压器(LDO)LT3083
三星Galaxy S10+配备骁龙8150处理器最高12GB运行内存并支持无线充电
MAX6505-MAX6508 双温度门限SOT温度开关
三星s8独吞首批骁龙835,小米6怎么办,怒变ppt手机?