电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者电子文章嵌入式系统MAXQ揭密

MAXQ揭密

11-20 17:12:16 | http://www.5idzw.com | 嵌入式系统 | 人气:197
标签:嵌入式系统开发,嵌入式开发,http://www.5idzw.com MAXQ揭密,http://www.5idzw.com
摘要:MAXQ内核是功能强大的、单周期、基于传递触发的CPU。本文通过演示如何根据简单的MOVE操作建立整个指令集来证明MAXQ的强大性能。

MAXQ处理器家族包括功能强大的8位、16位与32位单周期微控制器,能够在一个时钟周期内执行多个操作。本文探讨了MAXQ20内核的工作机制,并展示了其强劲性能。

程序模型

MAXQ20内核是一个16位CPU,这意味着所有的累加器以及大多数工作寄存器(堆栈、数据指针和计数器)均为16位长度。MAXQ20能够寻址64k字的代码空间(也就是64kB指令)与64k字(128kB)的数据空间(图1)。

注意,对于一个基于MAXQ20内核的处理器来说,这些存储器空间大部分是空的。另外,由于固定用途ROM与数据RAM位于代码空间的高32kb内,访问这一区域的用户代码需要用到专门的内核特性,本文不讨论这一部分内容。

图1. MAXQ20内核的程序员模型包括16个通用累加器,两个循环计数器和一组数据指针。
图1. MAXQ20内核的程序员模型包括16个通用累加器,两个循环计数器和一组数据指针。

累加器

十六个作为“累加器”的寄存器组成了一个通用寄存器阵列。累加器指针寄存器(AP)所指向的寄存器被指定为“有效累加器”,成为算术与逻辑运算的目标寄存器。因此,通过改变AP寄存器的值,这十六个寄存器当中的任意一个均可被指定为算术逻辑单元(ALU)的操作目标。无论何时访问有效累加器,均可通过累加器指针控制寄存器(APC)实现累加器指针AP的自动增减,从而简化多倍精度运算过程。在图2中,A[0]是有效累加器,但是任何累加器访问操作都可以使A[1]或者A[15]变为有效累加器,具体取决于APC寄存器的值。

图2. 有效累加器通过AP寄存器指定,AP寄存器本身可通过累加器访问指令来修改。
图2. 有效累加器通过AP寄存器指定,AP寄存器本身可通过累加器访问指令来修改。

GR寄存器

通用寄存器(GR)有助于从16位字中提取单独字节。程序员可以使用GR将字节组装为一个字:低字节加载到GRL (通用寄存器-低字节)内,高字节加载到GRH (通用寄存器-高字节)内,然后可从GR中读取组装完毕的字。反过来,程序员也可以使用GR将一个字分解为两个字节。加载到GR的字可以在GRS (通用寄存器-字节交换)中以字节交换的形式读出。最后,通过读取GRXL (通用寄存器扩展低字节),可以将加载到GRL寄存器的字节扩展为有符号的字。参见图3。

图3. GR寄存器支持字节提取、字节交换以及16位符号扩展功能。</i   style=

" src="http://www.5idzw.com/article/UploadPic/2009-4/2009423162616280.gif">
图3. GR寄存器支持字节提取、字节交换以及16位符号扩展功能。

循环计数器

提供两个循环计数器:循环计数器0 (LC[0])与循环计数器1 (LC[1])。这些寄存器可以作为通用寄存器来使用,但主要用作循环计数器,从而在计数器值不为零时执行递减和跳转(DJNZ)操作。

堆栈

MAXQ20内核具有一个专用的16级内部堆栈。一个堆栈指针指示下次使用的堆栈位置或者指示PUSH或CALL操作。

数据存储器指针

MAXQ微控制器有三个访问数据存储器的指针。DP[0]和DP[1]是两个简单的16位指针。通过一个基址指针(BP)与一个8位无符号偏移量(OFFS)相加获得第三个指针。

注意,数据存储器通过这三个数据指针之一进行寻址,与此不同,代码存储器通过指令指针寻址。尽管所有MAXQ处理器都包含存储器管理单元(MMU),允许将任意存储器片段作为代码或者数据来处理,但代码与数据总线是分离的。采用独立的总线来提取代码与数据是MAXQ20内核的基本特点,允许在一个时钟周期内同时访问代码和数据。

