版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章 引言1.1研究基于RISC结构微控制器的重要性和意义不同机器的指令系统是各不相同的.从指令的操作码功能来考虑,一个较完善的指令系统,应当包括数据传送指令、算术运算指令、程序控制类指令、输入输出类指令、字符串类指令、系统控制类指令等。CISC(复杂指令系统计算机)的指令系统一般多达二三百条。但对CISC机进行的测试表明,最常使用的是一些最简单最基本的指令,仅占指令总数的20%,但在程序中出现的频率却占到80%。同时在CISC系统中往往配备有大量的寻址方式,这就使得CISC处理器存在执行效率不高,开发成本过大等缺点。上世纪80年代初,计算机的设计者们就对计算机系统使用复杂指令级这一做法提出
2、了质疑,通过对CISC计算机进行研究,发现大约有80%的指令很少被使用,而经常被使用的指令只占到了指令集的20%。根据以上的情况,设计者们越来越倾向设计带有更少指令集和结构更简单的计算机。这种类型的计算机被归类为RISC(精简指令系统)计算机。RISC处理器有三个基本的要素(1)一个有限的简单的指令集。(2)CPU配备大量的通用寄存器。(3)强调对指令流水线的优化。RISC结构的目标决不是简单的缩减指令系统,而是通过对指令集进行精简设计使处理器的结构更简单,更合理,具有更高的性能和执行效率,并降低处理器的开发成本。典型的RISC机器的特征主要有以下几点:(1).使用等长指令。(2).寻址方式少
3、且简单。(3).只有取数指令存数指令能够访问存储器。(4).指令集中的指令数目一般少于100种,指令格式少于种。(5).指令周期执行时间多为一个时钟周期。与此相反,CISC指令集具有复杂、庞大的指令系统,一般可达到100到250条。具有多种指令格式(一般大于4种)和复杂的寻址方式(一般可达到5到20种),各种指令使用频率相差很大,一些基本指令虽然只占指令总数的20%但执行频率却达到了80%,各种指令执行时间相差很大。通过对这两种指令系统的比较可以看出,RISC是在继承了CISC的成功技术,并在克服了CISC及其缺点的基础上发展起来的,所以对RISC微处理器的研究有着广泛的科研价值和应用前景。1
4、.2工作内容与工作目标设计微控制器的过程其实是一个提出问题,分析问题,解决问题的实践过程。本文中的章节都是按照这个指导思想编写的。这次毕业设计的目标是期望用硬件描述语言来编写一个基于RISC结构的微控制器。为了达到这个目的,在设计前需要明确以下几点:(1) RISC结构微控制器的特点及组成结构。(2) 微控制器的指令格式与寻址方式。(3) 微控制器执行指令的原理与具体过程。所要设计的微控制器外部特性及指令系统是以ATMEL 90S2313 芯片为蓝图。因此熟悉AT90S2313的工作原理及工作方式很有必要。工作的重点有以下四个方面:首先是对ATMEL90S2313的结构与功能进行学习,以便确定
5、所要设计的微控制器组成结构与外部特性。这些内容主要第二章中进行阐述。其次,需要对AT90S2313指令集进行分析,总结出指令格式与寻址方式,这项工作为微控制器各功能模块的设计做好准备,以上的工作成果将会在第三章指令分析中进介绍。再次,需要确定流水指令执行方式的概念,并对其具体实现方式进行研究与讨论,这是第四章的主要内容。最后根据先前工作中的积累,设计出微控制器的总体结构并编写各功能模块的软核,具体的实现过程将会在第五章中详细讨论。需要说明的是,AT90S2313芯片中的模拟部分不在这次设计的考虑中,例如可编程的看门狗定时器,片内模拟比较器等部件。第二章 RISC微控制器结构2.1 CPU的功能
6、图1.1计算机基本结构图1.1展示了一个标准计算机系统的基本结构。一个计算机系统应当包括以下设备:CPU,内存设备和I/O接口。以上所有设备之间的通信凭借系统总线来开展,具体而言是通过数据总线,地址总线和控制总线来进行各个设备之间信息传递的。CPU全称叫做中央处理单元(CENTRAL PROCESSING UNIT),它就像是计算机的大脑,对整个计算机系统的运行起着重要的作用,有如下四方面的基本功能:指令控制程序的顺序控制,称为指令控制。由于程序是一个指令序列,这些指令的相互顺序不能任意颠倒,需要严格按程序规定的顺序进行,因此,保证计算机按顺序执行程序是CPU的首要任务。操作控制一条指令功能是
7、由若干个操作信号的组合来实现的,因此,CPU管理并产生由内存取出的每条指令的操作信号,把各操作信号送往相应的部件,从而控制这些部件按指令要求进行动作。时间控制在计算机中,各种指令的操作信号均受到时间的严格定时。一条指令的整个执行过程也受到时间的严格定时。而CPU通过对操作信号的定时控制而达到使整个系统自动工作的目的。数据加工CPU可以对数据进行算术运算和逻辑运算。对数据的加工处理,是 CPU的根本任务。因为原始数据只有通过加工处理后才能对人们有用。、CPU凭借二进制编码来解读和执行指令,指令通常是关于算术运算,逻辑运算,数据处理和系统控制之类的操作。以上的操作实现了计算机的基本控制。2.2 A
8、tmel AVR AT90S2132 简介2.2.1特点描述AT90S2313 是一款基于AVR RISC 的低功耗CMOS 的8 位单片机。通过在一个时钟周期内执行一条指令,AT90S2313 可以取得接近1MIPS/MHz 的性能。微控制器的AVR 核将32 个工作寄存器和丰富的指令集联结在一起。所有的工作寄存器都与ALU(算术逻辑单元)直接相连,允许在一个时钟周期内执行的单条指令同时访问两个独立的寄存器。这种结构提高了代码效率,使AVR 得到了比普通CISC 单片机高将近10 倍的性能。AT90S2313 具有以下特点:2K字节FLASH ,128字节EEPROM ,128字节SRAM,
9、 15个通用I/0口,32个通用工作寄存器,具有比较模式的灵活的定时器/计数器,内外中断源,可编程的UART ,可编程的看门狗定时器,下载程序用的SPI 口以及两种可通过软件选择的省电模式。工作于空闲模式时CPU 将停止运行而寄存器定时器/计数器看门狗和中断系统继续工作;掉电模式时振荡器停止工作,所有功能都被禁止而寄存器内容得到保留。只有外部中断或硬件复位才可以退出以上状态。从以上特点可以看出AT90S2313功能强大易于扩展。在本章中主要学习其工作原理及工作方式,这为以后RISC微控制器的设计提供了很好的借鉴。2.2.2组成结构从图2.2中可以看出AT90S2132基本的逻辑构成部件,各部件
10、的特性如下所示:快速访问寄存器文件包含32 个8 位可单周期访问的通用寄存器,这意味着在一个时钟周期内ALU 可以完成一次如下操作读取寄存器文件中的两个操作数,执行操作,将结果存回到寄存器文件。ALU 支持两个寄存器之间、寄存器和常数之间的算术和逻辑操作,以及单寄存器的操作。除了寄存器操作模式,通常的内存访问模式也适用于寄存器文件。这是因为AT90S2313 为寄存器文件分配了32 个最低的数据空间地址($00 - $1F )允许其象普通内存地址一样访问。I/O 内存空间包括64 个地址作为CPU 外设的控制寄存器,T/C ,以及其他I/O 功能I/O 内存可以直接访问,也可以作为数据地址($
11、20 - $5F)来访问。AT90S2313采用了HARVARD 结构:程序和数据总线分离,程序内存通过两段式的管道流水进行访问,CPU 在执行一条指令的同时取下一条指令。这种预取指的概念使得指令可以在一个时钟完成。相对跳转和相对调用指令可以直接访问1K 地址空间。所有的AVR 指令都为16 位长,每个程序内存地址都包含一条16 位或32 位的指令。当执行中断和子程序调用时,返回地址存储于堆栈中,堆栈分布于通用数据SRAM 之中,所以堆栈大小只受SRAM 数量的限制。 微控制器结构的内存空间是线性的如下图2.3。图2.2 AT90S2313逻辑结构图2.3内存空间结构中断模块由I/O 空间中的
12、控制寄存器和状态寄存器中的全局中断使能位组成。每个中断都具有一个中断向量,由中断向量组成的中断向量表位于程序存储区的最前面。中断向量地址低的中断具有高的优先级。因为在对微控制器的设计中会大量的用到通用寄存器和指令寻址方式,所以将对这两个问题专门加以详细的讨论2.2.3通用寄存器文件格式图2.4通用寄存器文件格式如上图所示每个寄存器都对应一个内存地址,通用寄存器文件中有32个寄存器。寄存器R26R31 除了用作通用寄存器外还可以作为间接寻址用的地址指针。以上寄存器统称为X 、Y、Z 寄存器。如图:图2.5 X ,Y, Z寄存器结构数据寻址模式分为5 种:直接,带偏移量的间接,间接,预减的间接,后
13、加的间接,寄存器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)。其中
14、数据寻址中的直接寻址又可细分为4种方式:单寄存器直接寻址、双寄存器直接寻址、I/O直接寻址、数据直接寻址。单寄存器直接寻址双寄存器直接寻址I/O直接寻址数据直接寻址数据间接寻址带预减的数据间接寻址带后加的数据间接寻址带偏移的数据间接寻址使用LPM指令寻址常数间接程序寻址IJMP 和ICALL相对程序寻址RJMP 和RCALL第三章 指令集分析3.1指令集概述CPU要执行某种操作的命令叫做指令。在本章中主要介绍的是机器指令,每一条机器指令可以完成一个独立的运算,如算术运算、逻辑运算等。多条机器指令可以组成程序运行。在CPU的指令集中包括了该CPU可执行的所有指令,因为指令集决定了微控制器中数据通
15、路和所有功能模块的结构,所以本章中对指令集的学习是及其必要的。如下图所示:指令集Rd目的寄存器 Rr源寄存器K常数 k常数表示的地址 b寄存器文件或I/O寄存器的位 s状态寄存器中的位 Z、Y、XR31到R26寄存器AI/O地址 q偏移量(6位)14 图3.1指令集列表图3.1中罗列微控制器AT90S2313的指令集。虽然在设计的开始就说明了使用AT90S2313指令集作为设计的原型,但因为不考虑微控制器的模拟部分,以及设计指令集中所有指令过于复杂等多方面原因,这里一共对92条指令进行了分析。这些指令被分成了4种类别:算术和逻辑运算指令ADD、ADC、SUB SUBI 、SBC、 SBCI、
16、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、 M
17、OV 、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。以上指令集的设计是基于ATMEL AVR AT90S2313微控制器的指令集,从而减少开发时间,提高设计的可靠性。RISC微控制器的特点之一就是大部分指令可以在一个时钟周期内执行完成,但是跳转指令LD(间接取数)ST(间接存数)和少数其他的指令是在多个
18、时钟周期内完成的。各指令执行所需的时钟周期可以在图4.1时钟数一项中查出。3.2寻址方式RISC微控制器被设计了7种寻址方式,用来满足上一节指令集的执行需要。Rd和Rr分别代表目的寄存器和源寄存器。寄存器即可以存放数据又可以存放指令。因此当操作数或某条指令存放在存储单元时,其存储单元的编号就是该操作数或指令在存储器中的地址。1.单寄存器直接寻址寄存器直接寻址是一种基本的寻址方法,其特点是操作数直接存放在目的寄存器(Rd)中。2.双寄存器直接寻址在这种寻址方式中操作数存放在Rd和Rr中,并将运算后的结果保存在Rd中。3.输入输出直接寻址第一个操作数包含在I/O寄存器中,地址由指令中的6位代码组成
19、。第二个操作数保存在Rd或Rr中。并通过IN和OUT指令对I/O寄存器进行读出或是写入操作。4.数据间接寻址操作数的地址包含在Z指针中(R30寄存器)的寻址方式。在寻址时通过Z指针中的地址去数据存储器中找操作数。5.带预减的数据间接寻址这种寻址方式是在执行前先将Z指针减1。此时在Z指针中的操作数地址为原地址减1。6.带后加的数据间接寻址在执行后对Z指针加1。此时Z指针中的操作数地址为原地址加15、6这两种寻址方式使得寄存器的内容规律变化而不改变指令本身,从而是有效地址规律变化。7.带偏移的数据间接寻址在这种寻址方式中程序计数器(PC)中的地址为PC+偏移量。偏移量在指令中被定义。无条件跳转指令
20、(RJMP相对跳转,RCALL相对调用)用此种寻址方式可以从任何位置寻址所有的内存单元。虽然这里有7种寻址方式,但是直接寄存器寻址是被应用的最多的寻址方式。而其它的寻址方式只有在访问I/O设备,访问SRAM和执行跳转指令时才被用到。3.3指令格式在前几章提到,RISC指令有着固定的长度且易于解码。按照这个设计原则微控制器的所有指令被设计为固定的16位字长,指令格式比较简单且易于解码。通过对指令集的分析,一共需要建立9种指令格式。(1)指令需要用到两个寄存器,d 被用来选择目的寄存器,r被用来选择源寄存器。每个寄存器用5位来表示,所以一共可以寻址32个寄存器。ADD,SUB和AND等指令就是采用
21、这种指令格式。(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位被用来
22、选择状态寄存器中的那一位被用来对跳转进行测试。(the s-bits addressed which bit in the status register is to be tested for the branch)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位的
23、字长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条指
24、令,但指令集中并没有像通常认为的那样有92个不同的机器码指令。事实上,这里仅有51条机器码。这是因为有41条指令通用了其他指令的机器代码。图3.2列举了这些共用机器代码的指令。图3 .2共用机器码指令列表例如ADD指令与LSL指令共用了同一个机器代码。LSL(逻辑左移)的操作为Rd(n+1) Rd(n+1);可以认为是原操作数的自加,如1000_0001逻辑左移后是0000_0010,也就是1000_0001 ADD 1000_0001 =0000_0010的运算。ADD(不带进位的加)的操作是RdRr +Rd。所以当目的寄存器和源寄存器为同一个寄存器时ADD能够执行LSL的操作。如图4.4.
25、2所示。图3.3 ADD 和 LSI 机器码BCLR(清除标志位)、BSET(设置标志位)、BRBC(状态标志清零跳转)和BRBS(状态标志置位跳转)这4个指令能够选择状态寄存器8个标志位中的1个作为操作数。在图4.4.1中可以查到与这些指令等同的指令。如BCLR的指令是清楚一个标志位,与其等同的指令CLI,CLT,CLH,CLS,CLV,CLN,CLZ,20 CLC,这些指令分别是对状态寄存器8个标志位中的第I,T,H,S,V,N,Z,C位清零。所以可以作为BCLR的等同指令。BSET此类似,其等同指令只是规定精确的操作范围,这可以使得编写程序的过程更简便。BRBC和BRBS分别有9个细分等
26、同指令,这是因为有2条指令是对C标志位进行测试。图3.4指令机器码图3.4列举了指令集中的51条机器码。另外41条等同指令用括号列出在相应指令的右侧。通过这一节的分析可以知,只需要设计51条指令就可以完成92条指令的所有操作。这样的设计体现了RISC微控制器有限简单指令集的特点。第四章 流水指令系统4.1指令周期CPU每次取出,并执行一条指令的时间叫做指令周期。图5.1表示了一个指令周期的过程。在设计中,指令周期被分成了2个部分,取指令和执行指令。在取指令阶段,指令的机器码被读入指令寄存器。接着控制单元对指令解码,确定需要执行什么指令和需要调用什么操作码。在执行阶段,按指令要求取得操作数并执行
27、指令,在执行完指令后写回结果。4.1 指令周期为了更好的理解指令周期的概念,举一个具体的例子加以说明。指令 ADD R18,R20 的意思是将寄存器R18中的数据与R20中的数据相加并将结果写回到寄存器R18中。在取指令阶段(第1个时钟跳变时),ADD R18,R20的机器码被读入到指令寄存器中。在指令被取得后,CPU就得知了下一条要执行的指令是ADD,操作数在R18和R20中。在执行阶段(第2个时钟跳变时),R18和R20中的内容被存入操作数寄存器A(ORA)和操作数寄存器B(ORB),这两个寄存器直接与ALU相连。ALU对ORA和ORB执行ADD操作,并将结果写回到数据总线。在执行阶段的最
28、后(第3个时钟跳变时),在数据总线中的结果被写入了目的寄存器R18。这样,一个指令周期就完成了。4.2 指令的流水传递为了体现流水指令的先进性,先做如下假设。假设一个指令周期有两个部分组成(取指令Fetch和执行指令Execute),那么顺序的执行一组连续的指令就会有以下的形式。Fetch1Execute1Fetch2Execute2Fetch3Execute3当第一条指令被取出并执行完成后,第二条指令接着被取出和执行,以此类推,假设执行一条指令需要两个时钟周期,那么执行1000条指令需要2000个时钟周期。这就是指令的顺序传递。但当指令流水传递时,系统的性能可以大幅度的提升。下图展示了流水指
29、令的传递形式。在这种传递方式中取指令和执行指令交替并行的执行。也就是说在执行当前指令时去读取下一条指令。图4.2指令流水传递当指令按流水方式传递时,在每一个时钟周期都会有一个指令被执行。这样执行一条指令只需要一个时钟周期,按照上面的那个假设,执行1000条指令就仅仅只需要1000个时钟周期,系统性能被成倍的加快。程序计数器(PC)的寻址过程就很好的体现了流水指令的思想。图4.3体现了程序计数器中指令流水传递的过程。如图,在RESET之后程序计数器被清零。当遇到RESET之后的第一个时钟跳变(T1)时,0地址中指令被读取,与此同时程序计数器加1,指向地址1。当遇到第二个时钟跳变时(T2),0指令
30、被执行,与此同时1指令被读取。此时程序计数器加1,指向地址2。在第三个时钟跳变延时(T3),0指令的结果按要求被写回,与此同时1指令正在被执行,2指令被读入。此时PC指向地址3。也就时说当第N条指令被执行时,第N+1条指令被读取,程序计数器PC指向第N+2条指令的地址。图4.3 程序计数器中的流水指令5.3流水指令的冲突与解决当执行跳转指令时,就不一定是顺序取下条指令,而有可能要根据转移条件去新的地址取指令,从而使指令流水线发生断流。在这种情况下指令流水线需要重新读入跳转到的指令,并且需要丢弃跳转指令之后已经从内存中读入的指令。为了更好的理解这个思想,我们举例说明。在图5.3.1中展示了跳转指
31、令对流水传递方式的影响。如图,指令20需要跳转到指令73。在T2时刻,跳转指令20被执行,与此同时指令21依然按照流水方式被读取。在T3时刻指令22被读入,PC指向要跳转到的指令地址(指令73),此时指令21不是被执行而是从流水线中被清洗掉。在T4时刻,指令73被读取,此时指令22依然要从流水线中被清洗掉。最后在T5时刻,指令73被执行。所以可以看出一个跳转指令需要3个时钟周期来完成。在这3个时钟周期中第1个时钟周期被用来向PC中装填新的数值,而其后的两个指令周期仅仅是处于等待状态,一直等待到新的指令被执行。图4.4流水指令传递中的跳转在一些指令中,比如LD(间接取数)和ST(间接存数),这些
32、指令需要两24 个时钟周期来执行。这种情况也会影响到指令流水线的运行。图5.3.2展示了2个时钟周期指令对流水线的影响。如图所示指令31是2个时钟周期的指令。在T3时刻指令31被执行,与此同时读入指令32,程序计数器指(PC)向指令33。在T4时刻,依然执行指令31,程序计数器(PC)不增加1,也不读入新的指令。一直到T5时刻指令32才被执行,与此同时指令33被读入,PC指向指令34的地址。在这种情况下流水线需要保持一个时钟周期。图4.5流水指令传递中的2时钟周期指令有一种情况,在一个程序中,如果必须等前一条指令执行完毕后的结果,才能执行后一条指令,那么这种数据相关指令的执行需要特别加以讨论。
33、有一段程序:LDI R18, $10 ; R18 = $10LDI R18, $20 ; R18 = $20INC R18 ; R18 = R18 + 1 = $21上面这段程序所描述的是,首先是将地址10送入R18寄存器中,然后又将地址20送入R18寄存器中。最后使地址R18自加1使地址20变为地址21。但实际上当执行完上述程序后,最终的结果是11而不是21。之所以出现这种现象的原因是指令流水传递方式造成的。在这种方式中,第N+1条指令的操作数在第N条指令执行的初期被存入操作数寄存器,而第N条指令执行的结果将会在第N条指令执行的末期写回到目的寄存器。所以在上面这个程序中, 指令(LDI R1
34、8 $20)执行的初期,当其执行结果20还未写入到目的寄存器R18时,下一条指令(INC R18)已经将原来存入R18中的操作数10读入了操作数寄存器。因此,指令(INC R18)只是从目的寄存器中读入了指令(LDI R18 $10)的执行结果10,而不是指令(LDI R18 ,R20)的结果20。为了解决这个问题,需要用到一种叫做定向传送的技术。如果上一条指令的目的寄存器被下一条指令当作源寄存器使用时,ALU中的计算结果将被直接送入到操作数寄存器中。当然这需要特别的控制逻辑用于冲突检测和数据的定向传送。第五章 微控制器结构设计5.1微控制器结构设计5.1.1引脚设计图5.1微控制器引脚结构图
35、5.1是设计的微控制器的引脚结构。如图所示,微控制器有两个输入引脚和3个双向I/O端口。每个I/O端口由8个单独的I/O引脚组成。所以3个I/O端口一共组成了24个I/O引脚。CLOCK信号能够直接驱动微控制器。RESET信号用于复位,当RESET信号标记为可用时,微控制器被初始化,这个过程无需CLOCK信号驱动。端口B,端口C和端口D都为8位,每一位都可以被设置为输入或是输出。引脚D7可以被用作外部中断或外部时钟中断。引脚的具体实现方法和结构详细说明将会在端口模块中进行讨论。5.1.2微控制器逻辑设计图5.2顶层模块设计26 图5.2是微控制器顶层模块设计框图,图中简化了总线结构,用每个框图
36、代表了一个微控制器的功能模块。在顶层模块中包括了11个功能模块,这些功能模块被分成了3个大的部分取指令部分,执行指令部分,和I/O端口。其中的一些模块,像是指令寄存器和状态寄存器设计思路比较清晰,且易于实现。但是有些模块,像是ALU和控制单元,在这些模块中包含了大量的控制信号,需要考虑的问题十分烦杂,对这些模块的设计耗费了许多的时间,一度陷入了僵局。另外各功能模块间的数据流向和总线结构也需要认真考虑,这也是微控制器设计的一大难点。总线为各功能模块间提供了连接。在这里基本上有两种总线结构直接总线连接和通用总线连接。直接总线结构是指两各功能模块直接相连,它被用于特定的模块连接。设计中有许多的直接总
37、线连接,例如:程序计数器(program couner)与程序存储器(program rom)之间的连接;程序存储器和指令寄存器之间的连接;寄存器文件和ALU之间的连接。直接总线连接的特点是不需要控制信号的驱动。通用总线被多个功能模块所共享。在设计中数据总线被设计成唯一的通用总线。数据总线被通用目的寄存器,ALU,状态寄存器,SRAM和所有的I/O端口所共享。寄存器文件只能够从数据总线上接收数据,但是其他所有的功能模块都可以用数据总线接收或是发送数据。在微控制器中,控制信号被用来控制正确的数据流向,从而保证在每一个时刻数据总线只有唯一的一个数据来源。状态总线被用来控制通用数据总线,它保证了正确
38、的数据源连接到数据总线上,并将其他的数据源置为高电阻使其与总线系统断开。当ALU作为数据源时,如果没有控制逻辑来为数据的目的地产生使能信号,使数据可以被正确的接收,那么数据总线将被ALU产生的数据所淹没,其余功能模块将无法使用数据总线。下面我们将对整个微控制器系统进行概括的介绍。整个系统能够被分为3个部分,取指令单元、执行指令单元和I/O单元。取指令单元被用于取下一条指令,执行指令单元被用于执行当前指令,I/O单元提供了微控制器与外界的连接。取指令单元和执行指令单元组成了微控制器的中央处理单元。取指令单元的第一个功能模块是程序计数器(PC)。在程序计数器中包含了下一条要执行指令的地址,程序计数
39、器指向程序存储器(program ROM),通过其中的地址在程序存储器中查找相应的指令。接着程序存储器中的指令被送入到指令寄存器当中。控制单元读取指令寄存器中的内容并对指令解码,接着控制单元标记相应的控制信号用于指令的执行。以上所提及的功能模块都是通过直接总线方式连接的。执行指令单元被用来对大多数的指令进行执行。通常情况下,为了执行一条指令2个操作数被从寄存器文件中读入到ALU。接着ALU对操作数进行运算并将运算结果送入到数据总线中。然后数据总线中的内容(运算结果)被回存到寄存器文件中。同时ALU也产生状态寄存器的标志位并将其直接送入状态寄存器中。完成所有这些操作过程需要1个时钟周期。微控制器
40、微LD(间接取数)和ST(间接存数)指令设置了一个访问内存的通道,在微控制器中对RAM的直接寻址是不允许的,只有通过Z指针(寄存器R30)对RAM进行间接寻址。对RAM寻址时可以用间接寻址,带预减的间接寻址和带后加的间接寻址等方式,这些内容在第四章指令介绍中进行过详细讨论。需要强调的是,在RAM和寄存器文件之间,读取指令只能够对数据进行传27 送,在执行指令时,Z指针中包含了RAM的地址,一个读取操作通过数据总线将RAM中的数据送入通用目的寄存器,一个存储操作将通用目的寄存器中的数据送入ALU,接着ALU将数据送入数据总线并存入RAM中。以上就是间接存取操作的过程,它们的具体功能实现,将会在功
41、能模块设计中详细讨论。为了实现取指令和执行指令,这两个过程的流水操作,内存单元采用了程序和数据分开存放的结构,在图6.2.1中可以看到,程序被存入了程序存储器ROM,而数据被存放在数据存储器RAM。这种结构的先进性在于容易实现下一条指令的预先读取,从而使指令的流水传递成为可能。在设计中RAM的初始值被设置为0。I/O单元中的功能模块都有大量的控制寄存器。在这些模块之间,数据通过通用数据总线被接收或发送。图6.2.2罗列了所有的I/O控制寄存器和它们相应的地址。IN指令和OUT指令的实质就是在这些控制寄存器和通用目的寄存器之间传送数据。下图中灰色部分的控制寄存器($00-$1F)能够直接被指令S
42、BI和CBI(对I/O相应的位设置/清零)按位操作bit-accessible。指令SBIS和SBIC(I/O寄存器置位/清零既条)同样也可以直接检测这些寄存器中的每一个信号位。在设计中,列表中灰色部分的控制寄存器全部被设计成位了I/O端口控制寄存器。需要强调一点的是,PINB,PINC和PIND并不是真正的寄存器,它们只有在读入操作数时被调用,它们可以被理解为读入物理信号的外部引脚。图5.3 I/O单元地址空间5.1.3寄存器间的数据传送微控制器的设计中包括了许多寄存器,有指令寄存器(IR),指令备份寄存器(IBR),程序计数器(PC),通用目的寄存器(GPR),内存地址寄存器(MAR),所
43、有的I/O控制寄存器等,则这里程序计数器PC被当成了一个特殊的寄存器。28 其中大部分的寄存器可以在顶层模块框图中找到,而另一些寄存器则被设计在了相应的功能模块之中。整个系统的工作就是使数据在这些寄存器之间进行传递,一些数据不需要预先处理就可以进行传递,而另一些数据在处理后才能传入下一个寄存器,也就是被这些寄存器间的组合逻辑进行处理。所以说,数据怎样被传送;数据在传送前怎样被预先处理;以及不同数据在寄存器中的含义;以上的问题决定了设计的芯片是否是一个基于RISC结构的微控制器。也就是说,一系列的寄存器间传送形成了微控制器的功能。图5.4形象的表达了寄存器间传送这个概念,可以认为从图中的一个寄存
44、器传送数据到另一个寄存器,期间经过了许多次组合逻辑处理。图5.4寄存器间传送图5.5寄存器列表现在对寄存器传送这个概念举例说明。例如,状态寄存器能够直接将其内容送入通用目的寄存器,而不需要对其内容进行预先处理,这就是寄存器直接传送而无需组合逻辑参与的形式。然而,当Z指针中的数值需要预先减1再送入内存地址寄存器(MAR)时,在这种情况下的组合逻辑就是减法器。当对两个通用寄存器进行AND操作时,在将结果写回到目的寄存器前,将会有两个寄存器通过组合逻辑的处理。在设计中存储器(程序存储器和数据存储器)可以被看作时一种组合逻辑,程序计数器(PC)通过程序存储器的处理找到指令并将数据传递到指令寄存器中。指
45、令寄存器是通过PC的寻址从程序存储器中读入指令。综上所述,微控制器设计的实质就是就是设计出所有的相关逻辑单元并用寄存器将其相互连接起来。以上这些叫做系统的数据通路。控制信号被用来决定寄存器间数据传递的发生。控制信号由控制单元来产生,控制单元与数据通路组成了微控制器。了解系统中的寄存器是十分有必要的,下图罗列了所有的功能模块和与其有关的寄存器。信号CLK被作为所有寄存器的时钟信号,CLRN被作为所有寄存器的重置信号,当CLRN被标记为低电平时,所有的寄存器将被清零。5.2数据通路设计5.2.1 功能模块总揽微控制芯片包括两个部分,一部分是数据通路,另一部分是控制单元。 本章主要讨论数据通路中各功
46、能模块的设计思路和实现方法,下一章将重点对控制单元的设计加以研究。5.6图展示了微控制芯片中除了控制单元以外的所有功能模块,下面各节将会按照5.6图所罗列的顺序对每个模块的进行详细讨论。图5.6微控制器中各模块5.2.2 程序记数器(Program Counter).图5.7程序计数器结构图图5.7表示了程序计数器的组成原理。为了保证程序能够连续的执行下去,微控制器需要不断的通过程序记数器(PC)来确定下一条指令的地址。在程序执行时,需要将程序中存储第一条指令内存单元地址送入PC(具体实现时是存放在程序计数器中的一个9位地址寄存器),此时PC的内容是程序存储器的地址,在该地址中对应存放的是程序
47、的第一条指令。程序控制器的任务就是要保证指向下一条执行指令的地址。因为大多数指令都是按照顺序来执行的,所以在程序计数器中,地址改变的过程通常只是在每个时钟跳变时对PC加1。但是当遇到转移指令时,下一个需要被执行的指令将由当前的转移指令来决定,这就需要程序计数器不仅能够顺序的选取指令,还要能够跳跃的选取指令。为了能够完成上述功能,在程序计数器中设置了堆栈STACK来保存中断请求和跳转指令所返回的地址,设置了备用寄存器(PCB),用来保存PC中每次最新读取到的地址,PCB被用于带偏移量的寻址。在以下的三种情况下程序计数器中的地址不是按顺序取得,而是通过读入一个新的数值得到。首先,当遇到带条件或是不
48、带条件的跳转指令时;其次,当遇到中断请求时;最后,当遇到子程序返回或是中断服务返回时。在第五章对指令的流水传递讨论中,我们得知,当CPU正在执行第N条指令时,程序计数器已经指向了第N+2条指令的地址。与此同时指令寄存器读取第N1条指令。为了描述方便,可以认为PC就是程序计数器中指令的地址(在对程序计数器功能模块的编写中,我设置了一个9位的信号量PC,事实上程序计数器读入的指令地址,都是暂存在这个PC信号中)。于是PC+1就是指下一个要执行指令的地址。假设PC中暂存的是第N+2条指令的地址,程序计数器中的另一个寄存器程序地址备份寄存器(PCB)便存入N+1指令的地址。所以当有跳转指令时,PC的新
49、地址就是PCB加上跳转偏移量(offset);而无跳转指令时,PC的新地址是PC+1。以上的设计实现了,程序寄存器的顺序寻址与跳31 转寻址。当有中断请求时,程序计数器需要读入中断向量的地址。这里一共设计了3个中断向量,按照其中断优先级被分别存放在程序存储器中的地址$000到$002。如图5.8。使用RJMP(相对跳转指令)可以转入中断服务程序(ISR),这些中断服务程序的入口地址存放在中断向量表中。所以当响应一个中断请求时,PC首先读入中断向量的地址,然后CPU执行相应中断向量地址中的指令,此时就转入了中断服务程序。图5.8 中断向量表堆栈被用于存储子程序调用返回的地址和中断请求。程序计数器
50、中设计了4层的后进先出的堆栈(STACK0到STACK3)结构。当CPU响应一个子程序调用或是中断请求时,返回地址被压入STACK0,而原先堆栈中的内容被压入到更深一层的堆栈中去。例如,STACK0的内容被压入STACK1,STACK1被压入STACK2以此类推。这个过程被叫做压栈操作。当子程序调用或是中断请求返回时,PC从STACK0中读出地址,而其它栈中的地址相应的向上传递一层。例如,STACK3中的数值送入到STACK2中,STACK2中的数值送入到STACK1中,以此类推。这个过程叫做出栈操作。当子程序调用或是中断请求多于4层时,最早被压入堆栈的返回地址将会丢失。所以需要规定中断嵌套的
51、深度为4层。子程序调用的返回地址时PCB,但是中断请求的返回地址却是PCB-1。为了更好的解释这个现象,举例一个小程序帮助说明。当在执行 $21 rcall make 指令时,PCB中的数值变为$22并将其压入堆栈中。PC读入数值$50,并且CPU开始执行名为MAKE的子程序。当在MAKE子程序中执行到RET指令时,堆栈中的内容$22被读入到PC中,这正是 $21 rcall make 指令下一条指令的地址。现在我们假设,当在执行$21指令时,CPU响应了超时中断请求。此时存入32 PCB中的数值依然时$22,并被压入了堆栈中。在超时中断被响应后,PC读入中断向量地址($02),CPU开始执行
52、 $02 RJMP TIMER 指令,PC读入$80,CPU开始执行名为TIMER的子程序。当在TIMER子程序中遇到RETI指令时,返回地址从堆栈中弹出到PC。也就是先前压入堆栈中PCB的值$22。那么下一条要执行的指令就是 $22 DEC R26,这是一个错误的顺序,$21 RCALL MAKE指令因为刚才的中断而还没有被执行到。所以由以上讨论得出了一个结论子程序调用返回的地址是PCB,而中断请求返回地址是PCB-1。图5.9程序计数器模块图5.9展示了在程序计数器模块中使用的信号量。PC,PCB,和4个堆栈(STACK0到STACK3)是9位字长的。所以程序计数器可以对512个单元进行寻
53、址。程序计数器于程序存储器直接相连。OFFSET信号从控制单元中接收跳转指令的偏移地址。信号EN一个使能信号,作用于所有的寄存器,像是PC,PCB,和STACK,只有当EN信号被标记为可用时(当EN=1时),程序计数器的所有操作才开始被执行。这个信号确保了2个时钟周期指令的流水执行。ADDOFFSET信号被用于跳转标记,当它被标记为可用时,PC就读入PCB+offset,从而达到了程序计数器跳转寻址的目的。VEC2信号是外部中断请求标记,当VEC2被标记为可用时,PC读入中断向量2($01)与此类似,VEC4信号被用于标记超时中断,当VEC2标记为可用时PC读入中断向量4($02)。PUSH信
54、号被用于人栈操作,PULL信号被用于出栈操作,以上几个信号的使用完成了程序计数器的中断请求和中断地址返回的功能。当以上信号都没有被标记为可用时,PC就执行自加1操作,也就是程序计数器的顺序寻址。5.2.3程序存储器图5.10 程序存储器结构33 程序存储器(Program ROM)被用来储存微控制器的程序。一个程序由许多条指令组成,被用来完成一个特别的任务。图5.10展示了程序存储器的结构,因为所有的指令被设置成了固定的16位,所以ROM也被设计成16位字长,从而使得每条指令都可以在单个时钟周期内被读入到指令寄存器中。程序存储器的大小被定义为512个单元,这就意味着该存储器可以储存512条指令
55、。为了能对512个单元寻址,程序计数器需要用9位字长来定义程序存储器的地址。图5.11程序存储器模块图5.11展示了程序存储器模块使用的信号量。程序计数器通过直接总线与ROM相连,并用9位字长的地址来对ROM进行寻址,当找到相应的地址时,地址中的指令被送入指令寄存器。与程序计数器不同的是,程序存储器不需要时钟信号的驱动。如图7.3.2 PC信号被用于存放程序存储器的地址。INSTRUCTION信号有16位字长,用于存放寻址后地址中的相应指令,以便下一步向指令寄存器传送。5.2.4指令寄存器指令寄存器(IR)被用来存放指令,它通过16位的直接总线与程序存储器相连,并从中读取指令。图7.4.1展示
56、了指令寄存器模块中的信号量。只有当EN信号标记为可用时,指令寄存器才会将新的指令从程序存储器中读入,接着指令被送入控制单元去解码,定义成立即数的位(指令中03,811位)被送去ALU参与运算。定义为目的寄存器(47位)和源寄存器(03位)的位被送入通用目的寄存器进行寻址。对指令格式的详细讨论可以查阅第四章。需要强调一点的是,在IR中暂存的指令并不是当前正在被执行的指令而是下一条需要执行的指令。这个设计思想保证了在当前指令执行时,控制单元对下一条执行指令解码的要求。从而实现了前几章中提到的流水指令结构执行当前指令的同时读取下一条指令。图5.12指令寄存器模块图5.12展示了指令寄存器模块使用的信
57、号。在指令寄存器模块中只有EN信号被标记位可用时,IR信号才能从程序存储器中读入数据。IMM_VALUE信号用于向ALU传送立即数,RD,RR信号分别用于存放目的寄存器和源寄存器的地址。5.2.5通用目的寄存器RISC 结构的微处理器一般都有大量的通用目的寄存器.在这次设计包括了32个8位的通用寄存器,使用5位字长地址指令。查表Z指针需要调用R30寄存器。下图展示了通用寄存器(R16到R31)的结构。图5.13通用寄存器结构通用寄存器中目的寄存器和源寄存器与ALU保持连通。通用寄存器可以直接被指令寄存器寻址。数据总线直接与通用寄存器相连,当WR_REG信号标记可用时,数据可以通过数据总线写入到目的寄存器中。通用寄存器和RAM通过地址总线相连,R30寄存器不仅能够被用于通用寄存器,也可以被用于Z指针对RAM寻址。RAM的起始地址是$60,但是目标设备需要RAM的起始地址是$0,所以,地址总线中传递的数据是Z指针中的数值(地址)减去$60。当进行带预减的间接寻址时,需要将Z指针中的数值减$61再送入数据总线。下图罗列了通用寄存器模块使用的信号:图5.14通
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Oracle OCA 12c 认证考试真题及详细答案解析
- MDS输血依赖远期并发症监测共识
- 2026年低压电气考试试题及答案
- 培训机构学员接送操作规程
- NPET全国中小学英语水平测试模拟试题(含详细答案解析)
- 货物装卸作业安全操作规程
- 湖南省衡阳市一中教育集团2025-2026学年九年级上学期语文期中试卷(含答案)
- NIT计算机应用基础考试试题及详细参考答案
- 皮革涂饰工序安全操作规程
- 2027年注册验船师A级《船舶检验专业能力》模拟试卷一
- 学礼仪懂尊重做文明小学生-小学主题班会课件
- 2025年医院普外科岗招聘笔试题目(附答案)
- 第四单元跨学科实践活动3:水质检测及净水器的制作课件2025-2026学年九年级化学人教版上册
- (广东二模)广东省2026年4月高三高考模拟测试(二)数学试卷(含标准答案及解析)
- 山东省潍坊广文中学2025-2026学年九年级上学期期中考试语文试卷(解析版)
- 2025 AI语音合成市场调研报告
- 光伏设备安全培训课件
- 卷绕机培训课件
- 工程联系单管理办法(含附件)
- 四诊闻诊课件
- 教育管理基础数据元素和代码规范 第3部分:资产
评论
0/150
提交评论