打印

【蛋疼系列】第三章 CPU的其他功能单元

[复制链接]
2801|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fjh|  楼主 | 2008-9-1 20:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
fjh|  楼主 | 2008-9-1 20:06 | 只看该作者

正文

第3章 CPU的其他功能单元

 
3.1 BUS Control Interface单元

其实从第一章到这里,还是在谈论memory controller单元。CPU要访问挂在地址和数据总线上的外设就需要总线控制信号的参与,前面也提到了,目前为止大多数嵌入式CPU仍然保留着这种并行的BUS Interface控制单元。最常见的控制信号莫过于RD、WR、ALE。


RD常常连接外设的OE,WR常连接外设的WE。OE就是output enable,CPU使能外设在数据总线上输出数据;WE就是write enable,使能外设允许CPU对其写入数据。ALE只出现在数据总线与地址总线低8位地址引脚复用的CPU中(如8051、8086),ALE意为Address Latch Enable,使能地址锁存,用于配合外部锁存器件的如74LS373(573),当ALE信号有效时373芯片把当前总线上的低八位地址锁存住,送给外设,因为下一个时钟周期,总线上的就是数据的低八位了。


8086的BUS 控制信号需要使用一片8288来进行译码,因为8086通过3个引脚S0-S2的8种不同译码状态来给出ALE、DEN、MEM_WR、MEM_RD等控制信号。


有时你还会看到有些CPU还有类似ARDY,SRDY,HOLD,HLDA等的总线控制信号,8086就有(8086真是一款经典的CPU)。ARDY顾名思义,异步(传输)已准备好信号,SRDY则是同步传输已准备好。这俩信号都是外设(譬如一台打印机)输入给CPU的,意思是外设告诉CPU:我READY了,你可以读写我的某个地址数据。


HOLD也是外设给CPU的请求信号,意思是目前外设需要使用总线,CPU这边先别往总线上送数据。这种情况多发生在多CPU共享同一块存储器时,CPU 甲告诉CPU 乙,它要暂时取得总线的控制权。

HLDA顾名思义,就是CPU 乙对甲所提出的HOLD请求做一肯定的回应(Ack)。


在2440上我们还可以看到更多一些的引脚。

譬如你能看到GCS0~GCS7,它们都是来自2440CPU的存储器片选控制单元(Chip Select Unit)。2440支持最大1GB的寻址空间,于是它设计了这样一个逻辑,把1GB的连续空间分为了8个区,每个区128M。当程序中寻址到该范围内的地址,这些片选信号自动有效,激活该地址上的存储器。CPU里有了这种片选控制单元,某种程度上简化了外部译码逻辑。


你还可以看到BWE0:DQM0 ~ BWE3:DQM3这四个引脚。这就是第一章提到的,当CPU数据总线宽度跟存储芯片的数据宽度不一致的时候,需要增加高低字节(高低字)控制信号。因为2440的寻址方式是字节寻址,而2440数据总线宽度32位(32除8等于4,所以要提供四个控制引脚以便能寻址到字节),SDRAM宽度则是16位,因此需要把上述的四个控制引脚作为SDRAM的低两位地址线,并且要两片级联(这里以第二章提到的16位数宽的SDRAM为例子,它们的连线方式例子如下图一)。
 

3.2 时钟、上电复位

80年代的8086系统常用8284A来完成这两个工作。8284A可以输出5M和8M的时钟,可以根据输入端经过内部的斯密特触发器产生可靠的RESET信号。

MCU一般用无源晶体来产生时钟,MPU和DSP常用更准确的有源晶振。请注意一点字眼上的区别,无源VS有源,晶体VS 晶振。

它们的区别:无源晶体没有电压的问题,信号电平是可变的,同样的晶体可以适用于多种电压的CPU,而且价格通常也较低,缺点是信号质量较差。

而有源晶振就是晶体再配上若干电路,并留了电源引脚,加电源即可输出稳定的振荡信号。对于时序要求敏感的应用,还是有源的晶振好,因为可以选用比较精密的晶振,甚至是高档的温度补偿晶振。有些CPU内部没有起振电路,这时只能选择有源晶振了。其缺陷是其信号电平是固定的,譬如3.3V,或者5V,需要根据CPU的电压电平来选择匹配,灵活性较差,价格也相对晶体高很多。

对于ARM等同时存在多时钟的系统,外部晶振也会不限于一个,如对于带实时时钟RTC功能的片子,一般外部配置一个手表晶振32.768k,同时再配个电池。
 
小小的出个题,貌似前两年比较多应届生面试时被问到:图二中1M电阻和两个电容的作用是什么?它们是否必须?只用万用表能否量出晶振起振了没?

