基于RISC结构微控制器的指令分析与软核设计.docx

上传人:b****7 文档编号:23595669 上传时间:2023-05-18 格式:DOCX 页数:51 大小:990.68KB
下载 相关 举报
基于RISC结构微控制器的指令分析与软核设计.docx_第1页
第1页 / 共51页
基于RISC结构微控制器的指令分析与软核设计.docx_第2页
第2页 / 共51页
基于RISC结构微控制器的指令分析与软核设计.docx_第3页
第3页 / 共51页
基于RISC结构微控制器的指令分析与软核设计.docx_第4页
第4页 / 共51页
基于RISC结构微控制器的指令分析与软核设计.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

基于RISC结构微控制器的指令分析与软核设计.docx

《基于RISC结构微控制器的指令分析与软核设计.docx》由会员分享,可在线阅读,更多相关《基于RISC结构微控制器的指令分析与软核设计.docx(51页珍藏版)》请在冰豆网上搜索。

基于RISC结构微控制器的指令分析与软核设计.docx

基于RISC结构微控制器的指令分析与软核设计

第一章引言

1.1研究基于RISC结构微控制器的重要性和意义

不同机器的指令系统是各不相同的.从指令的操作码功能来考虑,一个较完善的指令系统,应当包括数据传送指令、算术运算指令、程序控制类指令、输入输出类指令、字符串类指令、系统控制类指令等。

CISC(复杂指令系统计算机)的指令系统一般多达二三百条。

但对CISC机进行的测试表明,最常使用的是一些最简单最基本的指令,仅占指令总数的20%,但在程序中出现的频率却占到80%。

同时在CISC系统中往往配备有大量的寻址方式,这就使得CISC处理器存在执行效率不高,开发成本过大等缺点。

上世纪80年代初,计算机的设计者们就对计算机系统使用复杂指令级这一做法提出了质疑,通过对CISC计算机进行研究,发现大约有80%的指令很少被使用,而经常被使用的指令只占到了指令集的20%。

根据以上的情况,设计者们越来越倾向设计带有更少指令集和结构更简单的计算机。

这种类型的计算机被归类为RISC(精简指令系统)计算机。

RISC处理器有三个基本的要素

(1)一个有限的简单的指令集。

(2)CPU配备大量的通用寄存器。

(3)强调对指令流水线的优化。

RISC结构的目标决不是简单的缩减指令系统,而是通过对指令集进行精简设计使处理器的结构更简单,更合理,具有更高的性能和执行效率,并降低处理器的开发成本。

典型的RISC机器的特征主要有以下几点:

(1).使用等长指令。

(2).寻址方式少且简单。

(3).只有取数指令存数指令能够访问存储器。

(4).指令集中的指令数目一般少于100种,指令格式少于4种。

(5).指令周期执行时间多为一个时钟周期。

与此相反,CISC指令集具有复杂、庞大的指令系统,一般可达到100到250条。

具有多种指令格式(一般大于4种)和复杂的寻址方式(一般可达到5到20种),各种指令使用频率相差很大,一些基本指令虽然只占指令总数的20%但执行频率却达到了80%,各种指令执行时间相差很大。

通过对这两种指令系统的比较可以看出,RISC是在继承了CISC的成功技术,并在克服了CISC及其缺点的基础上发展起来的,所以对RISC微处理器的研究有着广泛的科研价值和应用前景。

1.2工作内容与工作目标

设计微控制器的过程其实是一个提出问题,分析问题,解决问题的实践过程。

本文中的章节都是按照这个指导思想编写的。

这次毕业设计的目标是期望用硬件描述语言来编写一个基于RISC结构的微控制器。

为了达到这个目的,在设计前需要明确以下几点:

(1)RISC结构微控制器的特点及组成结构。

(2)微控制器的指令格式与寻址方式。

(3)微控制器执行指令的原理与具体过程。

所要设计的微控制器外部特性及指令系统是以ATMEL90S2313芯片为蓝图。

因此熟悉AT90S2313的工作原理及工作方式很有必要。

工作的重点有以下四个方面:

首先是对ATMEL90S2313的结构与功能进行学习,以便确定所要设计的微控制器组成结构与外部特性。

这些内容主要第二章中进行阐述。

