一种MCU时钟系统的设计
扫描二维码
随时随地手机看文章
时钟系统是微控制器(MCU)的一个重要部分,它产生的时钟信号要贯穿整个芯片。时钟系统设计得好坏关系到芯片能否正常工作。在工作频率较低的情况下,时钟系统可以通过综合产生,即用Verilog/VHDL语言描述电路,并用EDA工具进行综合。然而,用工具综合存在电路性能低、优化率不高的问题,不适合应用在各种高性能微处理器芯片上。而采用人工设计逻辑并手工输入电路图甚至物理版图的方式,能使设计的电路灵活,性能更好。基于这些考虑,设计了一个MCU时钟系统。
1基本时钟输入的选择
(1)CPU核分微处理器(MPU)和微控制器(MCU),两者的基本时钟一般都以单频方波的形式提供。时钟有三种产生方式: (1)用晶体振荡器产生精确而稳定的时钟信号;
(2)用压控振荡器产生可调频率范围较宽的时钟信号;
(3)结合以上两种技术,用压控振荡器生成时钟信号。
基本时钟信号的产生可以有芯片外和芯片内两种方法。但是时钟信号必须是稳定的信号,对于稳定度要求特别高的场合(如MPU和MCU),采用芯片外提供是必不可少的。故本设计采用外接晶振的方法。
2 两相时钟方案
时钟技术是决定和影响电路功耗的主要因素,时钟偏差是引起电路竞争冒险的主要原因。为了消除竞争、提高频率、降低功耗,在基本时钟方案方面,MPU和MCU一般有三种选择:单相时钟、多相时钟和沿触发方案。在当前的设计中,沿触发方案由于在数据传递方面有一定困难已很少被使用。单相时钟方案因为在时序和传输上比较简单可靠,在所有的方案中使用的晶体管也是最少,所以被一些高性能芯片使用,如DEC公司(现被HP公司并购)的Alpha21664微处理器。但是,对CMOS电路来说,采用单相时钟就无法使用动态电路,而且因组合逻辑块中逻辑元件的速度高低都受到限制而呈现困难。
图1是一个单相有限状态机,圆圈内为组合逻辑块CL。
设TL+TH=TP,其中TP为时钟周期,TH和TL分别为时钟高电平和低电平时间。如果要使时钟定时与数据无关,则最长的传播延迟必须小于TP,信号(甚至可能是由于内部竞争冒险产生的尖峰所造成的假信号)到达CL输出端可能取的最短时间必须大于TH。令TCL代表CL延迟范围,则:
TH
(1)式表明,信号通过CL的每一个延迟都必须介于TH和TP之间。正是这种双边约束特性使单相时钟难以实现。对于多相时钟,则可以消除这种双边约束,而使其转化为单边约束。图2(a)所示为采用两相非重叠时钟φ1和φ2(φ1×φ2=0),对应时钟波形示于图2(b),T1和T3分别是φ1和φ2为高电平时的时间,T2是φ1到φ2之间电平为低的时间,T4则是φ2到φ1之间电平为低的时间。当φ2电平变高时信号开始通过CL传输,并且必须在φ1电平变低之前结束。于是得:
TCL < T1+ T3+ T4 或 TCL
其中,TP= T1+ T2+ T3+ T4
这样就可把双边约束(1)式简化为单边约束(2)式了。无论是有效信号或是无效信号,都可以以任意快的速度通过CL而不会造成竞争。
当然,相数过多又会使设计复杂度提高,因此这里选择了两相不重叠时钟。
3时钟系统逻辑电路设计
3.1两相不重叠时钟产生的方法
两相不重叠时钟产生电路如图3所示。clk为外部晶振产生的送入MCU的单相时钟,I1是MCU内部产生的保护信号,正常工作时I1为低电平,发生故障时(如由于噪声干扰导致PSEN和RD、WR同时有效的错误发生时) I1变成高电平而关闭时钟;当系统复位时,会使得图3中I1为低电平,恢复clk的输入。由于正常情况下PD为低电平,所以clk等同于经过三个非门变成图中的单相输入信号,加到用"或非"门交叉而构成的R-S触发器,单相时钟从左边加到一个"或非"门上,反相后加到另一个"或非"门上,这样得到的CK1和CK2是不重叠的。单相时钟与双相时钟的对应关系如图3所示。
当信号V变成高电平时(因为正常工作时PD一直保持为0),M1管关断,信号就一直保存在静态锁存器中。每当时钟信号变高时,就把静态锁存器的输出传给W,使得W一直处于低电平而不影响"或非"门A1,故图3中A1可以简化为二输入。
在时钟受到一个逻辑信号(也就是门控时钟)控制的
情况下,可能会有一些动态节点不被刷新。为了避免这种错误,采用由一个NMOS控制管M2加两个交叉耦合反相器组成静态锁存器。其中反馈管采用的倒比W/L很小(<1),可以作为电平恢复器件,这样有利于保存信息。
3.2 二分频电路
通常把一周期指令的执行时间称为一个机器周期,并进一步划分为2~6个状态(高速MCU到标准MCU),每一状态有两相时钟,即为两个节拍,每个节拍持续一个振荡周期。如何向芯片内部提供一个两节拍的时钟信号呢?这就需要二分频电路对外部振荡信号进行分频,使得在每个时钟的前半周期,节拍1信号有效;后半周期,节拍2信号有效。
二分频电路是由两个静态锁存器组成的触发器,如图4所示。其中CK1和CK2是两相不重叠时钟,当CK1=0,CK2=1时,静态锁存器b的输出经过一个反相器提供CK3和CK4,使得CK3=0,CK4=1经过半个周期后,CK1=1,CK2=0,M4断开,低电平信号存储在静态锁存器a中,使CK3的值不变,这样CK3延续了一个周期的低电平(高电平),就形成了两分频,如此形成的时钟信号周期增加一倍。CK4由CK3经过一个反相器形成,两者相位相反。
3.3时钟驱动器及分配
影响时钟偏差主要有以下几个因素
·连接时钟数的连线;
·时钟数的拓扑结构;
·时钟的驱动;
·时钟线的负载;
·时钟的上升及下降时间。
在MCU内部,时钟信号要驱动大的负载,是负载最重的信号,有可能导致电路延时和时钟偏差。消除的方法之一是增强驱动能力。设计的驱动器如图4(二分频电路除外)所示。最初的时钟信号由二分频电路输出的CK3和CK4提供。值得注意的是,为了提高翻转速度增加了旁路管,即PMOS晶体管M5、M7和NMOS晶体管M6、M8,而且它们的W/L比要取得足够大(如设计的为350/1),这样就不需要外部附加自举电容。当然为了防止导通电流过激(di/dt),可以加入电阻起稳定作用。该时钟驱动器的一个重要特点,就是所产生的两相不重叠时钟的相位与时钟负载无关,输出Clk3和Clk4能高到VDD电平和低到地电平。
在MCU内部合理分配时钟网络。通常有两种方法:线形缓冲和树形缓冲。考虑到MCU内部时钟负载比较大,采用图5所示的树形缓冲将时钟电路分成若干分支。时钟分配的各个分支在各级之间具有相同的相对扇出,同时每个分支所带负载数目基本相同,因为不平衡的分支是时钟歪斜的主要原因。
3.4低功耗设计
低功耗设计要求时钟网络尽量简单,晶体管尺寸尽量小,并且应尽量减少不必要的电路节点翻转,所以设计的MCU一方面要大量采用只有三个元件组成的静态锁存器,参见图3;另一方面要有三种工作功率管理模式,即正常、空闲、掉电三种方式,以满足低功耗方式的应用。因此,内部所使用的时钟分三类,第一类送人部分控制器和数据通道(C
.
PU核),在低功耗方式(空闲)下时钟关闭,如图6中的Clk5和Clk6;第二类用于控制定时器,如Clk1和Clk2;第三类则用于控制中断电路和串行口的时钟,如Clk3和Clk4。后两类不受低功耗方式的限制。
(1)在掉电方式(PD=1)下,时钟信号发生器及内部所有的功能部件都停止工作。如图3所示,PD=1时,封锁一个"与非"门和一个"或非"门,使V一直为低电平,输给R-S触发器的单相时钟的状态被固定,或为低电平或为高电平,这样整个芯片的时钟信号被冻结。
(2)在空闲方式(IDL=1)下,时钟信号继续提供给中断逻辑、串行口、定时器,但CPU的时钟被切断了。如图6所示,IDL=1时,"或非"门输出为低电平,"与非"门输出为高电平,通过时钟驱动器使得Clk5=1、Clk6=0,这样通往CPU的信号就被冻结了。
4设计验证与总结
综合图3、图4、图6就构成了整个时钟系统。为了对电路进行逻辑仿真,首先在CADENCE的Composer-schematic中调用CSMC 0.6μm标准单元工艺库,设置好管子参数,画出电路图。然后进入Analog Artist Simulation环境进行参数较理想化的电路仿真。其中clk的脉宽为0.5μs,周期为1μs,将各种信号(如PD、IDL)的上升时间和下降时间设置为0.002μs,整个仿真时间取16μs,参考电压为5V,得到的仿真结果如图7所示。可以看到I1=1时,通往内部的各时钟信号被封锁;PD=1时,所有时钟(Clk1~Clk6)被冻结;而IDL=1时,只有通往CPU的Clk5和Clk6被冻结,,因此各信号满足设计要求。