对于复位电路,有廉价的实现方式,也有奢侈的实现方式。低档MCU一般使用最简单的阻容充电式电路,通过电容的充电时间来获得足够的复位时间。有些CPU是高电平复位,有些则是低电平复位,没关系,都可以用该阻容复位电路,低电平复位方式的CPU就把复位脚用电阻上拉然后电容接地,高电平复位的则相反对待。待电容充电完成,电位处于逻辑低(高),复位脚就失效,MCU开始处于正常工作状态。若想加入按键复位功能也很简单,把按键跟电容并联即可。

除此外,还可以使用电源监控和复位芯片如IMP707、MAX691等,这属于较奢侈的实现方式。有些场合需要用外部的单片机或者CPLD、FPGA来控制CPU进行热复位,这种情况下就是外部的IO口直接接到CPU的reset脚了。


3.3 外部中断输入引脚

应该没有哪款CPU没有外部中断输入引脚吧?不用的话,设计原理图时应可靠地处置,譬如低电平触发的,就上拉;下降沿触发的,就接地,总之保证其状态不会被触发。


3.4 JTAG

JTAG貌似简单,但是暗藏杀机,一旦不注意,查都很难查得出来。不打算作详细分析了,网上好像也有相应**。两个原则:芯片datasheet有说明的,按说明接;有官方应用电路的,按官方电路接;都没有的,按图三来接。

 
顺便提一下,对于同个电路上的多片同类器件,一般都可以设计成JTAG菊花链的形式把各片器件串起来,共用一个JTAG头,这样就省了很多电路板空间。譬如常用于电信语音音频处理单板上的DSP阵列,FPGA阵列,等等。菊花链电路一般通用如下,具体当然还是那句话:看datasheet:(图三)

 
不过设计成菊花链的时候,很容易忽略一点就是电源的能力。不要小看多片片子级联后的电流消耗,我试过一片1117带不起三片ACTEL的FPGA A3P060,发现编程的时候软件老是提示编不了程。我开始时是带五片片子,别说编程,连JTAG链子都找不到。这是新人的错误,后人不该再犯。


3.5 MMU
两年前偶尔看到某网友说了一句:面试一个嵌入式系统工程师,不需要问太多东西,就让ta解释一下对MMU的理解就基本够了,足见理解MMU是需要不少基础知识的。MMU虽然没有外引电路引脚,但是往往设计嵌入式硬件平台的工程师是需要同时负责电路调试的,绕不开对MMU的配置(如果所用的CPU有MMU的话),因此还是必须理解MMU。


要理解MMU,必须首先了解这些方面知识:
A 扁平式(Flat)的内存访问机制,即之前提到的寻址方式和编址机制(再次体现了熟悉编址的重要性,因为寻址对于计算机来说是最基础的东西)
B 嵌入式系统内存管理的概念和意义。
C 虚拟地址、内存分页、存储器页帧的概念。
D 多任务多线程操作系统的任务调度(任务内存分配,任务堆栈,越界)
E CPU cache的概念及其替换和写操作策略(计算机组成原理课程)
然后就可以顺利地阅读关于MMU的介绍**了。我不在此画蛇添足。
下期预告:外设接口


3.6 本章题外废话
纸上得来终觉浅,绝知此事要躬行。


本章的图:

使用特权

评论回复
板凳
zwfj2418| | 2008-9-2 09:49 | 只看该作者

哦~~耶~~~沙发~~

     坐着沙发看蛋疼~~~顺便学习下~~~~~

使用特权

评论回复
地板
iC921| | 2008-9-2 15:36 | 只看该作者

很好!

但不知为何叫做:【蛋疼系列】

使用特权

评论回复
5
ch2003_23| | 2008-9-2 19:08 | 只看该作者

顶……

使用特权

评论回复
6
fjh|  楼主 | 2008-9-2 23:33 | 只看该作者

回四楼

古有司马太傅被切卵蛋而得巨著《史记》,小弟东施效颦,闲得蛋疼,看看能否也出一点拙作,遂为之。^_^

不过老板看到我闲着,马上给了新任务。现在人不闲了,蛋不疼了,腿脚也不抽筋了....写的东西果然就开始烂了,哎。

使用特权

评论回复
7
niezheyuan| | 2008-9-4 19:36 | 只看该作者

俺顶的你蛋疼

使用特权

评论回复
8
hq_y| | 2008-9-4 19:56 | 只看该作者

呵呵不错

使用特权

评论回复
9
srandtime0| | 2008-9-6 10:02 | 只看该作者

^_^

俺忙得蛋疼,闲得蛋疼。蛋疼的时候来看看。跟进!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

fjh

16

主题

56

帖子

0

粉丝