其次,需要对AT90S2313指令集进行分析,总结出指令格式与寻址方式,这项工作为微控制器各功能模块的设计做好准备,以上的工作成果将会在第三章指令分析中进介绍。

再次,需要确定流水指令执行方式的概念,并对其具体实现方式进行研究与讨论,这是第四章的主要内容。

最后根据先前工作中的积累,设计出微控制器的总体结构并编写各功能模块的软核,具体的实现过程将会在第五章中详细讨论。

需要说明的是,AT90S2313芯片中的模拟部分不在这次设计的考虑中,例如可编程的看门狗定时器,片内模拟比较器等部件。

 

第二章RISC微控制器结构

2.1CPU的功能

图1.1计算机基本结构

图1.1展示了一个标准计算机系统的基本结构。

一个计算机系统应当包括以下设备:

CPU,内存设备和I/O接口。

以上所有设备之间的通信凭借系统总线来开展,具体而言是通过数据总线,地址总线和控制总线来进行各个设备之间信息传递的。

CPU全称叫做中央处理单元(CENTRALPROCESSINGUNIT),它就像是计算机的大脑,对整个计算机系统的运行起着重要的作用,有如下四方面的基本功能:

指令控制

程序的顺序控制,称为指令控制。

由于程序是一个指令序列,这些指令的相互顺序不能任意颠倒,需要严格按程序规定的顺序进行,因此,保证计算机按顺序执行程序是CPU的首要任务。

操作控制

一条指令功能是由若干个操作信号的组合来实现的,因此,CPU管理并产生由内存取出的每条指令的操作信号,把各操作信号送往相应的部件,从而控制这些部件按指令要求进行动作。

时间控制

在计算机中,各种指令的操作信号均受到时间的严格定时。

一条指令的整个执行过程也受到时间的严格定时。

而CPU通过对操作信号的定时控制而达到使整个系统自动工作的目的。

数据加工

CPU可以对数据进行算术运算和逻辑运算。

对数据的加工处理,是CPU的根本任务。

因为原始数据只有通过加工处理后才能对人们有用。

CPU凭借二进制编码来解读和执行指令,指令通常是关于算术运算,逻辑运算,数据处理和系统控制之类的操作。

以上的操作实现了计算机的基本控制。

2.2AtmelAVRAT90S2132简介

2.2.1特点描述

AT90S2313是一款基于AVRRISC的低功耗CMOS的8位单片机。

通过在一个时钟周期内执行一条指令,AT90S2313可以取得接近1MIPS/MHz的性能。

微控制器的AVR核将32个工作寄存器和丰富的指令集联结在一起。

所有的工作寄存器都与ALU(算术逻辑单元)直接相连,允许在一个时钟周期内执行的单条指令同时访问两个独立的寄存器。

这种结构提高了代码效率,使AVR得到了比普通CISC单片机高将近10倍的性能。

AT90S2313具有以下特点:

2K字节FLASH,128字节EEPROM,128字节SRAM,15个通用I/0口,32个通用工作寄存器,具有比较模式的灵活的定时器/计数器,内外中断源,可编程的UART,可编程的看门狗定时器,下载程序用的SPI口以及两种可通过软件选择的省电模式。

工作于空闲模式时CPU将停止运行而寄存器定时器/计数器看门狗和中断系统继续工作;掉电模式时振荡器停止工作,所有功能都被禁止而寄存器内容得到保留。

只有外部中断或硬件复位才可以退出以上状态。

从以上特点可以看出AT90S2313功能强大易于扩展。

在本章中主要学习其工作原理及工作方式,这为以后RISC微控制器的设计提供了很好的借鉴。

2.2.2组成结构

从图2.2中可以看出AT90S2132基本的逻辑构成部件,各部件的特性如下所示:

快速访问寄存器文件包含32个8位可单周期访问的通用寄存器,这意味着在一个时钟周期内ALU可以完成一次如下操作——读取寄存器文件中的两个操作数,执行操作,将结果存回到寄存器文件。

ALU支持两个寄存器之间、寄存器和常数之间的算术和逻辑操作,以及单寄存器的操作。

除了寄存器操作模式,通常的内存访问模式也适用于寄存器文件。

