27 lines
682 B
Verilog
27 lines
682 B
Verilog
// expect-wr-ports 1
|
|
// expect-rd-ports 1
|
|
|
|
module generic_sram_byte_en #(
|
|
parameter DATA_WIDTH = 32,
|
|
parameter ADDRESS_WIDTH = 4
|
|
) (
|
|
input i_clk,
|
|
input [DATA_WIDTH-1:0] i_write_data,
|
|
input i_write_enable,
|
|
input [ADDRESS_WIDTH-1:0] i_address,
|
|
input [DATA_WIDTH/8-1:0] i_byte_enable,
|
|
output reg [DATA_WIDTH-1:0] o_read_data
|
|
);
|
|
|
|
reg [DATA_WIDTH-1:0] mem [0:2**ADDRESS_WIDTH-1];
|
|
integer i;
|
|
|
|
always @(posedge i_clk) begin
|
|
for (i=0;i<DATA_WIDTH/8;i=i+1)
|
|
if (i_write_enable && i_byte_enable[i])
|
|
mem[i_address][i*8 +: 8] <= i_write_data[i*8 +: 8];
|
|
o_read_data <= mem[i_address];
|
|
end
|
|
|
|
endmodule
|