PCIe系列专题之二:2.1 TLP的前世今生

一、故事前传

之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol),主要包括事务层(Transaction layer), 数据链路层(Data link layer)和物理层(Physical layer)。

较为详细解释请见之前的文章:

1. PCIe技术概述;

2.0 PCIe Transaction layer事务层概述。

二、事务层TLP的前世今生

PCIe总线使用的数据报文首先在事务层中形成,这个数据报文也被称之为事务层数据报文,即TLP(Transaction Layer Packet),TLP在经过数据链路层时被加上Sequence Number前缀和CRC后缀,然后发向物理层。

图片

生活中,有时,我们会陷入一个哲学性的思考: "我们来自哪里,终归何方?" 同样,TLP也有这个命题的解答。TLP来自发送设备的事务层,历经“磨难”,终归接收端的事务层。

图片

那么,在TLP传递的过程中到底经历哪些“磨难”呢?请看下图~

图片

我们逐层解析一下这些“磨难”:

1. 发送端Device Core发送事务请求: 数据读写, 完成反馈(Completions),信息(Message)等;

2. 事务层根据Device Core的请求,生成TLP Header,加上Device Core提供的data, 最后加上ECRC(End to End CRC)。此时TLP会放入事务层缓存(Virtual Channel Buffer)之中;

图片

3. 当TLP传递至数据链路层时,会被加上Squeeze Number以及LCRC(Link CRC)。此时,生成"加强版"TLP,并放入数据链路层的Retry buffer;

图片

4. 当TLP传至物理层时,被加上头和尾,到这里,TLP在发送端就组装完毕咯;

图片

5. 在接收端就跟发送端做的事情相反了,在物理层需要掐头去尾,然后传输至数据链路层;

6. 数据链路层收到传入的TLP后,通过计算LCRC验证传输是否正确,正确的话就去掉Sequence Number和LCRC,将TLP传输至事务层;

7. 事务层接收到TLP之后,解析其内容,并将信息传给接收端Device Core,至此,发送端传过来的组装TLP已拆解完毕。

图片

posted @ 2024-11-05 16:05  咸鱼书生  阅读(6)  评论(0编辑  收藏  举报