本文主要是介绍【数字ic自整资料】存储器及不同端口RAM对比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考资料
【FPGA】zynq 单端口RAM 双端口RAM 读写冲突 写写冲突_双口ram-CSDN博客
华为海思数字芯片设计笔试第五套_10、下列不属于动志数组内建函数的是: a lengtho b. new c. delete() d-CSDN博客
目录
1、计算器典型存储体系结构
2、三种不同端口RAM
(1)单端口RAM(Single-port RAM)
(2)伪双端口RAM(Simple dual-port RAM)
(3)真双端口RAM(True dual-port RAM)
3、RAM冲突问题
(1)读写冲突
(2)写写冲突
1、计算器典型存储体系结构
(1)常说的cache缓存,就是指SRAM。
(2)cache加在reg和memory之间,用来缓冲reg和memory速度差异过大导致数据传输过程中CPU需要等待的情况。
(3)双倍数据速率同步DRAM(ddr sdram)是目前主流的dram, 它的特点是:ddr sdram会在时钟信号的上边沿和下边沿均采样数据,因此可以大大增加数据的吞吐量。
(4)RAM的基本结构可分为三个部分:存储矩阵,地址译码器,读写电路。
RAM和ROM对比:
ROM | RAM | |
存储 | 永久存储,掉电保存 | 临时存储,掉电擦除 |
读写 | 只能读不能写 | 随机读写 |
容量 | 小 | 大 |
成本 | 低 | 高 |
应用 | 储存程序代码 | 储存运行数据 |
SRAM和DRAM对比:
SRAM | DRAM | |
结构 | 六个晶体管(结构复杂) | 一个晶体管+一个电容(结构简单) |
成本 | 高 | 低 |
数据刷新 | 不需要 | 需要 |
集成度 | 低 | 高 |
速度 | 快 | 慢 |
成本 | 高 | 低 |
应用 | 高速缓冲存储器 | 大容量主储存器 |
2、三种不同端口RAM
(1)单端口RAM(Single-port RAM)
输入只有一组数据线和一组地址线,读写共用地址线,输出只有一个端口。如果CPU需要读取RAM中的数据并将其写入到RAM的另一个位置,必须先执行读取操作,然后执行写入操作。
(2)伪双端口RAM(Simple dual-port RAM)
输入有一组数据线,两组地址线,输出只有一个端口。伪双端口RAM可以提供并行读写操作,避免了传统单端口RAM的等待时间,因此有更快的访问速度和响应时间。
其中,端口A只用于完成写操作,端口B只用于完成读操作,允许读写同时进行,且可以不同时钟。
多出来的端口的用于ECC:可以对单比特进行纠正 对双比特进行检错,属于伪双端口RAM独有
(3)真双端口RAM(True dual-port RAM)
输入有两组地址线和两组数据线,输出有两个端口。所以双口RAM两个端口都分别带有读写端口,可以在没有干扰的情况下进行读写,彼此互不干扰,可以相当于对单端口 RAM 的所有信号做了一个复制处理。
这种RAM通常用于高端计算机系统中,因为它可以提高系统性能。例如,在多处理器系统中,多个处理器可以同时访问同一块双端口RAM,从而提高系统的并行处理能力。
3、RAM冲突问题
双端口RAM会遇到的问题:
读写冲突(Write-Write Collisions): 在同一时间,两个端口对同一个地址,一个进行读取,一个进行写入操作。(这个在伪双端口RAM中也会遇到)
写写冲突(Write-Write Collisions): 在同一时间,两个端口对同一个地址进行写入操作。
(1)读写冲突
读写冲突:即同时刻读写同一地址所出现的冲突,例如理论上我们已经向某个地址写入了新的数据,我们也希望可以同时读到这个地址内新写入的数据,但实际上,这个新数据还没有写入 RAM 中,所以我们读出来的可能是 RAM 默认值,或者是 RAM 该地址中上一次的值,这便是读写冲突。
可以设定双口RAM为读优先还是写优先。
在上图中 WEA[3:0] 为写使能,字节使能,每一个bit可以选择写入数据的那个字节被写入,1表示写入该字节 ,0表示不写入该字节, DINA[31:0]为写数据总线,DOUTBarf为读优先情况下读数据总线的值,DOUTBawf为写优先情况下读数据总线的值,RAM Contents为RAM中存储的数据。
在读优先情况下,同时对一个地址进行读写,会先把RAM里原本的数值发送到DOUTBarf读数据总线, DOUTBARF输出的值一直为RAM原本的数据。
在写优先情况下,WEA[3:0] 为b0101 表示写入第1个字节和第3个字节, 此时 DINA[31:0]为AAAA AAAA 会写入00AA 00AA的数据 因为是写优先 ,所以会把数据先发送到DOUTBarf读数据总线上,但是读数据总线此时也在读取数据,此时DOUTBarf上的值,就不知道是原本RAM里的数据 还是新写入的这个数据,就成了一个未知态。
所以当发生读写冲突时,读优先的模式下读出的是读地址中存储的上一个数据;写优先模式时读出的是未知的数据“XX”。
解决读写冲突:写优先:当检测到读和写同一个地址的时候,当前读输出数据不从RAM中读取,而是直接取写入数据,该方法叫做“写穿通到读“。
(2)写写冲突
表示端口A和端口B写使能同时有效且写地址DINA和DINB相同,此时需要关断一个写,把两个写端口都需要更新的值处理到一个写端口上。切记任何双端口 RAM 都不支持写写冲突。
如果数据有效使能不同,还可以将两个数据合并成一个数据传入RAM;但是如果有效使能有重叠,那么就会出现x不定态。
所以写写冲突的情况在双端口RAM中避免。
这篇关于【数字ic自整资料】存储器及不同端口RAM对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!