这是因为AT90S2313为寄存器文件分配了32个最低的数据空间地址($00-$1F)允许其象普通内存地址一样访问。

I/O内存空间包括64个地址作为CPU外设的控制寄存器,T/C,以及其他I/O功能I/O内存可以直接访问,也可以作为数据地址($20-$5F)来访问。

AT90S2313采用了HARVARD结构:

程序和数据总线分离,程序内存通过两段式的管道流水进行访问,CPU在执行一条指令的同时取下一条指令。

这种预取指的概念使得指令可以在一个时钟完成。

相对跳转和相对调用指令可以直接访问1K地址空间。

所有的AVR指令都为16位长,每个程序内存地址都包含一条16位或32位的指令。

当执行中断和子程序调用时,返回地址存储于堆栈中,堆栈分布于通用数据SRAM之中,所以堆栈大小只受SRAM数量的限制。

微控制器结构的内存空间是线性的如下图2.3。

图2.2AT90S2313逻辑结构

图2.3内存空间结构

中断模块由I/O空间中的控制寄存器和状态寄存器中的全局中断使能位组成。

每个中断都具有一个中断向量,由中断向量组成的中断向量表位于程序存储区的最前面。

中断向量地址低的中断具有高的优先级。

因为在对微控制器的设计中会大量的用到通用寄存器和指令寻址方式,所以将对这两个问题专门加以详细的讨论

2.2.3通用寄存器文件格式

图2.4通用寄存器文件格式

如上图所示每个寄存器都对应一个内存地址,通用寄存器文件中有32个寄存器。

寄存器R26~R31除了用作通用寄存器外还可以作为间接寻址用的地址指针。

以上寄存器统称为X、Y、Z寄存器。

如图:

图2.5X,Y,Z寄存器结构

数据寻址模式分为5种:

直接,带偏移量的间接,间接,预减的间接,后加的间接,寄存器R26到R31为间接寻址的指针寄存器。

直接寻址范围可达整个数据空间。

带偏移量的间接寻址模式寻址到Y、Z指针给定地址附近的63个地址。

带预减和后加的间接寻址模式要用到X、Y、Z指针。

32个通用寄存器64个I/O寄存器和128字节的SRAM可以被所有的寻址模式访问。

下面这节将着重对寻址方式进行探讨。

2.2.4程序和数据寻址模式

AT90S2132支持5种数据寻址模式(直接寻址、带便移量的间接寻址、间接寻址、预减的间接、后接的间接)和3种程序寻址模式(使用LPM指令寻址常数、间接程序寻址IJMP和ICALL、相对程序寻址RJMP和RCALL)。

其中数据寻址中的直接寻址又可细分为4种方式:

单寄存器直接寻址、双寄存器直接寻址、I/O直接寻址、数据直接寻址。

单寄存器直接寻址

双寄存器直接寻址

I/O直接寻址

数据直接寻址

数据间接寻址

带预减的数据间接寻址

带后加的数据间接寻址

带偏移的数据间接寻址

使用LPM指令寻址常数

间接程序寻址IJMP和ICALL

相对程序寻址RJMP和RCALL

第三章指令集分析

3.1指令集概述

CPU要执行某种操作的命令叫做指令。

在本章中主要介绍的是机器指令,每一条机器指令可以完成一个独立的运算,如算术运算、逻辑运算等。

多条机器指令可以组成程序运行。

在CPU的指令集中包括了该CPU可执行的所有指令,因为指令集决定了微控制器中数据通路和所有功能模块的结构,所以本章中对指令集的学习是及其必要的。

如下图所示:

指令集

Rd-目的寄存器Rr-源寄存器

K-常数k-常数表示的地址

b-寄存器文件或I/O寄存器的位s-状态寄存器中的位

Z、Y、X-R31到R26寄存器

A-I/O地址q-偏移量(6位)

图3.1指令集列表

图3.1中罗列微控制器AT90S2313的指令集。

虽然在设计的开始就说明了使用AT90S2313指令集作为设计的原型,但因为不考虑微控制器的模拟部分,以及设计指令集中所有指令过于复杂等多方面原因,这里一共对92条指令进行了分析。

这些指令被分成了4种类别:

