寄存器是数字电路最常见的电路,它们用途很广,在数模混合集成电路中经常被用来控制模拟电路的状态。寄存器到底怎样控制模拟电路?这二者是怎样联系起来的呢?有人经常犯糊涂:寄存器编些代码怎么就能控制模拟电路?数字电路虽然一般情况下0代表低压,1代表高压。但是也不绝对,0有时也可能代表高压,而1也可能代表低压,而模拟电路如果多用了一级倒相器,那信号到底该是高还是低?标准都不统一,不就全乱套了吗?
本文尝试用几个最简单的例子说清楚这个问题。
1. 最简单的模拟电路举例
模拟电路千差万别,这里先就用最简单的倒相器来代表,来说明寄存器如何控制它们的工作状态。
图1 三种不同的倒相器
图1是三种不同的倒相器示意图。图中,A为常见的倒相器,当A_IN1=0时,A_OUT1=1,反之给它1它会输出0,电路具有倒相的功能;B为0使能的倒相器,只有当B_EN1=0时,最上面的P管导通,它才能把VDD接上,否则就供不上电,供电成功后B电路才能化简为A,与A的功能一致;同样,C电路为1使能的倒相器,只有当C_EN1=1时,最下面的N管才能导通,它才能把GND接上,才能完成一个倒相器的功能。
因此,通过给不同的使能端赋以不同的值,就可以通过数字电路控制模拟电路能不能加上电,或者能不能工作,更复杂的控制原理也是相通的。
2. 寄存器的基本原理
在数字电路中,把正在处理的二进制数据或代码暂时存储起来的操作叫做寄存,寄存器的种类繁多,包括但不限于:数据寄存器、变址寄存器、指针寄存器、段寄存器、指令指针寄存器等等。它们的特点就是快速临时存储,可读可写,掉电后信号才会消失,因此如果有需要,一般上电后系统会重新写一遍寄存器,让系统工作在正常的状态。
下图是一个简单的D触发器构成的寄存器原理图。
图2 寄存器基本原理示意图
图2是寄存器基本原理示意图。图中上半部分是一个简单的锁存电路原理示意图和符号图,通过CLK控制开关K1、K2,就可以把D端送来的信号锁存起来,并送到Q端,寄存器就是由多个锁存器构成的。
图中下半部分是一个锁存器阵列,R1、R2、R3是三个寄存器,由ADDR地址信号来选通操作哪个寄存器。
3. 二者是怎么联系起来的?
数字与模拟电路联系说起来也容易,如下图所示,三个模拟电路用三个寄存器控制。
图3 用寄存器控制模拟电路
图3是用寄存器控制模拟电路。图中用有三个寄存器R1、R2、R3分别控制A、B、C三个模拟模块。由于A模块没有控制端,所以无需控制,可以保留下来备用,B模块需要0使能,这时需要通过001地址,给R2寄存器写入一个0信号即可。C模块需要1使能,这时需要通过010地址,给R3寄存器写入一个1信号即可。
寄存器的定义就完成了,其列表如下:
寄存器描述
当然,这个例子只是简单示意说明,只有三个地址,只给两组电路赋值。实际电路中,可能用到的寄存器非常多,地址可能8位或16位,一组赋值就能给多个信号定义其或0或1电平。
一旦电路信号关系确定后,寄存器的地址和赋值就确定下来了,模拟电路只需要整理清楚,自己的模块哪些信号需要数字赋值,高电平有效还是低电平有效即可。
退一步说,就算赋值错误,比如模拟电路多加了一级倒相器,原来的1使能可能变成了0使能,这时只需要告诉数字设计人员更改寄存器赋值代码。数字电路在产品成型后也可以通过通讯端口I2C或者SPI修改寄存器赋值,只要线正确接出来到了寄存器,不用担心调试不出来。
正是寄存器的状态可读可写,为设计提供了更多的灵活性,数字电路设计中经常大量使用寄存器,希望本文让初学者对它们的原理有个简单的认识。
(大象韩20240907)