device number: PCIE设备在它的primary interface(upstream port)只有一个device number, 而一个device number可以有1~8个function.
pcie地址空间与存储器空间的区别。
pcie设备之间或者与处理器或主存储器进行数据传输时,使用的都是pcie地址空间,pcie host主桥将负责pcie地址空间与存储器空间的转换。
Posted总线事务指PCI主设备向PCI目标设备进行数据传递时,当数据到达PCI桥后,即由PCI桥接管来自上游总线的总线事务,并将其转发到下游总线。采用这种数据传送方式,在数据还没有到达最终的目的地之前,PCI总线就可以结束当前总线事务,从而在一定程度上解决了PCI总线的拥塞。
而Non-Posted总线事务是指PCI主设备向PCI目标设备进行数据传递时,数据必须到达最终目的地之后,才能结束当前总线事务的一种数据传递方式。
Non-posted需要等待completion。一般read request是Non-posted,而write request是posted。
Posted Request包括:memory-write request,message request.
Non-Posted Request包括:Configuration read request, I/O read request, memory read request, configuration write request, I/O write request, atomicOp request。
其中HOST主桥或者PCI桥使用Type 00h配置请求,访问与HOST主桥或者PCI桥直接相连的PCI Agent设备或者PCI桥;而HOST主桥或者PCI桥使用Type 01h配置请求,需要至少穿越一个PCI桥,访问没有与其直接相连的PCI Agent设备或者PCI桥。
BAR的设置
PCIE一般有BAR0~5六个基地址寄存器,BAR可以用来指定一个地址空间。
BAR寄存器的最低位为0表明是memory space,为1表明是IO space.
PCIE BAR分为RC BAR和DEVICE BAR。
D0~D3
D0状态分为D0-uninitialized和D0-active状态。Reset结束之后,link建立之后,device即处在D0-uninitialized状态,然后进行enumeration,enumeration结束后就进入D0-active状态。
D1(optional):Fucntion只能发送PME message,且只能接收message和configuration TLP。
D2(optional):Fucntion只能发送PME message,且只能接收message和configuration TLP。
D3(required):分D3-cold和D3-hot,在D3-hot,如果PMCSR的No_Soft_Reset位置为1,表明function context在D3-hot能被保持住,从D3-hot跳转至D0时,不用重新做enumeration,否则,会跳转至D0-uninitialized状态,需要重新初始化。如果Link状态跳转到了L2/L3,则不管No_Soft_Reset是否为1,function都会被reset掉。D3-hot能接收Configuration和message TLP。当main power被remove后,function会进到D3-cold。
Correctable/Uncorrectable error:
Correctable Error是指可以通过Hardware来纠正的的error,不需要software来干预,例如LCRC Error。
Uncorrectable Error分为Fatal和Non-Fatal,Fatal Error需要复位component。Non-Fatal Error可能不需要reset。
ECRC Error是non-fatal uncorrectable error.
Error reporting有3种方式:1、completion status;2、in-band error message;3、Error Forwarding (data poisoning)。
支持AER的会发ERR message,不支持的不会发。
LTR的作用:
LTR可以提高platform power efficiency. 当各个device报告自己的LTR后,Host会根据各LTR大小来集中处理request,从而达到提高效率的作用。
Snoop/No-snoop request:snoop request针对cache操作。
ECRC是end-end检测,而LCRC是port-port检测。LCRC error会引发link layer retry. 而ECRC error是否需要重发由系统软件决定。针对ECRC Error的Non-posted requestion, 会返回UR状态的completion。
Data poinson(EP=1) 只用于带data payload的TLP。
Trasmitter会备份已发送的TLP,只有当收到对端传回的postive ack,才会将所备份的TLP删除。如果在规定时间内没有收到postive ack,或者收到了negative ack,transmitter将重发该TLP。replay_num是一个2bit的计数器,如果replay_num从'b11变为'b00,data link layer将会触发一个physical layer 的link-retrain。当完成re-training之后,将会re-sent TLP.收到ACK后,该计数器才会复位。
DLLP的种类有TLP ACK/NAK,power management,flow control information。
Flow Control Credit主要针对Data Payload.
Data Link Layer通过sequence number和LCRC来确保TLP的发送,当没有收到对端的ACK,将重新发送retry buffer中保存的TLP,如果重发也不成功,则公职Physical Layer retrain Link,通过LTSSM Recovery。
Scramber的作用是打乱数据,减少重复出现的比特流造成电流集中,从而降低EMI效应。
8B/10B的主要作用是在比特流中创建足够的1->0、0->1跳变,从而使接收端的PLL能够还原出接收时钟。
address routing: memory read/write atomicOp request can using either 64bit/32bit address routing, I/O read/write request can use 32bit address routing.
ID routing: is used with Configuration request, ID Routed Messages, completions.
implicit routing: is used only with Message request.
completion timeout机制:
所有的需要completion的request都有completion timeout机制,除了configuration request.
completion timeout limit由Device Control 2寄存器中的Completion Timeout Value设置。
TLP digest指的是TLP中的ECRC,当TD=1,表明该TLP包含ECRC,否则没有ECRC。
peer-to-peer传输是指PCIE devices之间直接进行的传输。
RC发送Memory Read request时,TLP中需要有address, TLP type, requester ID,和length。address用来寻找completer,而requester ID则是被completer用来返回CPLD。
为什么会有4KB boundary?可能跟PC系统内存采用4KB页面有关。
+-300ppm的意思是允许每1666个clock偏移一个clock.
CPLD通过requester_ID来寻址。当requester发出多个outstanding request之后,且CPLD存在out-of-order情况,怎样判断收到的CPLD跟哪个request相对应呢?答案是,发送outstanding request时,由于没有收到CPLD,tag值会递增,从而每个request都会有一个不同的tag,然后CPLD也会存在tag,这样就可以根据tag来匹配request。而且CPLD中带有8bit的low_address,也可以用来辅助匹配request。
对于PCIE2.0,包的构成是:
STP+TLP+END或者STP+TLP+EDB
SDP+DLLP+END