一种嵌入式MPU指令译码器设计
2001年2月第19卷第1期西北工业大学学报
JournalofNorthwesternPolytechnicalUniversityFeb.2001Vol.19No.1
一种嵌入式MPU指令译码器设计
刘诗斌,高德远,樊晓桠,李树国
(西北工业大学航空微电子中心,陕西西安 710072)
α
摘 要:针对与Intel系列微处理器兼容的嵌入式微处理器单元(MPU),讨论其译码器的设计问
题。通过分析比较两种可行的读入方案,择优选用了在状态机控制下的指令读入机制,并设计了具有8个状态的状态机来控制指令读入,实现了复杂指令简单化的目的。采用表格技术将译码器与微程序的设计分离。译码器位于MPU指令流水线的中部,其输出队列的长度影响MPU的性能,文中近似采用M M 1 K排队系统的分析方法,确定了输出队列长度。译码器与MPU的其它部分联调完成后,使用具有实际意义的应用程序进行测试的结果表明,该译码器的设计是合理有效的。关 键 词:微处理器,指令译码器,队列
中图分类号:TP303 文献标识码:A 文章编号:100022758(2001)0120001205 在计算机高速发展的今天,拥有自主版权的计算机芯片,对一个国家来说是至关重要的。近几年,西北工业大学在嵌入式微处理器的研究和设计方面开展了大量工作,已经完成设计的有8位、16位和32位等。16位嵌入式微处理器单元(MPU)与Intel80X86兼容,其指令系统非常复杂。为了方便设计与
列中的指令逐条译码,得到71位的内部形式。该译
码结果存入译码器输出端的队列中,供内部使用。如果遇到转移类指令,将两个队列同时清空,重新预取指令
。
应用,MPU的设计力求结构规整接口简单。指令译码器不仅要完成指令译码功能,而且要实现从复杂指令系统到内部规整结构间的过渡。为了保证MPU的整体性能,指令译码器设计必须考虑指令
的读入、译码结果的输出以及译码器设计与微程序设计的分离等问题。本文通过分析解决这些问题,设计出满足要求的指令译码器。
图1 嵌入式MPU的结构
1 嵌入式MPU的结构
嵌入式MPU(microprocessorunit)的结构如图1所示,它由接口部件、指令译码器、微程序控制器、中断检测电路、运算器、保护测试电路和地址部件组成。对指令的处理采用指令流水线方式[1],指令译码器位于流水线的中段。接口部件负责指令预取,取进来的指令存入指令预取队列;译码器对预取队
2 指令的结构与分类
图1所示的嵌入式MPU属于复杂指令集微处理器,其指令结构比较复杂。一条指令可由若干个字节组成,最短的指令只有1个字节,最长的指令有6个字节,加上前缀指令,最长可以达到10个字节[2]。
在没有前缀的情况下,根据操作码字节的长短,把指令分为两大类:短操作码指令和长操作码指令。短操作码指令的首字节是操作码,后面各字节的内
α
收稿日期:1999-09-05基金项目:“九五”预研课题(8.1.3.5)与航空科学基金(97F53133)资助
作者简介:刘诗斌(1960-),西北工业大学副教授,主要从事计算机应用、微电子和传感器的研究。
・2・ 西北工业大学学报 第19卷
容有8种情况(如图2所示);长操作码指令的操作码有两个字节,首字节只有一种情况(编码为0FH),称为长操作码;第二字节具有与短操作码指令首字节相同的作用,也称为操作码。如果去掉首字节,长操作码指令的其它各字节的内容有3种情况,是短操作码指令8种情况的一个子集。个别指令带有扩展操作码,占据寻址方式字节中的3位,为了不破坏规律性,仍把它看成是寻址方式字节。按此分类方法,全部指令的结构如图2所示,图中disp表示偏移量;data表示立即数;后面跟L时表示低位字节;后跟H时表示高位字节;虚线方框表示字节有可能不出现
。
在设计中考虑了两种读入方案:一种是先将指令读进来填满输入端的6个寄存器,再进行位置调整和译码;另一种是每次从预取队列读一个字节,同时对该字节做部分译码,根据译码结果确定后面的操作,读到指令的最后一个字节时,立即开始译码。前一种方案的读入电路相对简单,但后续电路复杂,甚至将影响整机性能。由于指令的长度不同,装入寄存器的6个字节可能是一条指令,也可能是多条指令。如果是多条指令,前一条指令译码完成后,后面的字节必须移位保证与译码电路输入端对齐。串行移位时间太长,并行的斜位传送占用硬件太多。遇到转移指令时,后面的字节是没有用的,但也占用译码时间。因为要受到指令预取的速度的限制,不可能通过提高读入速度来弥补这种不足。
后一种方案读入电路相对复杂,译码电路相对简单,且不存在前一种方案的问题。为了使电路设计方便,结构清晰,设计了如图3所示8状态的状态机,用于产生读入操作的全部控制信号。状态机中的6个状态是控制指令读入的,另外两个状态是译码和等待状态,用于留出一定的译码时间。读首字节状态从预取队列读入的字节是一条新指令的首字节,它有可能是前缀、长操作码和操作码三者之一,处理较为复杂。在读首字节状态,根据读入译码器的输出按如下算法处理:
图2 指令结构
ifprefixinstructionthen
setprefixflagandreadnextbyte
前缀指令有3种[3]:总线锁定前缀、段超越前缀和重复执行前缀。虽然每种前缀后面只能跟特定的指令,但是对指令译码的影响都不大。前缀只是指明指令执行时是否锁定总线、使用哪一个段、用何种方式重复等内容。
由图2和对前缀指令的分析可知,译码器从指令预取队列读入字节的内容分为6种:前缀、长操作码、操作码、寻址方式、偏移量和立即数。
elsiflongopercodeinstructionthen
setlongoperflagandreadnextbyte
elsifshortopercodeinstructionthen ifsinglebyteinstructionthen stopreadandbegindecode else
readnextbyte endifend
if
3 指令读入电路与译码状态机
指令读入电路从指令预取队列读入指令,并转换成译码电路输入端要求的形式。根据对指令结构的分析,译码器的输入端要有6个字节的并行输出的寄存器来存放操作码、寻址方式、偏移量和立即数,并且要有前缀指令和长操作码的标志。该电路的关键是要正确、有效地将指令装入这6个寄存器,并产生相应的标志。
图3 译码状态机
第1期 刘诗斌等:一种嵌入式MPU指令译码器设计・3・
经上述处理后,根据图2的指令结构可确定出下一状态。如果指令长度大于1,再对读入的第二字节译码,可以确定本条指令的长度以及后续字节的存放位置。因为有读入译码器,状态机知道读入的字节应装入哪个寄存器,也知道哪个字节是指令的尾字节。既不会出现与译码电路输入端对不齐的情况,也不会读入多余的字节。
通过比较两个方案的优缺点,作者采用了后一种方案。此方案中,状态机的每个读入状态占用时间是0.5个处理器周期,译码和等待状态合起来占用1个处理器周期。如果一条指令的长度为N,则译码
5 译码器输出队列
在译码器的输出端设置了一个队列。队列长短
影响微处理器的性能和电路的复杂程度,有必要根据指标要求进行理论分析,确定合理的队列长度。由于遇到转移类指令(JMP、CALL等)时,流水线将清空队列中的全部内容,队列太长时,处理器会读入过多的无用指令,影响总体性能。据统计[4],转移类指令在应用程序中的使用频度超过10%。考虑到此因素,排队系统的指标确定为队列空和队列满平均都不超过20%,即队列既不空也不满的概率应大于60%。据此来分析确定译码器输出队列的长度。
根据译码器的具体情况,近似地采用M M 1 K排队系统分析方法来分析译码器输出队列。分析中采用统计高使用频度指令的平均执行时间和平均译码时间的方法估算到达率Κ和服务率Λ的值。在应用程序中使用频度最高的指令是传送类指令和算术逻辑类指令。这类指令平均执行一条指令需3.25个处理器周期;平均字节数为2.9个。MPU的处理器周期等于两个系统时钟周期,采用20M系统时,一个处理器周期为100ns。平均执行时间为325ns,即Λ=1 325×10-9;平均译码时间为245ns(1+0.5×2.9个处理器周期),如果认为指令预取队列不出现空的情况,则Κ=1 245×10-9。由于接口部件指令预取操作的优先级最低,预取队列可能出现空的情况,这将影响实际达到率,使其变为
(系数0
设该排队系统的容量为K,根据排队论[5],队列
既不空也不满的概率为
1-1-KP=1-K+1-K+1 1-1-据此可分别计算出系数A从0.9到0.1和K从2到7时,队列既不空也不满的概率。从计算结果(表1)可知,预取队列出现空的情况不太严重时(A>0.5),对译码器输出队列工作影响不大。输出队列较短时,长度变化影响较大。当K=5(等待队列长度为4)时,队列既不空也不满的概率大于60%。若再增加队列长度性能提高不大,因此选择队列的长度为K=5。
该指令需要1+0.5N个处理器周期。
4 译码电路与表格技术
译码电路根据指令读入电路设置好的6个字节并行输出寄存器、前缀指令标志和长操作码标志,译码出微处理器内部需要的各种信号(共71位)。这些信号包括微程序入口地址、源操作数、目的操作数、偏移量、立即数、前缀标志、运算器操作方式、指令字节数和其它标志等。
用硬件描述语言将译码电路设计成一块组合逻辑电路,可以使用一个大的case语句完成。但是这样设计出的电路很庞大,时延也比较大,并且使整体设计不方便,设计缺陷难以发现。MPU的微程序空间为2048×41位,实际使用的有1800×41位。为了缩短研制周期,必须由多人同时设计微程序,而每个人设计时都有可能改变微程序的长度和入口地址。如果每次变动都去改译码器的设计,既不方便也容易出错;如果硬性规定不能改变入口地址,对微程序设计者的要求太苛刻。所以,译码器必须具有较好的灵活性,合理地将译码器与微程序设计分离。
为了获得较好的灵活性,采用了表格技术。译码器先译出表格地址,不论微程序设计怎样变,表格地址固定不变。从表格中读出的内容是真正的微程序入口地址,其值由微程序设计者填写。这样做不但方便了微程序设计,而且使译码电路的设计更方便、更规整。特别是表格地址的译码电路相对简单得多,大多数指令的表格地址可以直接采用相应指令的操作码;少数长操作码和带扩展操作码指令的表格地址也是对其操作码做少量改动得到的。
表1 系数A和队列长度K变化时,队列既不空也不满的概率
K
.9A=033.0%49.2%58.8%65.0%69.3%72.4%
A=0.8A=0.7.6A=032.8%48.7%58.0%63.9%67.9%70.8%
.5A=031.5%46.1%53.9%58.5%61.3%63.0%
.4A=029.3%41.4%47.1%50.0%51.4%52.2%
A=0.3A=0.2.1A=011.5%13.0%13.2%13.3%13.3%13.3%
2345367
33.3%49.9%59.9%66.5%71.2%74.7%
33.3%49.9%59.8%66.4%71.0%74.5%
25.6%34.4%37.7%39.0%39.5%39.7%
19.9%24.8%26.1%26.4%26.5%26.5%
6 指令译码器的测试
根据上述分析,设计出的指令译码器如图4所
示。采用VHDL硬件描述语言把指令译码器设计成MPU的一个子模块。由于采用单指令集测试不全
测试程序是由3段具有实际意义的应用程序,
分别处在主程序、子程序和中断服务程序的位置。它们完成的任务是:主程序计算2×3矩阵与3×2矩阵相乘;中断服务程序计算正弦函数,自变量来自一个IO口,结果输出到另一个IO口;子程序将内存中的一个4位16进制数拆成4个字节的BCD码。这些程序分别在Intel80X86计算机的DEBUG中单独运行,然后才在MPU上仿真运行。两处运行得到的结果完全相同
。
面,实际测试中把译码器与其它部分组成一个完整的MPU,使用EDA工具MentorGraphics进行了仿真测试。
图4 指令译码器结构
指令简单化的过程。为了简化译码器设计、方便微程
7 结 论
本文研究嵌入式微处理单元MPU指令译码器
的设计问题。把译码器分为读入、译码和输出3部分进行设计。通过两种读入方案的分析比较,采用了在状态机控制下的指令读入机制,较好地实现了复杂
序设计、减少错误,在译码部分采用了表格技术,较
好地将译码器与微程序设计分离。通过对译码器输出队列的理论分析,合理地确定了输出队列的长度。使用具有实际意义应用程序进行测试的结果表明,该译码器的设计是合理有效的。设计方法对设计指令级兼容的微处理器具有重要意义。
参考文献:
[1] 白中英1计算机组成原理1北京:科学出版社,1994
[2] Intel.MicroprocessorandPeripheralHandbook.1987,I:1~54
[3] HummelRL.Programmer′sTechnicalReference:TheProcessorandComprocessor.USA:Ziff2DavisPress,1992[4] 任恭海.32位嵌入式航空机载RISC微处理器的研究及系统设计:[博士论文]1西安:西北工业大学,1995[5] 孟玉珂1排队论基础及应用1上海:同济大学出版社,1989,105~112
DesignofInstructionDecoderforUseinChina
foranEmbeddedMPU
LiuShibin,GaoDeyuan,FanXiaoya,LiShuguo
(AviationMicroelectronicsCenter,NorthwesternPolytechnicalUniversity,Xi′an710072)
Abstract:NPUAviationMicroelectronicsCenterhasdonesystematicresearchasapartofChina′sdrivetobelessandlessdependentonimporteemicroelectronicproducts.Thedesignofinstructiondecoderisbuta
partofourMPU(microprocessorunit)project.TheMPUiscompatiblewithIntelmicroprocessorat.Weanalyzedandclassifiedthestructureofthecomplexinstructionsetanddesignedtheinstructionlevel
decoderwithdueattentiontoitsinputandoutput.Aftercomparing2feasibleinputschemes,wedesignedaneight2statestatemachinetosocontroltheprocessofinstructioninputthatitcanbeprocessedbydecodercircuiteasily.Weusedtabletechniquetogenerateentryaddressofmicroprogram,soasto.Thedecoderwaslocatedinthedecouplethedesignofdecodercircuitfromthatofthemicroprograms
middleoftheMPU′sinstructionpipeline.Thelengthoftheoutputqueueinfluencestheperformanceofthe
M 1 Kmodeltoanalyzethequeuesystemanddeterminethequeuelength.AfterMPU.WeusedM
embeddingthedecoderinMPU,weusedthreeprogramswithrealmeaningtotestthedecoder.ThedecoderworkedwellwithMPUandtheresultsobtainedwerethesameasthoseobtainedwiththeIntel8X86PCcomputer.
Keywords:microprocessor,instructiondecoder,queue