【PCIe 总线及设备入门学习专栏 1 -- PCI | PCIe 总线概述】

Overview

在这里插入图片描述

PCIe 标准

现在市场PCIE4.0设备才普及,PCIE5.0逐渐有产品推出
在这里插入图片描述

  • 物理层接口编码NRZ/PAM4
  • NRZ采用两种电平表示数字逻辑信号的0/1信号,每个符号周期传输1bit逻辑信号
  • PAM4采用4中电平来进行信号传输,每个符号周期可传输2个bt的逻辑信息
  • 同样的传输速率,PMA4信号周期仅需要NRZ信号一半

PCI Bus

在介绍 PCI 总线之前,我们先看下 CPU 对 EMMC 是如何访问?
假设 SoC 中有个 EMMC 控制器,控制器后面接入一个内存(存储范围)很大EMMC,当CPU想去访问 EMMC FLash 中的内容时,CPU 只能先将要访问的地址发到 EMMC 控制器上 而不是直接访问EMMC 中的地址,CPU 发出的地址属于 CPU 地址空间的,而EMMC Controller 发出的地址属于 EMMC 地址空间的,它们两个是不相等的。
在这里插入图片描述

图 1-1

所以在访问 EMMC Flash 的过程中都是通过软件的驱动程序来进行的,在驱动程序中 CPU 通过读写 EMMC Contorller 来让EMMC 发出读写信号来读写 EMMC 中的Flash, 根本原因就是 EMMC 中的地址空间和 CPU 地址空间是隔离的。所以这个时候就有个需求:CPU 发出的地址是否可以直接到达 EMMC Flash 中。这个就是PCI 的做法,如下图所示:
在这里插入图片描述

图 1-2

CPU 发出的地址直接转换为 PCI/PCIe 地址空间中的地址,当 CPU 去读写某个地址时,PCI/PCIe 控制器会将CPU发出的地址转化为 PCI/PCIe 地址空间中的某个地址,用这个地址去读取PCIe/PCIe 设备,得到数据之后再一路返回给CPU。这样对于软件来说就省了很多事情,不必去写复杂的驱动程序,也通过硬件的设计来减少软件的工作量。

接下来就是CPU 如何知道 PCI/PCIe 设备的地址?
每个PCI/PCIe 设备都会有一段配置空间,在配置空间中 PCI/PCIe 设备会去声明需要多大的地址空间,Host 主机会去读取PCIe 配置空间中的信息,获取它需要的地址空间大小,然后给它分配。

假设 PCIe 配置空间有32位地址线,也即 0-4G的地址空间,某个PCI/PCIe 设备需要1M的地址空间大小,那么就可以从PCIe 4G的地址空间中分配出来1M大小,比如位 0x0-0xFFFFF, 然后可以将这段空间的起始地址和长度写入到 PCIe 设备的配置空间中,这个时候就出现了一个问题:CPU 需要访问CPU 地址空间的那一段地址才能访问到 PCIe 地址空间的 0x0-0xFFFFF 这段地址呢? 这个问题解决是通过设置PCI/PCIe 控制器进行一个地址空间的转换,通常是将CPU 地址空间的偏移值和PCIe 地址空间的偏移值配置到PCIe controller 中的寄存器即可。

当CPU 发出一个地址,这个地址属于某个 PCIe 设备时,这时会选中PCIe 控制器,PCIe 控制器会把CPU发出来的地址加上偏移值得到PCI地址空间的地址,然后把得到的地址通过PCIe/PCI 总线发给对应的PCI/PCIe 设备,PCI/PCIe 设备会检测PCI总线或者PCIe 总线上的信号,但它发现PCI/PCIe 总线上的地址属于自己的范围时,它就会进行回应。

PCI 插槽上有哪些信号呢?

在 PCI 地址空间中,地址线和数据线是复用的, 如下图的 AD 信号,
在这里插入图片描述

图 1-3

那么如何区分PCI 插槽上的信号时地址还是数据呢?
在这里插入图片描述

图 1-4

是通过 FRAM 信号来进行区分的?

PCIe Interface

PCI 接口使用的并行信号,当速率达到一定程度时,它们之间会有相互的干扰,所以在传输速率到达一定程度时就选择使用穿行接口了,也即 PCIe 接口,它使用的时差分信号。在这里插入图片描述

图 1-5

如下图所示,cpu 通过地址线和data线来访问 PCIe 控制器,PCIe 控制器来控制差分信号给PCIe 设备发送数据或者接收数据,把CPU 发过来的 addres 和 data 进行转换,然后使用串行的信号发给PCIe 设备,设备接收端也是使用两条差分信号进行接收,串行信号会把地址和数据放到一块,PCIe controller 会进行解码,解码完成后会发给CPU。
在这里插入图片描述

图 1-6

对于软件来说 PCIe 或者 PCI 总线都是一样的,它们都是兼容的,软件程序只是去访问某个地址。

接下来会继续介绍 PCI 总线是如何通过PCI Bridge 选中 PCI 设备的,PCIe 总线通过 PCIe Bridge 是如何选中 PCIe 设备的?

PCIe IP 组成介绍

PCEIP代码在实际实现中分为Controller + PHY 两部分.
在这里插入图片描述

PCIe Controller

  • Controller 实现协议具体内容.

  • Controller 为数字电路.

  • Controller 通过 PIPE 接口与 PHY连接.

  • PIPE 标准的接口, Controller 可以与不同厂商的 PHY 连接

  • Controller 通过 AXI/Native 接口, 连接到系统内部总线

  • Native携带协议的内容, AXI 接口由 Native 接口转换而来

  • PCIe Controller Vendor

    • 目前提供Controller的IP厂商 Synopsys/Cadence/赛灵思
    • 国内目前还没有成熟的厂商
  • PCIe PHY

    • 目前提供Controller的IP厂商Synopsys/Cadence
    • 国内已有厂家提供

PCIe RTL 代码生成

Synopsys 家 PCIE Controller 代码的生成通过 coreconsultant工具生成:

  • 提供GUI界面,配置controller的参数.
  • 产生符合用户配置参数的RTL代码.
  • 配置参数主要有:
    • device_type: EP/RC/DW/SW.
    • max Link Speed: Gen1-Gen5
    • speed mode: dynamic frequence/dynamic width
    • max link width: x1 to x16
    • PIPE接口的位宽为32bit
    • PIPE接口速率分别为62.5M/125M/250M/500M/1000M.
    • sever other configuration options.

AXI 配置参数

  • 地址位宽:64

  • 数据位宽:512

  • Burst_length:8

  • device id

    • 每个PCIE设备都有设备号, 厂家通过在PCI-SIG申请

BAR配置

  • BARO/BAR1/BAR2/BAR3/
  • BAR4/BAR5/BAR6配置
  • BAR0为32bitBAR.

推荐阅读
https://blog.csdn.net/qq_27846717/article/details/123153459

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

主公讲 ARM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值