RAM存储器

这篇具有很好参考价值的文章主要介绍了RAM存储器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RAM是存储器分类的一个分支,属于静态存储器, RAM是逻辑设计中非常重要的一个特性, RAM一般包括单端口 RAM Single Port RAM),双端口 RAM设计( Two Port RAM),真双端口 RAM设计( Dual Port RAM )。

半导体存储器包括随机存储器和只读存储器,随机存储器RAM也包括静态RAM和动态RAM,其中动态RAM包括SDRAM,DDR SDRAM,DDR2 SDRAM,DDR3 SDRAM以及DDR4 SDRAM等。DDR SDRAM是目前非常流行也比较复杂的存储器,特点是容量非常大,速度也很高,掉电数据丢失。DDR SDRAM一般是单独的存储芯片。

静态RAM一般包单端口RAM(Single Port RAM,缩写SP RAM,只有一个读写口,同一个时刻只能发起或写),双端口RAM设计(Two Port RAM,缩写TP RAM,也叫伪双口,一个端口只能读,一个端口只能写),真双端口RAM设计(Dual Port RAM,缩写DP RAM,每个端口都可以进行读或者写操作),特点是容量相对不是很大,速度非常高,掉电数据丢失。静态RAM在FPGA或者ASIC设计中都是非常重要的一个器件,可以说寄存器、组合逻辑和静态RAM构成了整个数字电路体系,足见静态RAM的重要性。

只读存储器包括PROM,EPROM,EEPROM等,目前EEPROM用的相对比较多,特点是容量相对较小,存储的一般是不易丢失的信息,比如网口或者USB 2.0芯片一般会配有一个EEPROM存储相关的固件信息。

寄存器和ram,Verilog,fpga开发

几种 RAM的特性和区别:

寄存器和ram,Verilog,fpga开发

一般选择RAM根据功能需求和带宽需求来选择,最合适的就是最好的。

1、 比如我们需要读一个配置,这个配置只在上电的时候CPU配置一下就好了,其他的时候不需要写操作,那么我们直接选择单口RAM即可,只需要一个端口即可,要么是写操作,要么是读操作。

2、 比如我们需要使用FIFO(先进先出存储器)来存储数据,就可以选择伪双口RAM即可,一个写口,一个读口,且读和写可以同时发生。

3、 比如我们要实现一个对10000个车厢进行人数计数的功能,车厢有两个门,一个门只上车,一个门只下车,上车时候需要再原有人数基础上加一,下车时候需要在原有人数基础上减一,每个时刻都可能有人上车和下车,那么要使用逻辑统计这么多车厢的人数时,就需要有两个写端口的RAM,深度为10000,这个就需要使用真双端口RAM。因为如果使用寄存器资源进行统计,仅这个10000个车厢的计数就可能把FPGA寄存器资源耗尽。

RAM和FIFO的区别:

1、 RAM是指有地址线、数据线和使能的存储单元,可以通过地址对任意地址进行读写访问。FIFO也是一个端口只读,另一个端口只写。FIFO与伪双口RAM的区别在于,FIFO为先入先出,没有地址线,不能对存储单元寻址;而伪双口RAM两个端口都有地址线,可以对存储单元寻址;

2、 使用场景不一样,FIFO一般放在传输带宽不一致的地方,用来吸收流量突发,而RAM一般用在需要根据地址进行写或者读的地方,比如存储一些配置信息。

单口RAM

单端口RAM指的是只有一个读写口,就是只有一组数据线和地址线,就是读和写都是通过这个口来访问RAM,但是同一个时刻只能访问一个,要么是读,要么是写。下图是一个Intel的单端口RAM模型。

寄存器和ram,Verilog,fpga开发

Intel单端口 RAM一般由如下信号构成:

寄存器和ram,Verilog,fpga开发

​​

RAM还有一个重要的特性是 RAM读延迟,就是 RAM发起读,然后读数据有效的周期数 。 这个延迟一般是1,如果 RAM输出再因为改善时序寄存一拍,那么 RAM的读延迟就是 2。 如下所示,在读 使能为 1且地址有效 的情况下( WEA为 0 ENA为 1), 下一拍 DOUTA即为读到的数据 ,一般来说,读使能和读地址不发生变化, DOUTA不会发生变化 。

寄存器和ram,Verilog,fpga开发

另外RAM读数据只使用 RAM读有效时的读数据,没有发起读的时候,读数据 一般 不建议使用,因此此时的读数据 依赖于 RAM模型 的特性 ,有 可能是不确定的值。

寄存器和ram,Verilog,fpga开发

伪双端口RAM

伪双端口RAM指的是有两个读写端口,但是一个端口只能读,一个端口只能写 ,伪双端口 RAM一般叫 TP RAM。 一般 FIFO内部例化的 都是伪双端口 RAM。
伪双 端口 RAM 伪双 端口 RAM指的是有两个读写口,就是有两组数据线和地址线,一组是写数据线,一组是读数据线 ,同一个时刻 写和读可以同时 访问。下图是一个 Intel的 伪双端口 RAM模型。

