《武汉工程大学学报》  2008年04期 103-107   出版日期:2008-04-30   ISSN:1674-2869   CN:42-1779/TQ
单周期8位微控制器的时序及流水线设计


0引言系统设计者不断地对其基于8051的应用进行改进和升级.然而,对于8051内核的改进却没有跟上,系统设计者似乎不得不转向其它的处理器,并花费昂贵的代价去重新设计和更新其系统.标准的8051微控制器一般包括的基本功能部件有:中央处理器、程序存储器、数据存储器、定时/计数器、输入/输出接口电路、中断处理器等[1].尽管外部晶振的速度已经接近40 MHz,传统的8051仍然要求12个时钟周期才能运行一个机器周期.每条指令需要1到4个机器周期,这就意味着执行一条指令就需要少则12个多则48个时钟周期.这样吞吐率就被限制在仅有3 MIPS,即使是运行一串NOP这样的单周期指令.分析图1所示的传统8051的时序设计可以发现,在12个时钟周期的机器周期架构中存在着巨大的浪费,多数指令被强制去执行哑周期[2].因此,许多微控制器生产厂家开始重新设计基于8051指令集的微控制器.图1传统8位微控制器的取指令及读数据时序
Fig.1Traditional 8bit MCU instruction timing目前,有些公司已经成功实现了改进型高速8位微控制器,例如MAXIM公司生产的DS80C400系列微控制器将传统指令执行周期由12个时钟周期提高到4个时钟周期,美国CYNAL公司的C8051F系列8位单片机也实现了指令执行周期的大幅减少.但是,这些8位微控制器的设计没有从根本上改变控制器的架构,它仍然采用地址/数据复用特性,通过ALE信号分时使用地址和数据,指令的执行过程仍然存在着时钟周期的浪费.因此目前这种架构的8位微控制器的指令执行速度仍然提高不多,无法实现低成本、高速度的要求.本文设计的单周期8位RISC单片机IP核,采用哈佛式双总线结构,其指令总线和数据总线相互分离,同时采用固定长度的指令系统,可获得更快的指令运算速度和更低的硬件实现成本.参考现有微控制器的设计思想[3],提出了图2描述的单周期流水线微控制器结构.图2改进型8位微控制器结构
Fig.2Improvement 8bit MCU architecture为了提高8位微控制器的整体性能,将一般用于16位或32位控制器的并行处理技术和流水线技术引入到8位微控制器中,采用程序和数据两条并行总线技术,同时设计了两级流水线,加速整个微控制器的指令执行速度,使这个8位微控制器具有16位控制器的处理能力.1单周期8位微控制器的时序设计指令时序直接反映了指令的实现过程[4],通过时序设计可以很明显看出这个单周期8位微控制器与传统8051的时序差别.微控制器一个机器周期就是一个时钟周期,因此一个取指周期只需要一个时钟周期就可以完成.这样大部分指令的实现所需的机器周期等于指令的字节数.256个指令码对应的指令有一部分是单字节指令,这些指令只需要一个时钟周期就可以执行完成.有一部分是两个字节的指令,因此实现最快需要两个时钟周期.有些指令虽然字节数很少,但是实现需要多个机器周期.最重要的数据访问指令是MOVX 指令.在标准8051中,MOVX指令通常需要两个机器周期,即24个时钟周期.设计了一种灵活使用MOVX指令的方式,所需指令周期从4个时钟周期到11个时钟周期.通过这种灵活的配置方式,可以适用快速和慢速外部存储设备的访问控制.具体时序设计如下.1.1单字节单周期指令大约有三分之一的指令是单周期单字节指令,这类指令从程序空间获取之后就可以同时进行译码和执行,而且这类指令的执行不会影响其它指令的执行过程,因此这类指令执行只需要一个时钟周期就可以完成.例如指令INC A就是一个单字节单周期指令,实现累加器A加1的操作,在此指令从程序空间读出来后进行译码的同时可以产生控制信号高速ALU模块对累加器进行加1操作.同时下一条指令的地址即PC的值加1送出.这类指令的时序如图3所示.图3单字节单周期指令时序
Fig.3Singlebyte singlecycle instruction timing第4期邹连英:单周期8位微控制器的时序及流水线设计
武汉工程大学学报第30卷
1.2单字节多周期指令这类指令虽然只需要从程序空间读取一次,但是执行过程比较复杂,无法在一个时钟周期之内完成,因此执行需要多个时钟周期.例如指令INC Rn就是一个单字节双周期指令,此指令首先从程序空间取出后需要先进行译码,获取需要加1的内部寄存器值,然后将这个值送到ALU进行加1操作.这个执行过程需要两个周期,因此下一个指令需要在第二个执行周期才可以进行预取动作.这类指令的时序如图4所示.图4单字节多周期指令时序
Fig.4Singlebyte multicycles instruction timing1.3双字节双周期指令这类指令含有两个字节,需要两个时钟周期从程序空间分别获取指令和操作数.例如指令ADD A, #Data就是一个双字节双周期指令,在取指周期获得指令代码,在译码过程中获取第二个字节即指令的操作数#Data,然后将控制信号和立即数送到ALU模块进行加法运算.在指令进行计算的过程中可以预取下一个指令.这类指令的时序如图5所示.图5双字节双周期指令时序
Fig.5Doublebytes doublecycles instruction timing1.4双字节多周期指令这类指令含有两个字节,同样需要两个时钟周期从程序空间分别获取指令的操作数,但是指令的执行过程比较复杂,执行需要较多时钟周期.例如指令DJNZ Rn, rel就是一个双字节四周期指令,在取出指令之后,进入译码阶段的同时取出操作数rel以及Rn的值,然后将Rn的值送入ALU单元进行减1操作,计算结果在下一个周期与零值比较产生是否跳转的控制信号,然后再根据此控制信号决定PC是否需要与偏移量rel进行加法操作.如果跳转条件满足,下一条指令的地址就需要在PC与rel加法之后产生.因此这类指令执行过程复杂,下一个指令的地址只有在前一条指令执行到最后一个周期才计算出.这类指令的时序如图6所示.图6双字节多周期指令时序
Fig.6Doublebytes multicycles instruction timing1.5三字节三周期指令这类指令含有三个字节,即一个指令码字节和两个操作数字节,需要三个时钟周期才能从程序空间获取相应的指令码和操作数.但是这类指令执行类似于双字节双周期指令,指令的执行过程相对简单,在取操作数的过程中即可同时完成指令的执行.例如指令MOV direct, #data就是将一个立即数存入内部可以直接寻址的数据空间,因此,需要两个操作数:立即数和内部数据空间地址.而将这两个操作数获取后就可以立即执行数据存放操作,在执行数据存放的同时可以预取下一条指令.因此,这类指令的时序如图7所示.图7三字节三周期指令时序
Fig.7Threebytes threecycles instruction timing1.6三字节多周期指令这类指令含有三个字节,包括指令码和两个操作数.但是这类指令通常需要执行间接寻址等比较复杂的操作,执行所需要的时钟周期较多,因此,这类指令的时序类似于双字节多周期指令,其时序如图8所示.图8三字节多周期指令时序
Fig.8Threebytes multicycles instruction timing2流水线设计为了提高微控制器的运行效率,在重新设计8位微控制器架构的同时,引进流水线设计思想.但是,与所有的流水线一样,当其内部的信息畅通流动时,微控制器的流水线才能工作到最好[5].将指令执行过程划分为两个流水线阶段:(1)取指:将指令从程序空间取出来.(2)执行:将取出的指令译码执行.对于典型的指令来说,上述每个操作阶段都只需要一个时钟周期,因此,一个正常的指令需要在2个时钟周期内就可以完成执行.由于流水线有两段,平均每个时钟周期就可以完成一条指令.图9说明了指令执行的流水线过程.图9单周期指令流水线图
Fig.9Singlecycle instruction pipeline timing从图9中可以看出,对于连续的单周期指令,在这种流水线技术下平均一个时间周期执行一条指令.但是,并不是在所有的情况下都能保持一个周期一条指令的完成率.对于复杂的指令,不能在单个时钟周期内完成执行阶段,为了兼容通用编译软件,降低设计复杂度,采取延长指令的执行周期,在指令执行周期的最后一个时钟周期进行下一条指令的取指阶段,这样进行的流水线过程如图10所示.图10多周期指令流水线图
Fig.10 Multicycles instruction pipeline timing虽然多周期指令执行起来需要较多的时钟周期,但是对比标准的8051时序图可以发现,现在这种具有流水线技术的微控制器每一个时序都没有浪费,在兼容软件编译器的基础上最大限度的利用了每一个时钟周期.3系统仿真与性能分析为了验证该系统,设计了一个测试平台,如图11所示.图11芯片仿真环境
Fig.11Chip simulation软件工程师利用集成编译工具Keil编译了例如echo server之类的应用程序,生成相应的汇编程序hex格式文件.片内的ROM存储器或FLASH存储器采用行为描述方式解释该hex文件,产生微控制器需要的程序数据,微控制器执行相应的程序指令.为了监控程序执行过程,在片外设计一个串口接收器,显示程序的执行结果.图12就是仿真指令执行的部分波形图.从图12中可以看出,使用MOVX读取外部数据空间的指令需要两个时钟周期,首先从程序空间中将指令送入寄存器decode,然后根据指令代码判断为外部数据读访问指令,生成xramrd控制信号通知外部数据区进行数据读操作.将仿真程序指令执行时钟周期统计,并与传统8位单片机进行对比总结如表1所示,可以看出单周期8位微控制器的执行速度比标准8051平均提高10倍左右.同时这个微控制器的工作频率设计为50 MHz,远高于标准8051的工作频率.从整体性能上看,全新设计的微控制器IP核的处理速度完全可以满足低成本、高速度的运行要求.
图12指令译码仿真过程
Fig.12Simulation timing表1两种微控制器性能对比总结Table 1Contrast of traditional and improvement 8bit MCU
指令类型传统单片机执
行时钟周期数改进型单片机执
行时钟周期数性能
改进8位立即数加法3649.08位直接寻址加法3649.08位间接寻址加法3649.08位寄存器寻址加法36312.08位立即数减法3649.08位直接寻址减法3649.08位间接寻址减法3649.08位寄存器寻址减法36312.08位乘法96616.08位除法96109.616位加法72612.016位减法84712.016位乘法3122313.6平均性能改善比例10.84 结语上述8位单周期单片机IP核已经在世纪民生的以太网控制器芯片中使用TSMC 0.35 μm工艺流片验证,该芯片可以支持50 MHz的系统时钟.以上分析了传统8位微控制器设计时序,指出了传统8位微控制器设计的不足,然后利用并行技术及流水线技术设计了一个全新的单周期8位微控制器,对比这个微控制器与传统8051的执行性能,可以看出其执行速度比标准8051平均提高10倍左右.