FPGA小白养成记-RAM实验

RAM即随机存取储存器,它可以随时把数据写入任一指定地址的存储单元,也可以随时从任一指定地址中读出数据,频率决定了它的读写速度。
存放程序以及程序执行过程中产生的中间数据,运算结果等是RAM的主要用途。
今天的实验就是用VIVADO来做RAM实验。

1.实现思路

我们打算分两个模块来写,一个是顶层模块,一个是负责读写的模块。
设置IP核的步骤就不说了。
那么首先我们思考一下如何来写RAM的读写模块。首先读数据和写数据要有(ram_wr_data,ram-rd_data),不然怎么读和写,其次读写地址也要有(ram_addr),没有地址,读和写就无从下手。可以简单理解为,写数据就是将货物放到仓库里,读数据就是从仓库里面拿货物,那么地址就相当于告诉你1号仓库该放什么,2号仓库该放什么,这样你放货物或者拿货物就会非常方便,不至于找不着北。
那么什么时候读,什么时候写呢?此时我们需要一个变量,来决定此时状态是读还是写,我们定义为ram_wea。
那么接下来,我们具体什么时候读什么时候写呢?我的意思是,ram_wea指定了此时是应该读还是写,但是什么时候我们读,什么时候我们写呢?我们设定的写深度和读深度是32位,那么不如我们规定前32位写,后32位读吧。因此我们需要一个计数器,计数器的值为64,这样当计数到前32位时,进行写操作,后32位进行读操作。
最后我们还需要一个使能(ram_en),来起一个总开关的作用,那么此时可能大家有个疑问了,我们不是有复位吗?为什么还要使能开关呢?其实复位和使能不是一个概念,复位是使其回到一个规定的初始状态,而使能则是开关,类似于通电时工作,不通电时不工作的功能。
那么至此大致思路以及清楚了。
接下来直接开冲!

2.代码

首先是ram读写模块的代码

module ram_rw(
input sys_clk,
input sys_rst_n,
output  ram_en,
output  ram_wea,
output  [4:0] ram_addr,
output reg [7:0] ram_wr_data,
input [7:0] ram_rd_data
    );
reg [4:0] ram_addr_rd;
reg [4:0] ram_addr_wr;
assign ram_en = sys_rst_n ;

reg [7:0] rw_cnt;

assign ram_addr =(rw_cnt<=31 && sys_rst_n==1

你可能感兴趣的:(verilog,fpga)