在之前的工作中,我们对常见存储器件进行了名词扫盲,通过调用IP核实现了简单的单端口同步读写SRAM、通过Verilog实现了单端口同步读写SRAM、单端口同步写,异步读SRAM、单端口异步读写SRAM,双端口同步读写SRAM,以及双端口异步读写SRAM,这些工作见:
但是随着深入学习发现,之前实现的异步RAM更像是一个时钟无关的RAM;异步双口SRAM应该是读写时钟不同,才能叫异步,像之前写的“异步”SRAM实际为时钟无关的RAM,都没有时钟,如何称为异步?因此,重新对异步双口SRAM进行设计和验证:
目录
一、原理
异步双口SRAM与双端口同步读写SRAM类似,唯一区别就在于两组端口时钟不同,分别在其控制信号的作用下(如:片选、使能、地址等)进行读/写操作;
输入端口有:(异步应该有两组时钟)
reg clk1;//端口1对应时钟
reg [3:0]a1;//输入地址(RAM深度为16,对应地址位宽为4)
reg we1;// write enable,写使能时进行RAM写操作
reg oe1;// output enable,输出使能时RAM读取的结果才能输出
reg cs1;// 片选信号,选择读取哪一个RAM
// 第二套
reg clk2;//端口2对应时钟
reg [3:0]a2;//输入地址(RAM深度为16,对应地址位宽为4)
reg we2;// write enable,写使能时进行RAM写操作
reg oe2;// output enable,输出使能时RAM读取的结果才能输出
reg cs2;// 片选信号,选择读取哪一个RAM
输入输出端口有:
wire [7:0]d1;//读取RAM时数据输出/写入RAM时数据输入
wire [7:0]d2;//读取RAM时数据输出/写入RAM时数据输入
工作过程:
两组端口在各自时钟驱动下,独立的根据各自的控制信号cs/we/oe执行对应的操作;工作过程类似:
cs有效(为1)、we为1时,写使能,将d输入数据写入a对应地址处;
cs有效(为1)、we为0时,读使能,oe有效(为1)时将a地址处的数据读出到d上;
注意:
双端口RAM同时读写时会出现冲突,如:同时对同一地址读操作,此时两个端口能直接同时读出数据吗?存在仲裁吗?再如:同时对同一地址进行写操作,此时写地址的结果应该是啥?是报错?是仲裁?写的内容是哪