| 网站首页 | 文章中心 | 下载中心 | vxworks在线文档 | 实时论坛 | 
您现在的位置: vxworks开发网 >> 文章中心 >> 技术资料 >> 文章正文 用户登录 新用户注册
vxworks中的VME总线情况            【字体:
vxworks中的VME总线情况
作者:frank    文章来源:本站原创    点击数:    更新时间:2008-2-16    

Vxworks中的VME总线

外部总线地址映射

    VME总线映射时由一系列的九个宏来进行主控窗口映射(master window mapping),并由另外的一组九个宏来进行受控窗口映射(slave window mapping)。用户通过设置config.h中的INCLUDE_VME宏来配置VME。对A16A24A32主访问空间的VME映射分别由三个宏依次控制。

    假定BSP使用了所有这些宏。如果硬件是已经准备好的并且这些宏中一组或多组必须有固定值,那么这些宏就必须从config.h移到bspname.h文件中。只有用户能合理改变的宏可以放在config.h中。

    使用以下这些宏来定义从本地CPU(总线主控访问)VME总线的映射窗口:

    VME_A16_MSTR_SIZE               A16存储空间窗口的大小

    VME_A16_MSTR_BUS                A16窗口的总线首地址

    VME_A16_MSTR_LOCAL              A16窗口的本地地址

    VME_A24_MSTR_SIZE               A24存储空间窗口的大小

    VME_A24_MSTR_BUS                A24窗口的总线首地址

    VME_A24_MSTR_LOCAL              A24窗口的本地地址

    VME_A32_MSTR_SIZE               A32存储空间窗口的大小

    VME_A32_MSTR_BUS                A32窗口的总线首地址

    VME_A32_MSTR_LOCAL              A32窗口的本地地址

    使用下列宏来定义从VME总线到本地memory的窗口。默认地,只有CPU 0将其memory内容输出到外部总线。这些宏控制总线slave窗口,使得本地memory对于VME总线是可见的。由于其容量很小,主存储器很少被映射到A16 受控窗口。将窗口大小设为0就可以禁用这个窗口。

    VME_A16_SLV_SIZE                A16空间上的窗口大小

    VME_A16_SLV_BUS                 A16窗口的总线地址

    VME_A16_SLV_LOCAL               映射到A16窗口的本地地址

    VME_A24_SLV_SIZE                A24空间上的窗口大小

    VME_A24_SLV_BUS                 A24窗口的总线地址

    VME_A24_SLV_LOCAL               映射到A24窗口的本地地址

    VME_A32_SLV_SIZE                A32空间上的窗口大小

    VME_A32_SLV_BUS                 A32窗口的总线地址

    VME_A32_SLV_LOCAL               映射到A32窗口的本地地址

目前还没有建立起一组标准的描述PCI地址映射的宏。相关的请查阅Wind River Technical Note #44target/src/drv/vme/templateVme.c

 

vxworks使用VME总线开发的注意问题:

VME规范C.1

VME的协同工作能力是这个标准成功的关键所在。总线的特殊扩展应该限制在P2AC列用户插脚范围内,而且应该被清楚地说明。在任何情况下,都不允许偏离规定的定时要求。

VME-64规范是对早期规范的扩充,现在windriver没有提供在VME-64规范或其扩充范围内的对即插即用特性的支持。

地址

    vxworks中地址分配的选择不是一个很重要的问题,本地地址可以使部分VME总线地址空间变得模糊。一些目标板不能对内存总线的低地址进行寻址,因为它们的本地地址从0开始。对于vxworks这不是一个问题,因为所有VME设备的驱动程序都是可以配置的。但设备冲突可能会是一个系统问题。

VME总线访问的动态总线规模

    规范中定义了三种地址类型:

. A16短地址

. A24标准地址

. A32扩展地址

除此之外,板外设备经常有数据长度的限制。很多实施者对同一VME总线提供不同数据长度(D16D32)不同的窗口大小.

    D32访问宽度自动变成两个D16访问宽度的窗口是非常有用的,这可以通过一些具有动态总线大小的体系结构来实现(68k)

    一些板子需要寄存器在初始化时除了指定AM(Address Modifier)之外,还要指定数据的“方向”(/),这是非常不方便的。

    参见config.h中有关VME总线主/从访问窗口的标准宏配置。

    WindRiver并不直接支持64位的地址和数据,但这不会妨碍板子的特定程序为用户提供这样的支持。

双端口内存

    很多CPU板子都有本地(板载)RAM,在VME总线中创建一个从属访问窗口可以使总线上的其他CPUDMA设备使用本地内存,这通常也称为双端口。这是由需要将本地处理器的RAM作为底板共享内存的系统决定的。这样的双端口内存应该完全支持下面将要介绍的RMW周期。

    板外设备也需要双端口,一般可以对目标板内存进行DMA存取,例如Excelan EXOS-302

    memory的外部地址看见双端口内存将是非常有用的,尽管通常没有提供这样的支持(而且也不被vxworks使用)

    porting时双端口也是非常有用的,它将使得背板调试方便。

RMW

    RMW(read-modify-write)必须以一种不可分割的方式提供。

