具体实施方式
现在参考附图1,图1所示的集成电路包括完全集成在芯片上的混合信号系统,这个系统包括带增益可编程的前置放大器s12的精确(true)的12位多通道ADC 110,两个12位DAC 114和116,两个电压比较器118和120,参考电压22,以及带32KB快速擦写存储器126的8051可兼容的微控制器内核24。这个系统还提供12C/SM总线128,UART 130,以及硬件实现(不是用户软件中的“位脉冲(bit-banged)”)的SPI 132,此外还有带五个俘获/比较模块的可编程计数器/定时器阵列(PCA)134。另外还有32个通用数字端口I/O。模拟部分还包括可操作地将八路模拟输入连接到可编程放大器112和ADC 110的多路复用器113。
通过板上VDD监控器136,WDT,以及时钟振荡器137,集成电路是片上的独立系统。MCU有效地配置和管理模拟及数字周边设备。快速擦写存储器126甚至能够被内部电路地(in-circuit)编程,以提供非易失性数据存储,并且也允许8051固化软件的现场升级。MCU还能够独立地关闭部分或者全部周边设备以节省电源。
JTAG接口142允许用户通过JTAG输入的常规组144实现与集成电路的连接。板上的JTAG仿真支持允许使用安装于最终应用中的集成电路产品的非干涉的(使用非片上资源)、全速的、内部电路的仿真。这个仿真系统支持检查和修改存储器和寄存器,设定断点、观测点,单步调试,运行以及暂停命令。当使用JTAG进行仿真时,所有的模拟和数字周边设备都实现全部的功能。
微控制器140完全兼容MCS-51TM指令集。标准的803x/805x汇编程序和编译器可以用于软件的开发。这个内核包含标准8052的所有周边设备,其中包括3个16位计数器/定时器,全双工UART,256字节的内部RAM,128字节的专用功能寄存器(SFR)地址空间,以及四个宽度为字节的I/O端口。
继续参考附图1,内核140通过内部总线150与各个输入/输出块连接。纵横机(cross-bar switch)152在UART 130,SPI总线132等与数字I/O输出之间提供连接。这是可配置的接口。它可以与VDD电源监控器136相关。
内核140采用流水线结构,这种流水线结构极大的增加了其在标准8051结构上的指令吞吐能力。在标准8051中,当最大系统时钟为12MHz时,除MUL和DIV之外的所有指令的执行时间占用12到24个系统时钟周期。相比之下,内核140在一或两个系统时钟周期内执行他70%的指令,只有四个指令的执行时间超过四个系统时钟周期。内核140总共有109条指令。指令数与执行指令所需的系统时钟周期数之间的比较如下:
Instructions |
26 |
50 |
5 |
14 |
7 |
3 |
1 |
2 |
1 |
Clocks to Execute |
1 |
2 |
2/3 |
3 |
3/4 |
4 |
4/5 |
5 |
8 |
当内核140的最大系统时钟为20MHz时,它的峰值吞吐量为20MIPS。
作为附图1的系统的概述,纵横机152可以被配置为将它的I/O侧的任何端口连接到任意功能模块128,130,132,134或者136,这些功能模块提供纵横机152和内核140之间连接。而且,纵横机也可以通过这些功能模块128-136直接连接到总线150。
现在参看附图2,说明附图1中集成电路的更详细的框图。在这个实施例中,可以看到纵横机152实际上通过总线150连接到系统总线202。总线150是这样的总线,其可操作地允许内核140连接到各个功能模块128-134,以及多个定时器204,206,208和210,以及三个锁存器212,214和216。纵横机152由配置块220配置,这个配置块由内核140配置。纵横机152的另外一侧(I/O侧)与各种端口驱动设备222相连接,这由连接到总线150的端口锁存器224控制。此外,内核140可操作地用控制块226中的模拟接口配置来配置模拟侧。
内核140由线路232上的时钟控制。如图所示,时钟是由多路复用器234从两个位置中的一个选择出的。第一个是外部振荡器电路137,第二个是内部振荡器236。如下文所要描述的那样,内部振荡器电路236是精确的温度及电源补偿振荡器。内核140也受复位线154上的复位输入控制。复位信号也是由看门狗定时器(WDT)电路136产生的,时钟信号以及复位电路都由时钟和复位配置块240控制,时钟和复位配置块由内核140控制。由此可以看出,用户能够配置系统以外部晶振或者内部精密的非稳定的非晶体振荡器(基本上是“自激振荡的”)运行。如同下文将要描述的那样,这个振荡器236产生用于内核140以及UART 130计时的定时,并且在温度上是稳定的。
现在说明附图3,说明UART 130的框图。系统时钟被输入到波特率发生器302,波特率发生器在线路304上提供发送时钟,在线路306上提供接收时钟。发送时钟被输入到发送控制块308,接收时钟被输入到接收控制块310。串行控制寄存器(SCON0)320用于可操作地为控制块308和310提供控制信号。传输数据从总线322被接收,并通过门324被输入到串行数据缓冲器(SBUF)326。这个数据的输出被输入到零检测器328,然后被输入到控制块308。该系统是异步全双工串行端口设备,有两个相关的专用功能寄存器,串行控制寄存器(SCON0)320以及串行数据缓冲器(SBUF0)(未表示)。数据在线路312上被接收,并被输入到输入移位寄存器314。这由控制模块310控制来控制,以将移入(shifted-in)的数据输出到锁存器332,然后通过门334输出到SFR总线322。在发送模式下,数据被从SFR总线321中接收,并通过门324被输入到发送移位寄存器326,其从寄存器326输出到发送线路319,或者从控制块308通过AND门338(该与门被输入到OR门340的一个输入端)输出到发送线路319。这都是由控制模块308控制的。
现在参考附图3A,说明波特率发生器302的框图。波特率是由定时器产生的,其中发送时钟由块TL1产生,接收时钟由被表示为RX定时器的、用户不能访问的TL1副本生成。对于发送时钟和接收时钟的波特率,发送和接收定时器溢出都除以2。当定时器1被使能、并且使用相同的TH1的值(这是重载值)时,接收定时器运行。然而,当在接收管脚上检测到启动条件(Start Condition)时,RX定时器被强制重载。这就允许在检测到启动(Start)的任意时间开始接收,而不依赖于发送定时器的状态。
下面参考附图4,说明置于集成电路上的精密内部振荡器236的示意图。前面提到的集成电路是商业上可得到的集成电路,它包括与其相关的精密振荡器236。集成电路提供选择晶体振荡器(其中晶体放置在两个晶体端口之间)、选择外部时钟信号或选择内部自激振荡器的能力。在附图4中自激振荡器被表示为精密振荡器236。振荡器的中心是两个比较器,第一比较器402和第二比较器404。温度补偿电压参考电路406为比较器402的负输入端提供温度补偿参考电压(关断电压VTRIP)。比较器402和404的输出分别连接到S/R锁存器408的置位输入端和复位输入端。锁存器的Q和Q-Bar输出被输入到输出RC定时电路410,输出RC定时电路可操作地限定振荡器的周期,R/S锁存器408的输出提供了输出时钟信号。这个RC定时电路410的输出被反馈到比较器402和404的正输入端。输出RC定时电路410也是温度补偿的。如同下文所要描述的那样,电压参考模块406提供负的温度系数,而比较器402和S/R锁存器408组合提供了正的温度系数,输出RC定时电路410提供正的温度系数。如下文中将说明的那样,全部组合的系数近似等于零。
现在参考附图5,说明附图4中精密振荡器的更详细的示意图。电压参考电路406包括分压器,分压器在节点502上将电源电压VDD分为电压VTRIP。分压器包含标号为R3的上电阻504。分压器的下半部分包括两个并联的电阻,标号为R2的电阻506以及标号为R4的电阻508。为了命名的目的,这些电阻被称为R2,R3和R4。
电阻R3和R4由同样的材料制作,以提供正的温度补偿系数。这两个电阻都由具有正温度系数的N-扩散材料制作。相比之下,R2是由第一层中的多晶硅制成的,第一层中的多晶硅被称为Poly1材料,它也具有正的、但是不同的温度系数。应该理解,可以使用不同材料,只需要存在具有不同温度系数的两个电阻。尽管不是本说明书的一部分,但是Poly1材料基本上是位于氧化保护层之上基底上的多晶硅的第一层,由其生成这样的结构,例如晶体管的栅极。由于电阻的正温度系数,将导致电压VTRIP具有负的温度系数。如同下文将要描述的那样,不同材质的电阻有利于两个电阻R2和R4之间的调整,以改变温度系数。这主要是由于它们是不同材质的。
输出RC定时电路410包括两个RC电路。第一RC电路包括P通道晶体管520,该晶体管的源极/漏极通路连接在VDD和标号为R的电阻522一端(电阻的另一端连接到节点524)之间。节点524连接电容526的一端,电容526的另一端连接到VSS。通道晶体管528的源极/漏极通道跨过电容526,并且该晶体管栅极连接到P通道晶体管520的栅极,同时也连接到S/R锁存器408的Q输出端。节点524包括比较器402的正输入端。第二RC电路包括P通道晶体管530,该晶体管的源极/漏极通路连接在VDD和电阻532(标号为R)的一端之间,电阻532的另一端连接到节点534。节点534连接电容536的一端,电容536的另一端连接到VSS。N通道晶体管538的源极/漏极通道连接在节点534与VSS之间。晶体管538的栅极连接到晶体管530的栅极上,同时也连接到S/R锁存器408的Q-Bar输出端。节点534包括比较器404的正输入端。附图5中电路的输出波形如图6所示,其中为每一个RC电路表示常规的RC上升/下降曲线。每个输出波形周期被定义为从电压被施加到电阻R的初始开启时刻到另一个RC电路的电阻R被接通的时刻。对于每个RC电路来说,分别是周期T1和周期T2。这两个周期的总和等于振荡器的周期。制造晶体管520,530,528和538,使得它们的阻抗与电阻522和532相比足够小。电阻522和532由Poly1材料制成,这是因为其低的温度系数。振荡器的周期等于周期T1和T2的总和再加上比较器延时的两倍。
现在参考附图7,说明实现电压参考406的更详细的框图。图5中被表示为连接到VDD的电阻504实际上通过P通道电阻702的源极/漏极被连接到VDD,而P通道晶体管的栅极连接到偏置电压。类似地,电阻506的底端通过一个N通道晶体管704的源极/漏极通路连接到VSS,晶体管704和706的栅极连接到偏置电压。制造晶体管702,704和706,使得它们的阻抗与电阻R2,R3,R4的值相比足够小。而且,一阶供电独立性是由于关断电压VTRIP与供电电压成比例,即VDD*(1-e(t/τ))。因此,在达到关断电压所需的时间中在比较器的输入上不依赖于一阶的供电。这是使用RC定时电路而不是电流源的一个原因,电流源不提供一阶消除。
VTrip=VDD*ratio
VTrip=VDD*(1-e(-T1/τ))
T1=-τ*ln(1-VTrip/VDD)
Thus:T1=-τ*ln(1-ratio)
从温度补偿的角度上看,电压参考电路406的多个方面可以被用于提供温度补偿。通常,电阻对于温度有固定的变化。Poly1电阻R2的温度系数为255ppm,而N型扩散电阻R3和R4的温度系数为800ppm。在本说明书中,希望得到负温度系数462ppm。
为了分析用电阻R2,R3,和R4如何产生负的温度系数,考虑R2和R4是定义为REQ=R2//R4的并联结构。如果REQ和R3具有不同的温度系数,且TCR3>TCREQ,那么关断电压将有负的温度系数。VTRIP的定义如下:
对于REQ,必须假定VTRIP为固定值,从而可以改变R2和R4,以便得到特定的温度系数。这可以用下面的等式来表示:
等式5的结果可以在等式3中被使用,以设定VTRIP的最终温度系数。
现在参考附图8,说明实现充电结构410的一半的详细示意图。这和关于电压参考结构406的例子一样,提供P通道晶体管802来连接电阻522的上端和VDD,晶体管802的栅极连接到偏置电压。这个P通道晶体管在其温度补偿操作中的引入非常小的误差。电容526是个可变电容,从而可以改变它的电容值,来设定振荡器的周期。电容526是由位于第一层poly,P1和第二层poly,P2之间的绝缘层与位于它们之间的氧化层产生的。电阻522是N扩散型电阻。
电压参考电路406中的电阻R3,R2和R4是可以是掩模可编程电阻的可变电阻。由于它们具有不同的温度系数,因此电阻R3被用来设置VTRIP的值,电阻R2和R4被用于温度系数的选择。
附图9说明了电阻R2和R4其中一个的布局。提供多个串联的电阻,它们或是在具有N型扩散的基底中生成,或是在Poly1层中产生。这些电阻提供了掩模可编程的连接集904,从而允许增加一个或者多个原本被短接掉的电阻902到电阻串中。虽然图中并没有表示,但是也提供了将一些额外的电阻短接掉以减少阻值的能力。这是掩模可编程的,它被用于在金属层上“调整(tweak)”设计。
现在参考附图10,说明电容526的示意图,电容526是寄存器可编程电容,从而允许调整中心频率。提供了容量为380fF的标称电容1002,其被连接在节点24和VSS之间。与之并联地还提供掩模可编程电容1004,掩模可编程电容1004提供了八级编程,每级增量为39.5fF。寄存器可编程电容配置有连接在节点524以及N通道晶体管1008的源极/漏极通路一端之间的容量为“C”的电容1006,其中N通道晶体管1008的栅极连接到LSB位。位于开关晶体管1008和节点524之间的电容1006的配置只用于寄存器的LSB。这种结构允许使用较小的单位电容器,但是晶体管1008的源极/漏极以及引线接合器中引入一些非线性电容。剩余的可选电容每个都包括连接在VSS和N通道晶体管1012的源极/漏极通路一端之间的电容1010,N通道晶体管1012的源极/漏极通路的另一端连接到节点524,其栅极则连接到位[1]到位[6]。与位<1>相关的电容1010的容量为“C”,下一个可选电容器1010使相关晶体管栅极连接到位<2>,最后一个可选电容1010使相关晶体管栅极连接到位<6>,电容值为32C。这是一个二叉树,LSB提供约为C/2的LSB。
现在参考附图11,说明比较器402和404中每一个的差分输入结构的示意图。提供了两个差分P通道晶体管1102和1104,这两个晶体管的源极/漏极通路的一端连接到节点1106,节点1106通过电流源1108连接到VDD。晶体管1102源极/漏极通路的另外一端连接到节点1110,晶体管1104源极/漏极通路的另外一端连接到节点1112。晶体管1102的栅极包括正输入端,晶体管1104的栅极包括连接到VREF的负输入端。节点1110连接到N通道晶体管1114的源极/漏极通路的一端以及晶体管1114的栅极上,晶体管1114源极/漏极通路的另外一端连接到VSS。节点1112连接到N通道晶体管1116的源极/漏极通路的一端,晶体管1116源极/漏极通路的另外一端连接到VSS,它的栅极连接到节点1118,节点1118连接到电阻1120的一端,电阻的另外一端连接到晶体管1114的栅极上。节点1112也连接到N通道晶体管1122的栅极上,晶体管1122的源极/漏极通路连接在节点1118以及VSS之间。这种结构被称为改进的Flynn-Lidholm锁存比较器,这种比较器用动态逻辑实现了置位/复位锁存,这种比较器的详细描述参见Flynn.M.Lidholm S.U.的“A 1.2μm CMOS Current ControlledOscillator,IEEE Journal of Solid state Circuits”,Vol.27No.7July1992。
现在参考附图12,说明比较器402和表示Q-Bar输出的半部分S/R锁存器408电路的示意图。S/R锁存器408这一半使其置位输入连接到比较器402的输出,并输入到N通道晶体管1202的栅极,晶体管1202的源极/漏极通路连接在节点1204和VSS之间。P通道晶体管1206的源极/漏极通路连接在节点1204和VDD之间,它的栅极连接到节点1208。节点1204连接到常规反相器1210的输入端,同时还连接到N通道晶体管1212源极/漏极通路的一端,晶体管1212源极/漏极通路的另外一端连接到VDD,它的栅极连接到节点1214,节点1214也连接到反相器1210的输出端上。节点1214连接到反相器1216的输入端,反相器的输出端提供Q-Bar输出。节点1214通过延时模块1218连接到标号为ND1的NAND门1220的输入端。NAND门1220包括其源极/漏极通路连接在VSS和节点1208之间的P通道晶体管1222以及其源极/漏极通路连接在节点1204和N通道晶体管1226的源极/漏极通路一端的N通道晶体管1224,晶体管1226的源极/漏极通路的另外一端连接到VSS。晶体管1222和1224的栅极都连接到延时块1218的输出端。晶体管1226的栅极从S/R锁存器408的另外一侧连接到复位输入端“RST”。节点1208连接到反相器1230的输入端,反相器的输出驱动N通道晶体管1232的栅极,晶体管1232的源极/漏极通路连接在比较器402的输出,锁存器408的置位输入端之间,而晶体管1232的源极/漏极通路的另一端连接到VSS。为用于复位输入的比较器404提供与附图12中比较器402的输出相关的并行结构。
在工作中,当比较器402的正输入端,FB1充电时,SET端开始变高。当其达到晶体管1202的门限电压时,Q-Bar端开始变低,同时,具有和ND1类似的NAND门ND2的锁存器另一侧开始变低,并且把RST拉低。当RST被拉低时,置位Q输出端。最初,假设,通过比较器402上FB1等于“0”,而比较器404的正输入端上FB2被初始地设为“1”(SET=0且RST=I),Q-Bar被设置为值“1”,而Q输出端被置0。延时模块1218防止ND1在RST变低之前将SET端拉低。RST变低确保了拉低输入为低(或ND1高),导致了SET/RST的对称过程。
现在参考附图13,说明延时模块1218的示意图。这个延时模块包括多个串联的反相器,每个反相器包含两个串联的晶体管,P通道晶体管1302和N通道晶体管1304,这两个晶体管的栅极连接到一起,并且它们的源极/漏极通路的一端都连接到节点1306,晶体管1302连接在VDD和VSS之间。
现在参考附图14,说明简化的比较器的示意图,它阐明了如何提高供电的独立性。附图14所示的比较器被表示为具有置于VDD和节点1404之间的电流源1402,节点1404连接到两个差分连接的P通道晶体管1406和1408的一端。晶体管1406的栅极与一个输入连接,而晶体管1408的栅极连接到另一个VREF输入。晶体管1406的源极/漏极通路的另一端连接到节点1410,节点1410连接到N通道晶体管1412的源极/漏极通路的一端,晶体管1412的源极/漏极通路的另外一端接地,其栅极在节点1410上与其漏极连接,同时还连接到N通道晶体管1414的栅极上。晶体管1414的源极/漏极通路连接在晶体管1408的另外一端以及VSS之间。此外,P通道型偏置晶体管1416的源极/漏极通路与晶体管1408的源极/漏极通路并联,它的栅极连接到VREF,同时也连接到晶体管1408的栅极上。晶体管1416表示掩模可编程以选择比较器预定偏置的可选晶体管。比较器输入端上的这个偏置有助于供电的独立性。如果没有偏置,下列的式子成立:
有偏置时:
TPariod=2*(-τ*ln(1-VTrip/VDD)+TDalay(comp))
TPariod=2*(-τ*ln(1-ratio)+TDalay(comp))
VTrip=ratio*VDD
没有偏置时:
VTrip=VTrip+VOS
TPariod=2*(-τ*ln(1-ratio-Vos/VDD)+TDalay(comp))
从这些等式中可以看出,增加了VDD的依赖性。通过改变晶体管1416能够增加或者降低供电电源的依赖性,注意,也可能存在跨过晶体管1406的可变晶体管。以这种方法,能够使偏置为负或正。这同样是掩模可编程系统。
现在参考附图15,说明精密振荡器的一个实例的示意图。在集成电路上实现的振荡器中,提供受寄存器2406和寄存器2408控制的可编程内部时钟发生器2402。内部时钟发生器的输出被输入到除法器电路2410,除法器电路2410也由寄存器2408控制,除法器电路的输出被输入到多路复用器2410的一个输入端。这个多路复用器由寄存器2408控制。寄存器2410输出系统时钟(SYSCLK),这个系统时钟被输入到波特率发生器302。除了内部时钟发生器之外,还有外部的晶控的振荡器。提供晶控的内部或者片上振荡器2412,其通过输入电路2414连接到终端2416和2418,连接到外部晶体2416。振荡器2412的输出被输入到多路复用器2410的一个输入端上。此外,在终端2420上提供外部时钟,其也被输入到多路复用器2410的一个输入端上。晶控振荡器2412由寄存器2422控制。
提供内部振荡器2402,使得在系统复位后它将作为默认的系统时钟。内部振荡器周期可以由寄存器2406通过下列等式来编程:
其中fBASE是后面跟随有复位的内部振荡器的频率,ΔT是内部振荡器中的变化,ΔOSCICL表示寄存器2406中所保持的值的变化。典型地,寄存器2406出厂时被校准到规定的频率,举个例子来说,如12.0MHz。
现在参考附图16,说明寄存器2406的表,其中可以看出,位6-0与振荡器的校准寄存器有关,而且它的值可以在内部改变。附图17阐述了表示为其提供的控制的控制寄存器2408。
尽管优选实施例已经被详细描述,但是应该理解,可以进行各种修改,替代及变更,而不会背离权利要求书所限定的本发明的精神和范围。