1 高速数字 I/O 系统
1.1性能指标
传统数字 I/O 设备的性能指标主要有传输通道数、缓存深度、数据速率等要求。
在多种应用环境下的通用性测试,另外加入了对数据速率、逻辑电平、传输方式三种功能的动态重配置指标。
本项目的技术难点主要集中在高速缓存技术、系统总线技术、多功能动态重配置技术三个方面。
1.2 高速缓存技术
1.2.1缓存介质分析
动态传输速率的高速数字I/O 系统,因此跨时钟域的数据缓存技术在本课题中需要格外注意,异步时钟域之间的数据缓存,其传统的设计方法是采用 FPGA 内部的异步 FIFO 来完成,对缓存空间的容量需求较大、速度较快,FPGA 在完成系统各功能设计的情况下,留给高速缓存模块的存储资源已经无法满足缓存的设计要求。为了满足高速缓存技术对存储容量和传输速率的要求,外部
存储芯片的使用逐步成为高速缓存模块设计的最佳选择。SRAM、SDRAM 两种。
SRAM 类型缓存芯片的传输速率较快,然而相比于 SDRAM 类型缓存芯片其又存在缓存空间较小、成本较高的缺点。
传统的 SDRAM 类型芯片存取速率较慢,但是由其衍生的 DDR2 SDRAM 芯片通过采用时钟上升/下降沿分别触发的方法,使其最大工作速率达到了 400MHz,高的数据传输速率,导致对信号完整性的要求极高,因此 DDR2 SDRAM 芯片还附加了内部信号终结器 ODT模块,该模块主要用于对末端信号的吸收,避免反射信号对后续数据的影响,保证信号传输的正确性。
1.2.2 缓存芯片选型
对于 DDR2 SDRAM 芯片的选型,主要需要考虑数据位宽、存储深度、最高工作速率三项指标。
1.3 系统总线技术
系统总线技术在计算机系统中起到桥梁作用,主要用于实现上位机与外部设备的电气连接,从而完成数据、指令、状态等多种信息的互连通信。
1.3.1 PCIE总线概念
PCI Express(PCIE)总线技术作为新一代的系统总线,充分继承了 PCI 总线的所有优点,其事务类型同样分为了 I/O 事物、配置事务、存储器事务三种类型,且其地址配置的编址方与 PCI 总线的编址方式相同,所以基于 PCI 总线的上位机软件同样可以应用在基于 PCIE 总线的系统中,从而最大程度的避免了由于总线升级所带来的额外负担。
PCIE对PCI的新改进,PCIE 总线技术通过采用串行传输、差分走线和全双工操作等技术有效的避免了由于速率提升而导致的互相干扰,使其在 X1 通道情况下的最高理论速率达了 2.5GHz。与此同时 PCIE 总线采用了 8b/10b 编码的内嵌时钟技术,同步时钟信号直接被编码到数据流中,基于此编码技术可以有效的避免同步时钟信号线的单独布线,同时保证时钟、数据信号的同步性,降低硬件设计的布线难度。
PCIE 总线采用交换器(switch)实现了点对点互连的工作模式,这意味着一个主机可以与多个PCIE 外设进行通信,且每个外部设备都有其专用的通信链路。因此基于点对点互连工作模式的 PCIE 总线技术可以有效的解决掉 PCI 总线中多个外部设备共同占用同一带宽的问题,且对数据传输速率的提高起到了至关重要的作用。
1.3.2 PCIE 总线协议
PCIE 总线的数据传输过程采用了与通信系统中 OSI 分层模式相同的划分方法,根据实现功能的不同主要可以分为事物层、链路层、物理层三种,其中每一层都具有一种相应的数据包,用于完成各层之间的数据传输。