寄存器和ram,Verilog,fpga开发

Intel伪双 端口 RAM一般由如下信号构成:

寄存器和ram,Verilog,fpga开发

TP RAM还有一个重要的特性是 RAM读延迟,就是 RAM发起读,然后读数据有效的周期数。这个延迟一般是 1,如果 RAM输出再因为改善时序寄存一拍,那么 RAM的读延迟就是 2。如下所示,在读使能为 1且地址有效的情况下( ENB为 1),下一拍 DOUTB即为读到的数据,一般来说,读使能和读地址不发生变化, DOUTB不会发生变化。

寄存器和ram,Verilog,fpga开发

另外RAM读数据建议只使用 RAM读有效时的读数据,没有发起读的时候,读数据一般不建议使用,因此此时的读数据依赖于 RAM模型的特性,有可能是不确定的值。(与单端口RAM一致)

TP RAM有一个问题,就是读和写有两个端口,两个端口可以同时发起读和写,那么如果读和写同时有效且读和写是同一个地址时,此时读数据是否还是正确的数据呢, 这个情况属于RAM读写冲突,属于逻辑设计中非常重要的一个特性处理 。
一般设计中发起读写冲突,此时的读数据很可能是无效的读数据,因此一般读写冲突时候,会把最新的写数据直接赋给读数据,此时叫做 写 穿通到读 。 如下图所示:

寄存器和ram,Verilog,fpga开发

从图中我们可以看出,Cycle 2读和写地址不同,读可以正常读到数据,但是到 Cycle 3时,读和写地址相同且读写都有效,此处如果不做特殊处理,那么读数据是无效的。需要我们把写数据寄存一拍同步到读侧。
Verilog一般这样处理:先产生一个冲突信号,使用时序逻辑产生,读写冲突的下一拍有效,然后使用这个信号做判断,如果这个信号有效,则 dout直接使用 din_dly1(写数据寄存一拍的数据)赋值,否则使用 q信号。

