片上总线协议——wishbone协议
常用片上总线协议
(一)Wishbone总线思想:
Wishbone总线能有效的将各种需要的IP核整合起来,使他们之间可以无障碍的通信。而且Wishbone的设计简单、易行,能够适应各种类型IP,实现SOC。Wishbone是采用主端(MASTER)和从端(Slave)的架构。主端模块发出数据传送请求,然后通过一个互连网络和从端进行数据交换,如图所示。这个互连网络我们称之为INTERCON,它使得主端顺利访问从端。图中圆圈部分是INTERCON,起到连接主端和从端的作用。
(二)wishbone互联类型
1.点到点方式
点到点互连是最简单一种的形式。它适用于两个IP核之间的连接
2.数据流方式
数据流互连框图如图所示,当数据以连续的方式进行处理时可采用此模式。图中每个IP核兼有主端和从端。数据从一个IP核传送到下一个,与流水线相似。
3.共享总线方式
共享总线互联方式适合于系统中有两个或者多个主设备需要与一个或者多个从设备通信的场合,它们通过共享的总线进行通信,其好处是结构紧凑,节省布线资源,缺点是主设备希望与特定从设备通信时可能需要等待。主设备在需要与一个从设备通信时,需要先向仲裁器申请总线占有权,获得允许后开始占用总线并与目标从设备开始通信,通信结束后释放总线。当多个主设备同时希望占有总线时,仲裁器通过一定的优先级逻辑分配总线使用机会。 共享总线互联方式在片上系统中得到了广泛的使用,几乎成了片上系统的标志技术之一
4.交互方式
交叉互连方式较共享总线互联方式略复杂。共享总线互联方式在任一时刻只允许最多有一对主设备和从设备通过共享总线进行通信,而十字交叉互联方式最多同时允许超过一对的主设备和从设备对同时进行通信。这里的多个主端不能同时访问同一个从端,也就是一个从端在某一时刻只能被一个主端访问。
图中建立了两条总线连接,很明显数据的传输速度要比共享总线方式大大增加,直同时系统的开销也相应的增加。这种模式主要在有高速数据传输率要求情况下使用。
(三)接口信号定义
SYSCON模块提供时钟和复位信号,这两个信号被送入主设备和从设备。图中给出了Wishbone接口的常见信号,这些信号有些是必须的,有些是可选的。这些信号的基本功能
CLK_O/CLK_I:时钟信号。时钟信号由SYSCON模块产生,并送入各个主设备和从设备。SYSCON通常内部存在一个锁相环,将来源于芯片外的晶体振荡器或者时钟输入信号整形、分频或者倍频为芯片内所需要的时钟信号。所有Wishbone信号都同步到时钟信号上,包括复位信号。
RST_O/RST_I:同步复位信号,高电平有效。复位信号由SYSCON模块产生,并送入各主设备及从设备。
DAT_O()/DAT_I():主设备和从设备的之间的数据信号,数据可以由主设备传送给从设备,也可以由从设备传送给主设备。一对主设备和从设备之间最多存在两条数据总线,一条用于主设备向从设备传输数据,另外一条用于从设备向主设备传输数据。
ADR_O/ADR_I:地址信号,主设备输出地址到从设备
ACK_O/ACK_I、ERR_O/ERR_I、RTY_O/RTY_I:主从设备间的操作结束方式信号。ACK表示成功,ERR表示错误,RTY表示重试(Retry)。操作总是在某一总线周期内完成的,因此操作结束方式也称为总线周期结束方式。成功是操作的正常结束方式,错误表示操作失败,造成失败的原因可能是地址或者数据校验错误,写操作或者读操作不支持等。重试表示从设备当前忙,不能及时处理该操作,该操作可以稍后重新发起。接收到操作失败或者重试后,主设备如何响应取决于主设备的设计者。
SEL_O()/SEL_I():有效数据总线选择信号,标识当前操作中数据总线上哪些比特是有效的,以总线粒度为单位。
STB_O/STB_I:选通信号。选通有效代表主设备发起一次总线操作。只有选通信号有效(此时CYC_O/CYC_I也必须为高),ADR_O/ADR_I()、DAT_O()/DAT_I()、SEL_O()/SEL_I()才有意义。
WE_O/WE_I:写使能信号,代表当前周期中进行的操作是写操作还是读操作。1代表写,0代表读。
CYC_O/CYC_I、LOCK_O/LOCK_I、GNT_O()/GNT_I:总线周期信号CYC_O/CYC_I有效代表一个主设备请求总线使用权或者正在占有总线,但是不一定正在进行总线操作(是否正在进行总线操作取决于选通信号STB_O/STB_I是否有效)。只有该信号有效,Wishbone主设备和从设备接口的其它信号才有意义。CYC_O/CYC_I信号在一次总线操作过程中必须持续有效,比如一次块读操作可能需要多个时钟周期,CYC_O/CYC_I信号必须保持持续有效。实际上,该信号的实际作用等同于其他总线标准中的仲裁申请信号。当存在多个主设备时,它们可能希望同时进行总线操作,主设备通过仲裁申请信号向仲裁器申请总线占有权,仲裁器通过一定的仲裁优先级逻辑向其中一个选定的主设备发送总线允许信号GNT_O()/GNT_I,表示该主设备可以占用总线。GNT_O()是仲裁器输出的允许信号,一般有多个;而对于一个主设备,其允许信号输入GNT_I却只有一个。一次总线操作可能需要多个时钟周期,比如一次块操作。在操作过程中,仲裁器可能会提前将总线占用权收回并分配给其他主设备从而打断当前主设备的操作,LOCK_O/LOCK_I有效代表本次总线操作是不可打断的。仲裁器收到LOCK_I信号,就不会提前收回总线使用权。
(四)总线周期操作
1.复位操作
简而言之,同步复位
2.握手机制
3.单次读操作
在主设备发出地址后,可以插入等待周期,一般用于从设备解析地址等,当从设备可以发生数据时ACK_I会拉高同时从设备发送数据;
4.单次写操作
5.块状读操作
6.块状写操作
7.RMW周期
(五)总结疑惑
1.在Wishbone协议中,主设备通过CYC和STB信号来请求访问总线,并通过ADR信号指定要通信的从设备地址。从设备根据ADR信号上的地址匹配来确定是否应该响应请求。如果从设备地址与ADR信号上的地址匹配,并且它当前没有忙于响应其他主设备的请求,它会通过拉高ACK信号来响应主设备的请求。
仲裁(Arbitration)是Wishbone协议中的另一个重要概念,当多个主设备同时请求访问总线时,仲裁机制会决定哪个主设备获得总线访问权。仲裁过程可以是固定的优先级顺序,也可以是动态的,例如使用轮询(round-robin)算法。
一旦仲裁完成,获得总线访问权的主设备就可以通过上述信号与从设备进行通信。
CYC 信号:当主设备产生一个总线周期时,它会将CYC信号置为高。所有连接到总线的从设备都能看到CYC信号的这个变化,这意味着它们都能接收到主设备想要开始通信的意图。
STB 信号:当CYC信号已经置高,并且主设备准备好发送或接收数据时,STB信号会被置高。这通常表示地址阶段已经完成,数据阶段即将开始。
然而,并不是所有从设备都会响应每个CYC和STB信号,这是因为:
ADR 信号:这是地址总线,它携带了主设备想要访问的从设备的具体地址信息。每个从设备都会根据ADR信号上的地址来检查是否与自己的地址匹配。只有当ADR信号上的地址与从设备的地址匹配时,该从设备才会认为该通信是针对自己的,并准备响应主设备的请求。
CYC和STB信号是同步信号,用于标识总线周期的开始和数据阶段的开始,而所有从设备都能接收到这些信号。但是,只有当ADR信号上的地址与从设备的地址匹配时,从设备才会通过拉高ACK信号来确认它将参与这次通信。其他不匹配地址的从设备将忽略这个周期,不会产生响应。这样,Wishbone总线能够支持多个主设备和多个从设备之间的有效通信。
2.在Wishbone协议中,从设备的ACK(Acknowledge,确认)信号通常在以下时机产生:
数据阶段确认:在数据传输阶段,ACK信号可以用于从设备告知主设备数据已经成功接收(在写操作中)或可以发送(在读操作中)。这通常在数据传输的每个周期结束时发生,以确认数据交换已经完成。
在某些Wishbone实现中,ACK信号可能在地址阶段匹配后立即产生,因为数据交互也在地址匹配的下一个周期完成,所以本质上ACK在数据完成时产生
3.Wishbone协议支持块读写(Burst transfer)操作,这种操作通常用于高效地传输大量数据。在进行块读写时:
对同一个从设备进行操作:块读写操作可以是对同一个从设备地址的连续数据块进行的。在这种情况下,主设备会在初始化块读写时发送一个起始地址,然后通过增量地址来连续访问从设备的多个连续地址。这种操作模式适用于那些需要顺序访问大量数据的场景,例如内存块的加载或存储。
通过ADR更换从设备:在某些实现中,Wishbone协议可以支持在块读写操作中更换不同的从设备。这通常需要特定的支持,比如在总线事务中包含足够的信息来指定新的从设备地址。然而,这种模式并不常见,因为Wishbone协议的主要设计是简化SoC设计中的主从通信,而不是在块操作中频繁切换不同的从设备。
在块读写操作中,Wishbone协议使用以下信号:
CTI(Cycle Type Indicator):指示正在进行的事务类型,例如块读写。
BTE(Burst Type Extension):提供有关块读写类型的额外信息,例如固定的、增量的或包装的突发模式。
4.在Wishbone协议中,SEL(Select)信号用于指示哪些数据线路被选中用于传输数据。在读取操作中,主设备通过以下方式使用SEL信号:
数据阶段:在数据阶段,主设备需要从从设备读取数据。此时,SEL信号被用来指示哪些数据线路被选中。具体来说:
读操作:在Wishbone协议中,读操作时,主设备将WE(Write Enable)信号置为低,表示这是一个读取周期。从设备在检测到WE为低且STB为高时,会将数据放到数据线上,并通过SEL信号指示哪些数据线路被选中并包含有效数据。
SEL信号通常是一个多位信号,每个位对应数据总线上的一组数据线路。在读取操作中,从设备会将SEL信号的相应位设置为高,以指示数据线上的数据是有效的。这样,主设备就可以通过读取数据线上的数据,并知道哪些数据是有效的。
例如,如果Wishbone总线是32位宽的,SEL信号可能包含四个位,每个位对应8位数据。从设备会根据需要传输的数据宽度,将相应的SEL位设置为高。
5.Wishbone协议定义了同步周期和异步周期两种不同类型的事务周期,它们在数据传输的时序和控制方式上有所区别:
### 同步周期(Synchronous Cycle)
1. **时钟驱动**:同步周期依赖于一个共享的时钟信号来同步数据传输。在这种模式下,所有的信号转换和采样都与时钟边沿对齐。
2. **固定数据传输窗口**:数据在时钟的特定边沿(上升沿或下降沿)被发送和接收。
3. **周期长度固定**:每个事务周期的长度是固定的,通常等于几个时钟周期。
4. **适用于高性能系统**:同步周期由于其固定的周期长度和对时钟的依赖,通常在高性能系统中更为常见,因为它们可以提供更一致的性能和更简单的时序分析。
### 异步周期(Asynchronous Cycle)
1. **无共享时钟**:异步周期不依赖于共享的时钟信号,每个设备根据自己的本地时钟运行。
2. **可变的传输时间**:数据传输可以在任何时间开始和结束,不与特定的时钟边沿对齐。
3. **周期长度不固定**:每个事务周期的长度不是固定的,可以根据需要进行调整。
4. **适用于低功耗或灵活的系统**:异步周期由于其灵活性和对时钟的非依赖性,在低功耗或对时序要求不严格的系统中更为常见。
### 区别总结
- **同步性**:同步周期依赖于共享时钟信号,而异步周期不依赖。
- **时序要求**:同步周期有严格的时序要求,因为所有操作都与时钟边沿对齐;异步周期则没有这样的要求。
- **性能**:同步周期通常提供更一致的性能,而异步周期可能在性能上有所变化。
- **功耗**:异步周期可能有助于降低功耗,因为设备可以根据需要进行通信,而不是持续地与时钟信号同步。
- **设计复杂性**:同步设计通常在时序分析上更简单,而异步设计可能需要更复杂的同步机制来确保数据的正确传输。
在实际的SoC设计中,选择同步周期还是异步周期取决于系统的具体需求,包括性能、功耗、设计复杂性和时序要求等因素。
6.在MinSoC(Minimal OpenRISC System on Chip)中,RMW (Read-Modify-Write) 周期被用来在多处理器和多任务系统中实现对共享资源的安全访问。这种周期允许在一个单一的总线周期内读取数据、修改它,然后写回内存。
以下是RMW周期的一些关键特点:
不可分割性:RMW周期被设计为不可分割的,这确保了在读取和写回数据的过程中不会有其他处理器或任务干扰。
锁定资源:RMW周期通常用于访问那些需要互斥访问的资源,如内存区域、I/O设备等。
6. 在Wishbone总线协议中,**CTI (Cycle Type Identifier)** 和 **BTE (Burst Type Extension)** 是两种用于描述总线事务类型的信号。它们在Wishbone Registered Feedback模式下特别重要,用于实现高效的数据传输。以下是它们的详细说明:
### CTI (Cycle Type Identifier)
CTI信号用于指示当前总线周期的类型。它帮助从设备(SLAVE)识别主设备(MASTER)发起的事务类型,并准备相应的响应。CTI信号可以是3位宽的,不同的编码表示不同的周期类型。
- **'000'**:表示经典周期(Classic cycle),即标准的Wishbone事务。
- **'001'**:表示常量地址突发周期(Constant address burst cycle),用于连续访问同一地址。
- **'010'**:表示增量突发周期(Incrementing burst cycle),用于访问连续增加的地址。
- **'111'**:表示突发结束(End-of-Burst),用于指示突发传输的结束。
### BTE (Burst Type Extension)
BTE信号提供了关于当前突发事务的额外信息。它与CTI信号一起使用,特别是在增量突发事务中,以指示地址的增量方式。
- **'00'**:表示线性突发(Linear burst),地址线性增加。
- **'01'**:表示4拍包裹突发(4-beat wrap burst),地址在4次传输后循环。
- **'10'**:表示8拍包裹突发(8-beat wrap burst),地址在8次传输后循环。
- **'11'**:表示16拍包裹突发(16-beat wrap burst),地址在16次传输后循环。
### 作用和重要性
- **CTI** 和 **BTE** 信号使得从设备能够提前知道主设备的需求,从而减少等待时间,并提高数据传输的效率。
- 在Wishbone Registered Feedback模式下,这些信号允许从设备在不需要等待主设备每个周期的确认信号的情况下,连续发送数据,从而实现更高的吞吐量。
- 这些信号的使用也使得Wishbone总线更加灵活,能够支持更复杂的数据传输模式,如突发传输和流水线操作。
在 Wishbone 总线协议中,模式的确定是通过信号的变化来实现的,而不是通过先确定模式再影响信号。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)