片上系统设计思想与源代码分析
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.3 接口信号定义

WISHBONE总线规范中使用的主要信号如图3-1所示。

图3-1 WISHBONE总线规范中使用的主要信号(一个点到点互联的例子)

所有的WISHBONE接口信号都是高电平有效,设计高电平有效的主要原因是由于低电平有效信号的书写问题,不同的设计者表达低电平有效信号的方式不同,以最常见的低电平有效的复位信号为例,其表示方法就有_RST_I、N_RST_I、#RST_I和/RST_I,而高电平有效的信号其表达方式通常只有一种。

所有的WISHBONE接口信号都以_I()或_O()结束。_I表示输入,_O表示输出。()表示该信号为总线信号,总线的宽度可以为1,也可以为大于1的任何值。

在图3-1中,主设备具有遵守WISHBONE规范的主设备接口,从设备具有遵守WISHBONE规范的从设备接口,INTERCON模块将主设备和从设备的对应数据、地址和控制线连接起来,SYSCON模块提供时钟和复位信号,这两个信号被连接送入主设备和从设备。图3-1给出了WISHBONE接口的常见信号,这些信号有些是必需的,有些是可选的。这些信号的基本功能描述如下:

CLK_O/CLK_I:时钟信号。时钟信号由SYSCON模块产生,并送入各个主设备和从设备。SYSCON通常内部存在一个锁相环,将来源于芯片外的晶体振荡器或时钟输入信号整形和分频、倍频为芯片内所需要的时钟信号。所有WISHBONE信号都同步到时钟信号上,包括复位信号。

RST_O/RST_I:同步复位信号,高电平有效。复位信号由SYSCON模块产生,并送入各主设备及从设备。

DAT_O()/DAT_I():主设备和从设备的之间的数据信号,数据可以从主设备传送给从设备,也可以从从设备传送给主设备。一对主设备和从设备之间最多存在两条数据总线,一条用于主设备向从设备传输数据,另外一条用于从设备向主设备传输数据。WISHBONE规定数据总线的最大宽度为64位,这一规定实际上是考虑到目前商用处理器的最大位数为64,实际上数据总线的宽度可以是任意值。就目前看,在64位处理器以后,处理器将向多核方向发展,总线将向高速串行方向发展。

ADR_O(n…m)/ADR_I(n…m):地址信号,主设备输出地址到从设备。N取决于IP核的地址宽度,m取决于数据总线DAT_O()/DAT_I()的宽度和粒度。数据总线的粒度指的是数据总线能够一次传送的最小比特数,很多处理器如ARM的数据总线的粒度为1个字节,但是也有一些处理器如CEVA TeakLite DSP的数据总线粒度为2个字节。一个位宽为32比特、粒度为1个字节的数据总线的地址信号应定义为ADR_O(n…2)/ADR_I(n…2)。在传送数据时,具体哪些字节有效通过SEL_O()/SEL_I()信号控制。

TGD_O/TGD_I()、TGA_O()/TGA_I():TGD_O/TGD_I()为数据标签,具体讲是附加于在数据总线DAT_O()/DAT_I()的标签,该标签可以用于传送关于数据总线的额外信息如奇偶校验信息、时间戳信息等。TGA_O/TGA_I()为地址标签,具体是附加于在地址总线ADR_O()/ADR_I()的标签,该标签可以用于传送关于地址总线的额外信息如地址总线奇偶校验信息、存储器保护信息等。WISHBONE只规定了TGD_O/TGD_I和TGA_O()/TGA_I()的接口时序,用户可以定义TGD_O/TGD_I的具体含义。

TGC_O/TGC_I():TGC_O/TGC_I()为总线周期标签,该标签可以用于传送关于当前周期所进行操作的描述如操作类型(包括单次操作、块操作、RMW操作)、中断应答类型、缓存操作类型等。类似的,WISHBONE只规定了TGC_O/TGC_I()的接口时序,用户可以定义TGD_O/TGD_I的具体含义。

ACK_O/ACK_I、ERR_O/ERR_I、RTY_O/RTY_I:主从设备间的操作结束方式信号。ACK表示成功,ERR表示错误,RTY表示重试。操作总是在某一总线周期内完成的,因此操作结束方式也称为总线周期结束方式。成功是操作的正常结束方式,错误表示操作失败,造成失败的原因可能是地址或数据校验错误,写操作或读操作不支持等。重试表示从设备当前忙,不能及时处理该操作,该操作可以稍后重新发起。接收到操作失败或重试后,主设备如何响应取决于主设备的设计者。

