×
嵌入式 > 技术百科 > 详情

一种VME桥接芯片VIC068A/VIC64

发布时间:2021-05-27 发布时间:
|

1前言

用户经常会遇到如何将dsp与标准总线联系起来的问题,并需要开发与标准总线的应用模板。在工控机的机箱里使用背板总线,现在一般都是基于vme或cpci的应用开发。由于其众多的功能、强大的兼容性、并行性和高可靠性,vme总线一直应用于多种dsp系统中。虽然现在pci总线及其扩展规范cpci总线逐渐被设计者接受,但相对于pci(cpci)总线,vmebus一直居主导地位,更是由于其pci总线所不能及的特点,如vme总线系统具有良好的可扩展性,在1个vme系统机箱内可以容纳多达21块应用模板。所以对于设计多dsp板时,vme总线也是挺好的选择。

作为用户开发基于vmebus的应用模块来说,必须根据特定的要求考虑如何与vmebus接口的问题。一般来说,用户可以采用专业公司的现成ic,它们的功能比较全面。国外两个主要的提供vmebus到计算机界面的芯片厂商是cypress和tundrasemiconductor。cypress公司的vic068a是较早推出的vme总线桥控制器,功能全面,具有完全的主模块/从模块功能,也可以当作系统控制器。vic64与vic068a功能与引脚都兼容,只是增加了对vme64规范的支持。另外,由于vic068a系列接口芯片的局部总线是为motorola公司的68k系列微处理器设计的,对于与68k处理器总线不兼容的其它类型处理器来说,使用vic068a需要完成与该类型处理器总线的接口转换。tundra公司的universescv64是1个通用的单芯片的总线桥控制芯片,可以与多种局部处理器类型使用,但是也要外部逻辑完成与局部总线接口之间转换。

图1 vic068a引脚排列

2 vic068a的原理和引脚排列

vic068a具有全面的接口功能,即能进行a32、a24、d32、d16、d8主模块和从模块标准传输和块传输,有5种总线释放模式,支持写自检过程、自定义的am码以及自定义的总线定时等其它功能。它的块传输操作可以在借助适当的外部电路情况下,实现长度大于256字节的块传输,同时具有双通道特性。vic068a在上电的时候如果检测到scon引脚为低有效时,就会被选择充当系统控制器,完成总线仲裁、总线定时、中断和中断管理、iack菊花链驱动、sysclk驱动等功能,如果想使能/关闭系统控制器功能,最好是用大于4.7kω的上拉/下拉电阻器。

vic068a的复位方式有:(1)内部复位,这是最通常的复位,对选择的寄存器和内部逻辑复位;(2)系统复位,是通过vme背板复位,vic068a可以通过写配置寄存器产生1个sysreset信号;(3)全局复位,复位所有的配置寄存器,常被用作上电复位。

图1给出vic068a的引脚排列。

下面是与vic068a数据传输关系比较密切的信号引脚的介绍。

mwb,cs:mwb为局部功能模块如dsp发出的需要vmebus请求。cs为局部总线写vic068a内部寄存器的片选。设计者可以利用不同的地址译码来选择mwb和cs,以区分此次操作时对vme总线操作还是对vic068a操作。

lbr,lbg:是局部总线请求和允许信号。

pas,ds,r/w:pas是局部总线地址选通,ds是局部数据选通,r/w是局部数据方向指示。

dsack1,0:局部数据位宽确认信号。与vmebus的ds有些类似,vic068a在从模块传输,从块传输或dma传输时接受dsack之一输入,确认此周期结束,在主模块操作时输出此信号向局部总线确认vmebusmastertransfer结束。并且这个信号还和word,siz1,0信号一起用来指示此次数据的位宽。

一组缓冲器控制信号。ladi,laen,lado,aben为输入局部地址锁存、使能和输出vmebus地址锁存、使能。ledi,denin,ledo,deno分别为输入的vmebus数据锁存、使能和输出的vmebus锁存、使能。对于简单应用(如只是单周期传输),图2给出外部锁存/缓冲器与vic068a之间的典型连接。

其它的引脚功能如lberr,fc2,fc1,blt,dedlk等可以查看cypress手册,更具体的资料可以与作者联系。

3 vic068a的主模块和从模块操作

3.1主模块标准传输操作

当局部总线(局部主处理器)使得mwb低有效时,紧接着pas也有效时就发出单个数据或块传输请求;vic068a收到这两个信号有效后,如果vic068a不是当前vmebusmaster,就申请vmebus访问,当满足as自上1个周期后无效、dtack和berr无效、bgiin收到为低、合适的延时过后,就得到开始数据传输的控制权。

