module apb_sram
#(
parameter DATA_WIDTH=5'd16,
parameter DATA_DEPTH=3'd5,
parameter ADDR_WIDTH=7'd32
)
(
input PCLK,
input PSEL,
input PENABLE,
input PWRITE,
input [DATA_WIDTH-1:0] PWDATA,
input [ADDR_WIDTH-1:0] PADDR,
input PRESETn,
output CEN,
output reg [DATA_WIDTH-1:0] PRDATA
);
integer i;
reg [DATA_WIDTH-1:0] SRAM [DATA_DEPTH-1:0];//二维数组定义
assign CEN=PSEL&&PENABLE;//片??信?
always@(posedge PCLK or negedge PRESETn)
begin
if(!PRESETn)
begin //SRAN复位,内部清?
for(i=0;i<DATA_DEPTH;i=i+1)
begin
SRAM [i]<=16'b 0000_0000_0000_0000;
end
PRDATA<=0;
end
else
begin //非复?
if(CEN==1&&PWRITE==1) //SRAM写操?
begin
SRAM [PADDR]<=PWDATA;
end
else if(CEN==1&&PWRITE==0) //SRAM读操?
begin
PRDATA<=SRAM[PADDR];
end
else
begin
PRDATA<=PRDATA;
end
end
end
endmodule
<
SOC设计之APB接口的简易SRAM
最新推荐文章于 2024-06-16 23:43:21 发布