


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Wishboneb3 中文版本文详细介绍了 Wishbone标准,主要参考了 Wishbone标准B.3版本的核心内 容,感兴趣的读者可去下载英文原文。一、片上总线技术综述随着超大规模集成电路的迅速发展,半导体工业进入深亚微米时代,器件特征 尺寸越来越小,芯片规模越来越大,可以在单芯片上集成上百万到数亿只晶体管。 如此密集的集成度使我们现在能够在一小块芯片上把以前由CPU和外设等数块芯片实现的功能集成起来,由单片集成电路构成功能强大的、完整的系统,这就是我们 通常所说的片上系统。IP复用是片上系统时代的核心技术之一。由于IP核的设计千差万别,它们要能够直接连接,就要遵守相同的接口标准。在片上系
2、统中,处理器核和所有外设通 过共享总线互通互联,因此这些IP核必须遵守相同的总线规范。总线规范定义的是IP核之间的通用接口,因此它定义了一套标准的信号和总线周期,以连接不同的模 块,而不是试图去规范IP核的功能和接口如何实现。一个片上总线规范一般需要定 义各个模块之间初始化、仲裁、请求传输、响应、发送接收等过程中驱动、时序、 策出略等天糸。芯片与电路板的资源和环境的不同,导致片上总线与板上总线存在若干明显差 异,包括:片上总线多采用单向信号线,而板上总线多采用三态信号。片上三态总线无 论在功耗、速度、可测性上都存在很大缺陷,而且一旦出现多驱动情况便会损毁芯 片(比如若应该输出"Z&q
3、uot;的信号实际输出为"1",而另有一个信号输出为"0",就形成一个低电阻通路,导致局部电流过大,热量难以及时释放,从而增加芯片功耗和大 大降低芯片寿命)。由于片上布线资源较为丰富,因此片上总线多采用单向信号线。 由于电路板上布线资源较为昂贵,因此板上总线多采用三态总线,但是由于三态总 线的功耗问题和速度限制,目前板上总线也在向串行和非三态方向发展,如USB和PCIExpress。片上总线比板上总线更加简单灵活。首先片上总线结构要简单,这样可以占 用较少的逻辑单元;其次时序要简单,以利于提高总线的速度;第三接口要简单, 如此可减少与IP核连接的复杂度。
4、片上系统应用广泛,不同的应用对总线的要求各 异,因此片上总线具有较大的灵活性。其一,多数片上总线的数据和地址宽度都可 变,其二,部分片上总线的互连结构可变,如Wishbone总线支持点到点、数据流、共享总线和交叉幵关四种互连方式;其三,部分片上总线的仲裁机制灵活可变,如 Wishbone总线的仲裁机制可以完全由用户定制。而板上总线则较为死板,时序也更 加苛刻。目前比较常见的片上总线规范有ARM公司的AMBA Silicore 的 Wishbone、IBM公司的CoreConnect和Altera 公司的Avalon。三种总线各有特点,其适用范围也 不同。AMBA总线规范因ARM处理器的广泛使用
5、而拥有众多第三方支持,被ARM公司90%以上的合作伙伴采用,已成为广泛支持的现有互连标准之一。IBM公司的CoreConnect因为IBM的业界地位也有广泛的应用。 Avalon主要用于Altera公司系 列PLD中,最大的优点在于其配置的简单性,可由EDA工具快速生成。这三种片上总线虽然都是公幵标准, 但都不是免费的。而Wishbone则是一个真正幵放和免费的 规范。它最先是由Silicore 公司提出的,目前由Ope nCores组织维护。由于其幵放性,因此OpenCores上的免费的IP核,大多数都采用 Wishbone标准。Wishbone的 优势除幵放、免费、拥有众多免费IP核外,还
6、有简单、灵活、轻量的特点,特别适合大型IP内部的小型IP之间的互联。在本书介绍的OpenRISC处理器设计中,各个 模块间的互联接口中大量的采用了Wishbone总线规范。需要指出,任何一个总线规范,首先至少支持点对点互联,所以严格意义上讲,国内学术界普遍讲的"总线规范"实际上指的是片上系统互联规范,只不过多个IP通过共享总线互联是人们最关心的,也是最广泛使用的,所以常笼统的将片上系统互 联规范讲为总线规范。二、Wishbone片上总线的基本特点一般总线规范的共同特点为同时适用于于软核、固核和硬核设计;对幵发工具和目标硬件没有特殊要求,并且几乎兼容已有的所有综合工具;可以用
7、多种硬件描 述语言来实现;支持结构化设计方法学,以提高大团队的设计效率;灵活的数据和 地址总线宽度,支持大端和小端操作;支持主从设备接口,支持多主设备,这是片 上共享总线通信所必须的,多个主设备同时需要进行总线操作时,由仲裁器决定当 前哪个主设备可以使用总线,仲裁逻辑用户可以自行定义。此外,在作者看来, Wishbone总线规范的特点还包括:1. 支持点到点、共享总线、十字交叉(Crossbar )和基于交换结构(Switchfabric ) 的互联。Wishbone总线规范是"轻量级(Lightweight)"规范,它实际上更加侧重于点对点互联以及复杂度不高的共享总线片上
8、系统互联。因此,与其他总线规范相比,Wishbone的接口更加简单紧凑,接口需要的互联逻辑非常少(见本章后续的例子),这是 Wishbone的一个重要优势。熟悉AMBA总线的读者在读完本章后就能够理Wishbone比AMBA总线简单的多,但是两者各有个的优势。AMBA各所有的外设分为高速设备和低速设备,高速设备连接到系统总线,通常通信的数据量也较大,如SDRAM 控制器、NANDFIash控制器、LCD控制器,低速设备连接外设总线,通常通信数据量 小,如通用串口、计时器等。外设总线与系统总线通过总线桥接器相连。在实际系 统中,处理器、系统总线、外设总线间的时钟频率的典型比值之一是4:2:1,因
9、此整个系统的功耗被有效降低。另外一个好处是通过在总线桥接器中添加DMA引擎,系统总线和外设总线可以实现速率解耦。而依照Wishbone规范,Wishbone总线上所有设备都要连接到同一总线,无论是高速设备还是低速设备。与Wishbone总线相比,AMBA的缺点是设计较为复杂。但是实际上,Wishbone总线也设计为类似 AMBA总线的架构,但此时系统为双 Wishbone总线架构。2. 支持典型的数据操作,包括:单次读 /写操作、块读/写操作,读改写(RM,Read-Modify-Write ,细节见后文)操作。最快情况下一个时钟周期可完成一次操作, 操作的结束方式包括:成功、错误和重试(Re
10、try)。一个总线周期完成一次操作,一次操作可以是单次读/写操作、块读/写操作或者读改写操作。操作总是在某一总线 周期内完成的,因此操作结束方式也称为总线周期结束方式,两者说法在后文将视 情况使用。成功是操作的正常结束方式,错误表示操作失败,造成失败的原因可能 是地址或者数据校验错误,写操作或者读操作不支持等。重试表示从设备当前忙, 不能及时处理该操作,该操作可以稍后重新发起。接收到操作失败或者重试后,主 设备如何响应取决于主设备的设计者。3. 允许从设备进行部分地址解码,有利于减少了冗余地址译码逻辑,提高地址 译码速度。这一点本书将通过实例说明4. 支持用户定义的标签。这些标签可以用于为地址
11、、数据总线提供额外的信息如奇偶校验,为总线周期提供额外的信息如中断向量、缓存控制操作的类型等。Wishb one规范只定义标签的时序,而标签的具体含义用户可自行定义。支持用户定义的标签是Wishbone规范区别与其他片上总线规范的重要特征之一。5. 全同步化设计,包括复位方式。但是实际上复位方式采用同步还是异步并不影响IP的互联互通,因此兼容 Wishbone规范的IP完全可以采用异步方式,总结以上内容,Wishbone总线规范区别于其他总线规范的两个核心特点是:(1)是轻量级规范,因此接口更加简单紧凑;(2)支持支持用户定义的标签。三、接口信号定义所有的Wishbone接口信号都是高电平有效
12、,设计成高电平有效的主要原因是由于低电平有效信号的书写问题,不同的设计者表达低电平有效信号的方式不同,拿最常见的低电平有效的复位信号来说,其表示方法就有_RST_I、N_RST_、#RST_I和/RST_I,而高电平有效的信号其表达方式通常只有一种。所有的Wishbone接口信号都以或者_0结束。表示输入,_0表示输出。()表示该信号为总线信号,总线的宽度可以为1,也可以为大于1的任何值。图1Wishbone总线规范中使用的主要信号(一个点到点互联的例子)在图1中,主设备具有遵守 Wishbone规范的主设备接口,从设备具有遵守Wishb one规范的从设备接口, INTERCOM块将主设备和
13、从设备的对应数据、地址和控制线连接起来,SY SCO模块提供时钟和复位信号,这两个信号被送入主设备和从设备。图1给出了 Wishbone接口的常见信号,这些信号有些是必须的,有些是可选 的。这些信号的基本功能描述如下:CLK_O/CLK_:时钟信号。时钟信号由SYSCOI模块产生,并送入各个主设备和从设备。SY SCO通常内部存在一个锁相环,将来源于芯片外的晶体振荡器或者时钟 输入信号整形、分频或者倍频为芯片内所需要的时钟信号。所有Wishbone信号都同步到时钟信号上,包括复位信号。RST_O/RST_I同步复位信号,高电平有效。复位信号由SYSCOI模块产生,并送入各主设备及从设备。DAT
14、_O()/DAT_I():主设备和从设备的之间的数据信号,数据可以由主设备传送给从设备,也可以由从设备传送给主设备。一对主设备和从设备之间最多存在两条 数据总线,一条用于主设备向从设备传输数据,另外一条用于从设备向主设备传输 数据。Wishbone规定数据总线的最大宽度为64位,这一规定实际上是考虑到目前商用处理器的最大位数为 64,实际上数据总线的宽度可以是任意值。就笔者看来, 在64位处理器以后,处理器将向多核方向发展,总线将向高速串行方向发展。ADR_O(nm)/ADR_l(nm):地址信号,主设备输出地址到从设备。n取决于IP核的地址宽度,m取决于数据总线DAT_O()/DAT_I()
15、的宽度和粒度。数据总线的粒度 指的是数据总线能够一次传送的最小比特数,很多处理器如ARM勺数据总线的粒度为1个字节,但是也有一些处理器如 CEVATeakLiteDSP的数据总线粒度为2个字节。 一个位宽为32比特、粒度为1个字节的数据总线的地址信号应定义为 ADR_O(n2)/ADR_l(n2)。在传送数据时,具体哪些字节有效通过 SEL_O()/SEL_I() 信号(见下文)控制。TGD_O/TGD()TGA_O()/TGA_I() : TGD_O/TGD_I()为数据标签,具体讲是附加于在数据总线 DAT_O()/DAT_I()的标签,该标签可以用于传送关于数据总线的额外 信息如奇偶校验
16、信息、时间戳信息等。TGA_O/TGA_I()为地址标签,具体讲是附加于在地址总线ADR_O()/ADR_I()的标签,该标签可以用于传送关于地址总线的额外信 息如地址总线奇偶校验信息、存储器保护信息等。Wishbone只规定了 TGD_O/TGD和TGA_O()/TGA_I()的接口时序,用户可以定义 TGD_O/TGD_的具体含义。TGC_O/TGC_I(): TGC_O/TGC_I()为总线周期标签,该标签可以用于传送关于当前总线周期所进行操作的描述如操作类型(包括单次操作、块操作、RMW操作)、中断应答类型、缓存操作类型等。类似的,Wishbone只规定了 TGC_O/TGC_I()的
17、接口时序,用户可以定义 TGD_O/TGD_的具体含义。ACK_O/ACK_I ERR_O/ERR_I RTY_O/RTY_I主从设备间的操作结束方式信号。ACK表示成功,ERR表示错误,RTY表示重试(Retry)。操作总是在某一总线周期内 完成的,因此操作结束方式也称为总线周期结束方式。成功是操作的正常结束方式,错误表示操作失败,造成失败的原因可能是地址或者数据校验错误,写操作或者读 操作不支持等。重试表示从设备当前忙,不能及时处理该操作,该操作可以稍后重 新发起。接收到操作失败或者重试后,主设备如何响应取决于主设备的设计者。SEL_O()/SEL_I():有效数据总线选择信号,标识当前操
18、作中数据总线上哪些比 特是有效的,以总线粒度为单位。SEL_O()/SEL_I()的宽度为数据总线宽度除以数据 总线粒度。比如一个具有32位宽、粒度为1个字节的数据总线的选择信号应定义为 SEL_O(3:O)/SEL_I(3:O),SEL(4' b1001)代表当前操作中数据总线的最高和最低字节有效。CYC O/CYC、I LOCK O/LOCK、IGNT O()/GNT I:总线周期信号 CYC O/CYC 有效代表一个主设备请求总线使用权或者正在占有总线,但是不一定正在进行总线操作(是否正在进行总线操作取决于选通信号STB_O/STB_I是否有效)。只有该信号有效,Wishbone
19、主设备和从设备接口的其它信号才有意义。CYC_O/CYCJ信号在一次总线操作过程中必须持续有效,比如一次块读操作可能需要多个时钟周期, CY C_O/C YC_I信号必须保持持续有效。实际上,该信号的实际作用等同于其他总线 标准中的仲裁申请信号。当存在多个主设备时,它们可能希望同时进行总线操作, 主设备通过仲裁申请信号向仲裁器申请总线占有权,仲裁器通过一定的仲裁优先级 逻辑向其中一个选定的主设备发送总线允许信号GNT_O()/GNT_I,表示该主设备可以占用总线。GNT_O (是仲裁器输出的允许信号,一般有多个;而对于一个主设备, 其允许信号输入GNT_I却只有一个。一次总线操作可能需要多个时
20、钟周期,比如一 次块操作。在操作过程中,仲裁器可能会提前将总线占用权收回并分配给其他主设 备从而打断当前主设备的操作,LOCK_O/LOCK_I有效代表本次总线操作是不可打断的。仲裁器收到LOCK_I信号,就不会提前收回总线使用权。图1中只有一个主设备和一个从设备,因此没画出仲裁器模块,该模块可以视为是INTERCO的 一部分,见本章最后给出的例子。STB_O/STB_:选通信号。选通有效代表主设备发起一次总线操作。只有选通信 号有效(此时 CYC_O/CYC也必须为高), ADR_O/ADR_I() DAT_O()/DAT_I()、 SEL_O()/SEL_I()才有意义。在 Wishbon
21、e总线规范中,CYC_O/CYC_(是最高层的控 制信号,只有该信号有效,STB_O/STB_I信号才有意义。一个信号有意义是指该信号的当前值是需要主设备或者从设备解释的,0为无效,1为有效,而一个信号没有意义是指该信号的当前值主设备和从设备不必关心,是0还是1都无效。WE_O/WE_I写使能信号,代表当前周期中进行的操作是写操作还是读操作代表写,0代表读 四、Wishbone支持的互联类型Wishbone规范支持的互联类型有四种: 点到点、共享总线、十字交叉(Crossbar ) 和基于交换结构(Switchfabric) 的互联。这四种互联方式在Wishbone规范中有明确 的定义。如图1
22、 (第4页),点到点互联是最简单的互联方式,它允许一个主设备 和一个从设备相互通信。比如,主设备可能是一个处理器IP核,从设备可能是一个串行I/O端口或者存储器。点对点互联的一个特殊应用就是当数据需要多个步骤顺序进行处理时,多个同时具有主设备接口和从设备接口的模块串接在一起,如图2所示。这种连接方式也称作数据流连接。模块A处理完数据后将处理结果送给模块B,模块B处理完模块A送来的数据后再将处理结果送给模块C处理。数据从一个模块送往另一个模块,常常将这种处理方式称作流水线。流水线在处理器设计中非常重要,其好处是多个数 据可以并行处理,从而提高系统的整体数据处理能力。图2数据流方式互联共享总线互联
23、方式如图 3所示。共享总线互联方式适合于系统中有两个或者多 个主设备需要与一个或者多个从设备通信的场合,它们通过共享的总线进行通信, 其好处是结构紧凑,节省布线资源,缺点是主设备希望与特定从设备通信时可能需 要等待。主设备在需要与一个从设备通信时,需要先向仲裁器(图中没有给出)申 请总线占有权,获得允许后幵始占用总线并与目标从设备幵始通信,通信结束后释 放总线。当多个主设备同时希望占有总线时,仲裁器通过一定的优先级逻辑分配总 线使用机会共享总线互联方式在片上系统中得到了广泛的使用,几乎成了片上系统的标志技术之一。共享总线技术在板级系统如PCI总线中也得到了应用。图3共享总线互联方式十字交叉互联
24、方式较共享总线互联方式略复杂。共享总线互联方式在任一时刻 只允许最多有一对主设备和从设备通过共享总线进行通信,而十字交叉互联方式最 多同时允许超过一对的主设备和从设备对同时进行通信,如图4所示。当然,在十字交叉互联方式中,一个从设备在任一时刻只能与一个主设备进行通信,两个主设 备不能同时访问同一从设备。图4十字交叉互联方式(图中虚线代表了一种可能的通信方式)类似的,基于交换结构的互联比十字交叉互联方式的INTERCO模块更复杂,一般的,基于交换结构的互联比十字交叉互联允许同时通信的主从设备对更多。随着技术的发展,已经出现了比片上总线更复杂的片上网络技术 (Network。nchip )。基于片
25、上网络技术,已经出现了内含几十个 32位处理器的芯 片,已应用于CISCO的高端路由器中。五、Wishbone总线周期一个总线周期由多个不可分的时钟周期构成,完成单次读/写操作、块读/写操作或者读改写操作。总线周期也分为单次读/写周期、块读/写周期和读改写周期。一次块读/写总线周期完成多次数据读/写操作。一般情况下,一次操作由主设备和 从设备控制信号间的一次握手,以及同时进行的地址和数据总线的一次传输构成。块操作表示整个操作需要完成多次数据传送。在总线周期中主设备和从设备预先设定好的共同遵守控制信号握手规则,以及地址和数据总线的传输规则称作总线协议在下文所给图例中给出的信号均为主设备的输入输出
26、信号。因此,对操作的描 述也从主设备信号的角度展幵,以便于读者对照正文理解图例。比如"在时钟上升沿1到达之前,从设备检测到主设备发起的操作,将适当的数据放到主设备的输入信 号DAT_I()和TGD(),将主设备的 ACK_I置高作为对主设备 STB_O勺响应。"的等 价描述为:"在时钟上升沿1到达之前,从设备检测到主设备发起的操作,将适当的 数据放到其输出信号DAT_O()和 TGD_O(),将输出信号ACK_置高作为对主设备STB_O 的响应。"5.1 一般操作5.1 . 1复位操作复位是数字系统最基本的操作。复位后,系统进入预定的状态。在遵守Wish
27、bone 总线规范的系统中,当 RST_I信号有效,系统幵始复位。由于 Wishbone规范规定的 复位是同步复位,因此在复位信号有效后接下来的时钟上升沿,所有信号和寄存器 进入预定状态。因此,Wishbone规范要求RST_I信号有效时间至少要一个时钟周期。 在数字系统中,实际上更多的采用的是异步复位,而且复位信号的长度一般大于系 统电平稳定时间和系统时钟频率稳定时间。如果在Wishbone接口中使用的是异步复位,需要在文档中说明,因为Wishbo ne接口默认的是同步复位。图5Wishbone总线的复位操作在图5中,我们只给出了 STB_C和CYC_O这两个信号,而没有给出其它信号当这两个
28、信号无效时,所有其他信号没有意义操作发起一个总线周期由至少一次总线操作构成。操作总是由主设备发起,主设备发起的操作可以是单次读/写、块读/写或者RMW操作。当主设备将 CYC_(置为高时,一 个总线周期幵始。总线周期幵始后,当主设备将STB_C#为高时,一次总线操作幵始。当主设备将CYC_OB为低时,主设备的所有其他信号没有意义。从设备只在CYC_I 为高时才会对主设备发起的操作进行响应。CYC_O STB_C可以同时从无效变为有效表示操作幵始,CYC_O寺续有效直到操作结束,CYC_丙STB_C可以同时从无效变有效表示同时发起一次总线周期的同时, 也发起总线操作,也可以同时从有效变为无效表示
29、操作结束。因此,在只有一个主 设备时,可以将CYC_窃口 STB_O合并为一个信号,比如在OpenRISC1200的源码中就 广泛的使用了这种方式,信号的名字称作CY CSTB_Q当存在多个主设备时,一个主设备完成操作后必须及时将CYC_Ot号置为低,以让出总线给其他主设备。此时,CYC_Ot号等价于为总线占用请求信号。基本握手协议由于在整个总线周期,CYC_O必须始终保持有效,因此,此后我们将在给出的 图中忽略该信号,只在必要的时候给出。握手发生在主设备和从设备之间。握手协议是主设备和从设备在握手时所遵守 的共同规则。如图6,当主设备准备好,它将STB_O言号置高。STB_O言号一直为高,
30、直到从设备通过置高 ACK_O ERR_O RTY_C对本次操作发起响应。在图 7中我们以主设备的ACK_I信号作为示例,后文也如此。通过握手,主设备和从设备不仅可以 完成通信,而且可以控制它们之间的通信速率。图6Wishbone总线的基本握手协议如果从设备保证能够在主设备发起操作时及时作出操作成功的响应,其ACK_O信号可以设计为 STB和CYC信号的逻辑与,而 ERR_阳RTY_O言号也可以不使 用。因此ERR_窃口 RTY_O言号是可选的,而ACK_O言号是必须的。在点对点连接中, 甚至可以将ACK_I信号直接置高。当存在ERR_O5 RTY_O言号,主设备当发现ERR_O 和RTY_O
31、言号之一有效时如何进行响应取决于主设备的设计。对于从设备,只有 STB_I和CYC同时为高时,才能发起对主设备的响应实际上,对于主设备,其最小配置为只有 ACK、CLK_I、CYC_ORST_I和STB_O而对于从设备,其最小配置为只有 ACK_OCLK_I、CYC_k RST_I和STB_I,这里CYC和STB信号可以合并到一起成为一个信号,通常命名为CYCSTB_O/在图6中,从STB_C到ACK_I存在一个长组合逻辑路径,在实际系统中很可能成为关键路径。因此,在设计中应尽量保证 STB_C是触发器的直接输出。如果从STB_O 到ACK_I存在一个长组合逻辑路径延迟不能满足设计的时序要求,
32、可将从设备的ACK_O经过触发器寄存后再输出,从而将长组合逻辑打破,但系统的吞吐量也将因此减小。关于如何即打破长组合逻辑又不影响系统的吞吐量,后文将进行详细讨论。5.2单次读/写周期单次读/写操作每次操作只完成一次读或者写,是最基本的总线操作方式。但是,Wishbone主设备或者从设备也可以不支持单次读/写操作,甚至没有地址和数据总单次读操作如图7。在时钟上升沿 0,主设备将地址信号 ADR_O() TGA_O(放 到总线上,将 WE_Of为低表示读操作,将适当的 SEL_O()信号置高通知从设备将数 据放在数据总线的适当位置,将CYCOffi TGC_C置高表示操作正在进行,将 STB_O置
33、高表示操作幵始。在时钟上升沿1到达之前,从设备检测到主设备发起的操作,将适当的数据放到主设备的输入信号 DAT_I()和TGD_I(),将主设备的ACK_I置高作为对主设备STB_O 的响应。在时钟上升沿1,主设备发现ACK_I信号为高,将DAT_I()和TGD_I()采样,并 将STB_C和CYC_OB为低表示操作完成。从设备发现STB_C置低后,也将主设备的输入信号ACK_I置低。在图7中,从设备可以上升沿 0和上升沿1之间插入任意多个等待周期。图7Wishbone总线的单次读操作单次写操作如图8所示。在时钟上升沿0,主设备将地址信号 ADR_O() TGA_O() 放到总线上,将数据信号
34、 DAT_O()、TGD_O(放到总线上,将 WE_O1高表示写操作, 将适当的SEL_O ()信号置高通知从设备数据总线DAT_O()的哪些信号是有效的,将CYC_卯TGC_O置高表示操作正在进行,将 STB_C置高表示操作幵始。在时钟上升沿1到达之前,从设备检测到主设备发起的操作,将主设备的ACK_I置高作为对主设备 STB_O的响应。在时钟上升沿1,从设备将DAT_I()和TGD_I()采样;主设备发现 ACK_I信号为 高,将STB_C和CYC_OB为低表示操作完成;从设备发现STB_C置低后,也将主设备的ACK_I置低在图8中,从设备可以在上升沿 0和上升沿1之间插入任意多个等待周期
35、图8Wishbone总线的单次写操作5.3块读周期块读/写操作每次读/写数据多次。块读/写操作实际上是由顺序进行的多个单次读/写操作组合而成的。在同时存在多个主设备时,块读/写操作非常有用,一个块读写一般是不能打断的,比如一次DMA如图9所示,在一次块操作中,CRC_(信号必须保持为咼。同时为了保证整个块操作不被打断,LOCK_O也可以置为咼,但是LOCK_(不必须为高。典型地,主设备进行一次DMA连续传输4个或者8个总线宽度单位的数据,然后主动释放总线,其后又试图占用总线重新进行DMA直到所有的数据都传输完毕。这样做的好处是允许其他优先级更高的主设备在两次DMA之间插入操作以完成更加紧急的任
36、务。图9Wishbone总线块操作中CYC_Ot号的用法块读操作如图10所示。块操作最多能够在每个时钟周期进行一次数据读或者写,但是主设备和从设备都可以通过插入等待周期控制块操作的速度。一次块操作 包括多次子操作。每一次子操作都是块操作的一个阶段,完成一次数据读或者写。图10的块操作由五次读操作完成,其过程如下:在时钟上升沿0,主设备将地址信号 ADR_O(、TGA_O(放到总线上,将 WE_Of 为低表示读操作,将适当的SEL_O ()信号置高通知从设备将数据放在数据总线的适当位置,将CYC_O和TGC_O(置高表示操作正在进行,将 STB_C置高表示一次子操作幵始。CYC_仿口 TGC_O
37、(从无效变为有效可以发生在上升沿0以前的任何时刻。在时钟上升沿1到达之前,从设备检测到主设备发起的操作,将适当的数据放到主设备的DAT_I()和TGD_I(),将主设备的ACK_I置高作为对主设备 STB_C的响应。在时钟上升沿1,主设备发现ACK_I信号为高,将DAT_I()和TGD_I()采样,完 成第一次子操作。主设备将新地址信号 ADR_O(、新TGA_O()放到总线上,将新的 SEL_O ()信号置高通知从设备将数据放在数据总线的适当位置。在时钟上升沿2到达之前,从设备检测到主设备发起的第二次操作,将适当的数据放到主设备的 DAT_I()和TGD_I(),继续将主设备的 ACK_I置
38、高。在时钟上升沿2,主设备发现ACK_I信号为高,将DAT_I()和TGD_I()采样,完 成第二次子操作。主设备将 STB_O言号置低表示插入等待周期。在时钟上升沿3到达之前,从设备检测到 STB_O言号为低,将ACK_I置低。在时钟上升沿3,主设备发起第三次操作,将新的地址信号 ADR_O()新的TGA_O() 放到总线上,将 WE_O1为低表示读操作,将适当的 SEL_O ()信号置高通知从设备将 数据放在数据总线的适当位置,将STB_C置高表示第三次子操作幵始。在时钟上升沿4到达之前,从设备检测到主设备发起的第三次子操作,将适当的数据放到主设备的 DAT_I()和TGD_I(),将主设
39、备的ACK_I置高作为对主设备STB_O 的响应。图10Wishbone总线的块读操作在时钟上升沿4,主设备发现ACK_I信号为高,将DAT_I()和TGD_I()采样,完 成第三次子操作。主设备同时发起第五次子操作, 将新地址信号ADR_O(、新TGA_O() 放到总线上,将新的SEL_O ()信号置高通知从设备将数据放在数据总线的适当位置。在时钟上升沿5到达之前,从设备检测到主设备发起的第五次子操作,将适当的数据放到主设备的 DAT_I()和TGD_I(),将主设备的ACK_I置高作为对主设备STB_O 的响应。在时钟上升沿5,主设备发现ACK_I信号为高,将DAT_I()和TGD_I()
40、采样,完 成第五次子操作。主设备同时发起第六次子操作, 将新地址信号ADR_O(、新TGA_O() 放到总线上,将新的SEL_O ()信号置高通知从设备将数据放在数据总线的适当位置。在时钟上升沿5过后,从设备检测到主设备发起的第六次子操作,但是由于数据没有准备好,它在新上升沿到达之前将ACK_I信号置低表示插入等待周期。上升沿5和6之间被插入了多个等待周期。当从设备准备好数据,在时钟上升沿6到达之前,将适当的数据放到主设备的DAT_I()和TGD_I(),将主设备的ACK_I置高作为对主设备 STB_O的响应。在时钟上升沿6,主设备发现ACK_I信号为高,将DAT_I()和TGD_I()采样,
41、并 将STB_C和CYC_OB为低表示整个块读操作完成。从设备发现 STB_C置低后,也将 主设备的ACK_I置低。5.4块写周期块写操作的例子如图11所示。图11的一次块写操作由五个相互关联的单次写 操作完成。在时钟上升沿0,主设备将地址信号 ADR_O(、TGA_O(放到总线上,将数据信 号DAT_O()、TGD_O()放到总线上,将 WE_C置为高表示写操作,将适当的SEL_O()信号置高通知从设备将数据总线上哪些信号是有效的,将CYC_邙口 TGC_O置高表示操作正在进行,将STB_C置高表示第一次写操作幵始。在时钟上升沿1到达之前,从设备检测到主设备发起的操作, 将主设备的ACK_I
42、 置高作为对主设备STB_O勺响应在时钟上升沿1,从设备将DAT_I()和TGD_I()采样;主设备发现 ACK_I信号为 高,得知第一次写操作完成,于是将新地址信号ADR_O()新TGA_O()放到总线上,将新数据信号DAT_O()、新TGD_O()放到总线上,将 WE_Ot为高表示写操作,将适 当的SEL_O()信号置高通知从设备将数据总线上哪些信号是有效的,将CYC_O和TGC_C置高表示操作继续在进行,将 STB_C置高表示第二次写操作幵始。在时钟上升沿2到达之前,从设备检测到主设备发起的第二次写操作,将主设 备的ACK_I置高作为对主设备 STB_O的响应。在时钟上升沿2,从设备将D
43、AT_I()和TGD_I()采样;主设备发现 ACK_I信号为 高,得知第二次写操作完成,发现自己的数据还没有准备好,于是将STB_O置低表示插入等待周期。在时钟上升沿3到达之前,从设备检测到 STB_C为低,也将ACK_I置低在时钟上升沿3,主设备发起第三次操作,将新地址信号 ADR_O(、新TGA_O() 放到总线上,将新数据信号 DAT_O()、新TGD_O()放到总线上,将 WE_OS为高表示 写操作,将适当的 SEL_O ()信号置高通知从设备将数据总线上哪些信号是有效的, 将CYC_卯TGC_O置高表示操作继续进行,将 STB_C置高表示第三次写操作幵始。在时钟上升沿4到达之前,从
44、设备检测到主设备发起的第三次写操作,将主设备的ACK_I置高作为对主设备 STB_O的响应在时钟上升沿4,从设备将DAT_I()和TGD_I()采样;主设备发现 ACK_I信号为 高,得知第三次写操作完成,于是将新地址信号ADR_O()新TGA_O()放到总线上,将新数据信号DAT_O()新TGD_O()放到总线上,将适当的 SEL_O()信号置高通知从 设备将数据总线上哪些信号是有效的,将STB_O继续置高表示第四次写操作幵始。在时钟上升沿5到达之前,从设备检测到主设备发起的第四次写操作,将主设备的ACK_I置高作为对主设备 STB_O的响应。在时钟上升沿5,从设备将DAT_I()和TGD_
45、I()采样;主设备发现 ACK_I信号为 高,得知第四次写操作完成,于是发起第五次操作,将新地址信号ADR_O(、新TGA_O() 放到总线上。在时钟上升沿5之后新的时钟上升沿到达之前,从设备发现因为某些原因暂时无法继续接收数据,因此将 ACK_I信号置低,插入等待。当从设备发现可以继续接收数据,于是在在最后一个等待周期结束且上升沿5到达之前,将DAT_I()和TGD_I()采样;主设备发现ACK_I信号为高,得知第五次写 操作完成。并将STB_O和CYCO置低表示整个块写操作完成。图IlWishbone总线的块写操作5.5RMW操作在操作系统中,有一种重要的进程间的同步机制称作信号量机制。信
46、号量即当前可用资源的计数。信号量是一个用来实现同步的整型或记录型(Record)变量,除了初始化外,对它只能执行等待和释放这两种原子操作。一次对信号量的等待操作 是获得信号量的过程,读取当前信号量的值,如果发现有可利用资源,则将信号量减1,否则进入等待状态。一次对信号量的释放过程即将信号量加1。一个进程对信号的读取、计算新的信号量值、更新信号量的值这三个步骤是不允许被其他进程打 破的,如果被打破,则信号量的值将会发生错误,RMW操作的最大用途在于信号量操作。一次RMW操作对于总线来说,本质上是两次子操作,一次读,一次写,只不过 这两次子操作必须由同一个主设备的完成,且读数据和写数据的地址相同。
47、"改"是不发生在总线上的,它发生在主设备内部。一个RMV操作的例子如图13所示,其过程如下:在时钟上升沿0,主设备将地址信号 ADR_O(、TGA_O(放到总线上,将 WE_(置 为低表示读操作,将适当的SEL_O ()信号置高通知从设备将数据放在数据总线的适当位置,将CYC_O和TGC_O(置高表示操作正在进行,将 STB_C置高表示第一次子 操作幵始。CYC_O® TGC_O(可以发生在上升沿0以前的任何时刻。在时钟上升沿1到达之前,从设备检测到主设备发起的操作,将适当的数据放到主设备的DAT_I()和TGD_I(),将主设备的ACK_I置高作为对主设备 ST
48、B_C的响应。在时钟上升沿1,主设备发现ACK_I信号为高,将DAT_I()和TGD_I()采样,完 成第一次子操作。主设备将 STB_C置低表示插入等待。在时钟上升沿1之后新的上升沿到达之前, 从设备检测到主设备将 STB_C置低, 于是将ACK_I置低。经过若干等待周期,在上升沿2,主设备将地址信号 ADR_O(、TGA_O()放到总线上,将数据信号 DAT_O()、TGD_O()放到总线上,将 WE_C置为高表示写操作,将适当的SEL_O()信号置高通知从设备将数据总线上哪些信号是有效的,将STB_O置高表示第二次子操作幵始。在时钟上升沿3到达之前,从设备检测到主设备发起的操作,将主设备
49、的ACK_I置高作为对主设备 STB_O的响应。在时钟上升沿3,从设备将DAT_I()和TGD_I()采样;主设备发现 ACK_I信号为 高,得知第二次子操作完成,于是将STB_C和CYC_OB低表示整个RMW操作完成。在时钟上升沿之后,从设备发现 STB_C为低,于是将ACK_I置低。图13Wishbone总线的RMW操作5.6数据组织数据组织是指数据的传送顺序。目前常见的32为处理器的数据总线粒度为 1字节,在传送时,一个32位数据的最高字节可以放在数据总线的最低8位传送,也可以放在数据总线的最高 8位传送,因此出现了大端和小端两种数据组织方法。大端 是指一个数据的最高位放在数据总线的最低
50、位传送或者放在地址较小的存储器位置 存储;小端是指一个数据的最高位放在数据总线的最高位传送或者放在地址较高的 存储器位置存储。 Wishbone同时支持大端和小端两者数据组织方式。当数据总线的 粒度和宽度相同时,大端和小端是一样的。这两者数据组织方式在一般文献中都可以找到。总线标准只定义接口的通信协 议,而数据的组织本质上取决于主设备和从设备的设计。有时需要将大端和小端的 接口互联起来,下图给出了将数据组织为大端的IPA和数据组织为大端的IPB相连的情形。IPA和IPB的数据总线宽度都是32为,粒度为8位。图14大端和小端的接口互联六、Wishbone寄存反馈总线周期6.1周期的同步与异步结束
51、方式之对比为了实现在给定时钟频率下的最大可能吞吐量,Wishbo ne采用了周期异步结束方式。这样做的结果是从主设备的STB_O到从设备的ACK_0/ERR_0/RTY_O到主设备的ACK_I/ERR_I/RTY_I输入形成了一个异步回路,如图15。在大型SoC设计中,该回路往往成为整个设计的关键路径,限制系统时钟频率的进一步提高。在深亚微 米时代,由于线延迟往往比门延迟更大,这一异步回路更加可能成为系统性能的瓶 颈。图15Wishbone总线的异步周期结束路径这一问题的最简单解决方法是插入寄存器将回路断幵,但这样做的缺点是在每 一次总线操作中都需要插入一个等待周期,从而制约了总线吞吐量。如图
52、16所示,在上升沿1主设备发起了一次操作,在上升沿2从设备发起响应将 ACK_O置高,在上升沿3主设备检测到ACK_I为高完成第一次操作并发起第二次操作,但是在上升 沿3从设备并不知道主设备会发起第二次操作,因此只能将ACK_O言号置低。在上升沿4从设备才能对第二次操作发起响应将ACK_C置高,在上升沿4主设备检测到ACK_I为高完成第二次操作。图16Wishbone总线的传统同步周期结束方式在图16中,每一次传输都需要两个时钟周期,一半的带宽被浪费。如果从设备 在上升沿3知道主设备将发起新的操作,它将能够在上升沿3就对主设备的操作发 起响应,从而节省时钟周期提高了系统的吞吐量,利用该思想改进
53、后的同步时序如 图17所示。图17Wishbone总线改进的同步周期结束方式在图17的上升沿1,主设备发起操作,在上升沿2,从设备将ACK_C置高,在上升沿3,从设备知道主设备将发起新的操作,于是将ACK_O继续置高。因此,3个时钟周期就完成了 2次操作,而不是原来大的4个时钟周期,于是吞吐量提高了 25% 一般的,改进后,N次操作需要N+1个时钟周期,而不是2N个时钟周期,吞吐量改 善为(N-1)/N%。改进后的同步周期结束方式具备异步周期结束方式的吞吐量优势,同时具备传 统同步结束方式的延迟优势。改进后的同步周期结束方式称作Wishb one寄存反馈周期结束方式。6.2Wishbone寄存
54、反馈周期结束方式在Wishbone寄存反馈周期结束方式中, 主设备需要事先通知从设备操作下一时 钟周期是否将发起新的总线操作,这是通过周期类型识别地址标签CTI_O()/CTI()和突发类型扩展地址标签BTE_O()/BTE_I()完成的。主设备和从设备必须同时支持CTI_O()/CTI(),Wishbone接口才能以寄存反馈周期结束方式工作,主设备和从 设备如果支持地址增加突发模式,它们必须同时支持BTE_O()/BTE_I() o如果主设备或者从设备之一不支持这种周期结束方式,它们只能以传统周期结束方式工作。周期类型识别地址标签CTI_O()/CTI()提供描述当前操作突发模式的信息,CT
55、I_O()/CTI_I()的具体从设备可以根据该信息确定在下一时钟周期如何进行响应定义如表2表2周期类型标识符CTI_O(2:O)描述3' bOOO传统总线周期3' bOO1恒定地址突发总线周期3' bO1O递增突发总线周期3' bO11预留3' blOO预留3' b1O1预留3' b11O预留3' bill突发结束不支持CTI_O()的主设备必须将该信号置为 3' bOOO或者3' bill,这两个是等 价的。主设备和从设备可以支持这些突发模式中的一部分,对于不支持的突发模式,主设备必须将CTI_O()置为3
56、39; bOOO,从设备必须将 CTI()理解为3' bOOO。为了减少在同步模式下的等待时间,从设备必须对主设备的操作尽快的做出响应。从设备可利用 CTI()信号确定在下一周期对主设备的响应,但是由于此时还 不知道STB信号的状态,因此从设备在确定在下一周期对主设备的响应时只能忽 略STB_I信号,因此即使在 STB_I信号为低的情况下,从设备仍然可能将ACK_0/ERR_0/RTYJO高。因此,主设备应保证 CTI_O()信息的有效性。突发类型扩展地址标签 BTE_O()/BTE_I()是对CTI_0()/CTI_I()=3 ' bO1O情况下的突发类型信息的扩展,描述的是
57、地址值是如何变化的。其含义如表3所示。表3递增和递减突发类型扩展BTE0 (1:0)描述2' b00线性突发2' b01叠4突发2' b10叠8突发2' b11叠16突发6.3突发结束突发结束(CTI_0=3' bill)表示当前操作是当前突发的最后一次操作,主设备在当前操作结束后紧接着的时钟周期不再发起操作。图18给出了 CTI_0=3 bill的用法。图中共有3次操作。第一次操作和第二次 操作是一个突发操作的一部分。第一次操作发生在上升沿0,这是一次寄存反馈读操作,第二次操作是该突发操作的最后一个操作,主设备将CTI_O置为3' bill表示整个突发操作结束。第三次操作为单次写操作。图18Wishbone总线的突发结束图18的操作过程如下:在时钟上升沿0到达之前,一个突发寄存反馈读操作正在进行。从设备将数据放到数据总线DAT_I()。在时钟上升沿 0,主设备将 DAT_I()采样,并更新地址总线 ADR_O(),同时将 CTI_O()置为3' b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络防火墙配置技术试题及答案
- 西方政治制度与市场经济模式的相互影响试题及答案
- 移动互联网下的软件设计师考试试题及答案
- 学霸秘籍信息系统项目管理师试题及答案
- 网络设备管理与运维技巧试题及答案
- 软件设计师职业态度的重要性试题及答案
- 深度认识机电工程的学科交叉性及试题与答案
- 项目管理师考试有效习惯与试题答案
- 西方社会对政治变革的态度试题及答案
- 西方政治制度下的国民教育政策探讨试题及答案
- 2022版义务教育(物理)课程标准(附课标解读)
- ECMO并发症教学课件
- 消防水管道改造应急预案
- 2021城镇燃气用二甲醚应用技术规程
- 地面三维激光扫描作业技术规程
- 【保安服务】服务承诺
- 07第七讲 发展全过程人民民主
- 对外派人员的员工帮助计划以华为公司为例
- 2020-2021学年浙江省宁波市镇海区七年级(下)期末数学试卷(附答案详解)
- GB/T 9162-2001关节轴承推力关节轴承
- GB/T 34560.2-2017结构钢第2部分:一般用途结构钢交货技术条件
评论
0/150
提交评论