always @ (posedge clk or negedge rst_n) begin 
 if (rst_n == 1'b0) 
 conflict <= 1'b0 ; 
 else if ( wen && ren && (waddr == raddr )) 
 conflict <= 1'b1 ; 
 else 
 conflict <= 1'b0 ; 
 end 
 
 assign dout = conflict ? din_dly1 : q ;

真双端口RAM

下面我们来看下真双端口RAM。真双端口 RAM指的是有两个独立的读写口,就是有两组数据线和地址线,一组是读或者写数据线, 另外一组也是读或者写数据线,同一个时刻两个端口可以同时访问 ,两个端口可以是读和读,也可以是写和读,还可以是写和写 。下图是一个 Xilinx的真双端口RAM模型, Intel的真双端口RAM模型也是类似的,实际上 ASIC中的真双端口RAM也是类似的。

寄存器和ram,Verilog,fpga开发

真双端口RAM一般由如下信号构成:

寄存器和ram,Verilog,fpga开发

DP RAM的 读写冲突 问题比 TP RAM要复杂很多 为什么会复杂很多呢?这个是因为 DP RAM的端口数比较多,所以冲突处理也比较复杂,不像 TP RAM只有读和写冲突。如下表列出冲突组合情况:

寄存器和ram,Verilog,fpga开发

其中端口A和 B的读写冲突和 TP RAM的情况 完全相同 ,只不过有端口 A和端口 B发生读和写冲突和端口 A和端口 B发生写和读冲突两种情况 ,哪种情况处理都是需要把最新的写数据寄存一拍赋值给读数据 ,此处不再赘述 。
DP RAM引入 了一个写和写冲突 ,我们先来看下 什么是写写冲突,写写冲突 表示两个端口写写使能同时有效且写和写地址相同。
写写冲突发生时候,逻辑需要关断一个写,把两个写端口都需要更新的值处理到一个写端口上面。因为任何的 DP RAM都不支持写和写冲突,如果发生了,那么最终的 写 数据就是不确定的值。
举个例子:有一个 DP RAM A口为入向功能累加更新,假设每次累加 2个, B口为出向功能递减更新,假设每次递减 1个,那么正常情况下,每次都是 A口读出之前的值,再加个 2,然后回写回去。 B口读出之前的值,再减个 1,然后回写回去 。 但是当A和B发生写写冲突的时候,此时逻辑需要关断一个写,关断 A口还是B口都是可以的,但是更新的值需要是处理后的值,处理后的值也就是先加 2再减 1,就是一个端口加 1就可以了,另外一个端口不用回写。写写冲突发生的情况,如下图所示:

寄存器和ram,Verilog,fpga开发

可以看出Cycle 3周期两个端口写写使能同时有效且写和写地址相同,发生写写冲突,此时逻辑需要做特殊处理,也就是把两个写端口都需要更新的值处理到一个写端口上面。如下图所示:

寄存器和ram,Verilog,fpga开发

从图中我们可以看出, Cycle 2写 和写地址不同, 两个写端口不用特殊处理 Cycle 3时 把两个写端口都需要更新的值处理到一个写端口上面,值更新 A端口, B端口关断 。文章来源地址https://www.toymoban.com/news/detail-755147.html

到了这里,关于RAM存储器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RAM存储器

    RAM是存储器分类的一个分支,属于静态存储器, RAM是逻辑设计中非常重要的一个特性, RAM一般包括单端口 RAM Single Port RAM),双端口 RAM设计( Two Port RAM),真双端口 RAM设计( Dual Port RAM )。 半导体存储器包括随机存储器和只读存储器,随机存储器RAM也包括静态RAM和动态R

    2024年02月05日
    浏览(27)
  • ROM、RAM、内存、内存条、外存、内部存储器、外部存储器、FLASH等之间的关系

    ​   各位看到这一系列的名词,是否也曾感受到一头雾水?研究了一上午终于理清了它们之间的关系,直接上图说明,相信你看完也能恍然大悟!若有错误麻烦在评论区指出。 这里有几点需要明确: 存BOIS的ROM也属于内存(因为CPU也可以对其直接寻址),但我们生活中常说

    2023年04月26日
    浏览(38)
  • 计算机组成原理(期末或考研备考)- 存储器(RAM和ROM重点讲解)

    主存储器:也称内存,存放正在运行程序和数据,CPU可以直接访问,容量存储较小,价格较贵。 辅助存储器:也称外存(绝大多数是磁盘),存放电脑的应用程序等,如果想要运行某一程序,往往需要先将其从外存调入内存,存储空间大,访问速度较慢,价格较低。 高速缓

    2024年02月11日
    浏览(36)
  • IC设计-存储器分类汇总(区别RAM、ROM、SRAM、 DDR、EEPROM、FLASH)

    1、存储器分类图 2、用分类对比的方法介绍不同的存储器特点 2.1  存储器按照用途分类 :        可以分为 主存储器(内部存储)和辅助存储器(外部存储) 。主存储器是指CPU能直接访问的,有内存、一级/二级缓存等,一般采用半导体存储器;辅助存储器包括软盘、硬盘

    2024年02月02日
    浏览(24)
  • 【FPGA/数字IC】Multiport RAM,多读多写寄存器-——基于FPGA BRAM的多端口地址查找表与FPGA BRAM的资源分析

    目录 背景 手写Multiport Ram Multiport RAM 代码方案 资源评估 Multiport RAM 资源利用的优化 资源评估 防止读写冲突的组合逻辑设计(写优先) 仿真和时序 单口写数据 单端口读数据 多口读相同数据 多口同时读不同数据 背景         在多端口交换机的设计中,交换机的每个端口

    2024年04月26日
    浏览(31)
  • verilog——移位寄存器

    在Verilog中,你可以使用移位寄存器来实现数据的移位操作。移位寄存器是一种常用的数字电路,用于将数据向左或向右移动一个或多个位置。这在数字信号处理、通信系统和其他应用中非常有用。以下是一个使用Verilog实现的简单移位寄存器的示例: module ShiftRegister (   inpu

    2024年02月05日
    浏览(36)
  • Verilog实现移位寄存器

    Verilog实现8位环形移位寄存器 左移: 环形就是首尾相连 右移: 普通的移位寄存器用for语句实现: 普通左移: tb测试: 图形分析: 双向shift:就是加个判断

    2024年02月11日
    浏览(44)
  • Verilog基础之十一、移位寄存器实现

    目录 一、前言 二、工程设计 ​2.1 工程代码 2.2 综合结果 2.3 仿真结果     移位寄存器SRL在工程中属于使用频率较高个模块,可用于存储数据,实现串并转换;根据数据移动方向可分为左移寄存器,右移寄存器,左移是向数据高位移动,右移是向数据低位移动。  工程中包

    2024年02月11日
    浏览(33)
  • Verilog基础:寄存器输出的两种风格

    相关文章 Verilog基础 https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482         Verilog中的寄存器操作一般指的是那些对时钟沿敏感而且使用非阻塞赋值的操作。例如状态机中的状态转移,实际上就是一种寄存器操作,因为这相当于将下一状态的组合逻辑连接至

    2024年02月04日
    浏览(31)
  • 【【典型电路设计之片内存储器的设计之RAM的Verilog HDL描述一】】

    RAM是随机存储器,存储单元的内容可按需随意取出或存入。这种存储器在断电后将丢失所有数据,一般用来存储一些短时间内使用的程序和数据。 其内部结构如下图所示: 例:用Verilog HDL 设计深度为8,位宽为8的单端口RAM。 单口RAM,只有一套地址总线,读和写操作是分开的

    2024年02月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包