SEL_O()/SEL_I():有效数据总线选择信号,标识当前操作中数据总线上哪些比特是有效的。SEL_O()/SEL_I()的宽度为数据总线宽度除以数据总线粒度。比如一个具有32位宽、粒度为1个字节的数据总线的选择信号应定义为SEL_O(3:0)/ SEL_I(3:0),SEL(4'b1001)代表当前操作中数据总线的最高和最低字节有效。

CYC_O/CYC_I、LOCK_O/LOCK_I、GNT_O()/GNT_I:周期信号CYC_O/CYC_I有效代表当前周期中一个有效的总线操作正在进行,只有该信号有效,WISHBONE主设备和从设备接口的其他信号才有意义。CYC_O/CYC_I信号在一次总线操作过程中必须持续有效,比如一次块读操作可能需要多个时钟周期,CYC_O/CYC_I信号必须保持持续有效。实际上,该信号的实际作用等同于其他总线标准中的仲裁申请信号。当存在多个主设备时,它们可能希望同时进行总线操作,主设备通过仲裁申请信号向仲裁器申请总线占有权,仲裁器通过一定的仲裁优先级逻辑向其中一个选定的主设备发送总线允许信号GNT_O()/GNT_I信号,表示该主设备可以占用总线。GNT_O()表示仲裁器输出的允许信号有多个,而对于一个主设备,其允许信号输入GNT_I却只有一个。一次总线操作可能需要多个时钟周期,比如一次块操作,在操作过程中,仲裁器可能会提前将总线占用权收回并分配给其他主设备从而打断前一主设备的操作,LOCK_O/LOCK_I有效代表本次总线操作是不可打断的。仲裁器收到LOCK_I信号,就不会提前收回总线占用权。图3-1中只有一个主设备和一个从设备,因此没有画出仲裁器模块,该模块可以视为是INTERCON的一部分,见本章最后给出的例子。

STB_O/STB_I:选通信号。选通有效代表主设备发起一次总线操作。只有选通信号有效,ADR_O/ADR_I()、DAT_O()/DAT_I()、SEL_O()/SEL_I()才有意义。在WISHBONE总线规范中,CYC_O/CYC_I是最高层的控制信号,只有该信号有效,STB_O/STB_I信号才有意义。一个信号有意义指该信号的当前值需要主设备或从设备解释,0为无效,1为有效,而一个信号没有意义指该信号的当前值主设备和从设备不必关心,是0还是1都无效。

WE_O/WE_I:写使能信号,代表当前周期中进行的操作是写操作还是读操作。1代表写,0代表读。

3.4 WISHBONE支持的互联类型

WISHBONE规范支持的互联类型有4种,即点到点、共享总线、十字交叉和基于交换模块的互联。这4种互联方式在该规范中有明确的定义。实际上还有第5种,那就是片外互联,比如两片集成电路可以通过点到点的方式连接到一起。

如图3-1所示为点到点互联,是最简单的互联方式,它允许一个主设备和一个从设备进行通信。主设备可以是一个处理器IP核,从设备可以是一个串行I/O端口或存储器。

点对点互联的一个特殊应用就是当数据需要多个步骤顺序进行处理时,多个同时具有主设备接口和从设备接口的模块串接在一起,如图3-2所示。这种连接方式也称作数据流连接。模块A处理完数据后将数据送给模块B,模块B处理完数据后再将处理后的数据送给模块C处理。数据从一个模块送往另一个模块,常常将这种处理方式称作流水线。流水线在处理器设计中非常重要,其好处是多个数据可以并行处理,从而提高系统的数据处理能力。

图3-2 数据流方式互联

共享总线互联方式如图3-3所示。共享总线互联方式适合于系统中有两个或多个主设备需要与一个或多个从设备通信的场合,它们通过共享的总线进行通信,其好处是结构紧凑,节省布线资源;缺点是主设备希望与特定从设备通信时可能需要等待。主设备在需要与一个从设备通信时,需要先向仲裁器(图3-3中没有给出)申请总线占有权,获得允许后开始占用总线与目标从设备开始通信,通信结束后释放总线。当多个主设备同时希望占有总线时,仲裁器通过一定的优先级逻辑分配总线使用机会。

图3-3 共享总线互联方式

共享总线互联方式在片上系统中得到了广泛的使用,几乎成了片上系统的标志技术之一。共享总线技术在板级系统如PCI总线中也得到了应用。

十字交叉互联方式比共享总线互联方式略复杂。共享总线互联方式只允许最多有一对主设备从设备对通过共享总线进行通信,而十字交叉互联方式最多同时允许超过一对的主设备和从设备对同时进行通信,如图3-4所示。当然,在十字交叉互联方式中,一个从设备同时只能与一个主设备进行通信,两个主设备不能同时访问同一从设备。

图3-4 十字交叉互联方式(图中虚线代表了一种可能的通信方式)

类似的,基于交换模块的互联比十字交叉互联方式的INTERCON模块更复杂,一般的,基于交换模块的互联比十字交叉互联允许同时通信的主从设备对更多。

随着技术的发展,已经出现了比片上总线更复杂的片上网络技术,基于片上网络技术,已经出现了内含几十个处理器的芯片,以应用于CISCO的高端路由器中。