PCI协议(一)

PCI协议

  • PCI基本协议
    • 什么是PCI?
    • PCI总线接口及传输协议
    • PCI Bus波形

PCI基本协议

什么是PCI?

PCI是一种总线协议,目PCI-E的使用范围很广,而PCI是早于PCI-E的基本协议,很多主流的CPU架构中同样在使用。
PCI的工作频率有:33MHz,66MHz和133MHz三种;总线位宽有:32bit和64bit两种,所以说PCI可以支持不同的工作带宽。

PCI总线接口及传输协议

PCI协议(一)_第1张图片

接口名称 信号类型 描述
AD[31:0]/AD[63:0] t/s 数据和地址线 ,用作传输地址和数据,位宽为32bit或者64bit
C/BE[3:0]/C/BE[7:0] t/s 用于传输command和byte enable,由于地址线可能为64bit,所以BE需要支持8bit位宽
PAR/PAR64 t/s 校验位,奇偶校验
FRAME# s/t/s 低有效,由高变低表示一组数据的传输开始
IRDY# s/t/s 低有效,表示master准备好传输数据
TRDY# s/t/s 低有效,表示slave准备好发送数据
STOP# s/t/s 低有效,表示slave请求master停止当前的transaction
LOCK# s/t/s 低有效,这个不是太懂。。
DEVSEL# s/t/s 作为input,表示device被选中,作为output表示device解码之后发现自己被选中
IDSEL input 用作configuration write或者read的device的选择信号
PERR# s/t/s 表示奇偶校验错误
SERR# o/d 表示重大错误,是open drain信号类型
REQ# t/s 表示device向仲裁请求占用总线
GNT# t/s 表示device被仲裁授权

信号中带#表示低有效。

对于open drain类型的信号:同一条总线上所有device共同驱动,只要有一个device有效,那么信号输出为有效。
t/s也就是三态信号,没有device驱动时就是高阻状态。
s/t/s信号是sustained tri-state信号,就是device释放这个信号之前必须要先拉高为1再释放为z。

PCI Bus波形

PCI协议(一)_第2张图片
上图是基本读操作:
2T:
FRAME# 从1变0,AD传输读地址,C/BE传输command;
3T:
turn_around, 此时C/BE为byte_enable,slave可以根据byte_enable准备数据;
4T:
IRDY,TRDY同时有效,表示slave将read data返回给了master.
5T:
IRDY有效,表示master还有数据需要读取,TRDY无效,表示slave没有准备好数据;
6T:
IRDY,TRDY同时有效,表示完成了1T数据的传输;
7T:
IRDY无效,TRDY有效,插入wait cycle;
8T:
FRAME# 无效,表示这是master传输的最后1T数据。

turn_around: 同一条bus可能被很多device驱动,turn_around 就是用于不同device之间的转换。
wait :IRDY或TRDY无效,传输暂停。
可预取:可预取的概念,对读transaction的影响很大,第一:什么叫可预取?可预取就是表示当前的这个存储区域多次的读操作不会造成不可挽回的影响。比方说FIFO,如果我需要读1个data,device读3个data,那么就会造成2个data的损失。第二:可预取对读transaction的影响?首先要明确,pci协议发起一笔交易,只提供了读地址并未提供读长度,也就是说slave并不知道master要读多少数据。针对不可预取的区域,每次slave都只读一个data(并且在BE信息有效后去读), 如果master没有将Frame置为1(表示还有数据需要传输),slave就会插入wait,之后再去读address+1处的数据,就会大大降低读数据的速度。如下图。
PCI协议(一)_第3张图片

PCI协议(一)_第4张图片
上图是基本写操作:
2T:
FRAME# 从1变0,AD传输读地址,C/BE传输command;
3T:
传输第1T数据;
4T:
传输第2T数据;
5T:
wait state;
6T:
wait state;
7T:
wait state;
8T:
FRAME# 无效,表示这是master传输的最后1T数据。

注意以下问题
master需要传输3T数据,那么在5T时,为什么没有将FRAME#拉高表示还剩最后1T数据?
这是因为5T时,IRDY无效,如果FRAME也无效,那么总线会进入IDLE状态,仲裁可能会在下一T将控制权交给其他的device.

在5T时,AD线的data还未准备好,但是C/BE线上的byte_enable以及准备好了,这是因为spec中规定即使master要进入wait状态,也不能延迟byte_enable的输出。
在这里插入图片描述
后续还会整理PCI中的产销模型,报错机制和配置空间等。

你可能感兴趣的:(PCI协议(一))