博客
关于我
HighSpeedLogic专题:基于FPGA的PCI接口设计
阅读量:248 次
发布时间:2019-03-01

本文共 2722 字,大约阅读时间需要 9 分钟。

PCI总线及其接口概述

PCI总线是高速同步总线,具有32位总线宽度,工作频率为33MHz,最大传输率为132Mbyte/s,远高于ISA总线的5Mbyte/s速率。PICMG制定的Compact PCI规范支持64位总线宽度、66MHz工作频率,最大传输率可达528Mbyte/s。PCI总线因其高性能、高效率和与现有标准兼容的特点,被认为是最具前瞻性和普适性的局部总线标准之一。

PCI接口相较于其他总线接口较为复杂,不仅有严格的时序要求,还需包含多个配置寄存器以支持即插即用和自动配置功能。PCI设备分为MASTER和TARGET两类,对应的接口也分为MASTER和TARGET两种。PCI接口主要包括PCI标准配置寄存器(64字节)、PCI总线逻辑接口、用户设备逻辑接口、数据缓冲区等。

对于普通应用设计工程师而言,完全理解PCI规范细节并设计接口逻辑并非必要。市场上提供了多种专用PCI接口芯片,如AMCC公司的S5920(TARGET接口)和S5933(MASTER接口),这些芯片简化了PCI接口设计,仅需少量控制信号即可实现PCI总线与用户设备的连接,接口开发变得更加简单高效。

随着FPGA技术的快速发展,PCI接口宏核逻辑逐渐成为设计者的首选选择。FPGA芯片价格下降且逻辑容量扩大,使得集成PCI接口变得更加经济实惠。许多FPGA制造商提供PCI MegaCore逻辑,如ALTERA公司的pci_t32、pci_a、pci_mt64等。这些宏核逻辑支持不同接口类型和数据宽度,设计者可根据需求选择合适的方案。

本文将重点介绍ALTERA公司提供的最简单的32位PCI TARGET接口宏核逻辑pci_t32。文章将涵盖pci_t32的内部结构、外围信号、读写操作时序分析、应用设计实例及相关注意事项。

PCI_t32内部结构及外围信号

