任何VXI总线器件,不管其功能如何,都必须有一组配置寄存器,系统通过访问VME总线上PI口的配置寄存器来识别器件的类型、型号、生产厂家、地址空间与所要求的存储器空间。仅有这种最低通信能力的VXI总线器件就是寄存器基器件。通过这组公共的配置寄存器、中央资源管理器和基本的软件模块,可以在系统初始化时自动进行系统与存储器配置。
硬件寄存器与通信器件是组成VXI总线系统最基本的逻辑单元。通常,一个器件将占据一块VXI模块,但也许在一个模块上实现多个器件和一个器件占据多个模块。一个单机箱VXI系统最多可以有256个器件。根据器件所支持的通信协议能力可将其分成寄存器基器件、消息基器件、存储器器件和扩展器件四类。
VXI模块必须有一组具有特定地址的专用寄存器,其64KB A16寻址空间的上16KB空间为VXI总线器件所保留。每个VXI器件都有一个用于确定其寄存器在上述寻址空问所在位置的8位逻辑地址。VXI器件的逻辑地址类似于GPIB设备的GPIB地址,可以手动或在系统上电时自动配置。1
硬件寄存器访问在"Stellaris外设驱动库”里,访问片内外设的库函数最终都是由在头文件hw-types-h里定义的三个硬件寄存器访问宏函数HWREG( )、HWREGH( )、HWREGB( )实现的。这三个宏函数在定义的时候被声明为volatile属性的指针,所以这种访问不会被编泽器优化掉,即每次读取时都返回硬件寄存器的当前值,且每次写人时都会把最新的数值写人硬件寄存器。
读取硬件寄存器rdhwr提供了(用户模式下的)非特权软件的直接硬件信息读取。MIPS32/64规范定义了4个寄存器。操作系统可以通过CP0寄存器HWREna分别独立控制对各个寄存器的访问(将第0位置使能,寄存器0,以此类推)。HWREna在系统复位时为全0,因此,软件需要显式地将用户访问权限打开。有特权的代码可随时读取,年NHWREna中的0无关。
这4个寄存器为:
CPUNum(0):当前程序运行的CPU数量,它直接从协处理器0 EBase(CPUNum)域中读取。
SYNCI-Step(1):L1缓存行的有效大小。缓存行的大小对于用户程序非常重要,因为需要它执行synci指令,使写入的指令可执行。SYNCI-Step会告诉你“步长”,即相邻synci之间的地址增幅。SYNC-Step若返No,则表示不需要进行synci操作。
CC(2):用户模式下只读的CP0 Count寄存器存取用于高精度的计数。如果没有下面这个寄存器,它并没有太大的意义。
CCRes(3):告知HCount计数的速度,它是流水线时钟的除数(如果为2,表示Count每两个周期增2,即流水线时钟速率的一半)。2
微引擎硬件寄存器为了实现微控制器的功能,微引擎必须与许多硬件设备交互。大多数此类交互都通过一组硬件寄存器实现。一些硬件寄存器的功能类似于常规处理器的寄存器的功能,寄存器提供一个高速存储的区域,可以用来保存计算的中间结果。另一些硬件寄存器用于特殊用途,它们根本不用来存储数值。相反,访问某个专用寄存器会导致底层硬件执行某种操作。3
本词条内容贡献者为:
刘军 - 副研究员 - 中国科学院工程热物理研究所