`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