全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 存储技术 >

RAM/ROM存储器的设计

时间:2023-06-05 15:49

人气:

作者:admin

标签:   随机  RAM  存储器  ROM  设计 

导读:RAM/ROM存储器的设计-随机存储器可以随时从任何一个指定地址中读出数据,也可以随时将数据写入任何一个指定的存储单元中...

随机访问存储器(RAM

01

(1)随机访问存储器(RAM)概述

①随机存储器可以随时从任何一个指定地址中读出数据,也可以随时将数据写入任何一个指定的存储单元中,RAM的结构如下:

图片

②RAM 单元根据地址总线、数据总线以及读写控制线的数目可以分为单口RAM、双口RAM 两大类:

单口RAM只有一套数据总线、地址总线和读写控制线,因此当多个外设需要访问同一块单口RAM 时,需要通过仲裁电路来判断。

双口RAM具有两套完全独立的数据线、地址线和读写控制线,从而实现了大量数据的高速访问以及不同时钟域的数据交换。

(2)随机存储器设计基础

①在Verilog HDL 中,若干个相同宽度的向量构成数组,其中reg 型数组变量就代表着存储器。例如:

reg [7:0] memory[1023:0];

该语句定义了1024 个字的存储器变量memory,每个字的字长为8 位,(说白了,就是有1024个8bit宽的寄存器)经过定义后的memory 型变量可以用下面的语句对存储器单元赋值:

memory [7] = 90;

//存储器memory 的第7 个字被赋值为90

  ②存储器单元中的数据也可以读出,因此存储器型变量相当于一个RAM。由于存储器由逻辑资源产生,因此存储容量越大,所需要的逻辑资源就越多。

(3)单口RAM 单元的实现

  ①单口RAM,只有一套地址总线,读和写是分开(至少不能在同一个周期内完成)。8× 8 位RAM 的设计举例实现如下:

  ②部分信号说明:

addm 为3 比特地址线,可以实现8 个存储单元的寻址;

cs_n 为片选信号,低有效,当cs_n 为低时,存储器处于工作状态(可以读或写);当cs_n 为高时,存储器处于禁止状态(强制输出0)。

we_n 为写使能信号,低有效,当we_n为高时,存储器处于读状态,否则处于写状态。

dout 为存储器的输出端口,din 为存储器的输入端口。

module ram_single(
          input clk,
          input [2:0] addm,
          input cs_n,
          input we_n,
          input [7:0] din,
          output reg [7:0] dout
 );
 reg [7:0] ram1[7:0];
 always @(posedge clk) begin
     if(cs_n)
         dout <= 8'b0000_0000;
     else
         if(we_n)
             dout <= ram1[addm];
         else
             ram1[addm] <= din;
 end
 
endmodule

(4)双口同步RAM 单元

①双口同步RAM 具有两套地址总线,一套用于读数据,一套用于写数据,二者可分别独立操作。128× 8 位双口RAM 的实现举例:

②代码如下所示:

module rom_test(
      output reg [7:0] q,
      input [7:0] d,
      input [6:0] addr_in,
      input [6:0] addr_out,
      input we, clk1, clk2
  );
  reg [6:0] addr_out_reg;
  reg [7:0] mem[127:0];
 always @(posedge clk1)begin
     if (we)
        mem[addr_in] <= d;
 end

 always @(posedge clk2) begin
     q <= mem[addr_out_reg];
     addr_out_reg <= addr_out;
 end
endmodule

只读存储器(ROM)

02

①在数字系统中,由于ROM 掉电后数据不会丢失,对于容量不大的ROM,在Verilog HDL 中可以通过case 语句来实现。

②在应用中,case 语句中的数值可以根据实际需要修改,其中addm 为地址输入信号,cs_n为片选信号,8× 8 位的ROM 模块的实现:

module rom_test(
          input clk,
          input [2:0] addm,
          input cs_n,
          output reg [7:0] dout
  );

  always @(posedge clk) begin
  if(cs_n)
     dout <= 8'b0000_0000;
  else
       case(addm)
           3'b000: dout <= 1;
           3'b001: dout <= 2;
           3'b010: dout <= 4;
           3'b011: dout <= 8;
           3'b100: dout <= 16;
           3'b101: dout <= 32;
           3'b110: dout <= 64;
           3'b111: dout <= 128;
       endcase
  end
endmodule
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信