PCI_t32是ALTERA公司提供的最简单的32位PCI TARGET接口宏核逻辑,支持33MHz和66MHz时钟频率。其内部结构包括以下几个模块:

  • PCI总线配置寄存器:符合PCI 2.2版规范,用于设备识别、PCI总线功能控制及状态提供。
  • 奇偶校验模块:对数据、地址、命令等进行奇偶校验。
  • PCI侧TARGET控制模块:控制PCI总线操作。
  • 用户设备侧TARGET控制模块:控制与用户逻辑的操作。
  • 用户侧地址/数据/命令/字节使能模块:接收和输出用户侧信号。
  • PCI_t32内部功能模块及周边信号如图1所示。

    PCI_t32的外围信号主要包括PCI总线信号和用户逻辑接口信号。PCI侧信号符合PCI规范,右侧用户逻辑接口信号(local信号)定义如下:

    • L_aci 31 0:地址输入信号
    • L_cbeni 3 0:命令/字节使能输入信号
    • L_dato 31 0:数据输出信号
    • L_adro 31 0:地址输出信号
    • L_beno 30:字节使能输出信号
    • L_cmdo 30:命令输出信号
    • Lt_rdyn:目标设备准备好信号(输入信号)
    • Lt_discn:目标设备请求断开连接信号(输入信号)
    • Lt_abortn:目标设备请求放弃操作信号(输入信号)
    • Lt_irqn:中断请求信号(输入信号)
    • Lt_framen:数据传输完成信号(输出信号)
    • Lt_ackn:数据有效性确认信号(输出信号)
    • Lt_dxfrn:数据传输成功信号(输出信号)
    • Lt_tsr 11 0:目标设备状态寄存器控制信号(输出信号)
    • Cmd_reg 5 0:配置命令寄存器输出信号
    • Stat_reg 5 0:配置状态寄存器输出信号

    读写操作时序分析与设计要点

    PCI规范定义了两种读写操作:Memory和I/O。PCI_t32的读写操作包括Memory单周期读写、Memory猝发读写、I/O单周期读写及配置读写。本文将重点分析32位Memory单周期读写时序,其它模式的操作方式相似。

    3.1 Memory读操作时序

    PCI_t32的Memory读操作时序如图2所示。PCI主设备在第2个clk给出读地址AD 31 0和Memory读命令CBEN 3 0=6。PCI_t32在第3个clk向用户设备输出读地址L_ADR 31 0和读命令L_CMD 3 0=6。用户设备需根据L_CMD 3 0诊别操作类型,选择目标地址并在lt_framen输出为低电平时准备读数据。当lt_rdyn低电平时,用户设备逻辑可准备数据。数据在lt_dxfrn低电平时(第6个clk)输出至L_DAT 31 0。PCI_t32在第7个clk采样数据,PCI主设备在第8个clk获得数据。

    3.2 Memory写操作时序

    PCI_t32的Memory写操作时序如图3所示。PCI主设备在第2个clk给出写地址AD 31 0和Memory写命令CBEN 3 0=7。PCI_t32在第3个clk向用户设备输出写地址L_ADR 31 0和写命令L_CMD 3 0=7。用户设备需根据写命令准备接收数据。当lt_rdyn低电平时,用户设备可接收数据。数据在lt_dxfrn低电平时(第7个clk)输出至L_DAT 31 0。PCI_t32在第8个clk输出数据,用户设备可在此时锁存数据。

    应用设计实例及注意事项

    笔者曾将PCI_t32用于一个Compact PCI TARGET控制模块中。主设备通过PCI_t32读写64个32位控制寄存器,控制外部设备。系统中包含仲裁器等其他逻辑,PCI时钟为33MHz,芯片选用EPF10K100EQC240-2。系统逻辑框架如图4所示。

    在寄存器组中还包含简单的选通、三态控制逻辑。L_ADR 6 0诊别寄存器组目标寄存器。当/WE有效时,L_DAT 31 0上为PCI_t32输出的有效数据;当/OE有效时,寄存器组需将数据放至L_ADC 31 0总线上。

    使用PCI_t32时需注意以下事项:

  • 用户逻辑和PCI_t32的时钟需同步,建议使用全局时钟线。
  • 在PCI标准配置寄存器中,可通过symbol文件进行参数设置,包括DEVICE_ID、REVISION_ID等。
  • 芯片选择需综合考虑容量和速度。EPF10K100EFC484-1芯片在编译PCI_t32时占用621个LC,而PCI_a接口则占用923个LC。芯片容量和速度需根据项目需求选择。
  • 速度级选择需根据仿真结果确定,-1速度级芯片可满足66MHz时钟时序,-2速度级则适合33MHz。
  • 随着FPGA容量的扩大,PCI接口宏核逻辑将成为未来PCI接口设计的主要方法。这些宏核逻辑可显著提高调试效率,缩短开发周期,提升系统集成度和性能。

    转载地址:http://digt.baihongyu.com/

    你可能感兴趣的文章
    Netty工作笔记0050---Netty核心模块1
    查看>>
    Netty工作笔记0057---Netty群聊系统服务端
    查看>>
    Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
    查看>>
    Netty工作笔记0063---WebSocket长连接开发2
    查看>>
    Netty工作笔记0070---Protobuf使用案例Codec使用
    查看>>
    Netty工作笔记0077---handler链调用机制实例4
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty工作笔记0085---TCP粘包拆包内容梳理
    查看>>
    Netty常用组件一
    查看>>
    Netty常见组件二
    查看>>
    netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
    查看>>
    Netty心跳检测机制
    查看>>
    Netty核心模块组件
    查看>>
    Netty框架内的宝藏:ByteBuf
    查看>>
    Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
    查看>>
    Netty源码—2.Reactor线程模型一
    查看>>
    Netty源码—3.Reactor线程模型三
    查看>>
    Netty源码—4.客户端接入流程一
    查看>>
    Netty源码—4.客户端接入流程二
    查看>>
    Netty源码—5.Pipeline和Handler一
    查看>>