算术和逻辑运算指令ADD、ADC、SUBSUBI、SBC、SBCI、AND、ANDI、OR、ORI、EOR、COM、NEG、SBR、CBR、INC、DEC、TST、CLR、SER。

跳转指令RJMP、RCALL、RET、RETI、CPSE、CP、CPC、CPI、SBRC、SBRS、SBIC、SBIS、BRBS、BRBC、BREQ、BRNE、BRCS、BRCC、BRSH、BRLO、BRMI、BRPL、BRGE、BRLT、BRHS、BRHC、BRTS、BRTC、BRVS、BRVC、BRIE、BRID。

数据传输指令LDZ、LDZ+、LD-Z、STZ、STZ+、ST-Z、MOV、LDI、IN、OUT。

位及位测试指令SBI、CBI、LSL、LSR、ROR、ASR、SWAP、BSET、BCLR、BST、BLD、SEC、CLC、SEN、CLN、SEZ、CLZ、SEI、CLI、SES、CLS、SEV、CLV、SET、CLT、SHE、CLH、NOP、SLEEP。

以上指令集的设计是基于ATMELAVRAT90S2313微控制器的指令集,从而减少开发时间,提高设计的可靠性。

RISC微控制器的特点之一就是大部分指令可以在一个时钟周期内执行完成,但是跳转指令LD(间接取数)ST(间接存数)和少数其他的指令是在多个时钟周期内完成的。

各指令执行所需的时钟周期可以在图4.1时钟数一项中查出。

3.2寻址方式

RISC微控制器被设计了7种寻址方式,用来满足上一节指令集的执行需要。

Rd和Rr分别代表目的寄存器和源寄存器。

寄存器即可以存放数据又可以存放指令。

因此当操作数或某条指令存放在存储单元时,其存储单元的编号就是该操作数或指令在存储器中的地址。

1.单寄存器直接寻址

寄存器直接寻址是一种基本的寻址方法,其特点是操作数直接存放在目的寄存器(Rd)中。

2.双寄存器直接寻址

在这种寻址方式中操作数存放在Rd和Rr中,并将运算后的结果保存在Rd中。

3.输入输出直接寻址

第一个操作数包含在I/O寄存器中,地址由指令中的6位代码组成。

第二个操作数保存在Rd或Rr中。

并通过IN和OUT指令对I/O寄存器进行读出或是写入操作。

4.数据间接寻址

操作数的地址包含在Z指针中(R30寄存器)的寻址方式。

在寻址时通过Z指针中的地址去数据存储器中找操作数。

5.带预减的数据间接寻址

这种寻址方式是在执行前先将Z指针减1。

此时在Z指针中的操作数地址为原地址减1。

6.带后加的数据间接寻址

在执行后对Z指针加1。

此时Z指针中的操作数地址为原地址加15、6这两种寻址方式使得寄存器的内容规律变化而不改变指令本身,从而是有效地址规律变化。

7.带偏移的数据间接寻址

在这种寻址方式中程序计数器(PC)中的地址为PC+偏移量。

偏移量在指令中被定义。

无条件跳转指令(RJMP相对跳转,RCALL相对调用)用此种寻址方式可以从任何位置寻址所有的内存单元。

虽然这里有7种寻址方式,但是直接寄存器寻址是被应用的最多的寻址方式。

而其它的寻址方式只有在访问I/O设备,访问SRAM和执行跳转指令时才被用到。

3.3指令格式

在前几章提到,RISC指令有着固定的长度且易于解码。

按照这个设计原则微控制器的所有指令被设计为固定的16位字长,指令格式比较简单且易于解码。

通过对指令集的分析,一共需要建立9种指令格式。

(1)指令需要用到两个寄存器,d被用来选择目的寄存器,r被用来选择源寄存器。

每个寄存器用5位来表示,所以一共可以寻址32个寄存器。

ADD,SUB和AND等指令就是采用这种指令格式。

(2)指令只需要一个寄存器,这时就用d来选择目的和源寄存器。

这种指令格式包括了NEG,ST和IN等指令。

(3)指令中需要调用立即数。

K用8位的字长来表示立即数(常数),用d来选择目的寄存器。

这个指令格式与上面两个格式有些不同的地方是,用了4位字长来表示目的寄存器,所以只能寻址16个寄存器。

