Use hardcoded BROM instead of readmemh
diff --git a/verilog/rtl/bin2v.py b/verilog/rtl/bin2v.py
new file mode 100644
index 0000000..af18e00
--- /dev/null
+++ b/verilog/rtl/bin2v.py
@@ -0,0 +1,77 @@
+# https://github.com/JasonLrh/bin2verilog
+import sys
+import os
+import argparse
+
+#
+# argument handle
+#
+parser = argparse.ArgumentParser(description='bin file to Verilog.v')
+parser.add_argument('-t', help='timescale', default='1ns/1ps')
+parser.add_argument('-b', help='Path to input [.bin] file', default='a.bin')
+parser.add_argument('-o', help='Path to output [.v] file', default='ROM.v')
+parser.add_argument('-addr_width', help='addr width', default=16, type=int)
+parser.add_argument('-data_width', help='data width', default=8, type=int)
+parser.add_argument('-addr_name', help='addr name', default='addr')
+parser.add_argument('-data_name', help='data name', default='data')
+parser.add_argument('-module_name', default="ROM")
+
+args = parser.parse_args()
+
+#
+# data_width
+#
+if args.data_width != 8:
+ print("! data width not support : " + str(args.data_width))
+ exit(0)
+
+#
+# load bin file
+#
+with open(args.b, mode='rb') as input_bin_file:
+ bin_content = input_bin_file.read()
+
+if bin_content is None:
+ # no content in file or error in open file
+ print("Warning: check input [.bin] file")
+ exit(0)
+
+length = len(bin_content)
+
+if length > 2**int(args.addr_width):
+ # addr bus is short or bin file too big
+ print("Warning: addr bus width is short for this file")
+ length = 2**int(args.addr_width)
+
+#
+# write verilog file
+#
+with open(args.o, mode="w", encoding='utf-8') as output_v_file:
+ # test writeablility
+ if output_v_file.writable() == False:
+ print("! [.v] file can't write")
+ exit(0)
+
+ # write job
+ # head
+ output_v_file.write(
+f"""`timescale {args.t}
+module {args.module_name}(
+ input [{args.addr_width - 1}:0] {args.addr_name},
+ output reg [{args.data_width - 1}:0] {args.data_name}
+);
+always@(*)
+ case ({args.addr_name})
+""" )
+
+ # data content
+ for i in range(length):
+ output_v_file.write(f" {args.addr_width}" + f"'h%0{str(args.addr_width // 4)}X: "%i + f"{args.data_name} = {args.data_width}" + f"'h%0{str(args.data_width // 4)}X;\n"%bin_content[i])
+
+ # end of file
+ output_v_file.write(
+f""" endcase
+endmodule
+"""
+ )
+ print("Write OK")
\ No newline at end of file
diff --git a/verilog/rtl/bootrom.mif b/verilog/rtl/bootrom.mif
deleted file mode 100644
index 77d25b3..0000000
--- a/verilog/rtl/bootrom.mif
+++ /dev/null
@@ -1,256 +0,0 @@
-31
-FE
-FF
-AF
-21
-FF
-9F
-32
-CB
-7C
-20
-FB
-3E
-00
-E0
-42
-3E
-91
-E0
-40
-3E
-01
-C3
-FE
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-00
-E0
-50
diff --git a/verilog/rtl/brom.v b/verilog/rtl/brom.v
index 1b6896b..93e0a7c 100644
--- a/verilog/rtl/brom.v
+++ b/verilog/rtl/brom.v
@@ -1,35 +1,265 @@
-`timescale 1ns / 1ps
-`default_nettype wire
-//////////////////////////////////////////////////////////////////////////////////
-// Company:
-// Engineer:
-//
-// Create Date: 21:10:17 02/09/2018
-// Design Name:
-// Module Name: brom
-// Project Name:
-// Target Devices:
-// Tool versions:
-// Description:
-//
-// Dependencies:
-//
-// Revision:
-// Revision 0.01 - File Created
-// Additional Comments:
-//
-//////////////////////////////////////////////////////////////////////////////////
+`timescale 1ns/1ps
module brom(
input [7:0] a,
- output [7:0] d
- );
-
- reg [7:0] brom_array [0:255]; // 256 Bytes BROM array
-
- initial begin
- $readmemh("bootrom.mif", brom_array, 0, 255);
- end
-
- assign d = brom_array[a];
-
+ output reg [7:0] d
+);
+always@(*)
+ case (a)
+ 8'h00: d = 8'h31;
+ 8'h01: d = 8'hFE;
+ 8'h02: d = 8'hFF;
+ 8'h03: d = 8'hAF;
+ 8'h04: d = 8'h21;
+ 8'h05: d = 8'hFF;
+ 8'h06: d = 8'h9F;
+ 8'h07: d = 8'h32;
+ 8'h08: d = 8'hCB;
+ 8'h09: d = 8'h7C;
+ 8'h0A: d = 8'h20;
+ 8'h0B: d = 8'hFB;
+ 8'h0C: d = 8'h3E;
+ 8'h0D: d = 8'h00;
+ 8'h0E: d = 8'hE0;
+ 8'h0F: d = 8'h42;
+ 8'h10: d = 8'h3E;
+ 8'h11: d = 8'h91;
+ 8'h12: d = 8'hE0;
+ 8'h13: d = 8'h40;
+ 8'h14: d = 8'h3E;
+ 8'h15: d = 8'h01;
+ 8'h16: d = 8'hC3;
+ 8'h17: d = 8'hFE;
+ 8'h18: d = 8'h00;
+ 8'h19: d = 8'h00;
+ 8'h1A: d = 8'h00;
+ 8'h1B: d = 8'h00;
+ 8'h1C: d = 8'h00;
+ 8'h1D: d = 8'h00;
+ 8'h1E: d = 8'h00;
+ 8'h1F: d = 8'h00;
+ 8'h20: d = 8'h00;
+ 8'h21: d = 8'h00;
+ 8'h22: d = 8'h00;
+ 8'h23: d = 8'h00;
+ 8'h24: d = 8'h00;
+ 8'h25: d = 8'h00;
+ 8'h26: d = 8'h00;
+ 8'h27: d = 8'h00;
+ 8'h28: d = 8'h00;
+ 8'h29: d = 8'h00;
+ 8'h2A: d = 8'h00;
+ 8'h2B: d = 8'h00;
+ 8'h2C: d = 8'h00;
+ 8'h2D: d = 8'h00;
+ 8'h2E: d = 8'h00;
+ 8'h2F: d = 8'h00;
+ 8'h30: d = 8'h00;
+ 8'h31: d = 8'h00;
+ 8'h32: d = 8'h00;
+ 8'h33: d = 8'h00;
+ 8'h34: d = 8'h00;
+ 8'h35: d = 8'h00;
+ 8'h36: d = 8'h00;
+ 8'h37: d = 8'h00;
+ 8'h38: d = 8'h00;
+ 8'h39: d = 8'h00;
+ 8'h3A: d = 8'h00;
+ 8'h3B: d = 8'h00;
+ 8'h3C: d = 8'h00;
+ 8'h3D: d = 8'h00;
+ 8'h3E: d = 8'h00;
+ 8'h3F: d = 8'h00;
+ 8'h40: d = 8'h00;
+ 8'h41: d = 8'h00;
+ 8'h42: d = 8'h00;
+ 8'h43: d = 8'h00;
+ 8'h44: d = 8'h00;
+ 8'h45: d = 8'h00;
+ 8'h46: d = 8'h00;
+ 8'h47: d = 8'h00;
+ 8'h48: d = 8'h00;
+ 8'h49: d = 8'h00;
+ 8'h4A: d = 8'h00;
+ 8'h4B: d = 8'h00;
+ 8'h4C: d = 8'h00;
+ 8'h4D: d = 8'h00;
+ 8'h4E: d = 8'h00;
+ 8'h4F: d = 8'h00;
+ 8'h50: d = 8'h00;
+ 8'h51: d = 8'h00;
+ 8'h52: d = 8'h00;
+ 8'h53: d = 8'h00;
+ 8'h54: d = 8'h00;
+ 8'h55: d = 8'h00;
+ 8'h56: d = 8'h00;
+ 8'h57: d = 8'h00;
+ 8'h58: d = 8'h00;
+ 8'h59: d = 8'h00;
+ 8'h5A: d = 8'h00;
+ 8'h5B: d = 8'h00;
+ 8'h5C: d = 8'h00;
+ 8'h5D: d = 8'h00;
+ 8'h5E: d = 8'h00;
+ 8'h5F: d = 8'h00;
+ 8'h60: d = 8'h00;
+ 8'h61: d = 8'h00;
+ 8'h62: d = 8'h00;
+ 8'h63: d = 8'h00;
+ 8'h64: d = 8'h00;
+ 8'h65: d = 8'h00;
+ 8'h66: d = 8'h00;
+ 8'h67: d = 8'h00;
+ 8'h68: d = 8'h00;
+ 8'h69: d = 8'h00;
+ 8'h6A: d = 8'h00;
+ 8'h6B: d = 8'h00;
+ 8'h6C: d = 8'h00;
+ 8'h6D: d = 8'h00;
+ 8'h6E: d = 8'h00;
+ 8'h6F: d = 8'h00;
+ 8'h70: d = 8'h00;
+ 8'h71: d = 8'h00;
+ 8'h72: d = 8'h00;
+ 8'h73: d = 8'h00;
+ 8'h74: d = 8'h00;
+ 8'h75: d = 8'h00;
+ 8'h76: d = 8'h00;
+ 8'h77: d = 8'h00;
+ 8'h78: d = 8'h00;
+ 8'h79: d = 8'h00;
+ 8'h7A: d = 8'h00;
+ 8'h7B: d = 8'h00;
+ 8'h7C: d = 8'h00;
+ 8'h7D: d = 8'h00;
+ 8'h7E: d = 8'h00;
+ 8'h7F: d = 8'h00;
+ 8'h80: d = 8'h00;
+ 8'h81: d = 8'h00;
+ 8'h82: d = 8'h00;
+ 8'h83: d = 8'h00;
+ 8'h84: d = 8'h00;
+ 8'h85: d = 8'h00;
+ 8'h86: d = 8'h00;
+ 8'h87: d = 8'h00;
+ 8'h88: d = 8'h00;
+ 8'h89: d = 8'h00;
+ 8'h8A: d = 8'h00;
+ 8'h8B: d = 8'h00;
+ 8'h8C: d = 8'h00;
+ 8'h8D: d = 8'h00;
+ 8'h8E: d = 8'h00;
+ 8'h8F: d = 8'h00;
+ 8'h90: d = 8'h00;
+ 8'h91: d = 8'h00;
+ 8'h92: d = 8'h00;
+ 8'h93: d = 8'h00;
+ 8'h94: d = 8'h00;
+ 8'h95: d = 8'h00;
+ 8'h96: d = 8'h00;
+ 8'h97: d = 8'h00;
+ 8'h98: d = 8'h00;
+ 8'h99: d = 8'h00;
+ 8'h9A: d = 8'h00;
+ 8'h9B: d = 8'h00;
+ 8'h9C: d = 8'h00;
+ 8'h9D: d = 8'h00;
+ 8'h9E: d = 8'h00;
+ 8'h9F: d = 8'h00;
+ 8'hA0: d = 8'h00;
+ 8'hA1: d = 8'h00;
+ 8'hA2: d = 8'h00;
+ 8'hA3: d = 8'h00;
+ 8'hA4: d = 8'h00;
+ 8'hA5: d = 8'h00;
+ 8'hA6: d = 8'h00;
+ 8'hA7: d = 8'h00;
+ 8'hA8: d = 8'h00;
+ 8'hA9: d = 8'h00;
+ 8'hAA: d = 8'h00;
+ 8'hAB: d = 8'h00;
+ 8'hAC: d = 8'h00;
+ 8'hAD: d = 8'h00;
+ 8'hAE: d = 8'h00;
+ 8'hAF: d = 8'h00;
+ 8'hB0: d = 8'h00;
+ 8'hB1: d = 8'h00;
+ 8'hB2: d = 8'h00;
+ 8'hB3: d = 8'h00;
+ 8'hB4: d = 8'h00;
+ 8'hB5: d = 8'h00;
+ 8'hB6: d = 8'h00;
+ 8'hB7: d = 8'h00;
+ 8'hB8: d = 8'h00;
+ 8'hB9: d = 8'h00;
+ 8'hBA: d = 8'h00;
+ 8'hBB: d = 8'h00;
+ 8'hBC: d = 8'h00;
+ 8'hBD: d = 8'h00;
+ 8'hBE: d = 8'h00;
+ 8'hBF: d = 8'h00;
+ 8'hC0: d = 8'h00;
+ 8'hC1: d = 8'h00;
+ 8'hC2: d = 8'h00;
+ 8'hC3: d = 8'h00;
+ 8'hC4: d = 8'h00;
+ 8'hC5: d = 8'h00;
+ 8'hC6: d = 8'h00;
+ 8'hC7: d = 8'h00;
+ 8'hC8: d = 8'h00;
+ 8'hC9: d = 8'h00;
+ 8'hCA: d = 8'h00;
+ 8'hCB: d = 8'h00;
+ 8'hCC: d = 8'h00;
+ 8'hCD: d = 8'h00;
+ 8'hCE: d = 8'h00;
+ 8'hCF: d = 8'h00;
+ 8'hD0: d = 8'h00;
+ 8'hD1: d = 8'h00;
+ 8'hD2: d = 8'h00;
+ 8'hD3: d = 8'h00;
+ 8'hD4: d = 8'h00;
+ 8'hD5: d = 8'h00;
+ 8'hD6: d = 8'h00;
+ 8'hD7: d = 8'h00;
+ 8'hD8: d = 8'h00;
+ 8'hD9: d = 8'h00;
+ 8'hDA: d = 8'h00;
+ 8'hDB: d = 8'h00;
+ 8'hDC: d = 8'h00;
+ 8'hDD: d = 8'h00;
+ 8'hDE: d = 8'h00;
+ 8'hDF: d = 8'h00;
+ 8'hE0: d = 8'h00;
+ 8'hE1: d = 8'h00;
+ 8'hE2: d = 8'h00;
+ 8'hE3: d = 8'h00;
+ 8'hE4: d = 8'h00;
+ 8'hE5: d = 8'h00;
+ 8'hE6: d = 8'h00;
+ 8'hE7: d = 8'h00;
+ 8'hE8: d = 8'h00;
+ 8'hE9: d = 8'h00;
+ 8'hEA: d = 8'h00;
+ 8'hEB: d = 8'h00;
+ 8'hEC: d = 8'h00;
+ 8'hED: d = 8'h00;
+ 8'hEE: d = 8'h00;
+ 8'hEF: d = 8'h00;
+ 8'hF0: d = 8'h00;
+ 8'hF1: d = 8'h00;
+ 8'hF2: d = 8'h00;
+ 8'hF3: d = 8'h00;
+ 8'hF4: d = 8'h00;
+ 8'hF5: d = 8'h00;
+ 8'hF6: d = 8'h00;
+ 8'hF7: d = 8'h00;
+ 8'hF8: d = 8'h00;
+ 8'hF9: d = 8'h00;
+ 8'hFA: d = 8'h00;
+ 8'hFB: d = 8'h00;
+ 8'hFC: d = 8'h00;
+ 8'hFD: d = 8'h00;
+ 8'hFE: d = 8'hE0;
+ 8'hFF: d = 8'h50;
+ endcase
endmodule