`timescale 1ns/1ns module rom( input clk, input rst_n, input [7:0]addr, output [3:0]data ); reg [3:0] rom_data[7:0],out; always @( clk or negedge rst_n) begin if(!rst_n) begin rom_data[0]<=4'b0000; rom_data[1]<=4'b0010; rom_data[2]<=4'b0100; rom_data[3]<=4'b0110; rom_data[4]<=4'b1000; rom_data[5]<=4'b1010; rom_data[6]<=4'b1100; rom_data[7]<=4'b1110; out<=4'b0000; end else begin case(addr) 8'b0000_0000:out<=rom_data[0]; 8'b0000_0001:out<=rom_data[1]; 8'b0000_0010:out<=rom_data[2]; 8'b0000_0011:out<=rom_data[3]; 8'b0000_0100:out<=rom_data[4]; 8'b0000_0101:out<=rom_data[5]; 8'b0000_0110:out<=rom_data[6]; 8'b0000_0111:out<=rom_data[7]; default:out<=4'b0000; endcase end end assign data=out; endmodule