pci总线的信号定义
pci总线是一条共享总线,在一条pci总线上可以挂接多个pci设备。这些pci设备通过一系列信号与pci总线相连,这些信号由地址/数据信号、控制信号、仲裁信号、中断信号等多种信号组成。
pci总线是一个同步总线,每一个设备都具有一个clk信号,其发送设备与接收设备使用这个clk信号进行同步数据传递。pci总线可以使用33mhz或者66mhz的时钟频率,而pci-x总线可以使用133mhz、266mhz或者533mhz的时钟频率。
除了rst#、inta~d#、pme#和clkrun#等信号之外,pci设备使用的绝大多数信号需要与clk信号同步。其中rst#是复位信号,pci设备使用inta~d#信号进行中断请求。本篇并不关心pme#和clkrun#信号。
1.2.1 地址和数据信号
在pci总线中,与地址和数据相关的信号如下所示。
(1) ad[31:0]信号
pci总线复用地址与数据信号。pci总线事务在启动后的第一个时钟周期传送地址,这个地址是pci总线域的存储器地址或者i/o地址;而在下一个时钟周期传送数据[1]。传送地址的时钟周期也被称为地址周期,而传送数据的时钟周期也被称为数据周期。pci总线支持突发传送,即在一个地址周期之后,可以紧跟多个数据周期。
(2) par信号
pci总线使用奇偶校验机制,保证地址和数据信号在进行数据传递时的正确性。par信号是ad[31:0]和c/be[3:0]的奇偶校验信号。pci主设备在地址周期和数据周期中,使用该信号为地址和数据信号线提供奇偶校验位。
(3) c/be[3:0]#信号
pci总线复用命令与字节选通引脚。在地址周期中,c/be[3:0]信号表示pci总线的命令。而在数据周期,c/be[3:0]引脚输出字节选通信号,其中c/be3、c/be2、c/be1和c/be0与数据的字节3、2、1和0对应。使用这组信号可以对pci设备进行单个字节、字和双字访问。pci总线通过c/be[3:0]#信号定义了多个总线事务,这些总线事务如表1‑2所示。
表1‑2 pci总线事务
c/be[3:0]# 命令类型 说明
0000 interrupt acknowledge 中断响应总线事务读取当前挂接在pci总线上的中断控制器的中断向量号。目前大多数处理器系统的中断控制器都不挂接在pci总线上,因此这种总线事务很少被使用。
0001 special cycle host主桥可以使用special cycle事务在pci总线上,进行信息广播。
0010 i/o read host主桥可以使用该总线事务对pci设备的i/o地址空间进行读操作。目前多数pci设备都不支持i/o地址空间,而仅支持存储器地址空间,但是仍有部分pci设备同时包含i/o地址空间和存储器地址空间。
0011 i/o write 对pci总线的i/o地址空间进行写操作。
0100 reserved 保留
0101 reserved 保留
0110 memory read host主桥可以使用该总线事务对pci设备的存储器空间进行读操作。pci设备也可以使用该总线事务读取处理器的存储器空间。
0111 memory write host主桥可以使用该总线事务对pci设备的存储器空间进行写操作。pci设备也可以使用该总线事务向处理器的存储器空间进行写操作。
1000 reserved 保留
1001 reserved 保留
1010 configuration read host主桥可以对pci设备的配置空间进行读操作。每一个pci设备都有独立的配置空间。在多功能pci设备中,每一个子设备(function)也有一个独立的配置空间。该总线事务只能由host主桥发出,pci桥可以转发该总线事务。
1011 configuration write host主桥对pci设备的配置空间进行写操作。
1100 memory read multiple host主桥可以使用该总线事务对pci设备的存储器空间进行多行读操作,这种操作并不多见。该总线事务的主要用途是供pci设备使用,读取主存储器。这个读操作与memory read操作(c/be[3:0]为0x0110时)略有不同,详见第3.4.5节。
1101 dual address cycle pci总线支持64位地址,处理器或者其他pci设备访问64位pci总线地址时,必须使用双地址周期产生64位的pci总线地址。pci设备使用dma读写方式访问64位的存储器地址时,也可以使用该总线事务。
1110 memory read line host主桥可以使用该总线事务对pci设备的存储器空间进行单行读操作,这种操作并不多见。该总线事务的主要用途是供pci设备使用,读取主存储器。详见第3.4.5节。
1111 memory write and invalidate 存储器写并无效操作,与存储器写不同,pci设备可以使用该总线事务对主存储器空间进行写操作。该总线事务将数据写入主存储器的同时,将对应cache行中的数据“使无效”,详见第3.3.4节。
1.2.2 接口控制信号
在pci总线中,接口控制信号的主要作用是保证数据的正常传递,并根据pci主从设备的状态,暂停、终止或者正常完成当前总线事务,其主要信号如下。
(1) frame#信号
该信号指示一个pci总线事务的开始与结束。当pci设备获得总线的使用权后,将置该信号有效,即置为低,启动pci总线事务,当结束总线事务时,将置该信号无效,即置为高。pci设备(host主桥)只有通过仲裁获得当前pci总线的使用权后,才能驱动该信号。
(2) irdy#信号
该信号由pci主设备(包括host主桥)驱动,该信号有效时表示pci主设备的数据已经准备完毕。如果当前pci总线事务为写事务,表示数据已经在ad[31:0]上有效;如果为读事务,表示pci目标设备已经准备好接收缓冲,目标设备可以将数据发送到ad[31:0]上。
(3) trdy#信号
该信号由目标设备驱动,该信号有效时表示目标设备已经将数据准备完毕。如果当前pci总线事务为写事务,表示目标设备已经准备好接收缓冲,可以将ad[31:0]上的数据写入目标设备;如果为读事务,表示pci设备需要的数据已经在ad[31:0]上有效。
该信号可以和irdy#信号联合使用,在pci总线事务上插入等待周期,对pci总线的数据传送进行控制。
(4) stop#信号
该信号有效时表示目标设备请求主设备停止当前pci总线事务。一个pci总线事务除了可以正常结束外,目标设备还可以使用该信号终止当前pci总线事务。目标设备可以根据不同的情况,要求主设备对当前pci总线事务进行重试(retry)、断连(disconnect),也可以向主设备报告目标设备夭折(target abort)。
目标设备要求主设备retry和disconnect并不意味着当前pci总线事务出现错误。当目标设备没有将数据准备好时,可以使用retry周期使主设备重试当前pci总线事务。有时目标设备不能接收来自主设备较长的burst操作时,可以使用disconnect周期,将一个较长的burst操作,分解为多个burst操作。当主设备访问的地址越界时,目标设备可以使用disconnect周期,终止主设备的越界访问。
而target abort表示在数据传送中出现错误。处理器系统必须要对这种情况进行处理。在pci总线中,出现abort一般意味着当前pci总线域出现了较为严重的错误。
(5) idsel信号
pci总线在进行配置读写总线事务时,使用该信号选择pci目标设备。配置读写总线事务与存储器读写总线事务在实现上略有不同。在pci总线中,存储器读写总线事务使用地址译码方式访问外部设备。而配置读写总线事务使用“id译码方式”访问pci设备,即通过pci设备的总线号、设备号和寄存器号访问pci设备的配置空间。
idsel信号与pci设备的设备号相关,相当于pci设备配置空间的片选信号,这部分内容将在第2.4.4节中详细介绍。
(6) devsel#信号
该信号有效时表示pci总线的目标设备准备好,该信号与trdy#信号不同之处在于该信号有效仅表示目标设备已经完成了地址译码。目标设备使用该信号通知pci主设备,其访问对象在当前pci总线上,但是并不表示目标设备可以与主设备进行数据交换。而trdy#信号表示数据有效,pci主设备可以向目标设备写入或者从目标设备读取数据。
pci总线规范根据设备进行译码速度的快慢,将pci设备分为快速、中速和慢速三种设备。在pci总线上还有一种特殊的设备,即负向译码设备,在一条pci总线上当快速、中速和慢速三种设备都不能响应pci总线事务的地址时,负向译码设备将被动地接收这个pci总线事务。如果在pci主设备访问的pci总线上,没有任何设备可以置devsel#信号为有效,主设备将使用master abort周期结束当前总线事务。
(7) lock#信号
pci主设备可以使用该信号,将目标设备的某个存储器或者i/o资源锁定,以禁止其他pci主设备访问此资源,直到锁定这个资源的主设备将其释放。pci总线使用lock#信号实现lock总线事务,只有host主桥、pci桥或者其他桥片可以使用lock#信号。在pci总线的早期版本中,pci agent设备也可以使用lock#信号,而目前pci总线使用lock#信号仅是为防止死锁和向前兼容。lock总线事务将严重影响pci总线的传送效率,在实际应用中,设计者应当尽量避免使用该总线事务。
1.2.3 仲裁信号
pci设备使用该组信号进行总线仲裁,并获得pci总线的使用权。只有pci主设备需要使用该组信号,而pci从设备可以不使用总线仲裁信号。这组信号由req#和gnt#组成。其中pci主设备的req#和gnt#信号与pci总线的仲裁器直接相连。
pci主设备的总线仲裁信号与pci总线仲裁器的连接关系如图1‑2所示。值得注意的是,每一个pci主设备都具有独立的总线仲裁信号,并与pci总线仲裁器一一相连。而总线仲裁器需要保证在同一个时间段内,只有一个pci设备可以使用当前总线。
在一个处理器系统中,一条pci总线可以挂接pci主设备的数目,除了与负载能力相关之外,还与pci总线仲裁器能够提供的仲裁信号数目直接相关。
在一颗pci总线树中,每一条pci总线上都有一个总线仲裁器。一个处理器系统可以使用pci桥扩展出一条新的pci总线,这条新的pci总线也需要一个总线仲裁器,通常在pci桥中集成了这个总线仲裁器。多数host主桥也集成了一个pci总线仲裁器,但是pci总线也可以使用独立的pci总线仲裁器。
pci主设备使用pci总线进行数据传递时,需要首先置req#信号有效,向pci总线仲裁器发出总线申请,当pci总线仲裁器允许pci主设备获得pci总线的使用权后,将置gnt#信号为有效,并将其发送给指定的pci主设备。而pci主设备在获得总线使用权之后,将可以置frame#信号有效,与pci从设备进行数据通信。
1.2.4 中断请求等其他信号
pci总线提供了inta#、intb#、intc#和intd#四个中断请求信号,pci设备借助这些中断请求信号,使用电平触发方式向处理器提交中断请求。当这些中断请求信号为低时,pci设备将向处理器提交中断请求;当处理器执行中断服务程序清除pci设备的中断请求后,pci设备将该信号置高[2],结束当前中断请求。
pci总线规定单功能设备只能使用inta#信号,而多功能设备才能使用intb#/c#/d#信号。pci设备的这些中断请求信号可以通过某种规则进行线与,之后与中断控制器的中断请求信号线相连。而处理器系统需要预先知道这个规则,以便正确处理来自不同pci设备的中断请求,这个规则也被称为中断路由表,有关中断路由表的详细描述见第1.4.2节。
pci总线在进行数据传递过程时,难免会出现各种各样的错误,因此pci总线提供了一些错误信号,如perr#和serr#信号。其中当perr#信号有效时,表示数据传送过程中出现奇偶校验错(special cycle周期除外);而当serr#信号有效时,表示当前处理器系统出现了三种错误可能,分别为地址奇偶校验错,在special cycle周期中出现数据奇偶校验错,或者系统出现其他严重错误。
如果pci总线支持64位模式,还需要提供ad[63:32]、c/be[7:4]、req64、ack64和par64这些信号。此外pci总线还有一些与jtag、smbclk以及66mhz使能等信号,本章并不关心这些信号。
欧洲银行希望加密资产和代币的监管能够保持一致
基于目标检测框架上实现用于布匹瑕疵检测的模型
中科曙光用AI为崂山注入新活力
三星电子正考虑暂停中国的一家手机制造厂的业务
IoT产品开发,动态多协议快速迎合多样设计
基于PCI总线的信号定义
iPhone 5值得等待的十大理由
100W互补功率放大器,100W power amplifier
VR头显大盘点!你会剁手哪款?
揭秘优秀的NVH所必要的素质
5G高频特性将使GaN技术使用领域延伸
晶瑞股份拟在湖北省潜江市投资建设微电子材料项目 项目总投资15.2亿元
亚马逊云科技直挂云帆济沧海,助力中国企业致胜海外
人工智能可以像人一样描述图像?
2030年太阳能将成为能源系统的支柱
如何训练Wekinator控制Arduino
全球聚集千万炒币大军 高效安全的H网应运而生
ST和Microchip等品牌MCU微控制器的分类及特点
浪潮在5G小基站的探索与实践探讨
康奈尔大学创造可感觉形状纹理的软性机器人手