首先vic068a驱动d[7..0]缓冲到vmebus,并使deno有效,来使剩下的数据线缓冲有效;与此同时,vic068a也使能a[7..0]和aben,驱动剩下的vmebus地址线。vic068a也驱动总线控制信号线如am,write,lword,这时vic068a确保内部的地址建立时间过去后,使as有效,此后vic068a锁存局部总线数据la[7..0]以及使lado有效,锁存la[31..8]。在as启动有效后,vic068a启动1个dsi的内部时延,在这个时间里,主处理器应该将要送的数据放到局部总线上,同时vic068a会驱动缓冲数据控制线ledo,来锁存数据到vmebus上。在这个时间过去以后,便根据传输数据的大小和排列驱动合适的dsi(i=0,1)有效。直到收到另1块模板上的从模块驱动dtack或berr有效后,vic068a便根据数据位宽大小向局部总线驱动dsacki,即如果word信号输入为无效(高),vic068a便认为这是个d32的数据传输,就使dsack0,dsack1同时有效(低),否则若word有效,就认可这是个d16的操作,只驱动dsack1为低,这与motorola68k动态总线字长的能力是兼容的。

图2 vic068a控制信号与外部锁存/缓冲器的典型连接

3.2从模块标准传输操作

与从模块操作和配置有关的vic068a寄存器有:ss0cr0(bit0-5)、ss0cr1、ss1cr0、ss1cr1、lbtr、amsr。信号slsel1和slsel0是由片外的vmebus地址译码电路输出的,当vic068a检测到在1个slseli为低的有效电平时,而且as有效(另一个主模块发出),当前周期的dsi有效,dtack或berr撤走,vic068a就检查a32/a24/a16和传输类型,如果ssicr0被配置了,并且允许进行amcodes指明的从模块访问,则开始从模块访问,立刻驱动lbr=0申请局部总线。若vic068a的配置寄存器不允许特定的访问(由amcodes指示),则忽略vmebus的请求,不会产生lbr。

vic068a发出lbr后,等待局部总线确认,在收到lbg后,就等待3t+tpd的时间,然后使能局部总线驱动,再等待t+tpd就发出pas。应该保证局部资源在3t+tpd的时间内释放总线,否则应由逻辑电路来增加延时。当vic068a开始驱动局部总线时,同时也驱动fc2/1来提供当前局部总线周期的类型信息。fc2,fc1=00为从模块传输;01为局部dma块传输;10为标准从模块访问。vic068a在发出laen后,此时打开地址选通pas,紧接着数据选通ds,一段延时后,lbr取消,如果收到lbg取消和dsack有效(变低又变高)后,即完成该次从模块访问的读或写的局部总线周期。

4 vic068a的块传输操作

vic068a的主块传输有两种方式:movem块传输和局部dma块传输。movem方式即局部处理器发动数据传输,占有局部总线控制权;在dma方式下,vic068a为局部总线控制者,并且使用dma访问局部资源的数据。vmebus的技术规范不允许在既不放弃总线又不切换as的情况下,进行超过256字节的块传输,即每进行256字节的块传输后必须重新使as有效,或者重新仲裁总线。vic068a借助适当的外部逻辑,可以实现长度大于256字节的块传输;也可以在每256字节的界限后放弃总线,1个可编程的时间过后重新仲裁总线,每两个子块传输间隔的时间称为interleaveperiod(交叉周期),每个子块的长度为burstlength(突发长度)。vic068a还支持双通道特性:即在每个交叉周期内可以执行单周期的vmebus总线周期(包括slavecycles),不过需要借助适当的外部逻辑,实现两通道的地址通道。与主块传输相关的寄存器有(只支持到d32和d16):btcr、btdr、rcr、btlrs、dmasr、dmasicr。

4.1使用局部dma的块传输

首先对vic068a的寄存器初始化:在btlrs中设传输块的长度,在btdr中禁止或使能自动地址跨界和双通道特性;在lbtr中设置局部总线定时(与pas,ds定时有关);在btcr中设置dma使能,传输方向及交叉周期。此后的mwb有效被视为虚写周期,即开始块传输功能。

局部处理器对vmebus的虚写周期里,la[31..0]上是块传输的目的地址,ld[31..0]上是数据块的源地址(板内地址),之后是vic068a与局部总线间的dma传送。虚写周期里,vic068a将la[7..0]锁存到片内地址计数器,并使能lado将la[+:8]锁存到vmebus地址线上。同时vic068a也将ld[7..0]锁存到片内局部地址计数器,驱动blt,使ld[31..8]作为局部地址,这需要额外电路(见图3)。然后驱动dsacki来结束局部总线周期,请求vmebus,发出bri=0后,收到bgiin=0,再发出lbr申请局部总线。当获得了局部总线控制权后,vic068a驱动局部dma地址到地址总线上。局部dma地址来自ld[31..8],外部电路可以利用blt、lbg、pas、laen和fci来产生逻辑去驱动高位局部地址线,图3给出了一个参考电路。然后vic068a通过驱动局部地址,以及局部数据选通来访问局部总线的数据,局部资源回复dsacki来确认数据已经被读取或写毕。局部地址递增时,数据仍保持在总线上。与此同时vic068a也驱动as和切换ds来访问vmebus。

