数字IC笔试基础——RAM的Verilog语言实现
在FPGA设计中,经常会用到RAM,这里的RAM一般指的是静态的RAM(SRAM)。一般FPGA中就有所谓的block RAM, 它就是现成的RAM资源。通常情况下,我们使用IP核,进行设计,我们来设计自己的IP核。
RAM分为单端、伪双端、真双端三种模式。
1、单端RAM读写共享一个地址
2、伪双端RAM一个写端口,一个读端口,各自的地址和使能信号,写端口只负责写,读端口只负责读,所以称为伪双端
3、真双口RAM可以在任意时间访问任意地址,两个端口的地址是一样的,即共享内存和地址。这就会带来一个问题:同时读写一个地址会发生冲突。基于这个点矛盾就要设置限制条件。
我们使用伪双端RAM(在这里就称为双端口RAM)做数据缓存,其中FIFO就是基于双端口RAM。FIFO分为同步和异步,是因为双口RAM分为同步和异步。下节介绍同步和异步FIFO的IP实现。
主要设计如下ram:
1、用Verilog实现一个同步双端口ram,深度128,位宽16bit。A口写入,B口读出。支持片选,读写请求,要求代码可综合。
2、用Verilog实现一个异步双端口ram,深度128,位宽16bit。A口写入,B口读出。支持片选,读写请求,要求代码可综合。
一、用Verilog实现一个同步双端口ram,深度128,位宽16bit
A口写入,B口读出。支持片选,读写请求,要求代码可综合。
设计框图如下:
verilog 代码实现:
module double_ram(
clk,
rst_n,
cs_n,//片选信号,低有效
//A port write signals
wrdata_a,
wraddr_a,
wrena_n,
//B port read signals
rdaddr_b,