使用这种指令格式的有CPI,SUBI,SBCI,ORI,ANDI和LDI等指令。

(4)在无条件跳转指令中,K被用来定义偏移量。

12位字长的偏移量可以使得跳转指令对-2048到2047的范围内寻址。

RJMP、RCALL等指令使用这种指令格式。

(5)在有条件跳转指令中,k被用来定义偏移量,s位被用来选择状态寄存器中的那一位被用来对跳转进行测试。

(thes-bitsaddressedwhichbitinthestatusregisteristobetestedforthebranch)7位字长的偏移量可以使得跳转的范围从-64到63。

使用这种指令格式的指令有BRBC和BRBS等。

(6)I/O寻址指令有两种格式。

第一种是用A来定义I/O地址并用d来选择的相应的目的寄存器。

这种方式使用了6位字长A来定义I/O地址,从而可以对寻址64个I/O地址。

IN和OUT等指令使用这种指令格式

另一种格式是用A来定义I/O地址但是用d来选择I/O中相应的位。

在这种方式中用了5位的字长A来定义I/O地址,所以只能寻址32个I/O地址。

CBI,SBI,SBIC和SBIS等指令使用这种指令格式。

(7)状态寄存器指令的清零和设置位,用s(3位)来定义所需进行清零和设置具体的位置,从而可以对8位的状态寄存器中的任意一位进行清零或设置操作。

这种指令格式被用在BCLR(清除标志)和BSET(设置标志)指令中。

(8)最后一种指令中,只需要用到寄存器中的一位,所以使用d来定义寄存器,用b来选择寄存器中的那一位。

因为在设计中通用寄存器被定义为8位的所以b只需要3位就可以选择寄存器8位中的相关位。

BLD,BST,SBRC和SBRS等指令使用这种指令格式。

3.4机器码

虽然指令集包括了92条指令,但指令集中并没有像通常认为的那样有92个不同的机器码指令。

事实上,这里仅有51条机器码。

这是因为有41条指令通用了其他指令的机器代码。

图3.2列举了这些共用机器代码的指令。

图3.2共用机器码指令列表

例如ADD指令与LSL指令共用了同一个机器代码。

LSL(逻辑左移)的操作为Rd(n+1)←Rd(n+1);可以认为是原操作数的自加,如1000_0001逻辑左移后是0000_0010,也就是1000_0001ADD1000_0001=0000_0010的运算。

ADD(不带进位的加)的操作是Rd←Rr+Rd。

所以当目的寄存器和源寄存器为同一个寄存器时ADD能够执行LSL的操作。

如图4.4.2所示。

图3.3ADD和LSI机器码

BCLR(清除标志位)、BSET(设置标志位)、BRBC(状态标志清零跳转)和BRBS(状态标志置位跳转)这4个指令能够选择状态寄存器8个标志位中的1个作为操作数。

在图4.4.1中可以查到与这些指令等同的指令。

如BCLR的指令是清楚一个标志位,与其等同的指令CLI,CLT,CLH,CLS,CLV,CLN,CLZ,CLC,这些指令分别是对状态寄存器8个标志位中的第I,T,H,S,V,N,Z,C位清零。

所以可以作为BCLR的等同指令。

BSET此类似,其等同指令只是规定精确的操作范围,这可以使得编写程序的过程更简便。

BRBC和BRBS分别有9个细分等同指令,这是因为有2条指令是对C标志位进行测试。

图3.4指令机器码

图3.4列举了指令集中的51条机器码。

另外41条等同指令用括号列出在相应指令的右侧。

通过这一节的分析可以知,只需要设计51条指令就可以完成92条指令的所有操作。

这样的设计体现了RISC微控制器有限简单指令集的特点。

第四章流水指令系统

4.1指令周期

CPU每次取出,并执行一条指令的时间叫做指令周期。

图5.1表示了一个指令周期的过程。

在设计中,指令周期被分成了2个部分,取指令和执行指令。

在取指令阶段,指令的机器码被读入指令寄存器。

接着控制单元对指令解码,确定需要执行什么指令和需要调用什么操作码。

在执行阶段,按指令要求取得操作数并执行指令,在执行完指令后写回结果。

4.1指令周期