图3 最简单的blt控制电路

局部总线的256字节地址越界处理:在btdr设置使能,blt和fci用来控制外部电路,在将要跨界的局部周期里,blt将会来回切换一下,外部计数器应当在blt的下降沿增加1。用来实现地址锁存和跨越的外部电路也能用在实现双通道特性时,在一个突发周期后锁存地址。需要注意的是,在局部处理器的程序中,blt使能位(btcr[6])应当尽可能快地在块传输开始后,将其清除标志,没必要在块传输结束后才清除。因为btc[6]置位后,任何有效的mwb都会启动块传输,所以在vmebus死锁时的局部处理器的重试动作会误触发新的块传输,有必要在dma传输时禁止重试逻辑。

4.2ovem块传输

首先初始化rcr设置突发长度,初始化btcr设置块传输及使能位,就启动了传输周期。之后的任何mwb配合pas的有效电平都会启动moventransfer。当btcr[5]清除后,或berr为低,或者出现没有mwb的局部总线周期,都被视为movem块传输终止。在这期间,地址都会直接送到vmebus上,没有锁存,与正常的单字传送类似。vic068a作为从模块进行块传输访问,可以在ssicr0设置:

(1)不支持块传输。

(2)支持块传输,但在从模块资源一边,模仿单字节传输,即每次传输时都切换pas和dsacki。

(3)以dma类型的方式支持块传输,pas和dsacki在整个传输过程都维持有效不变。

vic068a包含1个与主块传输的地址计数器分开的地址计数器。这个计数器在块传输开始的时候,被vmebus地址初始化并驱动局部总线,然后随着每次局部确认后地址递增1。根据vme规范,从块传输不需支持256地址越界,因为在每次as的下降沿都可以重新锁存地址。

5 vic068a的中断处理能力

vic068a提供了全面的vmebus中断和局部中断产生和管理的能力,此外,还有状态和错误中断发生的能力。中断模块(interrupter)负责产生vmebus中断信号irq[7..0],寄存器virsr的设置来控制这些中断的产生和撤销,vivbr17设定每1个中断的status/id码。局部处理器写相应寄存器来通知中断模块产生相应级别的中断。当掌管该中断的中断管理模块(handler)启动中断认可周期时,中断模块还负责将此中断的status/id码放在d[7..0]上。

中断管理模块的功能有:

(1)处理vmebus中断;

(2)处理来自局部资源的中断;

(3)处理内部的错误/状态中断,其中包括:

——写过程错误,总线超时或传输失败时有berr错误或lberr错误时产生;

——sysfail/acfail的错误;

——仲裁错误;

——dma完成中断。

中断管理模块在vme中断请求线组irqi内发现1个有效请求(低),就根据它的ipl级别驱动ipl2..0。每个中断均在vicri屏蔽和使能,设置ipl级别。根据ipl2..0,如果局部处理器认可了1个局部中断,就驱动fciack信号。vic068a发现fciack有效,抽取la[2..0]上的被认可的局部中断的ipl值,如果匹配,就启动1个vmebus中断认可周期,从中断模块获取该中断的status/id放到ld[7..0]上(也可设置不需要取status/id的中断周期)。局部处理器获取该值,进入中断服务程序,这样就完成了1次中断处理过程。对于局部中断请求和内部状态/错误中断的处理过程,除了vme中断认可周期外,基本差不多。如果有多个中断请求同时发生,则根据固定的优先顺序进行中断处理。

6结束语

vic068a是个全面的总线界面控制器,采用有144引脚和160引脚tqfp,145引脚pga等封装形式。cypress还提供了成本相对低的vmebus从接口控制器cy7c960/cy7c961,如果设计者只想能够接受vmebus的访问,那么cy7c960/cy7c961也是个选择。由于vme的电气规范要求的信号线电流较大,还需要外围的逻辑电路和驱动电路配合工作(比如总线收发器,块传输还需外部逻辑,地址锁存和计数器),才能实现完整的控制器电路。cypress专门提供的cy7c964就是与vic068a/vic64配合完成这样的功能,它是可以灵活配置的总线界面逻辑电路,包括了8位收发器,锁存器,计数器等,可以取代图2中锁存、缓冲器和外部逻辑pld。但是也需要3片cy7c964和相应开发工具才能完成,用户可以对这两种方案比较选择。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil5(MDK5)在调试(debug)过程中遇到的问题