博客
关于我
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/

    你可能感兴趣的文章
    non linear processor
    查看>>
    Non-final field ‘code‘ in enum StateEnum‘
    查看>>
    none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
    查看>>
    None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素...
    查看>>
    NoNodeAvailableException None of the configured nodes are available异常
    查看>>
    Vue.js 学习总结(16)—— 为什么 :deep、/deep/、>>> 样式能穿透到子组件
    查看>>
    nopcommerce商城系统--文档整理
    查看>>
    NOPI读取Excel
    查看>>
    NoSQL&MongoDB
    查看>>
    NoSQL介绍
    查看>>
    NoSQL数据库概述
    查看>>
    Notadd —— 基于 nest.js 的微服务开发框架
    查看>>
    NOTE:rfc5766-turn-server
    查看>>
    Notepad ++ 安装与配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>
    Notepad++在线和离线安装JSON格式化插件
    查看>>
    notepad++最详情汇总
    查看>>
    notepad++正则表达式替换字符串详解
    查看>>
    notepad如何自动对齐_notepad++怎么自动排版
    查看>>
    Notes on Paul Irish's "Things I learned from the jQuery source" casts
    查看>>
    Notification 使用详解(很全
    查看>>