事务层位于 PCIE 总线内部结构的最顶层,主要用于完成事务层包(TLP)的组装或拆解,事务类型可以分为存储器操作、IO 操作、配置、消息四种。事务层根据事务类型的不同又将 TLP包分为 posted、non_posted 和 completion 三种类型。
posted 包用于完成存储器(写)和消息两种事务类型的封装;non_posted 包则用于其余的几种事务类型的封装。事务层也为用户提供了交互接口,用户逻辑可以通过对事务层接口信号的时序控制实现 TLP包的打包和解包操作。
数据链路层的作用是对保证数据传输的正确性,主要由 DLLP 生成单元、检错单元、重发单元和 ACK/NACK 协议逻辑单元四部分组成。
当接收设备检测到DLL 错误时,则会返回一个 NACK 数据链路层包,当发送设备接收到相应信号会重新发送该 TLP 包,从而保证了数据包传输的准确性,而不是简单意义上的在 TLP 基础上添加序列 ID 与 LCRC。
物理层位于 PCIE 总线内部结构的最底层,主要用于完成与 PCIE 链路另一端设备的互连通信。根据物理层主要完成功能的划分,可以将其分为逻辑物理层和电气物理层两个子层,其中逻辑物理层则主要完成物理层包的合成与分解、添加扰码和解扰码、并串/串并转换功能;电气物理层则用于实现对 RocketIO 传输模块的调用,并在其内部完成数据的差分驱动传输、多通道去抖、
8B/10B 编码/解码等功能。
TLP包组装的方式根据事务类型的不同而有所区别,以存储器操作事务类型为例对 TLP 包进行分析,存储器型 TLP 包的组装格式如图。
TLP 的 12 个字节的包头文件,所有的 R 位,都是为用户保留的预留位,可以根据用户需要进行添加。其中 type 标志位和 Fmt 标志位主要用于声明包头文件的类型、大小及是否携带负载数据等特性;EP 标志位主要用于声明事务操作是否正常,为 1 时丢弃负载数据;Length 标志位则用于标记本次 TLP 包所携带负载数据的大小,根据 PCIE 总线规范规定,存储器类型事物中每次最大 4KB 的地址边界,所以此处可选负载数量为 1~1024 个双字;Address[63:2]标志位则用于实现起始地址的映射,此处最低 2 位默认为 00bit 主要是为了与与双字对齐。
1.3.3 PCIE 总线配置空间
PCIE 总线的配置空间主要是由硬件板卡中的特定地址寄存器实现的,在系统上电时BIOS 会对 PCIE 总线上的硬件板卡进行检测,当检测到 PCIE 设备配置空间时,会对其配置空间中的寄存器组进行读取,并根据读取到的配置信息对PCIE 设备进行系统配置,从而实现 PCIE 设备的即插即用。
PCIE 总线的配置空间采用了 16 个配置寄存器,且以 04h 的偏移地址映了 0x00 至 0x3F 区间。由于 PCIE 总线的配置空间采用了 ID 寻址的方式,所以在这组寄存器中主要存储了设备、厂商、版本、分类编码等 ID 信息,上位机驱动会根据这些配置信息来对硬件板卡进行识别。在 PCIE 设备中保存的配置信息必须和上位机驱动设置的 ID 信息一致,否则会导致系统无法识别 PCIE设备。
每个 PCIE 总线的配置空间包含 6 个基址寄存器(BAR0~5),主要用于映射 PCIE 存储空间的地址。此处的 PCIE 存储空间与配置空间是两个不同的概念,存储空间主要分为 Memory 和 I/O 两种类型,其中Memory 类型主要用于对存储容量要求较大的情况下,I/O 类型则用于存储较小空间的用户信息。
1.4 PCIE总线方案选型
PCIE 总线接口的设计首先需要针对 PCIE 总线协议中各层的数据包进行严格的时序设计,同时为了保证配置空间的自动配置,PCIE 总线接口仍需要大量的存储空间。
PCIE 总线接口的设计主要有专用桥接芯片、可编程逻辑器件两种方案。
专用 PCIE 桥接芯片方案中,总线协议的事务层、数据链路层和物理层三层协议均由芯片完成。用户手册,对其用户接口进行简单的时序设计即可实现硬件设备与PCIE 总线的信息交互。
专用桥接芯片的设计方法能够有效降低设计难度,但也为系统升级带来了局限性,如其通道数量、传输速度、配置空间等性能指标均无法根据系统升级的需要进行灵活配置,同时导致硬件成本的增加。
可编程逻辑器件方案中,基于 FPGA 器件中 IP 核的设计方法较为常见,总线协议中的数据链路层和物理层的所有功能均由 FPGA 器件完成,且其物理层的性能指标可以根据用户需要进行配置,为系统升级提供了可行性。
PCIE IP 核的设计文档及参考例程,用户可以根据系统需要对其进行引用,且可以通过 Modelsim 软件对其接口时序进行仿真,为系统设计提供了极大的便利性,有效缩短了开发周期。