板子必须与VME规范中定义的RMW机制相一致,也就是说,在一个周期的读和写阶段,目标板必须保持地址选通电平为低。一个正常工作的双端口从板,通过检查地址选通电平持续为低,来保持RMW的两个端口不被分割。

    不幸的是,只有在用户读写一个相同的单一地址时,才能够保持地址选通为低电平。更复杂的不可分割指令,如CAS,涉及到多地址则不能使用它,这样就没有用于双端口内存的方法了。由于vxworks只使用TAS,因此并不会带来麻烦。由于这个原因,一些厂家为P2总线增加了Lock脚。

    然而,该管脚并不是这个标准的一部分,也因此不能很充分地支持这个机制。对于多数板子这并不是个问题。

    cachingsnooping不是VME RMW周期中要讨论的问题,共享内存的板子绝对不能引入缓存一致性问题。对于适当的VME从属访问,它必须是无缓存的,或者是被完全的监听能力所保护的。

    对于一些PowerPC设备,有必要使用总线仲裁作为VME RMW操作的全局信号量。当板子不能产生并不能响应RMW周期时,使用总线作为全局信号量很有效。任何不能使用RMW的板子,在读写周期完成时会对VME总线做出判断并维持。另外,即使能够正确地执行RMW周期,在存储共享目标代码时主控板也必须实现总线上锁保护。这已经在BSPsysBusTas()sysBusTasClear()函数中实现了。

仲裁

    如果支持二中选一的仲裁级别,板子应该默认总线请求级别为3,并提供跳线机制。

    通常很方便选择总现释放方式,相应的有:RWD(release when done)ROR(release on request)RAT(release after timeout)几种方式。

    多个总线请求/允许级别对于背板中有多个主控制器的系统来说可能是非常重要的;使用轮询仲裁可以保证每个总线主控制器能够及时访问总线。

    如果同一级别的主控制器采用菊花链方式,离总线很远的主控制器将会变得非常“饥饿”。

仲裁/系统控制器

    系统控制器的功能应该是可选择的并通过跳线来选择。

    系统控制器不是由一个软件设置的寄存器来激活的。对于软件来说,具有能够读取系统控制器状态(/)的能力是很有用的。

    当一个本地的复位信号被激活时,总线系统控制器应该申明总线复位信号。

    系统控制器不需要判断所有的总线优先级,但如果它只判断一个级别,那通常是第三个级别。

    系统控制器负责中断协处理器并且申明一个BERR信号,较好的工具允许这个暂停时间在最短16毫秒到无限长的时间内选择。系统控制器LED可用于判断用户优先级的逻辑状态。

邮箱中断

    邮箱中断和位置监视拥有相似的机制,此机制可作为内部处理器的同步方法。

    邮箱允许中断器传递一些信息(通常是一个短字节或是一个长字节)到接收器,而位置监视机制只能引起一个中断却不能传递数据。

       当在底板的节点之间传递网络数据包氏,vxworks使用这些机制作为同步的方

法。没有它们的话,vxworks就必须依赖于效率低下的查询方法,那将会降低底板网络的吞吐能力。目前使用一个邮箱或者位置监视,但是使用两个或以上会更加出色。

    Vxworks能够使用VME中断来驱动底板的驱动程序,这样比轮询的方式更可取,但是仍然不如邮箱中断方式好。

    事实上,在使用邮箱中断时vxworks并没有传递任何信息,而只是用了它的中断能力。

VME总线中断

    尽管vxworks并不要求VME中断,但是对于所有的VME总线中断均给与支持是一个较好的想法,尤其是在需要板外以太网的功能时。通过跳线来允许或禁止这些中断是可以实现的,但是我们推荐使用软件控制的方法,允许软件读取中断的状态是很有价值的。

VME总线中断确认

    VME总线中断请求必须得到接收器的确认。一些实施者选择迫使ISR来回应中断的方法,但是更加规范的首选方法是使硬件自动确认中断请求,并给CPU提供正确的中断向量。

    我们并不推荐使用软件中断确认的方法,因为那样会严重影响系统的性能。

    VME中断产生能力也是非常必要的,尤其是如果板卡与那些没有邮箱中断的板卡一起用于底层网络中时,则更是如此。其中一个最重要的例子是在底板上安装使用Sun操作系统的Sun目标板时,如果从板没有提供VME终端产生的能力,那么在Sun操作系统这方面底板的驱动程序需要进行轮询。

电源使用

    VME总线标准规定了每伏电压的最大能源消耗。设计者必须遵守这些限制,或者清楚地标明额外的功率需求。

    每一块板卡典型的功率消耗是7瓦特,那些需要更多能源消耗的板卡需要特别标明。

提取器

    VME板应该将板卡提取器安装在前板上。

VLSI芯片

    很多现有的VLSI芯片都提供了全面的VME总线接口功能。

 

文章录入:frank    责任编辑:frank 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    通过串口tsfs启动vxworks调试
    vxworks下文件读写示例
    vxworks生成BOOTROM的两种方…
    DOC盘启动vxworks
    Arbor EmCore-i412板子在vxw…
    vxworks下串口读写示例
    vxworks中实现双网卡驱动的例…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)