SerDes
文章平均质量分 73
Felix@SH
技术源于积累,成功始于执着! 个人邮箱:justlxy@mail.dhu.edu.cn QQ:1576109464
展开
-
PCIe扫盲——Flow Control基础(二)
在任何事务层包(TLP)发送之前,PCIe总线必须要先完成Flow Control初始化。当物理层完成链路初始化后,便会将LinkUp信号变为有效,告知数据链路层可以开始Flow Control初始化了。如下图所示:注:由于VC0是默认使能的,所以当Flow Control初始化开始时,其会被自动的初始化。其他的Virtual Channel是可选的,只有当被配置为使能的时候才会被初始化。Flow Control初始化被分为两个步骤,FC_Init1和FC_Init2,其在整个数据链路控制和管理转载 2021-05-14 08:39:36 · 1343 阅读 · 0 评论 -
PCIe扫盲——Flow Control基础(一)
Flow Control即流量控制,这一概念起源于网络通信中。PCIe总线采用Flow Control的目的是,保证发送端的PCIe设备永远不会发送接收端的PCIe设备不能接收的TLP(事务层包)。也就是说,发送端在发送前可以通过Flow Control机制知道接收端能否接收即将发送的TLP。在PCI总线中,并没有Flow Control这样的机制,因此发送端并不知道当前时刻,接收端能否接收对应的TLP。因此,发送端只能先尝试发送,期间可能会被插入多个等待周期(接收设备尚未就绪等原因),甚至是重发(Re转载 2021-05-14 08:38:34 · 2747 阅读 · 0 评论 -
PCIe扫盲——TLP Header详解(四)
PCIe中的Message主要是为了替代PCI中采用边带信号,这些边带信号的主要功能是中断,错误报告和电源管理等。所有的Message请求采用的都是4DW的TLP Header,但是并不是所有的空间都被利用上了,例如有的Message就没有使用Byte8到Byte15的空间。Message请求的TLP Header格式如下图所示:上面的表格中提到了,Message主要有九个类型:1. INTx Interrupt Signaling2. Power Managem...转载 2021-05-14 08:37:48 · 640 阅读 · 0 评论 -
PCIe扫盲——TLP Header详解(三)
CompletionsCompletions的TLP Header的格式如下图所示:这里来解释一下Completion Status Codes· 000b (SC) Successful Completion:表示请求(Request)被正确的处理;· 001b (UR) Unsupported Request:表示请求是非法的或者不能被Completer所识别的。在PCIe V1.1以及之后的版本将这作为Advisory Non-Fatal Err...转载 2021-05-14 08:36:42 · 827 阅读 · 0 评论 -
PCIe扫盲——TLP Header详解(二)
下面用几个具体的例子来讲解TLP Header的格式与作用。因为内容较多,所以分为多篇文章分别进行介绍。第一篇(即本文)介绍IO Request、Memory Request和Configuration Request。第二篇文章(即TLP Header详解三)介绍Completion ,第三篇文章(即TLP Header详解四)介绍Message Request。IO RequestIO Request的TLP Header的格式如下图所示:Memory RequestMemo转载 2021-05-14 08:35:45 · 600 阅读 · 0 评论 -
PCIe扫盲——TLP Header详解(一)
事务层包(TLP)的一般格式如下图所示:前面的文章介绍过,TLP Header为3DW或者4DW,Data Payload为1-1024DW,最后的TLPDigest(ECRC)是可选的,为1DW。TLP Header在整个TLP的位置如下图所示,需要注意的是,TLP Header的格式和内容都会随着TLP的类型和路由方式的改变而改变。TLP的类型和路由方式由Fmt和Type所决定,这在前面关于TLP路由的文章中已经详细的介绍过。上图显示的是各种不同格式的TLP Header的相同的部.转载 2021-05-14 08:35:03 · 1094 阅读 · 0 评论 -
PCIe扫盲——TLP路由之Implicit Routing
模糊路由(Implicit Routing,又译为隐式路由)只能用于Message的路由。前面的文章中多次提到过,PCIe总线相对于PCI总线的一大改进便是消除了大量的边带信号,这正是通过Message的机制来实现的。PCIe定义的Message主要有以下几种类型:• Power Management• INTx legacy interrupt signaling• Error signaling• Locked Transaction support• Hot Plug signalin转载 2021-05-14 08:32:48 · 367 阅读 · 0 评论 -
PCIe扫盲——TLP路由之Address Routing
地址路由(Address Routing)的地址包括IO和Memory。对于Memory请求来说,32bit的地址使用3DW的Header,64bit的地址使用4DW的Header。而IO请求则只能使用32bit的地址,即只能使用3DW的Header。注:再次强调,IO请求是为了兼容早期的PCI设备的,在新的PCIe设备中禁止使用。3DW和4DW的TLP Header分别如以下两张图所示:当Endpoint接收到采用地址路由的TLP时,其会根据该TLP Header中的地址信息和自己的配转载 2021-05-14 08:31:54 · 397 阅读 · 0 评论 -
PCIe扫盲——TLP路由之ID Routing
ID 路由(ID Routing)有的时候也被称为BDF路由,即采用Bus Number、Device Number和Function Number来确定目标设备的位置。这是一种兼容PCI和PCI-X总线协议的路由方式,主要用于配置请求(Configuration Request)的路由,在PCIe总线中,其还可以被用于Completion和Message的路由。前面的文章提到过,TLP的Header有3DW的和4DW的,其中4DW的Header一般只用于Message中。使用ID路由的TLP Head转载 2021-05-14 08:31:11 · 505 阅读 · 0 评论 -
PCIe扫盲——TLP路由(Routing)基础
首先来分析一个例子,如下图所示:当包(Packet)到达Switch的输入端口(Ingress Port)时,端口首先会检查包是否有错误,然后根据包的路由(Routing)信息,来做出以下三种处理方式之一:1、 接受这个包,并自己(Switch)使用它(Internal Use);2、 将其通过响应的输出端口(Egress Port)转发到下一级Endpoint(或者下一级Switch);3、 拒绝接受这个包。在前面的文章中多次介绍过,PCIe总线中一共有三种类型的包:Ordered转载 2021-05-12 10:29:07 · 524 阅读 · 0 评论 -
PCIe扫盲——Base & Limit寄存器详解
上一篇文章介绍了Type0型配置空间Header中的BAR的作用和用法,但是PCIe中的桥设备(Switch和Root中的P2P)又是如何判断某一请求(Request)是否属于自己或者自己的分支下的设备的呢?这实际上是通过Type1型配置空间Header中的Base和Limit寄存器来实现的,这篇文章来进行简单地介绍一下。Base和Limit寄存器在Type1 Header中的位置如下图所示:Base和Limit寄存器分别确定了其所有分支下设备(The device that live bene转载 2021-05-12 10:28:27 · 777 阅读 · 0 评论 -
PCIe扫盲——基地址寄存器(BAR)详解
基地址寄存器(BAR)在配置空间(Configuration Space)中的位置如下图所示:其中Type0 Header最多有6个BAR,而Type1 Header最多有两个BAR。这就意味着,对于Endpoint来说,最多可以拥有6个不同的地址空间。但是实际应用中基本上不会用到6个,通常1~3个BAR比较常见。主要注意的是,如果某个设备的BAR没有被全部使用,则对应的BAR应被硬件全被设置为0,并且告知软件这些BAR是不可以操作的。对于被使用的BAR来说,其部分低比特位是不可以被软件操作的,转载 2021-05-12 10:27:33 · 1976 阅读 · 0 评论 -
PCIe扫盲——Memory & IO 地址空间
早期的PC中,所有的IO设备(除了存储设备之外的设备)的内部存储或者寄存器都只能通过IO地址空间进行访问。但是这种方式局限性很大,而且效率低,于是乎,软件开发者和硬件厂商都不能忍了……然后一种新的东西就出来了——MMIO。MMIO,即Memory Mapped IO,也就是说把这些IO设备中的内部存储和寄存器都映射到统一的存储地址空间(Memory Address Space)中。但是,为了兼容一些之前开发的软件,PCIe仍然支持IO地址空间,只是建议在新开发的软件中采用MMIO。注:PCIe Spec转载 2021-05-12 10:26:51 · 1005 阅读 · 0 评论 -
PCIe扫盲——Type0 & Type1 型配置请求
前面的文章中介绍过有两种类型的配置空间,Type0和Type1,分别对应非桥设备(Endpoint)和桥设备(Root和Switch端口中的P2P桥)。Type0还是Type1是由事务层包(TLP)包头中的Type Field所决定的,而读还是写则是由TLP包头中的Format Field所决定的。分别以下两张图所示:之前的文章中强调过,PCIe中只有Root才可以发起配置空间读写请求,并且我们知道Root的每个端口中都包含有一个P2P桥。当Root发起配置空间读写请求时,相应的桥首先检查请转载 2021-05-12 10:26:07 · 2073 阅读 · 0 评论 -
PCIe扫盲——配置空间的读写机制
需要特别注意的是,PCIe的Spec中明确规定只有Root有权限发起配置请求(Originate Configuration Requests),也就是说PCIe系统里面的其他设备是不允许去配置其他设备的配置空间的,即peer-to-peer的配置请求是不允许的。并且配置请求的路由(Routing)方式只能是采用BDF(Bus,Device,Function)。处理器一般不能够直接发起配置读写请求,因为其只能产生Memory Request和IO Request。这就意味着Root必须要将处理器的相关请转载 2021-05-12 10:25:22 · 953 阅读 · 0 评论 -
PCIe扫盲——BDF与配置空间
前面的文章中介绍过,每一个PCIe设备可以只有一个功能(Function),即Fun0。也可以拥有最多8个功能,即多功能设备(Multi-Fun)。不管这个PCIe设备拥有多少个功能,其每一个功能都有一个唯一独立的配置空间(Configuration Space)与之对应。和PCI总线一样,PCIe总线中的每一个功能(Function)都有一个唯一的标识符与之对应。这个标识符就是BDF(Bus,Device,Function),PCIe的配置软件(即Root的应用层,一般是PC)应当有能力识别整个PCI转载 2021-05-12 10:23:27 · 798 阅读 · 0 评论 -
PCIe扫盲——一个Memory Read操作的例子
前面的一系列文章简要地介绍了PCIe总线的结构、事务层、数据链路层和物理层。下面我们用一个简单地的例子来回顾并总结一下。如下图所示,Requester的应用层(软件层)首先向其事务层发送如下信息:32位(或者64位)的Memory地址,事务类型(Transaction Type),数据量(以DW为单位),TC(Traffic Class,即优先级),字节使能(Byte Enable)和属性信息(Attributes)等。然后接收端的事务层使用这些信息创建了一个Mrd TLP(Memory Rea转载 2021-05-12 10:22:00 · 537 阅读 · 0 评论 -
PCIe扫盲——PCIe总线物理层入门
前面的文章简单的介绍了一些关于PCIe总线事务层(Transaction Layer)和数据链路层(Data Link Layer)的一些基本概念。这篇文章来继续聊一聊PCIe总线的最底层——物理层(Physical Layer)。在PCIe Spec中,物理层是被分为两个部分单独介绍的,分别是物理层逻辑子层和物理层电气子层,其中后者一般都是基于SerDes来实现的。本篇文章只是简单地介绍一些PCIe物理层的基本概念,关于物理层详细、深入地介绍,请关注我后续的连载博文。由于物理层处于PCIe体系结构中的转载 2021-05-12 10:21:01 · 969 阅读 · 0 评论 -
PCIe扫盲——PCIe总线数据链路层入门
前面的文章介绍过,数据链路层(Data Link Layer)主要进行链路管理(Link Management)、TLP错误检测,Flow Control和Link功耗管理。数据链路层不仅可以转发来自事务层的包(TLP),还可以直接向另一个相邻设备的数据链路层直接发送DLLP,比如应用于Flow Control和Ack/Nak的DLLP。如下图所示:数据链路层还实现了一种自动的错误校正功能,即Ack/Nak机制。如下图所示,发送方会对每一个TLP在Replay Buffer中做备份,直到其接收到转载 2021-05-12 10:20:12 · 785 阅读 · 0 评论 -
PCIe扫盲——PCIe总线事务层入门(三)
PCIe总线设计之初,充分考虑到了音频和视频传输等这些对时间要求特别敏感的应用。为了保证这些特殊应用的数据包能够得到优先发送,PCIe Spec中为每一个包都分配了一个优先级,通过TLP的Header中的3位(即TC,Traffic Class)。如下图所示:TC值越大,表示优先级越高,对应的包也就会得到优先发送。一般来说,支持QoS(Quality of Service)的PCIe总线系统,对于每一个TC值都会有一个独立Virtual Channel(VC)与之对应。这个Virtual Chann转载 2021-04-11 09:44:19 · 484 阅读 · 0 评论 -
PCIe扫盲——PCIe总线事务层入门(二)
前面的文章介绍了TLP的几种类型以及TLP的包结构。这篇文章来详细地聊一聊Non-Posted Transaction(包括Ordinary Read、Locked Read和IO/Configuration Writes)与Posted Writes(包括Memory Writes和Message Writes)。Non-Posted Transactiono Ordinary Reads下图显示的是一个Endpoint向System Memory发送读请求(Read Request)的例..转载 2021-04-11 09:43:35 · 500 阅读 · 0 评论 -
PCIe扫盲——PCIe总线事务层入门(一)
在介绍事务层之前,首先简单地了解一下PCIe总线的通信机制。假设某个设备要对另一个设备进行读取数据的操作,首先这个设备(称之为Requester)需要向另一个设备发送一个Request,然后另一个设备(称之为Completer)通过Completion Packet返回数据或者错误信息。在PCIe Spec中,规定了四种类型的请求(Request):Memory、IO、Configuration和Messages。其中,前三种都是从PCI/PCI-X总线中继承过来的,第四种Messages是PCIe新增加的转载 2021-04-11 09:42:48 · 576 阅读 · 0 评论 -
PCIe扫盲——PCIe总线体系结构入门
和很多的串行传输协议一样,一个完整的PCIe体系结构包括应用层、事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer)。其中,应用层并不是PCIe Spec所规定的内容,完全由用户根据自己的需求进行设计,另外三层都是PCIe Spec明确规范的,并要求设计者严格遵循的。一个简化的PCIe总线体系结构如上图所示,其中Device Core and interface to Transaction Layer就是我们常说的应用层转载 2021-04-11 09:41:55 · 560 阅读 · 0 评论 -
PCIe扫盲——PCIe总线怎样做到在软件上兼容PCI总线
前面的文章中多次说道,PCIe总线在软件上是向前兼容PCI总线的。因此,PCIe总线完整的继承了PCI总线中的配置空间(Configuration Header)的概念。在PCIe总线中也有两种Header,Header0和Header1,分别代表非桥和桥设备,这与PCI总线是完全一致的。在PCIe总线中,非桥设备也就是Endpoint。如下图所示:如图所示,对比前面介绍的PCI的Header可以发现:PCIe的Header基本上与PCI的Header是一致的,只有少许差别。但是这些差别并不影响PC转载 2021-04-11 09:41:23 · 490 阅读 · 1 评论 -
PCIe扫盲——PCIe总线基本概念
PCIe总线的提出可以算是代表着传统并行总线向高速串行总线发展的时代的到来。实际上,不仅是PCI总线到PCIe总线,高速串行总线取代传统并行总线是一个大的趋势。如ATA到SATA,SCSI到USB等……不过,为了兼容之前的PCI总线设备,虽然PCIe是一种串行总线,无法再物理层上兼容PCI总线,但是在软件层上面却是兼容PCI总线的。和很多的串行总线一样,PCIe采用了全双工的传输设计,即允许在同一时刻,同时进行发送和接收数据。如下图所示,设备A和设备B之间通过双向的Link相连接,每个Link支持1转载 2021-04-11 09:40:42 · 1277 阅读 · 0 评论 -
PCIe扫盲——PCI-X总线基本概念
PCI-X总线在PCI总线的基础上发展而来,其在软件和硬件层面上都是兼容PCI总线的,但是却显著的提高了总线的性能。也就是说PCI-X的设备可以直接插到PCI的插槽中去,PCI的设备也可以直接插到PCI-X的插槽中去。从硬件层面上来说,PCI-X继承了PCI总线中的Reflected-Wave Signaling,但是在信号的输入端加入了输入寄存器以增强时序性能,提高了总线的时钟频率。在PCI-X2.0的Spec中还提出了DDR和QDR技术,进一步提高了PCI-X总线的带宽。一个典型的PCI-X总线转载 2021-04-11 09:40:07 · 552 阅读 · 0 评论 -
PCIe扫盲——66MHz的PCI总线与其技术瓶颈
为了能够取得更高的带宽,新版本的PCI Spec将PCI总线提高到了64-bit并将频率提高到了66MHz,最高支持533MB/s。下图描述的是一个典型的66Mhz,64-bit的PCI系统结构图。前面的文章介绍过,PCI总线采用了Reflected-Wave Signaling技术,因此总线频率的提高,必然会导致总线负载能力的降低。结果就是,66MHz 64-bit的PCI总线只能支持一个PCI插卡设备(算作两个PCI设备,插槽和PCI卡各算一个)。为了增加整个系统的PCI设备数,就不得不去增加额转载 2021-04-11 09:39:29 · 346 阅读 · 0 评论 -
PCIe扫盲——PCI总线配置周期产生和配置寄存器
上一篇文章中也是说到了,I/O Address Space的空间很有限(64KB),所以一般在I/O Space中都有两个寄存器,第一个指向要操作的内部地址,第二个存放读或者写的数据。因此,对于PCI的配置周期来说,包含了两个步骤:Step1:CPU先对IO Address中的0xCF8~0xCFB写入要操作的配置寄存器的地址。如下图所示,其中包括了总线号(Bus Number)、设备号(Device Number)、功能号(Function Number)和寄存器指针。Step2:CPU向IO A转载 2021-04-11 09:38:49 · 542 阅读 · 0 评论 -
PCIe扫盲——PCI总线的地址空间分配
PCI总线具有32位数据/地址复用总线,所以其存储地址空间为2的32次方=4GB。也就是PCI上的所有设备共同映射到这4GB上,每个PCI设备占用唯一的一段PCI地址,以便于PCI总线统一寻址。每个PCI设备通过PCI寄存器中的基地址寄存器来指定映射的首地址。如下图所示:注:需要注意的是PCI的地址空间和x86系统中的FSB并不是对等的,而是具有一定的映射关系。PCI体系结构中,一共支持三种地址空间:Memory Address Space、I/O Address Space和Configura转载 2021-04-11 09:38:08 · 1744 阅读 · 0 评论 -
PCIe扫盲——PCI总线的中断和错误处理
PCI总线使用INTA#、INTB#、INTC#和INTD#信号向处理器发出中断请求。这些中断请求信号为低电平有效,并与处理器的中断控制器连接。在PCI体系结构中,这些中断信号属于边带信号(Sideband Signals),PCI总线规范并没有明确规定在一个处理器系统中如何使用这些信号,因为这些信号对于PCI总线是可选信号。所谓边带信号是指这些信号在PCI总线中是可选信号,而且只能在一个处理器系统的内部使用,并不能离开这个处理器环境。注:PCI Spec对边带信号的定义如下:Any signal转载 2021-04-10 18:01:55 · 1125 阅读 · 0 评论 -
PCIe扫盲——PCI总线的三种传输模式
本文来简单地介绍一下PCI Spec规定的三种数据传输模型:Programmed I/O(PIO),Peer-to-Peer和DMA。三种数据传输模型的示意图如下图所示:首先来介绍一下Programmed I/O(PIO)PIO在早期的PC中被广泛使用,因外当时的处理器的速度要远远大于任何其他外设的速度,所以PIO足以胜任所有的任务。举一个例子,比如说某一个PCI设备需要向内存(SDRAM)中写入一些数据,该PCI设备会向CPU请求一个中断,然后CPU首先先通过PCI总线把该PCI设备的数据转载 2021-04-10 18:01:10 · 2210 阅读 · 0 评论 -
PCIe扫盲——PCI总线中的Reflected-Wave Signaling
PCI Spec规定了每个PCI总线上最多可以连接多达32个PCI设备,但是实际上却远远达不到32个,33MHz的32位PCI总线一般只能连接10到12个负载。注:如果使用插槽连接,则一个连接算两个PCI设备,插槽和PCI卡分别算作一个PCI设备。也就是说一个33MHz的PCI总线最多只能连接4到5个插槽即PCI卡。这是因为PCI总线在设计的时候,为了降低功耗,采用了一种叫做reflected‐wave signaling的技术,如下图所示:由图可知,为了降低功耗PCI设备的发送端采用了一种转载 2021-04-10 18:00:27 · 383 阅读 · 0 评论 -
PCIe扫盲——一个典型的PCI总线周期
PCI总线是一种地址和数据复用的总线,即地址和数据占用同一组信号线AD。PCI总线的所有信号都与时钟信号同步,及所有的信号的变化都发生在时钟的上升沿,或者在时钟上升沿进行采样。如下图所示,除了时钟信号CLK和数据地址复用信号AD之外,PCI总线至少还应包括FRAME#(用于表示一次数据传输的起始)、C/BE#(Command/Byte Enable)、IRDY#(Initiator Ready for data)、TRDY#(Target ready)、DESEL#(Device Selec,片选信号,转载 2021-04-10 17:59:43 · 895 阅读 · 1 评论 -
PCIe扫盲——PCI总线基本概念
PCI是Peripheral Component Interconnect(外设部件互连标准)的缩写,它曾经是个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽。目前该总线已经逐渐被PCI Express总线所取代。PCI即Peripheral Component Interconnect,中文意思是“外围器件互联”,是由PCISIG (PCI Special Interest Group)推出的一种局部并行总线标准。PCI总线是由ISA(Industy Standard Architec转载 2021-04-10 17:58:37 · 1388 阅读 · 0 评论 -
PCIe扫盲——PCIe简介
PCI-Express是继ISA和PCI总线之后的第三代I/O总线,即3GIO。 由Intel在2001年的IDF上提出,由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为“PCI-Express”。它的主要优势就是数据传输速率高,另外还有抗干扰能力强,传输距离远,功耗低等优点。注:第一代总线一般指ISA、EISA、VESA和Micro Platforms。第二代总线一般指PCI、AGP和PCI-X。此外,我们在示波器等测量设备中常见到的CPCI和PXI实际上是PCI在仪器仪表接口领域的延伸.原创 2021-04-10 17:57:58 · 1936 阅读 · 0 评论 -
常见串行通信协议误码率(BER)比较
本文简单统计了常见的串行通信协议的Spec所定义的最高误码率(Bit Error Ratio,BER)要求,并做必要的简单说明。1、PCI Express:Gen1(2.5Gbps)/Gen2(5Gbps)/Gen3(8Gbps)/Gen4(16Gbps)/Gen5(32Gbps)均要求BER低于10-12。作为计算机系统最底层的数据总线,10-12的BER要求符合其定位,不过在16Gbps和32Gbps速率下达到这样的误码率要求是一个非常大的挑战;2、CoaXPress:CXP-1(1.25Gbp原创 2021-04-07 17:32:37 · 3983 阅读 · 1 评论 -
Lattice Diamond Reveal SerDes Debug Core简明教程(For ECP5)
本文将以Lattice ECP5为例,简要地介绍一下如何使用Diamond中的Reveal工具来调试SerDes/PCS。文中使用的Project在文章最后的附件中,Project是基于Lattice ECP5 Versa板写的,可以直接使用。1、插入Reveal SerDes Core使用Reveal SerDes Debug Core有一个基本前提:在使用Clarity配置SerDes/PCS的时候,必须使能SCI(SerDes Client Interface)端口。用户在完成RTL设计,确保原创 2021-04-07 17:26:12 · 1248 阅读 · 0 评论