《Wishbone简介(完整板)》由会员分享,可在线阅读,更多相关《Wishbone简介(完整板)(9页珍藏版)》请在金锄头文库上搜索。
1、Wishbone简介一、 背景介绍随着以IP核复用为基础的SoC设计技术的发展,工业界及研究组织积极从事相关IP互联标准方案的制定工作,从目前的研究和发展看,影响力较大的有IBM公司的CoreConnect、ARM公司的AMBA 和Silicore Corp公司的Wishbone。Wishbone现在由OpenCores组织维护,是OpenCores建议的片上总线标准,目前已有大量开源的IP Core使用Wishbone总线作为互连标准。Wishbone总线只定义了信号和信号间的时序关系,因此可用于软核、固核和硬核,对硬件描述语言、综合工具和实现手段没有特殊要求。与其他片上总线相比,Wishb
2、one总线结构简单,互连灵活,对用户定制的支持良好,与其他片上总线的互连也较简单,因此随着SOPC技术的发展,有着广泛应用前景。二、 总线的整体结构图1给出了Wishbone 总线的逻辑结构:图1Wishbone总线的主要特征概括如下: 所有应用使用一个总线体系结构; 简单、紧凑的体系结构; 支持多控制器; 64位地址空间; 864位数据总线(可扩展); 单周期读和写; RMW(READ-MODIFY-WRITE)周期; 事件周期; 支持重试; 支持内存映射,FIFO(FISRT IN FIRST OUT)和十字互连接口; 提供为较慢设备使用而扼制数据流的机制; 使用者定义标志为,确定数据传输
3、类型; 由终端用户定义仲裁方式。三、 Wishbone的信号Wishbone有三种模块分别为SYSCON、MASTER、和SLAVE模块。1、 SYSCON模块信号CLK_O:系统时钟的输出,同步了Wishbone连接的所有模块,INTERCON模块将CLK_O输出与MASTER和SLAVE的CLK_I信号相连。RST_O:系统的复位输出,它强制将与Wishbone相连的模块重启,将自启动的状态机复位到初始状态,INTERCON模块将RST_O输出与MASTER和SLAVE的RST_I相连2、 MASTER和SLAVE共有的信号CLK_I:模块的系统时钟输入DAT_I():数据输入,最大位宽到
4、64位DAT_O():数据输出,最大位宽64位RST_I():模块的复位输入TGD_I():在MASTER和SLAVE接口中使用,它包含了与数据输入DAT_I()相关的信息,STB_I标记其有效TGD_O():同上,包含了与数据输出DAT_O()相关的信息,STB_O标记其有效3、 MASTER模块的信号ACK_I:确认信号输入,当有效时表示一个正常的总线周期的结束ADR_O():二进制地址输出,如果它是以字节为粒度数的,当数据总线是32位时的它的最大地址数就是ADR_O(n.2),n最大为63。如果它是以WORD为粒度数的,当数据总线为32位是它的最大地址数是ADR_O(n.1),n最大为6
5、3。CYC_O:当其有效时表示一个有效的总线周期正在进行。该信号在整个总线传输中都有效,比如:BLOCK传输时就有一次多个数据的传输,CYC_O就从第一个数据开始标记有效直到最后一个数据。ERR_I:当其有效时表示一个非正常的总线周期的结束。LOCK_O:当其有效时,表示当前的总线传输是不可中断的,LOCK_O有效时表示完全占有总线,一旦开始INTERCON就不能将总线交给其他的MASTER,直到当前MASTER将LOCK_O或者CYC_O置为无效。RTY_I:当其有效时,表示当前访问的接口没有准备好接收或者发送数据,这次传输需要重新开始SEL_O():选通信号,比如,当一个8位的模块访问一个
6、64位的端口时就需要8个SEL_O信号来标记数据。STB_O:有效时,表示一个有效的数据传输周期。TGA_O():与ADR_O()一起使用包含了与ADR_O()相关的信息。TGC_O():与CYC_O一起使用包含了CYC_O相关的信息。WE_O:输出信号,表示当前的总线是处在读还是写周期4、 SLAVE模块的信号ACK_O:确认输出,当其有效时表示一个正常总线周期的结束ADR_I():地址输入,与ADR_O()相对应使用CYC_I:与CYC_O相对应使用ERR_O:表示一个非正常的总线周期的结束LOCK_I:与LOCK_O相对应使用RTY_O:表示当前模块没有准备好接收和发送数据SEL_I()
7、:与SEL_O()对应使用STB_I: 与SEL_O()对应使用TGA_I():与ADR_I()一起使用包含了与ADR_I()相关的信息。TGC_I():与CYC_I一起使用包含了CYC_I相关的信息。WE_I: 输入信号,表示当前的总线是处在读还是写周期四、 总线的基本操作1、 复位操作图2I、 wishbone的复位都是同步复位的方式II、 Reset的时间可以任意长度III、 对于主器件来说在复位时STB_O和CYC_O信号必须都无效IV、 复位信号无效后STB_O和CYC_O才可以置为有效2、 传输初始化主器件接口通过置CYC_O有效来初始化传输的开始,当CYC_O无效时,主器件的其他
8、信号都不起作用。3、 握手图3I、 当主器件要传输数据时将STB_O信号置为有效II、 STB_O一直有效直到从器件回复ACK_I或者ERR_I、RTY_I信号III、 当CLK_I时钟发现传输终止后将STB_O置为无效4、 STB_O的使用主器件接口在使STB_O有效时,同时有效ADR_O、DAT_O、SEL_O、WE_O、和TAGN_O信号。5、 ACK_O, ERR_O, RTY_O的使用对于从器件上面三个信号之一有效时,必须同时有效DAT_O,另外三个信号不能同时有效。6、 TAG类型的使用表中表示的是TAG信号的各种类型,以及他们分别伴随什么信号使用。五、 总线的连接方式Wishbo
9、ne总线有四种将MASTER与SLAVE连接在一起方式,分别为:1、 点对点:可以最简单地将一个MASTER与一个SLAVE相连;2、 数据流:可以实现数据传输的流水;3、 共享总线:将多个MAS TER和SLAVE相连,不过任何时刻只能有一个MASTER占据总线;4、 十字互连:可实现多个MASTER和多个SLAVE之间同时传输数据。图4给出了采用点对点互联方式的Wishbone总线主从接口。图4六、 总线的传输方式Wishbone有三种数据传输方式,分别为1、单读写单读写为最简单,图5给出了单读周期的时序。图5CLOCK EDGE0:主器件先有效地址ADR_O()和TGA_O() 主器件使
10、WE_O为低,表示要进行读操作主器件使能SEL_O,选通要写的器件主器件有效CYC_O和TGC_O初始化传输主器件有效STB_O标记开始传输 SETUP,EDGE1:从器件解码输入的信号,同时给出ACK_I回应信号从器件将有效数据通过DAT_I()和TGD_I()输出从器件通过ACK_I与STB_O握手表明数据有效主器件监视ACK_I信号,准备将DAT_I()和TGD_I()数据锁存注:从器件可能在有效ACK_I之前加入等待(-WSS-)。CLOCK EDGE1:主器件将DAT_I()和TGD_I()数据锁存主器件将STB_O和和CYC_O置为无效表明本次传输结束从器件作为STB_O无效的响应
11、将ACK_I置为无效2、块读写块传输是用来完成多数据的传输,这项功能常用在有多主器件连接时。如图所示,CYC_O信号在整个BLOCK传输中都有效,这个信号可以用来向总线仲裁提出对一个共享的资源的申请,为了保证这个传输LOCK_O这个信号必须在传输期间一直有效,同时在传输时STB_O和ACK_I这两个信号的握手时序还是没有改变。图 在块传输中使CYC_O一直有效 下面以块传输读为例,说明块传输的过程。对于块传输来说每个时钟都可以进行数据的传输,但在本次块读传输中体现的是在块传输的主器件和从器件通过加入等待周期来终止总线传输的过程。图中整个传输可以分为5个阶段,在第二个传输阶段完成后主加入一个等待
12、,在第四个传输阶段完成后从又加入一个等待,整个传输过程在第五个阶段完成后结束。CLOCK EDGE 0:主器件将ADR_O和TGA_O置为有效主器件将WE_O置低,表明为读操作主器件将SEL_O有效,表明它将从哪获取数据主器件将CYC_O和TGC_O有效表明传输开始主器件有效STB_O表明开始第一阶段的传输SETUP, EDGE 1:从器件解码输入,然后有效ACK_I信号从器件将有效数据放到DAT_I和TGD_I上主器件监视ACK_I信号,准备锁存DAT_I和TGD_ICLOCK EDGE 1:主器件锁存在DAT_I和TGD_I的数据主器件处理新的ADR_O和TGA_O主器件设置新的SEL_O
13、来表明它将从哪获取数据SETUP, EDGE 2:从器件解码输入,然后有效ACK_I信号从器件将有效数据放到DAT_I和TGD_I上主器件监视ACK_I信号,准备锁存DAT_I和TGD_ICLOCK EDGE 2:主器件锁存在DAT_I和TGD_I的数据主器件将STB_O置为无效,引进一个等待SETUP, EDGE 3:从器件将ACK_I置为无效响应STB_O的无效信号CLOCK EDGE 3:主器件处理新的ADR_O和TGA_O主器件设置新的SEL_O来表明它将从哪获取数据主器件有效STB_OSETUP, EDGE 4:从器件解码输入,然后有效ACK_I信号从器件将有效数据放到DAT_I和T
14、GD_I上主器件监视ACK_I信号,准备锁存DAT_I和TGD_ICLOCK EDGE 4:主器件锁存在DAT_I和TGD_I的数据主器件处理新的ADR_O和TGA_O主器件设置新的SEL_O来表明它将从哪获取数据SETUP, EDGE 5:从器件解码输入,然后有效ACK_I信号从器件将有效数据放到DAT_I和TGD_I上主器件监视ACK_I信号,准备锁存DAT_I和TGD_ICLOCK EDGE 5:主器件锁存在DAT_I和TGD_I的数据从器件将ACK_I置为无效,引入一个等待SETUP, EDGE 6:从器件解码输入,然后有效ACK_I信号从器件将有效数据放到DAT_I和TGD_I上主器件监视ACK_I信号,准备锁存DAT_I和TGD_ICLOCK EDGE 6:主器件锁存在DAT_I和TGD_I的数据主器件通过将STB_O和CYC_O置为无效来表明传输结束图 块读传输3、RMW(READ-MODIFY-WRITE) RMW(读转写)用来完成不可分割的旗语操作,在上半周期中是一个单周期的读数据传输,在下半周期中是单一的写操作,CYC_O信号在两个半周期中都有效 图中表示的是一个RMW操作,RMW操作中数据可以在每个时钟都进行传输,但是在本例中体现的是主和从器件都可以通过加入等待来控制数据的传输。CLOCK EDGE 0:主器