`timescale 1ns/1ns
module RAM_1port(
input clk,
input rst,
input enb,
input [6:0]addr,
input [3:0]w_data,
output wire [3:0]r_data
);
//=========================================================================//
//*********************************NOTE************************************//
/*
信息:
1、在enb为1的时候写数据,在enb为0的时候读数据
2、利用时钟的上升沿写数据,下降沿读数据
3、同步时钟、单端口RAM
*/
//=========================================================================\\
//=========================================================================\\
//*****************************define sinals*******************************\\
//=========================================================================\\
reg [3:0] ram_data[127:0] ; //二维数组定义
integer i ;
always@(posedge clk or negedge rst)begin
if(!rst)begin //RAM初始化
for(i = 0 ; i < 128 ; i = i + 1 )begin
ram_data[i] <= 4'b0 ;
end
end
else if(enb)begin //写入数据
ram_data[addr] <= w_data ;
end
else
ram_data[addr] <= ram_data[addr] ;
end
assign r_data = (enb == 1'b0)? ram_data[addr]:'d0 ;//读出数据
//=========================================================================\\
//*****************************main code***********************************\\
//=========================================================================\\
endmodule