为了更好的理解指令周期的概念,举一个具体的例子加以说明。

指令ADDR18,R20的意思是将寄存器R18中的数据与R20中的数据相加并将结果写回到寄存器R18中。

在取指令阶段(第1个时钟跳变时),ADDR18,R20的机器码被读入到指令寄存器中。

在指令被取得后,CPU就得知了下一条要执行的指令是ADD,操作数在R18和R20中。

在执行阶段(第2个时钟跳变时),R18和R20中的内容被存入操作数寄存器A(ORA)和操作数寄存器B(ORB),这两个寄存器直接与ALU相连。

ALU对ORA和ORB执行ADD操作,并将结果写回到数据总线。

在执行阶段的最后(第3个时钟跳变时),在数据总线中的结果被写入了目的寄存器R18。

这样,一个指令周期就完成了。

4.2指令的流水传递

为了体现流水指令的先进性,先做如下假设。

假设一个指令周期有两个部分组成(取指令Fetch和执行指令Execute),那么顺序的执行一组连续的指令就会有以下的形式。

Fetch1

Execute1

Fetch2

Execute2

Fetch3

Execute3

当第一条指令被取出并执行完成后,第二条指令接着被取出和执行,以此类推,假设执行一条指令需要两个时钟周期,那么执行1000条指令需要2000个时钟周期。

这就是指令的顺序传递。

但当指令流水传递时,系统的性能可以大幅度的提升。

下图展示了流水指令的传递形式。

在这种传递方式中取指令和执行指令交替并行的执行。

也就是说在执行当前指令时去读取下一条指令。

图4.2指令流水传递

当指令按流水方式传递时,在每一个时钟周期都会有一个指令被执行。

这样执行一条指令只需要一个时钟周期,按照上面的那个假设,执行1000条指令就仅仅只需要1000个时钟周期,系统性能被成倍的加快。

程序计数器(PC)的寻址过程就很好的体现了流水指令的思想。

图4.3体现了程序计数器中指令流水传递的过程。

如图,在RESET之后程序计数器被清零。

当遇到RESET之后的第一个时钟跳变(T1)时,0地址中指令被读取,与此同时程序计数器加1,指向地址1。

当遇到第二个时钟跳变时(T2),0指令被执行,与此同时1指令被读取。

此时程序计数器加1,指向地址2。

在第三个时钟跳变延时(T3),0指令的结果按要求被写回,与此同时1指令正在被执行,2指令被读入。

此时PC指向地址3。

也就时说当第N条指令被执行时,第N+1条指令被读取,程序计数器PC指向第N+2条指令的地址。

图4.3程序计数器中的流水指令

5.3流水指令的冲突与解决

当执行跳转指令时,就不一定是顺序取下条指令,而有可能要根据转移条件去新的地址取指令,从而使指令流水线发生断流。

在这种情况下指令流水线需要重新读入跳转到的指令,并且需要丢弃跳转指令之后已经从内存中读入的指令。

为了更好的理解这个思想,我们举例说明。

在图5.3.1中展示了跳转指令对流水传递方式的影响。

如图,指令20需要跳转到指令73。

在T2时刻,跳转指令20被执行,与此同时指令21依然按照流水方式被读取。

在T3时刻指令22被读入,PC指向要跳转到的指令地址(指令73),此时指令21不是被执行而是从流水线中被清洗掉。

在T4时刻,指令73被读取,此时指令22依然要从流水线中被清洗掉。

最后在T5时刻,指令73被执行。

所以可以看出一个跳转指令需要3个时钟周期来完成。

在这3个时钟周期中第1个时钟周期被用来向PC中装填新的数值,而其后的两个指令周期仅仅是处于等待状态,一直等待到新的指令被执行。

图4.4流水指令传递中的跳转

在一些指令中,比如LD(间接取数)和ST(间接存数),这些指令需要两个时钟周期来执行。

这种情况也会影响到指令流水线的运行。

图5.3.2展示了2个时钟周期指令对流水线的影响。

如图所示指令31是2个时钟周期的指令。

在T3时刻指令31被执行,与此同时读入指令32,程序计数器指(PC)向指令33。

在T4时刻,依然执行指令31,程序计数器(PC)不增加1,也不读入新的指令。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1