传送-触发架构

观察程序员模型,有些人会认为该架构采用传统的指令获取-译码单元实现装载指令、指令译码,随后激活CPU的特定单元。然而,这却是一个误区。MAXQ架构与其它较为传统的CPU相比,根本区别在于MAXQ内核的传送-触发特性。

传送-触发技术能够以简单的MOVE指令完成CPU提供的各项功能。尽管MAXQ汇编器支持30条以上的指令操作码,我们可以采用以下方式对MAXQ指令集包含的每条指令进行编程:
        move Ma[b], Mc[d]
or
        move Ma[b], #immediate_value
其中,标识符Ma[b]指示寄存器模块a与寄存器子译码b。简而言之:包括ADD、位操作和寻址外部存储器在内的每一条指令,都可编程为两个寄存器之间的传送操作,或将立即数传送至寄存器的形式。

执行一条MAXQ指令时,会将源寄存器的值或一个立即数载入目的寄存器。此外,这个数据传送操作还会触发其它事件,如递增或递减一个指针、设置某些状态位或者执行其它功能。因此,这种架构具有传送-触发特性。为实现这种架构,需要大量辅助寄存器的支持。在MAXQ20内核中,总计有512个寄存器地址,被划分为两大类:外设寄存器空间与系统寄存器空间(图4)。

前六个寄存器模块(模块0到5)专门用作外设寄存器;后九个模块(模块7到F)用作系统寄存器(模块6被保留)。尽管对应不同的MAXQ处理器类型其外设寄存器模块各不相同,但所有MAXQ处理器的系统寄存器配置是相同的(图5)。

图4. MAXQ20内核中的寄存器划分为两大部分:寄存器组0到5是外设寄存器,不同的MAXQ器件会有所不同;寄存器组7到15是系统寄存器,在所有MAXQ器件中保持相对固定。
图4. MAXQ20内核中的寄存器划分为两大部分:寄存器组0到5是外设寄存器,不同的MAXQ器件会有所不同;寄存器组7到15是系统寄存器,在所有MAXQ器件中保持相对固定。

图5. MAXQ系统寄存器分配表,包括所有MAXQ20处理器共有的寄存器和用来执行指令集的附加寄存器。
图5. MAXQ系统寄存器分配表,包括所有MAXQ20处理器共有的寄存器和用来执行指令集的附加寄存器。

MAXQ指令译码

因为每条MAXQ指令实际上都是一个传送操作,每条指令都可划分为三个字段:源(SOURCE)指定数据从何处移出;目标(DESTINATION)指定数据传送到何处;格式位则指明源是一个立即数(FORMAT == 0),还是一个寄存器标示符(FORMAT == 1) (图6)。

图6. 一条MAXQ指令包含三个部分:一个源标识符、一个目的标识符和一个用来指明源标识符是立即操作数还是寄存器操作数的源格式位。
图6. 一条MAXQ指令包含三个部分:一个源标识符、一个目的标识符和一个用来指明源标识符是立即操作数还是寄存器操作数的源格式位。

以指令操作码0x0923为例,该指令的FORMAT位被清零,表示源标识符(23)应当被视作一个8位立即数来处理。目标模块是模块9,对应累加器阵列。该阵列中的寄存器0是累加器A[0]。所以,这条指令的作用是将值0x0023加载到寄存器A[0]。在本例当中,源标识符与目的标识符均不提供附加功能。

第二个例子可考虑操作码0xBF09。在这条指令中,FORMAT位被置为1,表示源标识符应当被看作是一个寄存器。上文已对模块9的寄存器0进行了分析:即表示累加器A[0]。在目的字段,模块F是数据指针模块,寄存器3 (指令中第12至14位)表示数据指针DP[0]。因此,这条指令将A[0]的内容传送至DP[0]中。

[1] [2] [3] [4] [5]  下一页

,MAXQ揭密
关于《MAXQ揭密》的更多文章