计算机组原理

您所在的位置:网站首页 yoga14s存储扩展 计算机组原理

计算机组原理

2023-07-02 01:58| 来源: 网络整理| 查看: 265

任务描述

本关任务:根据提示完善右面的代码块,设计一个存储器(主存)的字和位同时扩展,并实现与 cpu 的连接,使其能够正常工作。要求: 1. 把两块 16 * 4 的存储器模块扩展成 16 * 8 的存储器模块。 2. 继续把两块 16 * 8 的存储器模块扩展成 32 * 8 的存储器模块。

相关知识

为了完成本关任务,你需要掌握:1.存储器的扩展,2.存储器和 CPU 的连接。

存储器的扩展

由于单个存储芯片的容量是有限的,存储器往往是由一定数量的芯片构成的,这使得存储器容量的扩展,通常有位扩展和字扩展两种方式。

位扩展

位扩展是指增加存储字长,而芯片的字数和存储器的字数是一致的。位扩展的连接方式是将各个存储芯片的地址线、片选线和读写线相应地并联起来,而将各芯片的数据线单独列出。 例如:利用 1K × 4 位的 SRAM 芯片,设计一个存储容量为 1K × 8 位的 SRAM 存储器,问:需要芯片,地址线,数据线的数量各为多少? 解析:显然从1K × 4 位 ——> 1k × 8 位,字长不变,只是位长发生了变化。所以使用位扩展。所以: (1)需要芯片数为: ( 1K × 8 )/(1K × 4) = 2 片 (2)需要地址线数为: 1k 表明存储单元个数,1k = 210,说明有 10 根地址线。 (3)需要的数据线数量: 需要组成 8 位的存储器,8 代表数据线的位数,每片芯片占 4 根线即可实现位扩展。

字扩展

字扩展是指增加存储器的字的数量,而位数不变。自扩展将芯片的地址线、读写并联,由片选信号来区分各个芯片。 例如:利用 1K × 8 位的 DRAM 芯片,设计 2K × 8 位的 DRAM 存储器(字扩展),问需要芯片,地址线,数据线的数量各为多少? 解析:显然从 1K × 8 位 ——> 2k × 8 位,字数边长,位数不变,应该选字扩展。 (1)需要几片芯片? d =(2K × 8)/(1K × 8)= 2 (片) (2)需要多少地址线? 2K 个存储单元对应 11 根地址线。 (3)需要多少数据线? 8 位,即 8 条。

字和位同时扩展

字和位同时扩展是指既增加存储字的数量,又增加存储字长。 例如:利用 1K × 4 位的存储芯片,组成 4K × 8 位的存储器。问需要芯片,地址线,数据线的数量各为多少?扩展过程如何? 解析: (1)共需几块芯片: (4K × 8)/(1K × 4)= 4 × 2 = 8 (2)需要几根地址线: 4K 地址空间(存储单元的个数),需要 12 根地址线。 (3)需要几根数据线: 8 根。 (4)扩展过程:先进行位扩展,这个过程相当于分组,将 2 片 1K × 4 位的芯片构成一组,利用位扩展,构成 1K × 8 位的完整存储单元(如何构成,继续往下看)。这样一共可以分成四组。再将这些分组视为一个完整的存储单元,进行字扩展。

主存和 CPU 连接

由于若干芯片构成的主存需要与 CPU 连接,才能在 CPU 的正确控制下完成读写操作。我们前面刚刚讲了理论上可以构成我们需要的芯片,那么实际上如何通过那些地址线和数据线去连接主存与 CPU 呢?大致过程可以分成 5 步。

选择合理的存储芯片 合理选择芯片,是指选择芯片的数量及其种类(即 ROM 还是 RAM)。通常来说,ROM 存放系统程序,标准子程序以及各类常数。RAM 则是为用户编程设置的。在考虑芯片数量的时候,尽量选择使得连线简单方便的芯片。

地址线的连接 CPU 的地址线通常要比存储芯片的地址线数要多,常见的做法是:将 CPU 的低位与存储芯片的地址线相连,CPU 地址的高位一般用于扩充或者片选。例如,CPU 地址线为 16 位(A0 - A15),1K × 4 位的存储器芯片仅有 10 根地址线 A9 - A0 ,这个时候就可以将 CPU 的低地址段 A9 - A0 与芯片 A9 - A0 相连。

数据线的连接 这里跟地址线的连接不同,这里要求数据线数一定要相同。,如果 CPU 数据线与存储芯片的数据线不同,那么要先进行位扩展再连接。

片选线的连接 片选线的连接是 CPU 与存储芯片能否正确工作的关键。存储器由许多存储芯片一起组成,哪一片被选中完全取决于该芯片的片选控制端 CS 能否接受 CPU 的片选有效信号。而片选的有效信号与 CPU 的访问控制信号 MREQ 有关。

读写命令线 读写线一般直接与存储芯片的读/写控制端相连,高电平为读,低电平为写。

//16*4存储器模块

module ram16_4(din,addr,wr,rd,cs,dout);

    parameter D_WIDTH=4;

    parameter A_WIDTH=4;

    input [D_WIDTH-1:0] din;  //写入数据

    //D[3:0]

    input [A_WIDTH-1:0] addr; //地址

    //AD[3:0]

    input wr,rd,cs;   //wr表示写读,rd,cs表示是位扩展还是字扩展

    output [D_WIDTH-1:0] dout;

    reg [D_WIDTH-1:0] ram [2**A_WIDTH-1:0];  //定义存储器,4位,8个

    wire [D_WIDTH-1:0] dout;

    always @(posedge wr)

        if(!cs)

            ram[addr]



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3