存储器的拓展
参考:计算机组成原理微课版
B站视频https://www.bilibili.com/video/BV1r54y1U7ra
存储器的构成
完整的存储芯片由以下部分构成
- 译码驱动
- 存储矩阵
- 读写电路
表示方法 | 示例 | 意义 |
---|---|---|
位表示法 | 1k×4位 | 该芯片有1k个存储单元,每个单元长度为4个二进制位 |
字节表示法 | 128B | 该芯片有128个单元(一个存储单元由8个二进制位组成) |
对于一个1K×4的芯片,数据线有4条,因为每个数据有四位。地址线有10条,因为1k即1024=2102^{10}210,即10位的二进制数可以表示的十进制数范围是1024以内。字线(地址线译出来的用于取每一个存储字的线路)自然有1024条
扩展方法
位扩展
又称字长扩展或者数据总线扩展
叫位扩展是因为用到的芯片的数据总线位宽小于CPU的,所以要组合出一个新的芯片,该芯片的数据位宽经过扩展后与CPU的数据位宽相等。
两个1K×4位的芯片组合为一个1K×8位的芯片是可行的,每个存储单元有8位,显然地址线是10不变,而数据线则是8条
字扩展
又称容量扩展或者地址总线扩展
字扩展是让存储芯片的存储单元数目拓展(不考虑每个单元的字长),以两个1K×4位扩展成一个2K×4位为例,地址线新增一位(因为2102^{10}210变到2112^{11}211取对数,至于为什么取对数是因为长度为11二进制能表示的十进制正数是2k以内的)。
这里要注意的是A10A_{10}A10它在两个引出来的线之间有个取反,这样才能保证一个片选的值为1而另一个为0。数据线由于储存单元的位长度没变(还是4位)所以就不变。
上图是针对2个以上的芯片拓展的布线。
字位同时扩展
其实就是上面两种方式的缝合。
其他的细节
MREQ#信号
在谭志虎书中的示意图是有MREQ#这个输出信号的,这个东西的意思是Memory request,即存储器请求。
RAM与ROM的选择
系统程序工作区和用户程序区是RAM
系统程序区是ROM
英文名 | 中文 | 特点 | 速度 |
---|---|---|---|
RAM | 随机存储器(运存) | 可读可写,断电后数据消失 | 通常比ROM快 |
ROM | 只读存储器 | 只能读出无法写入信息,断电后数据还在 | 通常没RAM快 |
例题
有一块CPU,地址线16根,数据线8根,用MREQ‾\overline{MREQ}MREQ作为访存控制信号(低电平有效),WR‾\overline{WR}WR作为读/写控制信号(低电平为读,高电平为写),还有两类存储芯片:
类型 | 规格 |
---|---|
RAM | 1k×4位、4k×8位、8k×8位三种 |
ROM | 2k×8位、4k×8位、8k×8位三种 |
此外还有74138和若干门电路
地址分配如下
用途 | 范围 |
---|---|
系统程序区 | 6000H~67FFH |
用户程序区 | 6800H~6BFFH |
问CPU和存储器连接方式
分析如下:整个题考查存储芯片的扩展和与CPU的链接
- 由分区可知系统程序区使用ROM,用户程序区使用RAM
- 由数据线是8根可知需要的是N×8位的芯片
- N的计算通过上面各区的范围计算得出
- WR‾\overline{WR}WR不用连接到ROM,因为它是只读不写的(所以它的读写输入端直接接地)
N的计算方法是用范围上界减去范围下界,系统程序区ROM这样减完之后结果是0111 1111 1111
,也就是2112^{11}211个地址,也就是说N=11,同理RAM是2102^{10}210,即N=10
据上所述,ROM一片2k×8位的就够了,这需要11根数据线。而RAM需要两片1k×4位的进行位扩展得到一个新的1k×8位的,这需要10根数据线。
系统程序区
0110 0111 1111 1111
0110 0000 0000 0000
用户程序区
0110 1011 1111 1111
0110 1000 0000 0000
观察发现它们倒数10位都是相同的(布线就可以布到一块,即A0A_0A0~A9A_9A9)
借由74138和地址线来选择是操作ROM还是RAM就得从它们地址范围的异同下手,如上图所示,倒数第12到倒数第14位(地址线的A11A_{11}A11~A13A_{13}A13)是不一样的。根据译码器译出的信号,只有Y4Y_4Y4和Y5Y_5Y5的输出有用(一共7个输出,Y0Y_0Y0和Y7Y_7Y7)。因此也只用到这两个输出(所以也只需要画出这俩就行了)
100对应着Y4Y_4Y4输出0,101对应着Y5Y_5Y5输出0,这个输出的作用是连到片选上,而片选CS‾\overline{CS}CS是负逻辑的,所以74138的输出刚好合适。
其余的地址线,A0A_{0}A0~A10A_{10}A10 连上ROM,A0A_{0}A0~A9A_{9}A9连上RAM。
这里涉及到另外一个问题,即101对应Y5Y_5Y5输出0时,并不是代表这就得选RAM,如下图所示
上图下面举了那个例子,显然当A10A_{10}A10是1时不行,也就是说当A10A_{10}A10和Y‾5\overline{Y}5Y5都为0时才符合片选RAM的条件,并且由于片选CS‾\overline{CS}CS是负逻辑,所以那个逻辑门就是输入和输出都是取反的。
数据线部分是这样的:
- D0D_0D0~D7D_7D7连接到ROM
- D0D_0D0~D3D_3D3连接到第一个RAM
- D4D_4D4~D7D_7D7连接到第二个RAM
完整且正确的图如下所示(上方的图存在线路交叉的问题,具有歧义)
最后提一句74138的输入引脚,G1=1,G2=G3=0时,该元件可以工作,与连到CPU哪里无关,要的是个输入到上面的结果,只要符合上面要求就能正常工作。