Example #1
0
def run_synthesis_script_and_report_area(list_of_selected_checkers):
    name_string = name_string_generator(list_of_selected_checkers)

    # print "here", name_string

    if package_file.test_mode:
        return package_file.area_coverage_results[name_string][0]

    checkers_file_name = package_file.unit_under_test.lower(
    ) + "_checker" + name_string + ".vhd"
    top_file_name = package_file.unit_under_test.lower(
    ) + "_checker" + name_string + "_top.vhd"
    script_file_name = package_file.unit_under_test + "_with_checkers_" + name_string + "_synthesis.script"

    if package_file.debug:
        print "-----------------------"
        print "calling the synthesis script with the following parameters:"
        print "$1: module name:", package_file.module_file_name
        print "$2: checkers file name", checkers_file_name
        print "$3: top file name", top_file_name
        print "$4: script file name", script_file_name
        print "$5: name string:", name_string

    os.system("sh ./synthesis_script.sh" + " " +
              package_file.module_file_name + " " + checkers_file_name + " " +
              top_file_name + " " + script_file_name + " " + name_string +
              " " + package_file.unit_under_test)

    if os.path.isfile("temp/area" + name_string + ".txt"):
        return parse_area_report("temp/area" + name_string + ".txt")
    else:
        raise ValueError("area" + name_string + ".txt not found")
Example #2
0
def calculate_coverage(list_of_selected_checkers):
    name_string = name_string_generator(list_of_selected_checkers)

    if package_file.test_mode:
        return package_file.area_coverage_results[name_string][1]
    if len(list_of_selected_checkers) == 1:
        extract_checker_info(name_string)
    return parse_coverage_report("coverage_results/fstat" + str(name_string))
def gen_fifo_checker_top(checker_id):
    name_string = name_string_generator(checker_id)

    fifo_checker_top = open(
        "checker_vhdl/fifo_control_part_checker" + name_string + "_top.vhd",
        'w')

    fifo_checker_top.write("library ieee;\n")
    fifo_checker_top.write("use ieee.std_logic_1164.all;\n")
    fifo_checker_top.write("use IEEE.STD_LOGIC_ARITH.ALL;\n")
    fifo_checker_top.write("use IEEE.STD_LOGIC_UNSIGNED.ALL;\n")
    fifo_checker_top.write("use IEEE.NUMERIC_STD.all;\n")
    fifo_checker_top.write("use IEEE.MATH_REAL.ALL;\n")
    fifo_checker_top.write("\n")
    fifo_checker_top.write("entity FIFO_control_part_with_checkers_top is\n")
    fifo_checker_top.write("    port (  DRTS: in std_logic;  \n")
    fifo_checker_top.write("            read_en_N : in std_logic;\n")
    fifo_checker_top.write(
        "            read_en_E : in std_logic;                        \n")
    fifo_checker_top.write("            read_en_W : in std_logic;\n")
    fifo_checker_top.write("            read_en_S : in std_logic;\n")
    fifo_checker_top.write("            read_en_L : in std_logic;\n")
    fifo_checker_top.write(
        "            read_pointer: in std_logic_vector(3 downto 0);\n")
    fifo_checker_top.write(
        "            write_pointer: in std_logic_vector(3 downto 0);\n")
    fifo_checker_top.write("            CTS_out: in std_logic;\n")
    fifo_checker_top.write("\n")
    fifo_checker_top.write("            CTS_in: out std_logic; \n")
    fifo_checker_top.write("            empty_out: out std_logic; \n")
    fifo_checker_top.write("            full_out: out std_logic;\n")
    fifo_checker_top.write(
        "            read_pointer_in: out std_logic_vector(3 downto 0); \n")
    fifo_checker_top.write(
        "            write_pointer_in: out std_logic_vector(3 downto 0);\n")
    fifo_checker_top.write("            read_en_out: out std_logic;\n")
    fifo_checker_top.write("            write_en_out: out std_logic; \n")
    fifo_checker_top.write("\n")
    fifo_checker_top.write("            -- Checker outputs\n")

    string_to_write = ""
    if '1' in checker_id:
        string_to_write += "err_write_en_write_pointer,\n"
    if '2' in checker_id:
        string_to_write += "err_not_write_en_write_pointer,\n"
    if '3' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_not_empty,\n"
    if '4' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_empty,\n"
    if '5' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_not_full,\n"
    if '6' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_full,\n"
    if '7' in checker_id:
        string_to_write += "err_read_pointer_increment,\n"
    if '8' in checker_id:
        string_to_write += "err_read_pointer_not_increment,\n"
    if '9' in checker_id:
        string_to_write += "err_CTS_in,\n"
    if '10' in checker_id:
        string_to_write += "err_write_en,\n"
    if '11' in checker_id:
        string_to_write += "err_not_CTS_in,\n"
    if '12' in checker_id:
        string_to_write += "err_not_write_en,\n"
    if '13' in checker_id:
        string_to_write += "err_read_en_mismatch,\n"

    string_to_write = string_to_write[:len(string_to_write) - 2]
    string_to_write += " : out std_logic\n"
    fifo_checker_top.write(string_to_write)

    fifo_checker_top.write("    );\n")
    fifo_checker_top.write("end FIFO_control_part_with_checkers_top;\n")
    fifo_checker_top.write("\n")
    fifo_checker_top.write(
        "architecture behavior of FIFO_control_part_with_checkers_top is\n")
    fifo_checker_top.write("\n")
    fifo_checker_top.write("component FIFO_control_part_pseudo is\n")
    fifo_checker_top.write("    port (  DRTS: in std_logic;  \n")
    fifo_checker_top.write("            read_en_N : in std_logic;\n")
    fifo_checker_top.write(
        "            read_en_E : in std_logic;                        \n")
    fifo_checker_top.write("            read_en_W : in std_logic;\n")
    fifo_checker_top.write("            read_en_S : in std_logic;\n")
    fifo_checker_top.write("            read_en_L : in std_logic;\n")
    fifo_checker_top.write(
        "            read_pointer: in std_logic_vector(3 downto 0);\n")
    fifo_checker_top.write(
        "            write_pointer: in std_logic_vector(3 downto 0);\n")
    fifo_checker_top.write("            CTS_out: in std_logic;\n")
    fifo_checker_top.write("\n")
    fifo_checker_top.write("            CTS_in: out std_logic; \n")
    fifo_checker_top.write("            empty_out: out std_logic; \n")
    fifo_checker_top.write("            full_out: out std_logic;\n")
    fifo_checker_top.write(
        "            read_pointer_in: out std_logic_vector(3 downto 0); \n")
    fifo_checker_top.write(
        "            write_pointer_in: out std_logic_vector(3 downto 0);\n")
    fifo_checker_top.write("            read_en_out: out std_logic;\n")
    fifo_checker_top.write("            write_en_out: out std_logic\n")
    fifo_checker_top.write("    );\n")
    fifo_checker_top.write("end component;\n")
    fifo_checker_top.write("\n")
    fifo_checker_top.write("component FIFO_control_part_checkers is\n")
    fifo_checker_top.write("    port (  DRTS: in std_logic;\n")
    fifo_checker_top.write("            CTS_out: in std_logic;\n")
    fifo_checker_top.write("            CTS_in: in std_logic;\n")
    fifo_checker_top.write("            read_en_N : in std_logic;\n")
    fifo_checker_top.write(
        "            read_en_E : in std_logic;                        \n")
    fifo_checker_top.write("            read_en_W : in std_logic;\n")
    fifo_checker_top.write("            read_en_S : in std_logic;\n")
    fifo_checker_top.write("            read_en_L : in std_logic;\n")
    fifo_checker_top.write(
        "            read_pointer: in std_logic_vector(3 downto 0);\n")
    fifo_checker_top.write(
        "            read_pointer_in: in std_logic_vector(3 downto 0);\n")
    fifo_checker_top.write(
        "            write_pointer: in std_logic_vector(3 downto 0); \n")
    fifo_checker_top.write(
        "            write_pointer_in: in std_logic_vector(3 downto 0); \n")
    fifo_checker_top.write("            empty_out: in std_logic;\n")
    fifo_checker_top.write("            full_out: in std_logic;\n")
    fifo_checker_top.write("            read_en_out: in std_logic;\n")
    fifo_checker_top.write("            write_en_out: in std_logic; \n")
    fifo_checker_top.write("\n")
    fifo_checker_top.write("            -- Checker outputs\n")

    string_to_write = ""
    if '1' in checker_id:
        string_to_write += "err_write_en_write_pointer,\n"
    if '2' in checker_id:
        string_to_write += "err_not_write_en_write_pointer,\n"
    if '3' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_not_empty,\n"
    if '4' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_empty,\n"
    if '5' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_not_full,\n"
    if '6' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_full,\n"
    if '7' in checker_id:
        string_to_write += "err_read_pointer_increment,\n"
    if '8' in checker_id:
        string_to_write += "err_read_pointer_not_increment,\n"
    if '9' in checker_id:
        string_to_write += "err_CTS_in,\n"
    if '10' in checker_id:
        string_to_write += "err_write_en,\n"
    if '11' in checker_id:
        string_to_write += "err_not_CTS_in,\n"
    if '12' in checker_id:
        string_to_write += "err_not_write_en,\n"
    if '13' in checker_id:
        string_to_write += "err_read_en_mismatch,\n"

    string_to_write = string_to_write[:len(string_to_write) - 2]
    string_to_write += " : out std_logic\n"
    fifo_checker_top.write(string_to_write)

    fifo_checker_top.write("            );\n")
    fifo_checker_top.write("end component;\n")
    fifo_checker_top.write("\n")
    fifo_checker_top.write(
        "signal CTS_in_sig, empty_out_sig, full_out_sig, read_en_out_sig, write_en_out_sig: std_logic;\n"
    )
    fifo_checker_top.write(
        "signal read_pointer_in_sig, write_pointer_in_sig: std_logic_vector(3 downto 0);\n"
    )
    fifo_checker_top.write("\n")
    fifo_checker_top.write("begin \n")
    fifo_checker_top.write("\n")
    fifo_checker_top.write("CTS_in <= CTS_in_sig;\n")
    fifo_checker_top.write("read_pointer_in <= read_pointer_in_sig;\n")
    fifo_checker_top.write("write_pointer_in <= write_pointer_in_sig;\n")
    fifo_checker_top.write("empty_out <= empty_out_sig;\n")
    fifo_checker_top.write("full_out <= full_out_sig;\n")
    fifo_checker_top.write("read_en_out <= read_en_out_sig;\n")
    fifo_checker_top.write("write_en_out <= write_en_out_sig;\n")
    fifo_checker_top.write("\n")
    fifo_checker_top.write("-- FEIFO Control Part instantiation\n")
    fifo_checker_top.write(
        "FIFO_CONTROL_PART: FIFO_control_part_pseudo port map (DRTS => DRTS, \n"
    )
    fifo_checker_top.write(
        "                                                      read_en_N => read_en_N, read_en_E => read_en_E, read_en_W => read_en_W, read_en_S => read_en_S, read_en_L => read_en_L,\n"
    )
    fifo_checker_top.write(
        "                                                      CTS_out => CTS_out,\n"
    )
    fifo_checker_top.write(
        "                                                      read_pointer => read_pointer, write_pointer => write_pointer, \n"
    )
    fifo_checker_top.write(" \n")
    fifo_checker_top.write(
        "                                                      CTS_in => CTS_in_sig, read_pointer_in => read_pointer_in_sig, write_pointer_in => write_pointer_in_sig,\n"
    )
    fifo_checker_top.write(
        "                                                      empty_out => empty_out_sig, full_out => full_out_sig, \n"
    )
    fifo_checker_top.write(
        "                                                      read_en_out => read_en_out_sig, write_en_out => write_en_out_sig \n"
    )
    fifo_checker_top.write(
        "                                                     );\n")
    fifo_checker_top.write(" \n")
    fifo_checker_top.write("-- Checkers instantiation\n")
    fifo_checker_top.write(
        "CHECKERS: FIFO_control_part_checkers port map (DRTS => DRTS,\n")
    fifo_checker_top.write(
        "                                               CTS_in => CTS_in_sig, CTS_out => CTS_out,\n"
    )
    fifo_checker_top.write(
        "                                               read_en_N => read_en_N, read_en_E => read_en_E, read_en_W => read_en_W, read_en_S => read_en_S, read_en_L => read_en_L,\n"
    )
    fifo_checker_top.write(
        "                                               read_pointer => read_pointer, read_pointer_in => read_pointer_in_sig, write_pointer => write_pointer, write_pointer_in => write_pointer_in_sig,\n"
    )
    fifo_checker_top.write(
        "                                               empty_out => empty_out_sig, full_out => full_out_sig, \n"
    )
    fifo_checker_top.write(
        "                                               read_en_out => read_en_out_sig, write_en_out => write_en_out_sig,\n"
    )
    fifo_checker_top.write(" \n")

    string_to_write = ""
    if '1' in checker_id:
        string_to_write += "err_write_en_write_pointer => err_write_en_write_pointer,\n"
    if '2' in checker_id:
        string_to_write += "err_not_write_en_write_pointer => err_not_write_en_write_pointer,\n"
    if '3' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_not_empty => err_read_pointer_write_pointer_not_empty,\n"
    if '4' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_empty => err_read_pointer_write_pointer_empty,\n"
    if '5' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_not_full => err_read_pointer_write_pointer_not_full,\n"
    if '6' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_full => err_read_pointer_write_pointer_full,\n"
    if '7' in checker_id:
        string_to_write += "err_read_pointer_increment => err_read_pointer_increment,\n"
    if '8' in checker_id:
        string_to_write += "err_read_pointer_not_increment => err_read_pointer_not_increment,\n"
    if '9' in checker_id:
        string_to_write += "err_CTS_in => err_CTS_in,\n"
    if '10' in checker_id:
        string_to_write += "err_write_en => err_write_en,\n"
    if '11' in checker_id:
        string_to_write += "err_not_CTS_in => err_not_CTS_in,\n"
    if '12' in checker_id:
        string_to_write += "err_not_write_en => err_not_write_en,\n"
    if '13' in checker_id:
        string_to_write += "err_read_en_mismatch => err_read_en_mismatch,\n"

    string_to_write = string_to_write[:len(string_to_write) - 2]
    fifo_checker_top.write(string_to_write)

    fifo_checker_top.write("                       );\n")
    fifo_checker_top.write("\n")
    fifo_checker_top.write("end behavior;\n")

    fifo_checker_top.close()
Example #4
0
def gen_arbiter_checker_top(checker_id):
    name_string = name_string_generator(checker_id)

    arbiter_checker_top = open("checker_vhdl/arbiter_checker"+name_string+"_top.vhd", 'w')

    arbiter_checker_top.write("library ieee; \n")
    arbiter_checker_top.write("use ieee.std_logic_1164.all; \n")
    arbiter_checker_top.write("use IEEE.STD_LOGIC_ARITH.ALL; \n")
    arbiter_checker_top.write("use IEEE.STD_LOGIC_UNSIGNED.ALL; \n")
    arbiter_checker_top.write("use IEEE.NUMERIC_STD.all; \n")
    arbiter_checker_top.write("use IEEE.MATH_REAL.ALL; \n")
    arbiter_checker_top.write(" \n")
    arbiter_checker_top.write("entity Arbiter_with_checkers_top is \n")
    arbiter_checker_top.write("    port  ( Req_N, Req_E, Req_W, Req_S, Req_L:in std_logic; -- From LBDR modules \n")
    arbiter_checker_top.write("            DCTS: in std_logic; -- Getting the CTS signal from the input FIFO of "
                              "the next router/NI (for hand-shaking) \n")
    arbiter_checker_top.write("            RTS_FF: in std_logic; \n")
    arbiter_checker_top.write("            state: in std_logic_vector (5 downto 0); -- 6 states for Arbiter's FSM \n")
    arbiter_checker_top.write("             \n")
    arbiter_checker_top.write("            -- Arbiter outputs \n")
    arbiter_checker_top.write("            Grant_N, Grant_E, Grant_W, Grant_S, Grant_L:out std_logic; -- Grants "
                              "given to LBDR requests (encoded as one-hot) \n")
    arbiter_checker_top.write("            Xbar_sel : out std_logic_vector(4 downto 0); -- select lines for XBAR \n")
    arbiter_checker_top.write("            RTS_FF_in: out std_logic; -- Valid output which is sent to the next "
                              "router/NI to specify that the data on the output port is valid  \n")
    arbiter_checker_top.write("            state_in: out std_logic_vector (5 downto 0); -- 6 states for "
                              "Arbiter's FSM \n")
    arbiter_checker_top.write("            next_state_out: out std_logic_vector (5 downto 0); -- 6 states for "
                              "Arbiter's FSM \n")
    arbiter_checker_top.write(" \n")
    arbiter_checker_top.write("            -- Checker outputs \n")
    arbiter_checker_top.write(" \n")

    string_to_write = ""

    if '1' in checker_id:
        string_to_write += "err_state_IDLE_xbar,\n"
    if '2' in checker_id:
        string_to_write += "err_state_not_IDLE_xbar,\n"
    if '3' in checker_id:
        string_to_write += "err_state_IDLE_RTS_FF_in,\n"
    if '4' in checker_id:
        string_to_write += "err_state_not_IDLE_RTS_FF_RTS_FF_in,\n"
    if '5' in checker_id:
        string_to_write += "err_state_not_IDLE_DCTS_RTS_FF_RTS_FF_in,\n"
    if '6' in checker_id:
        string_to_write += "err_state_not_IDLE_not_DCTS_RTS_FF_RTS_FF_in,\n"
    if '7' in checker_id:
        string_to_write += "err_RTS_FF_not_DCTS_state_state_in,\n"
    if '8' in checker_id:
        string_to_write += "err_not_RTS_FF_state_in_next_state,\n"
    if '9' in checker_id:
        string_to_write += "err_RTS_FF_DCTS_state_in_next_state,\n"
    if '10' in checker_id:
        string_to_write += "err_not_DCTS_Grants,\n"
    if '11' in checker_id:
        string_to_write += "err_DCTS_not_RTS_FF_Grants,\n"
    if '12' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_IDLE_Grants,\n"
    if '13' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_not_IDLE_Grants_onehot,\n"
    if '14' in checker_id:
        string_to_write += "err_Requests_next_state_IDLE,\n"
    if '15' in checker_id:
        string_to_write += "err_IDLE_Req_L,\n"
    if '16' in checker_id:
        string_to_write += "err_Local_Req_L,\n"
    if '17' in checker_id:
        string_to_write += "err_North_Req_N,\n"
    if '18' in checker_id:
        string_to_write += "err_East_Req_E,\n"
    if '19' in checker_id:
        string_to_write += "err_West_Req_W,\n"
    if '20' in checker_id:
        string_to_write += "err_South_Req_S,\n"
    if '21' in checker_id:
        string_to_write += "err_IDLE_Req_N,\n"
    if '22' in checker_id:
        string_to_write += "err_Local_Req_N,\n"
    if '23' in checker_id:
        string_to_write += "err_North_Req_E,\n"
    if '24' in checker_id:
        string_to_write += "err_East_Req_W,\n"
    if '25' in checker_id:
        string_to_write += "err_West_Req_S,\n"
    if '26' in checker_id:
        string_to_write += "err_South_Req_L,\n"
    if '27' in checker_id:
        string_to_write += "err_IDLE_Req_E,\n"
    if '28' in checker_id:
        string_to_write += "err_Local_Req_E,\n"
    if '29' in checker_id:
        string_to_write += "err_North_Req_W,\n"
    if '30' in checker_id:
        string_to_write += "err_East_Req_S,\n"
    if '31' in checker_id:
        string_to_write += "err_West_Req_L,\n"
    if '32' in checker_id:
        string_to_write += "err_South_Req_N,\n"
    if '33' in checker_id:
        string_to_write += "err_IDLE_Req_W,\n"
    if '34' in checker_id:
        string_to_write += "err_Local_Req_W,\n"
    if '35' in checker_id:
        string_to_write += "err_North_Req_S,\n"
    if '36' in checker_id:
        string_to_write += "err_East_Req_L,\n"
    if '37' in checker_id:
        string_to_write += "err_West_Req_N,\n"
    if '38' in checker_id:
        string_to_write += "err_South_Req_E,\n"
    if '39' in checker_id:
        string_to_write += "err_IDLE_Req_S,\n"
    if '40' in checker_id:
        string_to_write += "err_Local_Req_S,\n"
    if '41' in checker_id:
        string_to_write += "err_North_Req_L,\n"
    if '42' in checker_id:
        string_to_write += "err_East_Req_N,\n"
    if '43' in checker_id:
        string_to_write += "err_West_Req_E,\n"
    if '44' in checker_id:
        string_to_write += "err_South_Req_W,\n"
    if '45' in checker_id:
        string_to_write += "err_next_state_onehot,\n"
    if '46' in checker_id:
        string_to_write += "err_state_in_onehot,\n"
    if '47' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_L,\n"
    if '48' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_N,\n"
    if '49' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_E,\n"
    if '50' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_W,\n"
    if '51' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_S,\n"
    if '52' in checker_id:
        string_to_write += "err_state_north_xbar_sel,\n"
    if '53' in checker_id:
        string_to_write += "err_state_east_xbar_sel,\n"
    if '54' in checker_id:
        string_to_write += "err_state_west_xbar_sel,\n"
    if '55' in checker_id:
        string_to_write += "err_state_south_xbar_sel,\n"
    if '56' in checker_id:
        string_to_write += "err_state_local_xbar_sel,\n"

    string_to_write = string_to_write[:len(string_to_write)-2]
    string_to_write += " : out std_logic\n"

    arbiter_checker_top.write(string_to_write)

    arbiter_checker_top.write("          ); \n")

    arbiter_checker_top.write("end Arbiter_with_checkers_top; \n")
    arbiter_checker_top.write(" \n")
    arbiter_checker_top.write("architecture behavior of Arbiter_with_checkers_top is \n")
    arbiter_checker_top.write(" \n")
    arbiter_checker_top.write("component Arbiter_pseudo is \n")
    arbiter_checker_top.write("    port (   \n")
    arbiter_checker_top.write("            Req_N, Req_E, Req_W, Req_S, Req_L:in std_logic; -- From LBDR modules \n")
    arbiter_checker_top.write("            DCTS: in std_logic; -- Getting the CTS signal from the input FIFO of the "
                              "next router/NI (for hand-shaking)\n")
    arbiter_checker_top.write("            RTS_FF: in std_logic; \n")
    arbiter_checker_top.write("            state: in std_logic_vector (5 downto 0); -- 6 states for Arbiter's FSM \n")
    arbiter_checker_top.write("\n")
    arbiter_checker_top.write("            Grant_N, Grant_E, Grant_W, Grant_S, Grant_L:out std_logic; -- Grants given "
                              "to LBDR requests (encoded as one-hot) \n")
    arbiter_checker_top.write("            Xbar_sel : out std_logic_vector (4 downto 0); -- select lines for XBAR \n")
    arbiter_checker_top.write("            RTS_FF_in: out std_logic; -- Valid output which is sent to the next "
                              "router/NI to specify that the data on the output port is valid \n")
    arbiter_checker_top.write("            state_in: out std_logic_vector (5 downto 0); -- 6 states for "
                              "Arbiter's FSM \n")
    arbiter_checker_top.write("            next_state_out: out std_logic_vector (5 downto 0) -- 6 states for "
                              "Arbiter's FSM \n")
    arbiter_checker_top.write("            ); \n")
    arbiter_checker_top.write("end component; \n")
    arbiter_checker_top.write(" \n")
    arbiter_checker_top.write("component Arbiter_checkers is \n")
    arbiter_checker_top.write("    port (   \n")
    arbiter_checker_top.write("            Req_N, Req_E, Req_W, Req_S, Req_L:in std_logic; \n")
    arbiter_checker_top.write("            DCTS: in std_logic;  \n")
    arbiter_checker_top.write("            Grant_N, Grant_E, Grant_W, Grant_S, Grant_L: in std_logic; \n")
    arbiter_checker_top.write("            Xbar_sel : in std_logic_vector(4 downto 0); \n")
    arbiter_checker_top.write("            state: in std_logic_vector (5 downto 0); \n")
    arbiter_checker_top.write("            state_in: in std_logic_vector (5 downto 0); \n")
    arbiter_checker_top.write("            next_state_out: in std_logic_vector (5 downto 0); \n")
    arbiter_checker_top.write("            RTS_FF: in std_logic; \n")
    arbiter_checker_top.write("            RTS_FF_in: in std_logic; \n")
    arbiter_checker_top.write(" \n")
    arbiter_checker_top.write("            -- Checker outputs \n")
    arbiter_checker_top.write(" \n")

    string_to_write = ""

    if '1' in checker_id:
        string_to_write += "err_state_IDLE_xbar,\n"
    if '2' in checker_id:
        string_to_write += "err_state_not_IDLE_xbar,\n"
    if '3' in checker_id:
        string_to_write += "err_state_IDLE_RTS_FF_in,\n"
    if '4' in checker_id:
        string_to_write += "err_state_not_IDLE_RTS_FF_RTS_FF_in,\n"
    if '5' in checker_id:
        string_to_write += "err_state_not_IDLE_DCTS_RTS_FF_RTS_FF_in,\n"
    if '6' in checker_id:
        string_to_write += "err_state_not_IDLE_not_DCTS_RTS_FF_RTS_FF_in,\n"
    if '7' in checker_id:
        string_to_write += "err_RTS_FF_not_DCTS_state_state_in,\n"
    if '8' in checker_id:
        string_to_write += "err_not_RTS_FF_state_in_next_state,\n"
    if '9' in checker_id:
        string_to_write += "err_RTS_FF_DCTS_state_in_next_state,\n"
    if '10' in checker_id:
        string_to_write += "err_not_DCTS_Grants,\n"
    if '11' in checker_id:
        string_to_write += "err_DCTS_not_RTS_FF_Grants,\n"
    if '12' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_IDLE_Grants,\n"
    if '13' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_not_IDLE_Grants_onehot,\n"
    if '14' in checker_id:
        string_to_write += "err_Requests_next_state_IDLE,\n"
    if '15' in checker_id:
        string_to_write += "err_IDLE_Req_L,\n"
    if '16' in checker_id:
        string_to_write += "err_Local_Req_L,\n"
    if '17' in checker_id:
        string_to_write += "err_North_Req_N,\n"
    if '18' in checker_id:
        string_to_write += "err_East_Req_E,\n"
    if '19' in checker_id:
        string_to_write += "err_West_Req_W,\n"
    if '20' in checker_id:
        string_to_write += "err_South_Req_S,\n"
    if '21' in checker_id:
        string_to_write += "err_IDLE_Req_N,\n"
    if '22' in checker_id:
        string_to_write += "err_Local_Req_N,\n"
    if '23' in checker_id:
        string_to_write += "err_North_Req_E,\n"
    if '24' in checker_id:
        string_to_write += "err_East_Req_W,\n"
    if '25' in checker_id:
        string_to_write += "err_West_Req_S,\n"
    if '26' in checker_id:
        string_to_write += "err_South_Req_L,\n"
    if '27' in checker_id:
        string_to_write += "err_IDLE_Req_E,\n"
    if '28' in checker_id:
        string_to_write += "err_Local_Req_E,\n"
    if '29' in checker_id:
        string_to_write += "err_North_Req_W,\n"
    if '30' in checker_id:
        string_to_write += "err_East_Req_S,\n"
    if '31' in checker_id:
        string_to_write += "err_West_Req_L,\n"
    if '32' in checker_id:
        string_to_write += "err_South_Req_N,\n"
    if '33' in checker_id:
        string_to_write += "err_IDLE_Req_W,\n"
    if '34' in checker_id:
        string_to_write += "err_Local_Req_W,\n"
    if '35' in checker_id:
        string_to_write += "err_North_Req_S,\n"
    if '36' in checker_id:
        string_to_write += "err_East_Req_L,\n"
    if '37' in checker_id:
        string_to_write += "err_West_Req_N,\n"
    if '38' in checker_id:
        string_to_write += "err_South_Req_E,\n"
    if '39' in checker_id:
        string_to_write += "err_IDLE_Req_S,\n"
    if '40' in checker_id:
        string_to_write += "err_Local_Req_S,\n"
    if '41' in checker_id:
        string_to_write += "err_North_Req_L,\n"
    if '42' in checker_id:
        string_to_write += "err_East_Req_N,\n"
    if '43' in checker_id:
        string_to_write += "err_West_Req_E,\n"
    if '44' in checker_id:
        string_to_write += "err_South_Req_W,\n"
    if '45' in checker_id:
        string_to_write += "err_next_state_onehot,\n"
    if '46' in checker_id:
        string_to_write += "err_state_in_onehot,\n"
    if '47' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_L,\n"
    if '48' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_N,\n"
    if '49' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_E,\n"
    if '50' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_W,\n"
    if '51' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_S,\n"
    if '52' in checker_id:
        string_to_write += "err_state_north_xbar_sel,\n"
    if '53' in checker_id:
        string_to_write += "err_state_east_xbar_sel,\n"
    if '54' in checker_id:
        string_to_write += "err_state_west_xbar_sel,\n"
    if '55' in checker_id:
        string_to_write += "err_state_south_xbar_sel,\n"
    if '56' in checker_id:
        string_to_write += "err_state_local_xbar_sel,\n"

    string_to_write = string_to_write[:len(string_to_write) - 2]
    string_to_write += " : out std_logic \n"

    arbiter_checker_top.write(string_to_write)

    arbiter_checker_top.write("            ); \n")
    arbiter_checker_top.write("end component; \n")
    arbiter_checker_top.write(" \n")
    arbiter_checker_top.write("signal Grant_N_sig, Grant_E_sig, Grant_W_sig, Grant_S_sig, Grant_L_sig: std_logic; \n")
    arbiter_checker_top.write("signal Xbar_sel_sig: std_logic_vector(4 downto 0); \n")
    arbiter_checker_top.write("signal state_in_sig: std_logic_vector (5 downto 0); \n")
    arbiter_checker_top.write("signal next_state_out_sig: std_logic_vector (5 downto 0); \n")
    arbiter_checker_top.write("signal RTS_FF_in_sig: std_logic; \n")
    arbiter_checker_top.write(" \n")
    arbiter_checker_top.write("begin  \n")
    arbiter_checker_top.write(" \n")
    arbiter_checker_top.write("Grant_N <= Grant_N_sig; \n")
    arbiter_checker_top.write("Grant_E <= Grant_E_sig; \n")
    arbiter_checker_top.write("Grant_W <= Grant_W_sig; \n")
    arbiter_checker_top.write("Grant_S <= Grant_S_sig; \n")
    arbiter_checker_top.write("Grant_L <= Grant_L_sig; \n")
    arbiter_checker_top.write("Xbar_sel <= Xbar_sel_sig; \n")
    arbiter_checker_top.write("state_in <= state_in_sig; \n")
    arbiter_checker_top.write("RTS_FF_in <= RTS_FF_in_sig; \n")
    arbiter_checker_top.write("next_state_out <= next_state_out_sig; \n")
    arbiter_checker_top.write(" \n")
    
    arbiter_checker_top.write("-- Arbiter instantiation \n")
    arbiter_checker_top.write("ARBITER: Arbiter_pseudo port map   ( \n")
    arbiter_checker_top.write("                                    Req_N=>Req_N,  \n")
    arbiter_checker_top.write("                                    Req_E=>Req_E,  \n")
    arbiter_checker_top.write("                                    Req_W=>Req_W,  \n")
    arbiter_checker_top.write("                                    Req_S=>Req_S,  \n")
    arbiter_checker_top.write("                                    Req_L=>Req_L, \n")
    arbiter_checker_top.write("						                        DCTS => DCTS,  \n")
    arbiter_checker_top.write("                                    RTS_FF => RTS_FF, \n")
    arbiter_checker_top.write(" 						                        state=>state, \n")
    arbiter_checker_top.write(" \n")
    arbiter_checker_top.write("                                    Grant_N => Grant_N,  \n")
    arbiter_checker_top.write("                                    Grant_E => Grant_E,  \n")
    arbiter_checker_top.write("                                    Grant_W => Grant_W,  \n")
    arbiter_checker_top.write("                                    Grant_S => Grant_S,  \n")
    arbiter_checker_top.write("                                    Grant_L => Grant_L, \n")
    arbiter_checker_top.write("                                    Xbar_sel => Xbar_sel_sig,  \n")
    arbiter_checker_top.write("                                    RTS_FF_in => RTS_FF_in,  \n")
    arbiter_checker_top.write("                                    state_in => state_in_sig,  \n")
    arbiter_checker_top.write("                                    next_state_out => next_state_out_sig \n")
    arbiter_checker_top.write("                                    ); \n")
    arbiter_checker_top.write(" \n")
    arbiter_checker_top.write("-- Checkers instantiation \n")
    arbiter_checker_top.write("CHECKERS: Arbiter_checkers port map ( \n")
    arbiter_checker_top.write("                                      Req_N => Req_N,  \n")
    arbiter_checker_top.write("                                      Req_E => Req_E,  \n")
    arbiter_checker_top.write("                                      Req_W => Req_W,  \n")
    arbiter_checker_top.write("                                      Req_S=>Req_S,  \n")
    arbiter_checker_top.write("                                      Req_L => Req_L, \n")
    arbiter_checker_top.write("                                      DCTS => DCTS,  \n")
    arbiter_checker_top.write("                                      RTS_FF => RTS_FF, \n")
    arbiter_checker_top.write("                                      state => state,  \n")
    arbiter_checker_top.write(" \n")
    arbiter_checker_top.write("                                      Grant_N => Grant_N_sig,  \n")
    arbiter_checker_top.write("                                      Grant_E => Grant_E_sig,  \n")
    arbiter_checker_top.write("                                      Grant_W => Grant_W_sig,  \n")
    arbiter_checker_top.write("                                      Grant_S => Grant_S_sig,  \n")
    arbiter_checker_top.write("                                      Grant_L => Grant_L_sig,  \n")
    arbiter_checker_top.write("								         Xbar_sel=>Xbar_sel_sig, \n")
    arbiter_checker_top.write("								         state_in => state_in_sig, \n")
    arbiter_checker_top.write("                                      next_state_out => next_state_out_sig, \n")
    arbiter_checker_top.write("                                      RTS_FF_in => RTS_FF_in_sig,  \n")
    arbiter_checker_top.write(" \n")

    string_to_write = ""

    if '1' in checker_id:
        string_to_write += "err_state_IDLE_xbar => err_state_IDLE_xbar,\n"
    if '2' in checker_id:
        string_to_write += "err_state_not_IDLE_xbar => err_state_not_IDLE_xbar,\n"
    if '3' in checker_id:
        string_to_write += "err_state_IDLE_RTS_FF_in => err_state_IDLE_RTS_FF_in,\n"
    if '4' in checker_id:
        string_to_write += "err_state_not_IDLE_RTS_FF_RTS_FF_in => err_state_not_IDLE_RTS_FF_RTS_FF_in,\n"
    if '5' in checker_id:
        string_to_write += "err_state_not_IDLE_DCTS_RTS_FF_RTS_FF_in => err_state_not_IDLE_DCTS_RTS_FF_RTS_FF_in,\n"
    if '6' in checker_id:
        string_to_write += "err_state_not_IDLE_not_DCTS_RTS_FF_RTS_FF_in => err_state_not_IDLE_not_DCTS_RTS_FF_RTS_FF_in,\n"
    if '7' in checker_id:
        string_to_write += "err_RTS_FF_not_DCTS_state_state_in => err_RTS_FF_not_DCTS_state_state_in,\n"
    if '8' in checker_id:
        string_to_write += "err_not_RTS_FF_state_in_next_state => err_not_RTS_FF_state_in_next_state,\n"
    if '9' in checker_id:
        string_to_write += "err_RTS_FF_DCTS_state_in_next_state => err_RTS_FF_DCTS_state_in_next_state,\n"
    if '10' in checker_id:
        string_to_write += "err_not_DCTS_Grants => err_not_DCTS_Grants,\n"
    if '11' in checker_id:
        string_to_write += "err_DCTS_not_RTS_FF_Grants => err_DCTS_not_RTS_FF_Grants,\n"
    if '12' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_IDLE_Grants => err_DCTS_RTS_FF_IDLE_Grants,\n"
    if '13' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_not_IDLE_Grants_onehot => err_DCTS_RTS_FF_not_IDLE_Grants_onehot,\n"
    if '14' in checker_id:
        string_to_write += "err_Requests_next_state_IDLE => err_Requests_next_state_IDLE,\n"
    if '15' in checker_id:
        string_to_write += "err_IDLE_Req_L => err_IDLE_Req_L,\n"
    if '16' in checker_id:
        string_to_write += "err_Local_Req_L => err_Local_Req_L,\n"
    if '17' in checker_id:
        string_to_write += "err_North_Req_N => err_North_Req_N,\n"
    if '18' in checker_id:
        string_to_write += "err_East_Req_E => err_East_Req_E,\n"
    if '19' in checker_id:
        string_to_write += "err_West_Req_W => err_West_Req_W,\n"
    if '20' in checker_id:
        string_to_write += "err_South_Req_S => err_South_Req_S,\n"
    if '21' in checker_id:
        string_to_write += "err_IDLE_Req_N => err_IDLE_Req_N,\n"
    if '22' in checker_id:
        string_to_write += "err_Local_Req_N => err_Local_Req_N,\n"
    if '23' in checker_id:
        string_to_write += "err_North_Req_E => err_North_Req_E,\n"
    if '24' in checker_id:
        string_to_write += "err_East_Req_W => err_East_Req_W,\n"
    if '25' in checker_id:
        string_to_write += "err_West_Req_S => err_West_Req_S,\n"
    if '26' in checker_id:
        string_to_write += "err_South_Req_L => err_South_Req_L,\n"
    if '27' in checker_id:
        string_to_write += "err_IDLE_Req_E => err_IDLE_Req_E,\n"
    if '28' in checker_id:
        string_to_write += "err_Local_Req_E => err_Local_Req_E,\n"
    if '29' in checker_id:
        string_to_write += "err_North_Req_W => err_North_Req_W,\n"
    if '30' in checker_id:
        string_to_write += "err_East_Req_S => err_East_Req_S,\n"
    if '31' in checker_id:
        string_to_write += "err_West_Req_L => err_West_Req_L,\n"
    if '32' in checker_id:
        string_to_write += "err_South_Req_N => err_South_Req_N,\n"
    if '33' in checker_id:
        string_to_write += "err_IDLE_Req_W => err_IDLE_Req_W,\n"
    if '34' in checker_id:
        string_to_write += "err_Local_Req_W => err_Local_Req_W,\n"
    if '35' in checker_id:
        string_to_write += "err_North_Req_S => err_North_Req_S,\n"
    if '36' in checker_id:
        string_to_write += "err_East_Req_L => err_East_Req_L,\n"
    if '37' in checker_id:
        string_to_write += "err_West_Req_N => err_West_Req_N,\n"
    if '38' in checker_id:
        string_to_write += "err_South_Req_E => err_South_Req_E,\n"
    if '39' in checker_id:
        string_to_write += "err_IDLE_Req_S => err_IDLE_Req_S,\n"
    if '40' in checker_id:
        string_to_write += "err_Local_Req_S => err_Local_Req_S,\n"
    if '41' in checker_id:
        string_to_write += "err_North_Req_L => err_North_Req_L,\n"
    if '42' in checker_id:
        string_to_write += "err_East_Req_N => err_East_Req_N,\n"
    if '43' in checker_id:
        string_to_write += "err_West_Req_E => err_West_Req_E,\n"
    if '44' in checker_id:
        string_to_write += "err_South_Req_W => err_South_Req_W,\n"
    if '45' in checker_id:
        string_to_write += "err_next_state_onehot => err_next_state_onehot,\n"
    if '46' in checker_id:
        string_to_write += "err_state_in_onehot => err_state_in_onehot,\n"
    if '47' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_L => err_DCTS_RTS_FF_state_Grant_L,\n"
    if '48' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_N => err_DCTS_RTS_FF_state_Grant_N,\n"
    if '49' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_E => err_DCTS_RTS_FF_state_Grant_E,\n"
    if '50' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_W => err_DCTS_RTS_FF_state_Grant_W,\n"
    if '51' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_S => err_DCTS_RTS_FF_state_Grant_S,\n"
    if '52' in checker_id:
        string_to_write += "err_state_north_xbar_sel => err_state_north_xbar_sel,\n"
    if '53' in checker_id:
        string_to_write += "err_state_east_xbar_sel => err_state_east_xbar_sel,\n"
    if '54' in checker_id:
        string_to_write += "err_state_west_xbar_sel => err_state_west_xbar_sel,\n"
    if '55' in checker_id:
        string_to_write += "err_state_south_xbar_sel => err_state_south_xbar_sel,\n"
    if '56' in checker_id:
        string_to_write += "err_state_local_xbar_sel => err_state_local_xbar_sel,\n"

    string_to_write = string_to_write[:len(string_to_write)-2]+");\n"

    arbiter_checker_top.write(string_to_write)

    arbiter_checker_top.write("	\n")
    arbiter_checker_top.write("end behavior; \n")
    arbiter_checker_top.write(" \n")

    arbiter_checker_top.close()
Example #5
0
def gen_unit_checker_script(checker_id):

    name_string = name_string_generator(checker_id)

    unit_synthesis_script = open(
        "synthesis_scripts/" + package_file.unit_under_test +
        "_with_checkers_" + name_string + "_synthesis.script", 'w')

    unit_synthesis_script.write("/* Bus Naming variables */\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write("bus_naming_style = \"%s<%d>\"\n")
    unit_synthesis_script.write("bus_dimension_separator_style = \"><\"\n")
    unit_synthesis_script.write("bus_range_separator_style = \":\" \n")
    unit_synthesis_script.write("bus_extraction_style = \"%s<%d:%d>\"\n")
    unit_synthesis_script.write(" \n")
    unit_synthesis_script.write("/* Power and Ground variables */\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write("edifin_ground_net_name = \"gnd!\"\n")
    unit_synthesis_script.write("edifin_ground_net_property_name = \"\"\n")
    unit_synthesis_script.write("edifin_ground_net_property_value = \"\"\n")
    unit_synthesis_script.write("edifout_ground_name = \"gnd\"\n")
    unit_synthesis_script.write("edifout_ground_net_name = \"gnd!\"\n")
    unit_synthesis_script.write("edifout_ground_net_property_name = \"\"\n")
    unit_synthesis_script.write("edifout_ground_net_property_value = \"\"\n")
    unit_synthesis_script.write("edifout_ground_pin_name = \"gnd!\"\n")
    unit_synthesis_script.write("edifin_power_net_name = \"vdd!\"\n")
    unit_synthesis_script.write("edifin_power_net_property_name = \"\"\n")
    unit_synthesis_script.write("edifin_power_net_property_value = \"\"\n")
    unit_synthesis_script.write("edifout_power_name = \"vdd\"\n")
    unit_synthesis_script.write("edifout_power_net_name = \"vdd!\"\n")
    unit_synthesis_script.write("edifout_power_net_property_name = \"\"\n")
    unit_synthesis_script.write("edifout_power_net_property_value = \"\"\n")
    unit_synthesis_script.write("edifout_power_pin_name = \"vdd!\"\n")
    unit_synthesis_script.write(
        "edifout_power_and_ground_representation = \"net\"\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write("/* Net to Port Connection variables */\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write("edifin_autoconnect_ports = \"true\"\n")
    unit_synthesis_script.write("compile_fix_multiple_port_nets = \"true\"\n")
    unit_synthesis_script.write("single_group_per_sheet = \"true\"\n")
    unit_synthesis_script.write("use_port_name_for_oscs = \"false\"\n")
    unit_synthesis_script.write("write_name_nets_same_as_ports = \"true\"\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write("/* Output variables */\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write("edifout_netlist_only = \"true\"\n")
    unit_synthesis_script.write("edifout_instantiate_ports = \"true\"\n")
    unit_synthesis_script.write(
        "edifout_pin_name_propery_name = \"pinName\"\n")
    unit_synthesis_script.write(" \n")
    unit_synthesis_script.write("/* Important! */\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write(
        "edifout_numerical_array_members = \"true\" \n")
    unit_synthesis_script.write("edifout_no_array = \"false\"\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write(
        "/********************************************/\n")
    unit_synthesis_script.write(
        "/*  Now starts the synthesis:               */\n")
    unit_synthesis_script.write(
        "/********************************************/\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write(
        "/* ================================================= */\n")
    unit_synthesis_script.write(
        "/* Don't use the following cells!!                   */\n")
    unit_synthesis_script.write(
        "/* ================================================= */\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write(
        "set_dont_use { class/EO, class/EN, class/EOP, class/ENP, class/EO3, class/EN3, "
        "class/EO3P, class/EN3P, class/EOI, class/ENI, class/FD1S, class/FD2S, class/FD4S, "
        "class/IVDA, class/IVDAP, class/B2I, class/B2IP, class/B3I, class/B3IP, class/AO4P, "
        "class/NR*, class/EO1P, class/ND*}\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write("analyze -format vhdl " +
                                package_file.module_file_name + "\n")
    unit_synthesis_script.write("analyze -format vhdl " +
                                package_file.unit_under_test.lower() +
                                "_checker" + name_string + ".vhd\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write("analyze -format vhdl " +
                                package_file.unit_under_test.lower() +
                                "_checker" + name_string + "_top.vhd\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write("elaborate " + package_file.unit_under_test +
                                "_with_checkers_top -update\n")
    unit_synthesis_script.write("current_design = " +
                                package_file.unit_under_test +
                                "_with_checkers_top\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write("link\n")
    unit_synthesis_script.write("compile\n")
    unit_synthesis_script.write("\n")
    unit_synthesis_script.write("write -format edif -hierarchy -output " +
                                package_file.unit_under_test +
                                "_with_checkers_top.edif\n")
    unit_synthesis_script.write("report_area > area" + name_string + ".txt\n")
    unit_synthesis_script.write("exit\n")

    unit_synthesis_script.close()
Example #6
0
def branch(candidates_list, selected_list, excluded_list):
    global best_cost, best_solution, best_area

    # we don't want to change the original values
    current_excluded_list = copy.deepcopy(excluded_list)
    current_selected_list = copy.deepcopy(selected_list)
    current_candidate_list = copy.deepcopy(candidates_list)

    item = sorted(current_candidate_list.keys())[0]
    print "------------------------------"
    print "selected list at start:", selected_list
    print "excluded list at start:", excluded_list
    print "Item to be branched:", item

    current_candidate_list.pop(item)

    print "trying picking the item", item
    # the reason we check if the item is already there or not is the fact that we can have essential
    # checkers being fed into the tool and it messes up the entire thing if we don't take care of it...
    if item in selected_list:
        print "item already in the selected list! skipping..."
    # if we pick the item
    elif not check_feasibility(current_selected_list, item):
        # this is where it becomes infeasible!
        pass
    else:
        # so we have a new item that is actually feasible to pick
        current_selected_list.append(item)
        if item in current_excluded_list:
            print "we should not get here!"
            current_excluded_list.remove(item)
        cost = calculate_cost(current_selected_list)

        if cost > best_cost:
            item_number = name_string_generator(current_selected_list)
            print "\033[32m* NOTE::\033[0m found better solution with cost:", cost, "and area:", \
                  package_file.list_of_candidates[item_number][1]
            best_cost = cost
            best_area = package_file.list_of_candidates[item_number][1]
            best_solution = copy.deepcopy(current_selected_list)
        if cost == best_cost:
            item_number = name_string_generator(current_selected_list)
            if package_file.list_of_candidates[item_number][1] < best_area:
                item_number = name_string_generator(current_selected_list)
                print "\033[32m* NOTE::\033[0m found better solution with same cost:", cost, "and better area:", \
                      package_file.list_of_candidates[item_number][1]
                best_cost = cost
                best_area = package_file.list_of_candidates[item_number][1]
                best_solution = copy.deepcopy(current_selected_list)

        if len(current_candidate_list) > 0:
            optimistic_value = bound(current_excluded_list)
            # print "here",current_candidate_list, current_selected_list, current_excluded_list
            if optimistic_value < best_cost:
                print "\033[91m* NOTE::\033[0m bounded!"

                return
            branch(current_candidate_list, current_selected_list, current_excluded_list)

    # if we dont pick the item
    print "------------------------------"
    print "selected list at start:", selected_list
    print "excluded list at start:", excluded_list
    print "Item to be branched:", item
    print "not picking the item", item

    if item in current_selected_list:
        current_selected_list.remove(item)
    cost = calculate_cost(current_selected_list)
    if cost > best_cost:
        item_number = name_string_generator(current_selected_list)
        print "\033[32m* NOTE::\033[0m found better solution with cost:", cost, "and area:", \
              package_file.list_of_candidates[item_number][1]
        best_cost = cost
        best_area = package_file.list_of_candidates[item_number][1]
        best_solution = copy.deepcopy(current_selected_list)

    if cost == best_cost:
        item_number = name_string_generator(current_selected_list)
        if package_file.list_of_candidates[item_number][1] < best_area:
            print "\033[32m* NOTE::\033[0m found better solution with same cost:", cost, "and better area:", \
                package_file.list_of_candidates[item_number][1]
            best_cost = cost
            best_area = package_file.list_of_candidates[item_number][1]
            best_solution = copy.deepcopy(current_selected_list)

    if len(current_candidate_list) > 0:
        current_excluded_list.append(item)
        optimistic_value = bound(current_excluded_list)
        if optimistic_value < best_cost:
            print "\033[91m* NOTE::\033[0m bounded!"

            return
        branch(current_candidate_list, current_selected_list, current_excluded_list)
    return
Example #7
0
def gen_lbdr_checkers(checker_id):
    name_string = name_string_generator(checker_id)

    lbdr_checker_vhd = open("checker_vhdl/lbdr_checker" + name_string + ".vhd",
                            'w')

    lbdr_checker_vhd.write("\n")
    lbdr_checker_vhd.write("library ieee;\n")
    lbdr_checker_vhd.write("use ieee.std_logic_1164.all;\n")
    lbdr_checker_vhd.write("use IEEE.STD_LOGIC_ARITH.ALL;\n")
    lbdr_checker_vhd.write("use IEEE.STD_LOGIC_UNSIGNED.ALL;\n")
    lbdr_checker_vhd.write("use IEEE.NUMERIC_STD.all;\n")
    lbdr_checker_vhd.write("use IEEE.MATH_REAL.ALL;\n")
    lbdr_checker_vhd.write("\n")
    lbdr_checker_vhd.write("entity LBDR_checkers is\n")
    lbdr_checker_vhd.write("	generic (\n")
    lbdr_checker_vhd.write("        cur_addr_rst: integer := 5;\n")
    lbdr_checker_vhd.write("        NoC_size: integer := 4\n")
    lbdr_checker_vhd.write("    );\n")
    lbdr_checker_vhd.write("    port (  empty: in  std_logic;\n")
    lbdr_checker_vhd.write(
        "            flit_type: in std_logic_vector(2 downto 0);\n")
    lbdr_checker_vhd.write(
        "            Req_N_FF, Req_E_FF, Req_W_FF, Req_S_FF, Req_L_FF: in std_logic;\n"
    )
    lbdr_checker_vhd.write(
        "            Req_N_in, Req_E_in, Req_W_in, Req_S_in, Req_L_in: in std_logic;\n"
    )
    lbdr_checker_vhd.write(
        "            N1_out, E1_out, W1_out, S1_out: in std_logic;\n")
    lbdr_checker_vhd.write(
        "            dst_addr: in std_logic_vector(NoC_size-1 downto 0);\n")
    lbdr_checker_vhd.write("\n")

    lbdr_checker_vhd.write("            -- Checker outputs\n")

    string_to_write = ""
    if '1' in checker_id:
        string_to_write += "err_header_not_empty_Requests_in_onehot,\n"
    if '2' in checker_id:
        string_to_write += "err_header_empty_Requests_FF_Requests_in,\n"
    if '3' in checker_id:
        string_to_write += "err_tail_Requests_in_all_zero,\n"
    if '4' in checker_id:
        string_to_write += "err_header_tail_Requests_FF_Requests_in,\n"
    if '5' in checker_id:
        string_to_write += "err_dst_addr_cur_addr_N1,\n"
    if '6' in checker_id:
        string_to_write += "err_dst_addr_cur_addr_not_N1,\n"
    if '7' in checker_id:
        string_to_write += "err_dst_addr_cur_addr_E1,\n"
    if '8' in checker_id:
        string_to_write += "err_dst_addr_cur_addr_not_E1,\n"
    if '9' in checker_id:
        string_to_write += "err_dst_addr_cur_addr_W1,\n"
    if '10' in checker_id:
        string_to_write += "err_dst_addr_cur_addr_not_W1,\n"
    if '11' in checker_id:
        string_to_write += "err_dst_addr_cur_addr_S1,\n"
    if '12' in checker_id:
        string_to_write += "err_dst_addr_cur_addr_not_S1,\n"
    if '13' in checker_id:
        string_to_write += "err_dst_addr_cur_addr_not_Req_L_in,\n"
    if '14' in checker_id:
        string_to_write += "err_dst_addr_cur_addr_Req_L_in,\n"
    if '15' in checker_id:
        string_to_write += "err_header_not_empty_Req_N_in,\n"
    if '16' in checker_id:
        string_to_write += "err_header_not_empty_Req_E_in,\n"
    if '17' in checker_id:
        string_to_write += "err_header_not_empty_Req_W_in,\n"
    if '18' in checker_id:
        string_to_write += "err_header_not_empty_Req_S_in,\n"

    string_to_write = string_to_write[:len(string_to_write) - 2]
    string_to_write += " : out std_logic\n"

    lbdr_checker_vhd.write(string_to_write)

    lbdr_checker_vhd.write("            );\n")
    lbdr_checker_vhd.write("end LBDR_checkers;\n")
    lbdr_checker_vhd.write("\n")
    lbdr_checker_vhd.write("architecture behavior of LBDR_checkers is\n")
    lbdr_checker_vhd.write("\n")
    lbdr_checker_vhd.write(
        "signal cur_addr:  std_logic_vector(NoC_size-1 downto 0);  \n")
    lbdr_checker_vhd.write(
        "signal Requests_FF: std_logic_vector(4 downto 0);\n")
    lbdr_checker_vhd.write(
        "signal Requests_in: std_logic_vector(4 downto 0);\n")
    lbdr_checker_vhd.write("\n")

    lbdr_checker_vhd.write("begin \n")
    lbdr_checker_vhd.write("\n")
    lbdr_checker_vhd.write(
        "  cur_addr <= std_logic_vector(to_unsigned(cur_addr_rst, cur_addr'length));\n"
    )
    lbdr_checker_vhd.write("\n")
    lbdr_checker_vhd.write(
        "  Requests_FF <= Req_N_FF & Req_E_FF & Req_W_FF & Req_S_FF & Req_L_FF;\n"
    )
    lbdr_checker_vhd.write(
        "  Requests_in <= Req_N_in & Req_E_in & Req_W_in & Req_S_in & Req_L_in;\n"
    )
    lbdr_checker_vhd.write("\n")
    lbdr_checker_vhd.write(
        "-- Implementing checkers in form of concurrent assignments (combinational assertions)\n"
    )
    lbdr_checker_vhd.write(" \n")

    if '1' in checker_id:
        lbdr_checker_vhd.write("process (flit_type, empty, Requests_in) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if (flit_type = \"001\" and empty = '0' and Requests_in /= \"00001\" and Requests_in /= \"00010\" and Requests_in /= \"00100\" and \n"
        )
        lbdr_checker_vhd.write(
            "        Requests_in /= \"01000\" and Requests_in /= \"10000\") then \n"
        )
        lbdr_checker_vhd.write(
            "        err_header_not_empty_Requests_in_onehot <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write(
            "        err_header_not_empty_Requests_in_onehot <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '2' in checker_id:
        lbdr_checker_vhd.write(
            "process (flit_type, empty, Requests_FF, Requests_in) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if (flit_type = \"001\" and empty = '1' and Requests_FF /= Requests_in) then \n"
        )
        lbdr_checker_vhd.write(
            "        err_header_empty_Requests_FF_Requests_in <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write(
            "        err_header_empty_Requests_FF_Requests_in <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '3' in checker_id:
        lbdr_checker_vhd.write("process (flit_type, Requests_in) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if (flit_type = \"100\" and Requests_in /= \"00000\") then \n"
        )
        lbdr_checker_vhd.write(
            "        err_tail_Requests_in_all_zero <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write(
            "        err_tail_Requests_in_all_zero <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '4' in checker_id:
        lbdr_checker_vhd.write(
            "process (flit_type, Requests_FF, Requests_in) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if (flit_type /= \"001\" and flit_type /= \"100\" and Requests_FF /= Requests_in) then \n"
        )
        lbdr_checker_vhd.write(
            "        err_header_tail_Requests_FF_Requests_in <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write(
            "        err_header_tail_Requests_FF_Requests_in <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '5' in checker_id:
        lbdr_checker_vhd.write("process (cur_addr, dst_addr, N1_out) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if ( dst_addr(NoC_size-1 downto NoC_size/2) < cur_addr(NoC_size-1 downto NoC_size/2) and N1_out = '0') then \n"
        )
        lbdr_checker_vhd.write("        err_dst_addr_cur_addr_N1 <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write("        err_dst_addr_cur_addr_N1 <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '6' in checker_id:
        lbdr_checker_vhd.write("process (cur_addr, dst_addr, N1_out) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if ( dst_addr(NoC_size-1 downto NoC_size/2) >= cur_addr(NoC_size-1 downto NoC_size/2) and N1_out = '1') then \n"
        )
        lbdr_checker_vhd.write(
            "        err_dst_addr_cur_addr_not_N1 <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write(
            "        err_dst_addr_cur_addr_not_N1 <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '7' in checker_id:
        lbdr_checker_vhd.write("process (cur_addr, dst_addr, E1_out) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if ( cur_addr((NoC_size/2)-1 downto 0) < dst_addr((NoC_size/2)-1 downto 0) and E1_out = '0') then \n"
        )
        lbdr_checker_vhd.write("        err_dst_addr_cur_addr_E1 <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write("        err_dst_addr_cur_addr_E1 <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '8' in checker_id:
        lbdr_checker_vhd.write("process (cur_addr, dst_addr, E1_out) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if ( cur_addr((NoC_size/2)-1 downto 0) >= dst_addr((NoC_size/2)-1 downto 0) and E1_out = '1') then \n"
        )
        lbdr_checker_vhd.write(
            "        err_dst_addr_cur_addr_not_E1 <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write(
            "        err_dst_addr_cur_addr_not_E1 <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '9' in checker_id:
        lbdr_checker_vhd.write("process (cur_addr, dst_addr, W1_out) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if ( dst_addr((NoC_size/2)-1 downto 0) < cur_addr((NoC_size/2)-1 downto 0) and W1_out = '0') then \n"
        )
        lbdr_checker_vhd.write("        err_dst_addr_cur_addr_W1 <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write("        err_dst_addr_cur_addr_W1 <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '10' in checker_id:
        lbdr_checker_vhd.write("process (cur_addr, dst_addr, W1_out) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if ( dst_addr((NoC_size/2)-1 downto 0) >= cur_addr((NoC_size/2)-1 downto 0) and W1_out = '1') then \n"
        )
        lbdr_checker_vhd.write(
            "        err_dst_addr_cur_addr_not_W1 <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write(
            "        err_dst_addr_cur_addr_not_W1 <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '11' in checker_id:
        lbdr_checker_vhd.write("process (cur_addr, dst_addr, S1_out) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if ( cur_addr(NoC_size-1 downto NoC_size/2) < dst_addr(NoC_size-1 downto NoC_size/2) and S1_out = '0') then \n"
        )
        lbdr_checker_vhd.write("        err_dst_addr_cur_addr_S1 <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write("        err_dst_addr_cur_addr_S1 <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '12' in checker_id:
        lbdr_checker_vhd.write("process (cur_addr, dst_addr, S1_out) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if ( cur_addr(NoC_size-1 downto NoC_size/2) >= dst_addr(NoC_size-1 downto NoC_size/2) and S1_out = '1') then \n"
        )
        lbdr_checker_vhd.write(
            "        err_dst_addr_cur_addr_not_S1 <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write(
            "        err_dst_addr_cur_addr_not_S1 <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '13' in checker_id:
        lbdr_checker_vhd.write(
            "process (flit_type, empty, N1_out, E1_out, W1_out, S1_out, Req_L_in) \n"
        )
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if ( flit_type = \"001\" and empty = '0' and Req_L_in /= (not N1_out and not E1_out and not W1_out and not S1_out) ) then \n"
        )
        lbdr_checker_vhd.write(
            "        err_dst_addr_cur_addr_not_Req_L_in <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write(
            "        err_dst_addr_cur_addr_not_Req_L_in <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '14' in checker_id:
        lbdr_checker_vhd.write(
            "process (flit_type, empty, cur_addr, dst_addr, Req_L_in) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if ( flit_type = \"001\" and empty = '0' and cur_addr /= dst_addr and Req_L_in = '1') then \n"
        )
        lbdr_checker_vhd.write(
            "        err_dst_addr_cur_addr_Req_L_in <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write(
            "        err_dst_addr_cur_addr_Req_L_in <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '15' in checker_id:
        lbdr_checker_vhd.write(
            "process (flit_type, empty, Req_N_in, N1_out, E1_out, W1_out) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if ( flit_type = \"001\" and empty = '0' and Req_N_in /= (N1_out and not E1_out and not W1_out) ) then \n"
        )
        lbdr_checker_vhd.write(
            "        err_header_not_empty_Req_N_in <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write(
            "        err_header_not_empty_Req_N_in <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '16' in checker_id:
        lbdr_checker_vhd.write(
            "process (flit_type, empty, Req_E_in, N1_out, E1_out, S1_out) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if ( flit_type = \"001\" and empty = '0' and Req_E_in /= ((E1_out and not N1_out and not S1_out) or  \n"
        )
        lbdr_checker_vhd.write(
            "         (E1_out and N1_out) or (E1_out and S1_out)) ) then \n")
        lbdr_checker_vhd.write(
            "        err_header_not_empty_Req_E_in <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write(
            "        err_header_not_empty_Req_E_in <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '17' in checker_id:
        lbdr_checker_vhd.write(
            "process (flit_type, empty, Req_W_in, N1_out, W1_out, S1_out) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if ( flit_type = \"001\" and empty = '0' and Req_W_in /= ((W1_out and not N1_out and not S1_out) or  \n"
        )
        lbdr_checker_vhd.write(
            "         (W1_out and N1_out) or (W1_out and S1_out)) ) then \n")
        lbdr_checker_vhd.write(
            "        err_header_not_empty_Req_W_in <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write(
            "        err_header_not_empty_Req_W_in <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    if '18' in checker_id:
        lbdr_checker_vhd.write(
            "process (flit_type, empty, Req_S_in, E1_out, W1_out, S1_out) \n")
        lbdr_checker_vhd.write("begin \n")
        lbdr_checker_vhd.write(
            "    if ( flit_type = \"001\" and empty = '0' and Req_S_in /= (S1_out and not E1_out and not W1_out) ) then \n"
        )
        lbdr_checker_vhd.write(
            "        err_header_not_empty_Req_S_in <= '1'; \n")
        lbdr_checker_vhd.write("    else  \n")
        lbdr_checker_vhd.write(
            "        err_header_not_empty_Req_S_in <= '0'; \n")
        lbdr_checker_vhd.write("    end if; \n")
        lbdr_checker_vhd.write("end process; \n")
        lbdr_checker_vhd.write(" \n")

    lbdr_checker_vhd.write("\n")
    lbdr_checker_vhd.write("end behavior;\n")
    lbdr_checker_vhd.write("\n")

    lbdr_checker_vhd.close()
Example #8
0
def gen_elbdr_checkers(checker_id):
    name_string = name_string_generator(checker_id)

    elbdr_checker_vhd = open(
        "checker_vhdl/elbdr_checker" + name_string + ".vhd", 'w')

    elbdr_checker_vhd.write("library ieee;\n")
    elbdr_checker_vhd.write("use ieee.std_logic_1164.all;\n")
    elbdr_checker_vhd.write("use IEEE.STD_LOGIC_ARITH.ALL;\n")
    elbdr_checker_vhd.write("use IEEE.STD_LOGIC_UNSIGNED.ALL;\n")
    elbdr_checker_vhd.write("use IEEE.NUMERIC_STD.all;\n")
    elbdr_checker_vhd.write("use IEEE.MATH_REAL.ALL;\n")
    elbdr_checker_vhd.write("\n")
    elbdr_checker_vhd.write("entity ELBDR_checkers is\n")
    elbdr_checker_vhd.write("    generic (\n")
    elbdr_checker_vhd.write("        cur_addr_rst: integer := 5;\n")
    elbdr_checker_vhd.write("        NoC_size: integer := 4\n")
    elbdr_checker_vhd.write("    );\n")
    elbdr_checker_vhd.write("    port (  empty: in  std_logic;\n")
    elbdr_checker_vhd.write(
        "            flit_type: in std_logic_vector(2 downto 0);\n")
    elbdr_checker_vhd.write(
        "            Req_N_in, Req_W_in, Req_S_in, Req_L_in: in std_logic;\n")
    elbdr_checker_vhd.write(
        "            dst_addr: in std_logic_vector(NoC_size-1 downto 0);\n")
    elbdr_checker_vhd.write("\n")
    elbdr_checker_vhd.write("            -- Checker outputs\n")

    string_to_write = ""
    if '1' in checker_id:
        string_to_write += "err_LBDR_Req_onehot,"
    if '2' in checker_id:
        string_to_write += "err_LBDR_dst_addr_checker,"
    if '3' in checker_id:
        string_to_write += "err_LBDR_Req_tail_allzero,"
    if '4' in checker_id:
        string_to_write += "err_LBDR_Req_allzero,"

    elbdr_checker_vhd.write(
        string_to_write[:len(string_to_write) - 1] +
        ": out std_logic -- , err_LBDR_Req_not_Local : out std_logic\n")
    elbdr_checker_vhd.write("            );\n")
    elbdr_checker_vhd.write("end ELBDR_checkers;\n")
    elbdr_checker_vhd.write("\n")
    elbdr_checker_vhd.write("architecture behavior of ELBDR_checkers is\n")
    elbdr_checker_vhd.write("\n")
    elbdr_checker_vhd.write(
        "signal cur_addr:  std_logic_vector(NoC_size-1 downto 0);  \n")
    elbdr_checker_vhd.write("\n")
    elbdr_checker_vhd.write("begin\n")
    elbdr_checker_vhd.write("\n")
    elbdr_checker_vhd.write(
        "  cur_addr <= std_logic_vector(to_unsigned(cur_addr_rst, cur_addr'length));\n"
    )
    elbdr_checker_vhd.write("\n")
    elbdr_checker_vhd.write(
        "-- Implementing checkers in form of concurrent assignments (combinational assertions)\n"
    )
    elbdr_checker_vhd.write("\n")

    if '1' in checker_id:
        elbdr_checker_vhd.write(
            "-- If empty is zero (If FIFO is not empty), Request outputs of LBDR must be one-hot\n"
        )
        elbdr_checker_vhd.write(
            "process(flit_type, empty, Req_N_in, Req_W_in, Req_S_in, Req_L_in)begin\n"
        )
        elbdr_checker_vhd.write(
            "    if (flit_type = \"010\" or flit_type = \"001\") then\n")
        elbdr_checker_vhd.write(
            "         err_LBDR_Req_onehot <= not ( empty or (\n")
        elbdr_checker_vhd.write(
            "                            ((    Req_N_in) and (not Req_W_in) and (not Req_S_in) and (not Req_L_in)) or \n"
        )
        elbdr_checker_vhd.write(
            "                            ((not Req_N_in) and (    Req_W_in) and (not Req_S_in) and (not Req_L_in)) or \n"
        )
        elbdr_checker_vhd.write(
            "                            ((not Req_N_in) and (not Req_W_in) and (    Req_S_in) and (not Req_L_in)) or \n"
        )
        elbdr_checker_vhd.write(
            "                            ((not Req_N_in) and (not Req_W_in) and (not Req_S_in) and (    Req_L_in))));\n"
        )
        elbdr_checker_vhd.write("    else\n")
        elbdr_checker_vhd.write("        err_LBDR_Req_onehot <= '0';\n")
        elbdr_checker_vhd.write("    end if;\n")
        elbdr_checker_vhd.write("end process;\n")
        elbdr_checker_vhd.write("\n")

    if '3' in checker_id:
        elbdr_checker_vhd.write(
            "-- For tail flit, all output requests of LBDR must be zero!\n")
        elbdr_checker_vhd.write(
            "process(flit_type, empty, Req_N_in, Req_W_in, Req_S_in, Req_L_in)begin\n"
        )
        elbdr_checker_vhd.write(
            "    if ( empty = '0' and flit_type = \"100\" and (Req_N_in = '1' or Req_W_in = '1' "
            "or Req_S_in = '1' or Req_L_in = '1') ) then\n")
        elbdr_checker_vhd.write("        err_LBDR_Req_tail_allzero <= '1';\n")
        elbdr_checker_vhd.write("    else \n")
        elbdr_checker_vhd.write("        err_LBDR_Req_tail_allzero <= '0';\n")
        elbdr_checker_vhd.write("    end if;\n")
        elbdr_checker_vhd.write("end process;\n")
        elbdr_checker_vhd.write("\n")

    if '4' in checker_id:
        elbdr_checker_vhd.write(
            "-- If empty is one (If FIFO is empty), all the Request outputs of LBDR must be zero   \n"
        )
        elbdr_checker_vhd.write(
            "err_LBDR_Req_allzero <= empty and (Req_N_in or Req_W_in or Req_S_in or Req_L_in);\n"
        )
        elbdr_checker_vhd.write("\n")
        elbdr_checker_vhd.write(
            "-- Checking destination address (Depending on the location of the destination node with respect to the current node, if wrong requests from LBDR\n"
        )
        elbdr_checker_vhd.write("-- go active, there is a fault!)\n")

    if '2' in checker_id:
        elbdr_checker_vhd.write(
            "process (empty, flit_type, dst_addr, Req_N_in, Req_W_in, Req_S_in) -- , Req_L_in)\n"
        )
        elbdr_checker_vhd.write("begin\n")
        elbdr_checker_vhd.write("    -- North\n")
        elbdr_checker_vhd.write(
            "    if (empty = '0') and (flit_type = \"001\") and (dst_addr = \"0001\") and (Req_N_in = '0') then \n"
        )
        elbdr_checker_vhd.write("        err_LBDR_dst_addr_checker <= '1';\n")
        elbdr_checker_vhd.write("    -- West\n")
        elbdr_checker_vhd.write(
            "    elsif (empty = '0') and (flit_type = \"001\") and (dst_addr = \"0000\" or "
            "dst_addr = \"0100\" or dst_addr = \"1000\" or dst_addr = \"1100\") and "
            "(Req_W_in = '0') then \n")
        elbdr_checker_vhd.write("        err_LBDR_dst_addr_checker <= '1';\n")
        elbdr_checker_vhd.write("    -- South\n")
        elbdr_checker_vhd.write(
            "    elsif (empty = '0') and (flit_type = \"001\") and (dst_addr = \"1001\" or "
            "dst_addr = \"1101\") and (Req_S_in = '0') then \n")
        elbdr_checker_vhd.write("        err_LBDR_dst_addr_checker <= '1';\n")
        elbdr_checker_vhd.write("    else\n")
        elbdr_checker_vhd.write("        err_LBDR_dst_addr_checker <= '0';\n")
        elbdr_checker_vhd.write("    end if;\n")
        elbdr_checker_vhd.write("end process;\n")
        elbdr_checker_vhd.write("\n")
    elbdr_checker_vhd.write("end behavior;\n")
    elbdr_checker_vhd.close()
def gen_fifo_checkers(checker_id):
    name_string = name_string_generator(checker_id)

    fifo_checker_vhd = open(
        "checker_vhdl/fifo_control_part_checker" + name_string + ".vhd", 'w')

    fifo_checker_vhd.write("library ieee;\n")
    fifo_checker_vhd.write("use ieee.std_logic_1164.all;\n")
    fifo_checker_vhd.write("use IEEE.STD_LOGIC_ARITH.ALL;\n")
    fifo_checker_vhd.write("use IEEE.STD_LOGIC_UNSIGNED.ALL;\n")
    fifo_checker_vhd.write("use IEEE.NUMERIC_STD.all;\n")
    fifo_checker_vhd.write("use IEEE.MATH_REAL.ALL;\n")
    fifo_checker_vhd.write("\n")
    fifo_checker_vhd.write("entity FIFO_control_part_checkers is\n")
    fifo_checker_vhd.write("    port (  DRTS: in std_logic;\n")
    fifo_checker_vhd.write("            CTS_out: in std_logic;\n")
    fifo_checker_vhd.write("            CTS_in: in std_logic;\n")
    fifo_checker_vhd.write("            read_en_N : in std_logic;\n")
    fifo_checker_vhd.write(
        "            read_en_E : in std_logic;            \n")
    fifo_checker_vhd.write("            read_en_W : in std_logic;\n")
    fifo_checker_vhd.write("            read_en_S : in std_logic;\n")
    fifo_checker_vhd.write("            read_en_L : in std_logic;\n")
    fifo_checker_vhd.write(
        "            read_pointer: in std_logic_vector(3 downto 0);\n")
    fifo_checker_vhd.write(
        "            read_pointer_in: in std_logic_vector(3 downto 0);\n")
    fifo_checker_vhd.write(
        "            write_pointer: in std_logic_vector(3 downto 0); \n")
    fifo_checker_vhd.write(
        "            write_pointer_in: in std_logic_vector(3 downto 0); \n")
    fifo_checker_vhd.write("            empty_out: in std_logic;\n")
    fifo_checker_vhd.write("            full_out: in std_logic;\n")
    fifo_checker_vhd.write("            read_en_out: in std_logic;\n")
    fifo_checker_vhd.write("            write_en_out: in std_logic; \n")
    fifo_checker_vhd.write("\n")
    fifo_checker_vhd.write("            -- Checker outputs\n")

    string_to_write = ""
    if '1' in checker_id:
        string_to_write += "err_write_en_write_pointer,\n"
    if '2' in checker_id:
        string_to_write += "err_not_write_en_write_pointer,\n"
    if '3' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_not_empty,\n"
    if '4' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_empty,\n"
    if '5' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_not_full,\n"
    if '6' in checker_id:
        string_to_write += "err_read_pointer_write_pointer_full,\n"
    if '7' in checker_id:
        string_to_write += "err_read_pointer_increment,\n"
    if '8' in checker_id:
        string_to_write += "err_read_pointer_not_increment,\n"
    if '9' in checker_id:
        string_to_write += "err_CTS_in,\n"
    if '10' in checker_id:
        string_to_write += "err_write_en,\n"
    if '11' in checker_id:
        string_to_write += "err_not_CTS_in,\n"
    if '12' in checker_id:
        string_to_write += "err_not_write_en,\n"
    if '13' in checker_id:
        string_to_write += "err_read_en_mismatch,\n"

    string_to_write = string_to_write[:len(string_to_write) - 2]
    string_to_write += " : out std_logic\n"
    fifo_checker_vhd.write(string_to_write)

    fifo_checker_vhd.write("            );\n")
    fifo_checker_vhd.write("end FIFO_control_part_checkers;\n")
    fifo_checker_vhd.write("\n")
    fifo_checker_vhd.write(
        "architecture behavior of FIFO_control_part_checkers is\n")
    fifo_checker_vhd.write("\n")
    fifo_checker_vhd.write("signal read_en_signal: std_logic; \n")
    fifo_checker_vhd.write("\n")
    fifo_checker_vhd.write("begin \n")
    fifo_checker_vhd.write("\n")
    fifo_checker_vhd.write(
        "read_en_signal <= (read_en_N or read_en_E or read_en_W or read_en_S or read_en_L) and not empty_out; \n"
    )
    fifo_checker_vhd.write("\n")
    fifo_checker_vhd.write("-- Checkers\n")
    fifo_checker_vhd.write("\n")

    if '1' in checker_id:
        fifo_checker_vhd.write(
            "process (write_en_out, write_pointer_in, write_pointer)\n")
        fifo_checker_vhd.write("begin\n")
        fifo_checker_vhd.write(
            "    if (write_en_out = '1' and write_pointer_in /= (write_pointer(2 downto 0) & write_pointer(3)) ) then\n"
        )
        fifo_checker_vhd.write("        err_write_en_write_pointer <= '1';\n")
        fifo_checker_vhd.write("    else\n")
        fifo_checker_vhd.write("        err_write_en_write_pointer <= '0';\n")
        fifo_checker_vhd.write("    end if;\n")
        fifo_checker_vhd.write("end process;\n")
        fifo_checker_vhd.write("\n")

    if '2' in checker_id:
        fifo_checker_vhd.write(
            "process (write_en_out, write_pointer_in, write_pointer)\n")
        fifo_checker_vhd.write("begin\n")
        fifo_checker_vhd.write(
            "    if (write_en_out = '0' and write_pointer_in /= write_pointer ) then\n"
        )
        fifo_checker_vhd.write(
            "        err_not_write_en_write_pointer <= '1';\n")
        fifo_checker_vhd.write("    else\n")
        fifo_checker_vhd.write(
            "        err_not_write_en_write_pointer <= '0';\n")
        fifo_checker_vhd.write("    end if;\n")
        fifo_checker_vhd.write("end process;\n")
        fifo_checker_vhd.write("\n")

    if '3' in checker_id:
        fifo_checker_vhd.write(
            "process (read_pointer, write_pointer, empty_out)\n")
        fifo_checker_vhd.write("begin\n")
        fifo_checker_vhd.write(
            "    if (read_pointer = write_pointer and empty_out = '0' ) then\n"
        )
        fifo_checker_vhd.write(
            "        err_read_pointer_write_pointer_not_empty <= '1';\n")
        fifo_checker_vhd.write("    else\n")
        fifo_checker_vhd.write(
            "        err_read_pointer_write_pointer_not_empty <= '0';\n")
        fifo_checker_vhd.write("    end if;\n")
        fifo_checker_vhd.write("end process;\n")
        fifo_checker_vhd.write("\n")

    if '4' in checker_id:
        fifo_checker_vhd.write(
            "process (read_pointer, write_pointer, empty_out)\n")
        fifo_checker_vhd.write("begin\n")
        fifo_checker_vhd.write(
            "    if (read_pointer /= write_pointer and empty_out = '1' ) then\n"
        )
        fifo_checker_vhd.write(
            "        err_read_pointer_write_pointer_empty <= '1';\n")
        fifo_checker_vhd.write("    else\n")
        fifo_checker_vhd.write(
            "        err_read_pointer_write_pointer_empty <= '0';\n")
        fifo_checker_vhd.write("    end if;\n")
        fifo_checker_vhd.write("end process;\n")
        fifo_checker_vhd.write("\n")

    if '5' in checker_id:
        fifo_checker_vhd.write(
            "process (write_pointer, read_pointer, full_out)\n")
        fifo_checker_vhd.write("begin\n")
        fifo_checker_vhd.write(
            "    if (write_pointer = (read_pointer(0)&read_pointer(3 downto 1)) and full_out = '0' ) then\n"
        )
        fifo_checker_vhd.write(
            "        err_read_pointer_write_pointer_not_full <= '1';\n")
        fifo_checker_vhd.write("    else\n")
        fifo_checker_vhd.write(
            "        err_read_pointer_write_pointer_not_full <= '0';\n")
        fifo_checker_vhd.write("    end if;\n")
        fifo_checker_vhd.write("end process;\n")
        fifo_checker_vhd.write("\n")

    if '6' in checker_id:
        fifo_checker_vhd.write(
            "process (write_pointer, read_pointer, full_out)\n")
        fifo_checker_vhd.write("begin\n")
        fifo_checker_vhd.write(
            "    if (write_pointer /= (read_pointer(0)&read_pointer(3 downto 1)) and full_out = '1' ) then\n"
        )
        fifo_checker_vhd.write(
            "        err_read_pointer_write_pointer_full <= '1';\n")
        fifo_checker_vhd.write("    else\n")
        fifo_checker_vhd.write(
            "        err_read_pointer_write_pointer_full <= '0';\n")
        fifo_checker_vhd.write("    end if;\n")
        fifo_checker_vhd.write("end process;\n")
        fifo_checker_vhd.write("\n")

    if '7' in checker_id:
        fifo_checker_vhd.write(
            "process (read_en_out, empty_out, read_pointer_in, read_pointer)\n"
        )
        fifo_checker_vhd.write("begin\n")
        fifo_checker_vhd.write(
            "    if (read_en_out = '1' and empty_out = '0' and read_pointer_in /= (read_pointer(2 downto 0)&read_pointer(3)) ) then\n"
        )
        fifo_checker_vhd.write("         err_read_pointer_increment <= '1';\n")
        fifo_checker_vhd.write("    else\n")
        fifo_checker_vhd.write("         err_read_pointer_increment <= '0';\n")
        fifo_checker_vhd.write("    end if;\n")
        fifo_checker_vhd.write("end process;\n")
        fifo_checker_vhd.write("\n")

    if '8' in checker_id:
        fifo_checker_vhd.write(
            "process (read_en_out, empty_out, read_pointer_in, read_pointer)\n"
        )
        fifo_checker_vhd.write("begin\n")
        fifo_checker_vhd.write(
            "    if ( (read_en_out = '0' or (read_en_out = '1' and empty_out = '1') ) and read_pointer_in /= read_pointer ) then\n"
        )
        fifo_checker_vhd.write(
            "         err_read_pointer_not_increment <= '1';\n")
        fifo_checker_vhd.write("    else\n")
        fifo_checker_vhd.write(
            "         err_read_pointer_not_increment <= '0';\n")
        fifo_checker_vhd.write("    end if;\n")
        fifo_checker_vhd.write("end process;\n")
        fifo_checker_vhd.write("\n")

    if '9' in checker_id:
        fifo_checker_vhd.write("process (CTS_out, DRTS, full_out, CTS_in)\n")
        fifo_checker_vhd.write("begin\n")
        fifo_checker_vhd.write(
            "    if (CTS_out = '0' and DRTS = '1' and full_out = '0' and CTS_in = '0') then\n"
        )
        fifo_checker_vhd.write("         err_CTS_in <= '1';\n")
        fifo_checker_vhd.write("    else\n")
        fifo_checker_vhd.write("         err_CTS_in <= '0';\n")
        fifo_checker_vhd.write("    end if;\n")
        fifo_checker_vhd.write("end process;\n")
        fifo_checker_vhd.write("\n")

    if '10' in checker_id:
        fifo_checker_vhd.write(
            "process (CTS_out, DRTS, full_out, write_en_out)\n")
        fifo_checker_vhd.write("begin\n")
        fifo_checker_vhd.write(
            "    if (CTS_out = '0' and DRTS = '1' and full_out = '0' and write_en_out = '0') then\n"
        )
        fifo_checker_vhd.write("         err_write_en <= '1';\n")
        fifo_checker_vhd.write("    else\n")
        fifo_checker_vhd.write("         err_write_en <= '0';\n")
        fifo_checker_vhd.write("    end if;\n")
        fifo_checker_vhd.write("end process;\n")
        fifo_checker_vhd.write("\n")

    if '11' in checker_id:
        fifo_checker_vhd.write("process (CTS_out, DRTS, full_out, CTS_in)\n")
        fifo_checker_vhd.write("begin\n")
        fifo_checker_vhd.write(
            "    if ( (CTS_out = '1' or (CTS_out = '0' and DRTS = '0') or (CTS_out = '0' and DRTS = '1' and full_out = '1')) and CTS_in = '1') then\n"
        )
        fifo_checker_vhd.write("         err_not_CTS_in <= '1';\n")
        fifo_checker_vhd.write("    else\n")
        fifo_checker_vhd.write("         err_not_CTS_in <= '0';\n")
        fifo_checker_vhd.write("    end if;\n")
        fifo_checker_vhd.write("end process;\n")
        fifo_checker_vhd.write("\n")

    if '12' in checker_id:
        fifo_checker_vhd.write(
            "process (CTS_out, DRTS, full_out, write_en_out)\n")
        fifo_checker_vhd.write("begin\n")
        fifo_checker_vhd.write(
            "    if ( (CTS_out = '1' or (CTS_out = '0' and DRTS = '0') or (CTS_out = '0' and DRTS = '1' and full_out = '1')) and write_en_out = '1') then\n"
        )
        fifo_checker_vhd.write("         err_not_write_en <= '1';\n")
        fifo_checker_vhd.write("    else\n")
        fifo_checker_vhd.write("         err_not_write_en <= '0';\n")
        fifo_checker_vhd.write("    end if;\n")
        fifo_checker_vhd.write("end process;\n")
        fifo_checker_vhd.write("\n")

    if '13' in checker_id:
        fifo_checker_vhd.write("process (read_en_out, read_en_signal)\n")
        fifo_checker_vhd.write("begin\n")
        fifo_checker_vhd.write("    if (read_en_out /= read_en_signal) then\n")
        fifo_checker_vhd.write("         err_read_en_mismatch <= '1';\n")
        fifo_checker_vhd.write("    else\n")
        fifo_checker_vhd.write("         err_read_en_mismatch <= '0';\n")
        fifo_checker_vhd.write("    end if;\n")
        fifo_checker_vhd.write("end process;\n")
        fifo_checker_vhd.write("\n")

    fifo_checker_vhd.write("\n")
    fifo_checker_vhd.write("end behavior;\n")

    fifo_checker_vhd.close()
def gen_arbiter_checkers(checker_id):
    name_string = name_string_generator(checker_id)
    arbiter_checker_vhd = open(
        "checker_vhdl/arbiter_checker" + name_string + ".vhd", 'w')

    arbiter_checker_vhd.write("\n")

    arbiter_checker_vhd.write("library ieee;\n")
    arbiter_checker_vhd.write("use ieee.std_logic_1164.all;\n")
    arbiter_checker_vhd.write("use IEEE.STD_LOGIC_ARITH.ALL;\n")
    arbiter_checker_vhd.write("use IEEE.STD_LOGIC_UNSIGNED.ALL;\n")
    arbiter_checker_vhd.write("use IEEE.NUMERIC_STD.all;\n")
    arbiter_checker_vhd.write("use IEEE.MATH_REAL.ALL;\n")
    arbiter_checker_vhd.write("\n")

    arbiter_checker_vhd.write("entity Arbiter_checkers is\n")
    arbiter_checker_vhd.write("   port (  \n")
    arbiter_checker_vhd.write(
        "           Req_N, Req_E, Req_W, Req_S, Req_L:in std_logic;\n")
    arbiter_checker_vhd.write("           DCTS: in std_logic; \n")
    arbiter_checker_vhd.write(
        "           Grant_N, Grant_E, Grant_W, Grant_S, Grant_L: in std_logic;\n"
    )
    arbiter_checker_vhd.write(
        "           Xbar_sel : in std_logic_vector(4 downto 0);\n")
    arbiter_checker_vhd.write(
        "           state: in std_logic_vector (5 downto 0);\n")
    arbiter_checker_vhd.write(
        "           state_in: in std_logic_vector (5 downto 0);\n")
    arbiter_checker_vhd.write(
        "           next_state_out: in std_logic_vector (5 downto 0);\n")
    arbiter_checker_vhd.write("           RTS_FF: in std_logic;\n")
    arbiter_checker_vhd.write("           RTS_FF_in: in std_logic;\n")
    arbiter_checker_vhd.write("\n")

    arbiter_checker_vhd.write("           -- Checker outputs \n")

    string_to_write = ""

    if '1' in checker_id:
        string_to_write += "err_state_IDLE_xbar,\n"
    if '2' in checker_id:
        string_to_write += "err_state_not_IDLE_xbar,\n"
    if '3' in checker_id:
        string_to_write += "err_state_IDLE_RTS_FF_in,\n"
    if '4' in checker_id:
        string_to_write += "err_state_not_IDLE_RTS_FF_RTS_FF_in,\n"
    if '5' in checker_id:
        string_to_write += "err_state_not_IDLE_DCTS_RTS_FF_RTS_FF_in,\n"
    if '6' in checker_id:
        string_to_write += "err_state_not_IDLE_not_DCTS_RTS_FF_RTS_FF_in,\n"
    if '7' in checker_id:
        string_to_write += "err_RTS_FF_not_DCTS_state_state_in,\n"
    if '8' in checker_id:
        string_to_write += "err_not_RTS_FF_state_in_next_state,\n"
    if '9' in checker_id:
        string_to_write += "err_RTS_FF_DCTS_state_in_next_state,\n"
    if '10' in checker_id:
        string_to_write += "err_not_DCTS_Grants,\n"
    if '11' in checker_id:
        string_to_write += "err_DCTS_not_RTS_FF_Grants,\n"
    if '12' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_IDLE_Grants,\n"
    if '13' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_not_IDLE_Grants_onehot,\n"
    if '14' in checker_id:
        string_to_write += "err_Requests_next_state_IDLE,\n"
    if '15' in checker_id:
        string_to_write += "err_IDLE_Req_L,\n"
    if '16' in checker_id:
        string_to_write += "err_Local_Req_L,\n"
    if '17' in checker_id:
        string_to_write += "err_North_Req_N,\n"
    if '18' in checker_id:
        string_to_write += "err_East_Req_E,\n"
    if '19' in checker_id:
        string_to_write += "err_West_Req_W,\n"
    if '20' in checker_id:
        string_to_write += "err_South_Req_S,\n"
    if '21' in checker_id:
        string_to_write += "err_IDLE_Req_N,\n"
    if '22' in checker_id:
        string_to_write += "err_Local_Req_N,\n"
    if '23' in checker_id:
        string_to_write += "err_North_Req_E,\n"
    if '24' in checker_id:
        string_to_write += "err_East_Req_W,\n"
    if '25' in checker_id:
        string_to_write += "err_West_Req_S,\n"
    if '26' in checker_id:
        string_to_write += "err_South_Req_L,\n"
    if '27' in checker_id:
        string_to_write += "err_IDLE_Req_E,\n"
    if '28' in checker_id:
        string_to_write += "err_Local_Req_E,\n"
    if '29' in checker_id:
        string_to_write += "err_North_Req_W,\n"
    if '30' in checker_id:
        string_to_write += "err_East_Req_S,\n"
    if '31' in checker_id:
        string_to_write += "err_West_Req_L,\n"
    if '32' in checker_id:
        string_to_write += "err_South_Req_N,\n"
    if '33' in checker_id:
        string_to_write += "err_IDLE_Req_W,\n"
    if '34' in checker_id:
        string_to_write += "err_Local_Req_W,\n"
    if '35' in checker_id:
        string_to_write += "err_North_Req_S,\n"
    if '36' in checker_id:
        string_to_write += "err_East_Req_L,\n"
    if '37' in checker_id:
        string_to_write += "err_West_Req_N,\n"
    if '38' in checker_id:
        string_to_write += "err_South_Req_E,\n"
    if '39' in checker_id:
        string_to_write += "err_IDLE_Req_S,\n"
    if '40' in checker_id:
        string_to_write += "err_Local_Req_S,\n"
    if '41' in checker_id:
        string_to_write += "err_North_Req_L,\n"
    if '42' in checker_id:
        string_to_write += "err_East_Req_N,\n"
    if '43' in checker_id:
        string_to_write += "err_West_Req_E,\n"
    if '44' in checker_id:
        string_to_write += "err_South_Req_W,\n"
    if '45' in checker_id:
        string_to_write += "err_next_state_onehot,\n"
    if '46' in checker_id:
        string_to_write += "err_state_in_onehot,\n"
    if '47' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_L,\n"
    if '48' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_N,\n"
    if '49' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_E,\n"
    if '50' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_W,\n"
    if '51' in checker_id:
        string_to_write += "err_DCTS_RTS_FF_state_Grant_S,\n"
    if '52' in checker_id:
        string_to_write += "err_state_north_xbar_sel,\n"
    if '53' in checker_id:
        string_to_write += "err_state_east_xbar_sel,\n"
    if '54' in checker_id:
        string_to_write += "err_state_west_xbar_sel,\n"
    if '55' in checker_id:
        string_to_write += "err_state_south_xbar_sel,\n"
    if '56' in checker_id:
        string_to_write += "err_state_local_xbar_sel,\n"

    string_to_write = string_to_write[:len(string_to_write) - 2]
    string_to_write += " : out std_logic\n"

    arbiter_checker_vhd.write(string_to_write)

    arbiter_checker_vhd.write("                );\n")
    arbiter_checker_vhd.write("end Arbiter_checkers;\n")

    arbiter_checker_vhd.write("\n")
    arbiter_checker_vhd.write("architecture behavior of Arbiter_checkers is\n")

    arbiter_checker_vhd.write("\n")
    arbiter_checker_vhd.write(
        "CONSTANT IDLE: std_logic_vector (5 downto 0) := \"000001\";\n")
    arbiter_checker_vhd.write(
        "CONSTANT Local: std_logic_vector (5 downto 0) := \"000010\";\n")
    arbiter_checker_vhd.write(
        "CONSTANT North: std_logic_vector (5 downto 0) := \"000100\";\n")
    arbiter_checker_vhd.write(
        "CONSTANT East: std_logic_vector (5 downto 0) := \"001000\";\n")
    arbiter_checker_vhd.write(
        "CONSTANT West: std_logic_vector (5 downto 0) := \"010000\";\n")
    arbiter_checker_vhd.write(
        "CONSTANT South: std_logic_vector (5 downto 0) := \"100000\";\n")
    arbiter_checker_vhd.write(
        "SIGNAL   Requests: std_logic_vector (4 downto 0);\n")
    arbiter_checker_vhd.write(
        "SIGNAL   Grants: std_logic_vector (4 downto 0);\n")

    arbiter_checker_vhd.write("\n")

    arbiter_checker_vhd.write("begin \n")
    arbiter_checker_vhd.write("\n")
    arbiter_checker_vhd.write(
        "Requests <= Req_N & Req_E & Req_W & Req_S & Req_L; \n")
    arbiter_checker_vhd.write(
        "Grants   <= Grant_N & Grant_E & Grant_W & Grant_S & Grant_L; \n")
    arbiter_checker_vhd.write("\n")
    arbiter_checker_vhd.write("-- Checkers\n")

    arbiter_checker_vhd.write("\n")

    if '1' in checker_id:
        arbiter_checker_vhd.write("process (Xbar_sel, state) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (state = IDLE and Xbar_sel /= \"00000\") then \n")
        arbiter_checker_vhd.write("        err_state_IDLE_xbar <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write(
            "        err_state_IDLE_xbar <= '0';      \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '2' in checker_id:
        arbiter_checker_vhd.write("process (state, Xbar_sel) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write("    if ( state /= IDLE and  \n")
        arbiter_checker_vhd.write(
            "         Xbar_sel /= \"00001\" and Xbar_sel /= \"00010\" and Xbar_sel /= \"00100\" and Xbar_sel /= \"01000\" and Xbar_sel /= \"10000\") then  \n"
        )
        arbiter_checker_vhd.write("        err_state_not_IDLE_xbar <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write(
            "        err_state_not_IDLE_xbar <= '0';      \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '3' in checker_id:
        arbiter_checker_vhd.write("process (state, RTS_FF_in) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (state = IDLE and RTS_FF_in = '1') then \n")
        arbiter_checker_vhd.write(
            "        err_state_IDLE_RTS_FF_in <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write(
            "        err_state_IDLE_RTS_FF_in <= '0'; \n")
        arbiter_checker_vhd.write("    end if;      \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '4' in checker_id:
        arbiter_checker_vhd.write("process (state, RTS_FF, RTS_FF_in) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if ( (state = North or state = East or state = West or state = South or state = Local) and RTS_FF = '0' and RTS_FF = '0' and RTS_FF_in = '0') then \n"
        )
        arbiter_checker_vhd.write(
            "        err_state_not_IDLE_RTS_FF_RTS_FF_in <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write(
            "        err_state_not_IDLE_RTS_FF_RTS_FF_in <= '0';  \n")
        arbiter_checker_vhd.write("    end if;      \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '5' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, DCTS, RTS_FF, RTS_FF_in) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if ( (state = North or state = East or state = West or state = South or state = Local) and RTS_FF = '1' and DCTS = '1' and RTS_FF_in = '1') then \n"
        )
        arbiter_checker_vhd.write(
            "        err_state_not_IDLE_DCTS_RTS_FF_RTS_FF_in <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write(
            "        err_state_not_IDLE_DCTS_RTS_FF_RTS_FF_in <= '0'; \n")
        arbiter_checker_vhd.write("    end if;      \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '6' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, DCTS, RTS_FF, RTS_FF_in) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if ( (state = North or state = East or state = West or state = South or state = Local) and RTS_FF = '1' and DCTS = '0' and RTS_FF_in = '0') then \n"
        )
        arbiter_checker_vhd.write(
            "        err_state_not_IDLE_not_DCTS_RTS_FF_RTS_FF_in <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write(
            "        err_state_not_IDLE_not_DCTS_RTS_FF_RTS_FF_in <= '0'; \n")
        arbiter_checker_vhd.write("    end if;          \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '7' in checker_id:
        arbiter_checker_vhd.write("process (RTS_FF, DCTS, state, state_in) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (RTS_FF = '1' and DCTS = '0' and state /= state_in) then \n"
        )
        arbiter_checker_vhd.write(
            "        err_RTS_FF_not_DCTS_state_state_in <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_RTS_FF_not_DCTS_state_state_in <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '8' in checker_id:
        arbiter_checker_vhd.write(
            "process (RTS_FF, state_in, next_state_out) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (RTS_FF = '0' and state_in /= next_state_out) then \n")
        arbiter_checker_vhd.write(
            "        err_not_RTS_FF_state_in_next_state <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_not_RTS_FF_state_in_next_state <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '9' in checker_id:
        arbiter_checker_vhd.write(
            "process (RTS_FF, DCTS, state_in, next_state_out) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (RTS_FF = '1' and DCTS = '1' and state_in /= next_state_out) then \n"
        )
        arbiter_checker_vhd.write(
            "        err_RTS_FF_DCTS_state_in_next_state <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_RTS_FF_DCTS_state_in_next_state <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '10' in checker_id:
        arbiter_checker_vhd.write("process (RTS_FF, Grants) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (RTS_FF = '0' and Grants /= \"00000\") then \n")
        arbiter_checker_vhd.write("        err_not_DCTS_Grants <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write("        err_not_DCTS_Grants <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '11' in checker_id:
        arbiter_checker_vhd.write("process (DCTS, RTS_FF, Grants) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (RTS_FF = '1' and DCTS = '0' and Grants /= \"00000\") then \n"
        )
        arbiter_checker_vhd.write(
            "        err_DCTS_not_RTS_FF_Grants <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_DCTS_not_RTS_FF_Grants <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '12' in checker_id:
        arbiter_checker_vhd.write("process (DCTS, RTS_FF, state, Grants) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (DCTS = '1' and RTS_FF = '1' and state = IDLE and Grants /= \"00000\") then \n"
        )
        arbiter_checker_vhd.write(
            "        err_DCTS_RTS_FF_IDLE_Grants <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_DCTS_RTS_FF_IDLE_Grants <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '13' in checker_id:
        arbiter_checker_vhd.write("process (DCTS, RTS_FF, state, Grants) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (DCTS = '1' and RTS_FF = '1' and state /= IDLE and  \n")
        arbiter_checker_vhd.write(
            "        Grants /= \"00001\" and Grants /= \"00010\" and Grants /= \"00100\" and Grants /= \"01000\" and Grants /= \"10000\") then \n"
        )
        arbiter_checker_vhd.write(" \n")
        arbiter_checker_vhd.write(
            "        err_DCTS_RTS_FF_not_IDLE_Grants_onehot <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_DCTS_RTS_FF_not_IDLE_Grants_onehot <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '14' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Requests, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if ( (state = North or state = East or state = West or state = South or state = Local or state = IDLE) and Requests = \"00000\" and next_state_out /= IDLE ) then  \n"
        )
        arbiter_checker_vhd.write(
            "        err_Requests_next_state_IDLE <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_Requests_next_state_IDLE <= '0'; \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '15' in checker_id:
        arbiter_checker_vhd.write("process (state, Req_L, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if ( state = IDLE and Req_L = '1' and next_state_out /= Local) then \n"
        )
        arbiter_checker_vhd.write("        err_IDLE_Req_L <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_IDLE_Req_L <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '16' in checker_id:
        arbiter_checker_vhd.write("process (state, Req_L, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if ( state /= IDLE and state /= North and state /=East and state /= West and state /= South and Req_L = '1' and next_state_out /= Local) then \n"
        )
        arbiter_checker_vhd.write("        err_Local_Req_L <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_Local_Req_L <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '17' in checker_id:
        arbiter_checker_vhd.write("process (state, Req_N, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = North and Req_N = '1' and next_state_out /= North) then \n"
        )
        arbiter_checker_vhd.write("        err_North_Req_N <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_North_Req_N <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '18' in checker_id:
        arbiter_checker_vhd.write("process (state, Req_E, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = East and Req_E = '1' and next_state_out /= East) then \n"
        )
        arbiter_checker_vhd.write("        err_East_Req_E <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_East_Req_E <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '19' in checker_id:
        arbiter_checker_vhd.write("process (state, Req_W, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = West and Req_W = '1' and next_state_out /= West) then \n"
        )
        arbiter_checker_vhd.write("        err_West_Req_W <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_West_Req_W <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '20' in checker_id:
        arbiter_checker_vhd.write("process (state, Req_S, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = South and Req_S = '1' and next_state_out /= South) then \n"
        )
        arbiter_checker_vhd.write("        err_South_Req_S <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_South_Req_S <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '21' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_L, Req_N, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if ( state = IDLE and Req_L = '0' and Req_N = '1' and next_state_out /= North) then \n"
        )
        arbiter_checker_vhd.write("        err_IDLE_Req_N <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_IDLE_Req_N <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '22' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_L, Req_N, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if ( state /= IDLE and state /= North and state /=East and state /=West and state /= South and Req_L = '0' and Req_N = '1' and next_state_out /= North) then \n"
        )
        arbiter_checker_vhd.write("        err_Local_Req_N <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_Local_Req_N <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '23' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_N, Req_E, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = North and Req_N = '0' and Req_E = '1' and next_state_out /= East) then \n"
        )
        arbiter_checker_vhd.write("        err_North_Req_E <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_North_Req_E <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '24' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_E, Req_W, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = East and Req_E = '0' and Req_W = '1' and next_state_out /= West) then \n"
        )
        arbiter_checker_vhd.write("        err_East_Req_W <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_East_Req_W <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '25' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_W, Req_S, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = West and Req_W = '0' and Req_S = '1' and next_state_out /= South) then \n"
        )
        arbiter_checker_vhd.write("        err_West_Req_S <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_West_Req_S <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '26' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_S, Req_L, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = South and Req_S = '0' and Req_L = '1' and next_state_out /= Local) then \n"
        )
        arbiter_checker_vhd.write("        err_South_Req_L <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_South_Req_L <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '27' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_L, Req_N, Req_E, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if ( state = IDLE and Req_L = '0' and Req_N = '0' and Req_E = '1' and next_state_out /= East) then \n"
        )
        arbiter_checker_vhd.write("        err_IDLE_Req_E <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_IDLE_Req_E <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '28' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_L, Req_N, Req_E, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if ( state /= IDLE and state /= North and state /=East and state /=West and state /= South and  \n"
        )
        arbiter_checker_vhd.write(
            "         Req_L = '0' and Req_N = '0' and Req_E = '1' and next_state_out /= East) then \n"
        )
        arbiter_checker_vhd.write("        err_Local_Req_E <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_Local_Req_E <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '29' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_N, Req_E, Req_W, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = North and Req_N = '0' and Req_E = '0' and Req_W = '1' and next_state_out /= West) then \n"
        )
        arbiter_checker_vhd.write("        err_North_Req_W <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_North_Req_W <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '30' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_E, Req_W, Req_S, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = East and Req_E = '0' and Req_W = '0' and Req_S = '1' and next_state_out /= South) then \n"
        )
        arbiter_checker_vhd.write("        err_East_Req_S <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_East_Req_S <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '31' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_W, Req_S, Req_L, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = West and Req_W = '0' and Req_S = '0' and Req_L = '1' and next_state_out /= Local) then \n"
        )
        arbiter_checker_vhd.write("        err_West_Req_L <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_West_Req_L <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '32' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_S, Req_L, Req_N, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = South and Req_S = '0' and Req_L = '0' and Req_N = '1' and next_state_out /= North) then \n"
        )
        arbiter_checker_vhd.write("        err_South_Req_N <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_South_Req_N <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '33' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_L, Req_N, Req_E, Req_W, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if ( state = IDLE and Req_L = '0' and Req_N = '0' and Req_E = '0' and Req_W = '1' and next_state_out /= West) then \n"
        )
        arbiter_checker_vhd.write("        err_IDLE_Req_W <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_IDLE_Req_W <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '34' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_L, Req_N, Req_E, Req_W, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if ( state /= IDLE and state /= North and state /=East and state /=West and state /= South and  \n"
        )
        arbiter_checker_vhd.write(
            "         Req_L = '0' and Req_N = '0' and Req_E = '0' and Req_W = '1' and next_state_out /= West) then \n"
        )
        arbiter_checker_vhd.write("        err_Local_Req_W <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_Local_Req_W <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '35' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_N, Req_E, Req_W, Req_S, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = North and Req_N = '0' and Req_E = '0' and Req_W = '0' and Req_S = '1' and next_state_out /= South) then \n"
        )
        arbiter_checker_vhd.write("        err_North_Req_S <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_North_Req_S <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '36' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_E, Req_W, Req_S, Req_L, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = East and Req_E = '0' and Req_W = '0' and Req_S = '0' and Req_L = '1' and next_state_out /= Local) then \n"
        )
        arbiter_checker_vhd.write("        err_East_Req_L <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_East_Req_L <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '37' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_W, Req_S, Req_L, Req_N, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = West and Req_W = '0' and Req_S = '0' and Req_L = '0' and Req_N = '1' and next_state_out /= North) then \n"
        )
        arbiter_checker_vhd.write("        err_West_Req_N <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_West_Req_N <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '38' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_S, Req_L, Req_N, Req_E, next_state_out) \n")
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = South and Req_S = '0' and Req_L = '0' and Req_N = '0' and Req_E = '1' and next_state_out /= East) then \n"
        )
        arbiter_checker_vhd.write("        err_South_Req_E <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_South_Req_E <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '39' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_L, Req_N, Req_E, Req_W, Req_S, next_state_out) \n"
        )
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if ( state = IDLE and Req_L = '0' and Req_N = '0' and Req_E = '0' and Req_W = '0' and Req_S = '1'  \n"
        )
        arbiter_checker_vhd.write(
            "        and next_state_out /= South) then \n")
        arbiter_checker_vhd.write("        err_IDLE_Req_S <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_IDLE_Req_S <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '40' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_L, Req_N, Req_E, Req_W, Req_S, next_state_out) \n"
        )
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if ( state /= IDLE and state /= North and state /=East and state /=West and state /= South and  \n"
        )
        arbiter_checker_vhd.write(
            "         Req_L = '0' and Req_N = '0' and Req_E = '0' and Req_W = '0' and Req_S = '1'  \n"
        )
        arbiter_checker_vhd.write(
            "        and next_state_out /= South) then \n")
        arbiter_checker_vhd.write("        err_Local_Req_S <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_Local_Req_S <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    if '41' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_N, Req_E, Req_W, Req_S, Req_L, next_state_out) \n"
        )
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = North and Req_N = '0' and Req_E = '0' and Req_W = '0' and Req_S = '0' and Req_L = '1'  \n"
        )
        arbiter_checker_vhd.write(
            "        and next_state_out /= Local) then \n")
        arbiter_checker_vhd.write("        err_North_Req_L <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_North_Req_L <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '42' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_E, Req_W, Req_S, Req_L, Req_N, next_state_out) \n"
        )
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = East and Req_E = '0' and Req_W = '0' and Req_S = '0' and Req_L = '0' and Req_N = '1'  \n"
        )
        arbiter_checker_vhd.write(
            "        and next_state_out /= North) then \n")
        arbiter_checker_vhd.write("        err_East_Req_N <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_East_Req_N <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '43' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_W, Req_S, Req_L, Req_N, Req_E, next_state_out) \n"
        )
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = West and Req_W = '0' and Req_S = '0' and Req_L = '0' and Req_N = '0' and Req_E = '1'  \n"
        )
        arbiter_checker_vhd.write(
            "        and next_state_out /= East) then \n")
        arbiter_checker_vhd.write("        err_West_Req_E <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_West_Req_E <= '0';   \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '44' in checker_id:
        arbiter_checker_vhd.write(
            "process (state, Req_S, Req_L, Req_N, Req_E, Req_W, next_state_out) \n"
        )
        arbiter_checker_vhd.write("begin  \n")
        arbiter_checker_vhd.write(
            "    if (state = South and Req_S = '0' and Req_L = '0' and Req_N = '0' and Req_E = '0' and Req_W = '1'  \n"
        )
        arbiter_checker_vhd.write(
            "        and next_state_out /= West) then \n")
        arbiter_checker_vhd.write("        err_South_Req_W <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_South_Req_W <= '0';  \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '45' in checker_id:
        arbiter_checker_vhd.write("process (next_state_out) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (next_state_out /= IDLE and next_state_out /= North and next_state_out /= East and next_state_out /= West and  \n"
        )
        arbiter_checker_vhd.write(
            "        next_state_out /= South and next_state_out /= Local) then \n"
        )
        arbiter_checker_vhd.write("        err_next_state_onehot <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write(
            "        err_next_state_onehot <= '0';    \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '46' in checker_id:
        arbiter_checker_vhd.write("process (state_in) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (state_in /= IDLE and state_in /= North and state_in /= East and state_in /= West and  \n"
        )
        arbiter_checker_vhd.write(
            "        state_in /= South and state_in /= Local) then \n")
        arbiter_checker_vhd.write("        err_state_in_onehot <= '1'; \n")
        arbiter_checker_vhd.write("    else  \n")
        arbiter_checker_vhd.write("        err_state_in_onehot <= '0'; \n")
        arbiter_checker_vhd.write("    end if; \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '47' in checker_id:
        arbiter_checker_vhd.write("process (DCTS, RTS_FF, state, Grant_L) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (DCTS = '1' and RTS_FF = '1' and state /= IDLE and state /= North and state /=East and state /=West and  \n"
        )
        arbiter_checker_vhd.write(
            "        state /= South and Grant_L = '0' ) then \n")
        arbiter_checker_vhd.write(
            "        err_DCTS_RTS_FF_state_Grant_L <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_DCTS_RTS_FF_state_Grant_L <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '48' in checker_id:
        arbiter_checker_vhd.write("process (DCTS, RTS_FF, state, Grant_N) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (DCTS = '1' and RTS_FF = '1' and state = North and Grant_N = '0' ) then \n"
        )
        arbiter_checker_vhd.write(
            "        err_DCTS_RTS_FF_state_Grant_N <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_DCTS_RTS_FF_state_Grant_N <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '49' in checker_id:
        arbiter_checker_vhd.write("process (DCTS, RTS_FF, state, Grant_E) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (DCTS = '1' and RTS_FF = '1' and state = East and Grant_E = '0' ) then \n"
        )
        arbiter_checker_vhd.write(
            "        err_DCTS_RTS_FF_state_Grant_E <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_DCTS_RTS_FF_state_Grant_E <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '50' in checker_id:
        arbiter_checker_vhd.write("process (DCTS, RTS_FF, state, Grant_W) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (DCTS = '1' and RTS_FF = '1' and state = West and Grant_W = '0' ) then \n"
        )
        arbiter_checker_vhd.write(
            "        err_DCTS_RTS_FF_state_Grant_W <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_DCTS_RTS_FF_state_Grant_W <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '51' in checker_id:
        arbiter_checker_vhd.write("process (DCTS, RTS_FF, state, Grant_S) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (DCTS = '1' and RTS_FF = '1' and state = South and Grant_S = '0' ) then \n"
        )
        arbiter_checker_vhd.write(
            "        err_DCTS_RTS_FF_state_Grant_S <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_DCTS_RTS_FF_state_Grant_S <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '52' in checker_id:
        arbiter_checker_vhd.write("process (state, Xbar_sel) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (state = North and Xbar_sel /= \"00001\" ) then \n")
        arbiter_checker_vhd.write(
            "        err_state_north_xbar_sel <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_state_north_xbar_sel <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '53' in checker_id:
        arbiter_checker_vhd.write("process (state, Xbar_sel) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (state = East and Xbar_sel /= \"00010\" ) then \n")
        arbiter_checker_vhd.write("        err_state_east_xbar_sel <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write("        err_state_east_xbar_sel <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '54' in checker_id:
        arbiter_checker_vhd.write("process (state, Xbar_sel) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (state = West and Xbar_sel /= \"00100\" ) then \n")
        arbiter_checker_vhd.write("        err_state_west_xbar_sel <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write("        err_state_west_xbar_sel <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '55' in checker_id:
        arbiter_checker_vhd.write("process (state, Xbar_sel) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (state = South and Xbar_sel /= \"01000\" ) then \n")
        arbiter_checker_vhd.write(
            "        err_state_south_xbar_sel <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_state_south_xbar_sel <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write("  \n")

    if '56' in checker_id:
        arbiter_checker_vhd.write("process (state, Xbar_sel) \n")
        arbiter_checker_vhd.write("begin \n")
        arbiter_checker_vhd.write(
            "    if (state /= IDLE and state /= North and state /= East and state /= West and state /= South and Xbar_sel /= \"10000\" ) then \n"
        )
        arbiter_checker_vhd.write(
            "        err_state_local_xbar_sel <= '1'; \n")
        arbiter_checker_vhd.write("    else \n")
        arbiter_checker_vhd.write(
            "        err_state_local_xbar_sel <= '0'; \n")
        arbiter_checker_vhd.write("    end if;   \n")
        arbiter_checker_vhd.write("end process; \n")
        arbiter_checker_vhd.write(" \n")

    arbiter_checker_vhd.write("\n")
    arbiter_checker_vhd.write("end behavior;\n")
    arbiter_checker_vhd.write("\n")

    arbiter_checker_vhd.close()
def gen_elbdr_checker_top(checker_id):
    name_string = name_string_generator(checker_id)

    elbdr_checker_top = open(
        "checker_vhdl/elbdr_checker" + name_string + "_top.vhd", 'w')

    elbdr_checker_top.write("library ieee;\n")
    elbdr_checker_top.write("use ieee.std_logic_1164.all;\n")
    elbdr_checker_top.write("use IEEE.STD_LOGIC_ARITH.ALL;\n")
    elbdr_checker_top.write("use IEEE.STD_LOGIC_UNSIGNED.ALL;\n")
    elbdr_checker_top.write("use IEEE.NUMERIC_STD.all;\n")
    elbdr_checker_top.write("use IEEE.MATH_REAL.ALL;\n")
    elbdr_checker_top.write("\n")
    elbdr_checker_top.write("entity ELBDR_with_checkers_top is\n")
    elbdr_checker_top.write("	generic (\n")
    elbdr_checker_top.write("        cur_addr_rst: integer := 5;\n")
    elbdr_checker_top.write("        Rxy_rst: integer := 60;\n")
    elbdr_checker_top.write("        Cx_rst: integer := 15;\n")
    elbdr_checker_top.write("        NoC_size: integer := 4\n")
    elbdr_checker_top.write("    );\n")
    elbdr_checker_top.write("    port (  empty: in  std_logic;\n")
    elbdr_checker_top.write(
        "            flit_type: in std_logic_vector(2 downto 0);\n")
    elbdr_checker_top.write(
        "            dst_addr: in std_logic_vector(NoC_size-1 downto 0);\n")
    elbdr_checker_top.write(
        "            Req_N_FF, Req_W_FF, Req_S_FF, Req_L_FF: in std_logic;\n")
    elbdr_checker_top.write("            \n")
    elbdr_checker_top.write("            -- ELBDR outputs\n")
    elbdr_checker_top.write(
        "            Req_N_in, Req_W_in, Req_S_in, Req_L_in: out std_logic;\n")
    elbdr_checker_top.write("\n")
    elbdr_checker_top.write("            -- Checker outputs\n")
    string_to_write = ""

    if '1' in checker_id:
        string_to_write += "err_LBDR_Req_onehot,"
    if '2' in checker_id:
        string_to_write += "err_LBDR_dst_addr_checker,"
    if '3' in checker_id:
        string_to_write += "err_LBDR_Req_tail_allzero,"
    if '4' in checker_id:
        string_to_write += "err_LBDR_Req_allzero,"

    elbdr_checker_top.write(
        string_to_write[:len(string_to_write) - 1] +
        ": out std_logic -- , err_LBDR_Req_not_Local : out std_logic\n")
    elbdr_checker_top.write("            );\n")
    elbdr_checker_top.write("end ELBDR_with_checkers_top;\n")
    elbdr_checker_top.write("\n")
    elbdr_checker_top.write(
        "architecture behavior of ELBDR_with_checkers_top is\n")
    elbdr_checker_top.write("\n")
    elbdr_checker_top.write("component ELBDR_pseudo is\n")
    elbdr_checker_top.write("	generic (\n")
    elbdr_checker_top.write("        cur_addr_rst: integer := 5;\n")
    elbdr_checker_top.write("        Rxy_rst: integer := 60;\n")
    elbdr_checker_top.write("        Cx_rst: integer := 15;\n")
    elbdr_checker_top.write("        NoC_size: integer := 4\n")
    elbdr_checker_top.write("    );\n")
    elbdr_checker_top.write("    port (  empty: in  std_logic;\n")
    elbdr_checker_top.write(
        "            flit_type: in std_logic_vector(2 downto 0);\n")
    elbdr_checker_top.write(
        "            dst_addr: in std_logic_vector(NoC_size-1 downto 0);\n")
    elbdr_checker_top.write(
        "            Req_N_FF, Req_W_FF, Req_S_FF, Req_L_FF: in std_logic;\n")
    elbdr_checker_top.write("\n")
    elbdr_checker_top.write(
        "            Req_N_in, Req_W_in, Req_S_in, Req_L_in: out std_logic\n")
    elbdr_checker_top.write("            );\n")
    elbdr_checker_top.write("end component;\n")
    elbdr_checker_top.write("\n")
    elbdr_checker_top.write("component ELBDR_checkers is\n")
    elbdr_checker_top.write("    generic (\n")
    elbdr_checker_top.write("        cur_addr_rst: integer := 5;\n")
    elbdr_checker_top.write("        NoC_size: integer := 4\n")
    elbdr_checker_top.write("    );\n")
    elbdr_checker_top.write("    port (  empty: in  std_logic;\n")
    elbdr_checker_top.write(
        "            flit_type: in std_logic_vector(2 downto 0);\n")
    elbdr_checker_top.write(
        "            Req_N_in, Req_W_in, Req_S_in, Req_L_in: in std_logic;\n")
    elbdr_checker_top.write(
        "            dst_addr: in std_logic_vector(NoC_size-1 downto 0);\n")
    elbdr_checker_top.write("\n")
    elbdr_checker_top.write("            -- Checker outputs\n")

    string_to_write = ""
    if '1' in checker_id:
        string_to_write += "err_LBDR_Req_onehot,"
    if '2' in checker_id:
        string_to_write += "err_LBDR_dst_addr_checker,"
    if '3' in checker_id:
        string_to_write += "err_LBDR_Req_tail_allzero,"
    if '4' in checker_id:
        string_to_write += "err_LBDR_Req_allzero,"

    elbdr_checker_top.write(
        string_to_write[:len(string_to_write) - 1] +
        ": out std_logic -- , err_LBDR_Req_not_Local : out std_logic\n")

    elbdr_checker_top.write("            );\n")
    elbdr_checker_top.write("end component;\n")
    elbdr_checker_top.write("\n")
    elbdr_checker_top.write(
        "signal Req_N_sig, Req_W_sig, Req_S_sig, Req_L_sig: std_logic;\n")
    elbdr_checker_top.write("\n")
    elbdr_checker_top.write("begin \n")
    elbdr_checker_top.write("\n")
    elbdr_checker_top.write("Req_N_in <= Req_N_sig;\n")
    elbdr_checker_top.write("Req_W_in <= Req_W_sig;\n")
    elbdr_checker_top.write("Req_S_in <= Req_S_sig;\n")
    elbdr_checker_top.write("Req_L_in <= Req_L_sig;\n")
    elbdr_checker_top.write("\n")
    elbdr_checker_top.write("\n")
    elbdr_checker_top.write("-- ELBDR instantiation\n")
    elbdr_checker_top.write(
        "ELBDR: ELBDR_pseudo generic map (cur_addr_rst => 5, Rxy_rst => 60, Cx_rst => 15, NoC_size => 4)\n"
    )
    elbdr_checker_top.write(
        " 				    port map (empty=>empty, flit_type=>flit_type, dst_addr=>dst_addr, \n"
    )
    elbdr_checker_top.write(
        "							Req_N_FF=>Req_N_FF, Req_W_FF=>Req_W_FF, Req_S_FF=>Req_S_FF, Req_L_FF=>Req_L_FF,\n"
    )
    elbdr_checker_top.write(
        " 							Req_N_in=>Req_N_sig, Req_W_in=>Req_W_sig, Req_S_in=>Req_S_sig, Req_L_in=>Req_L_sig);\n"
    )
    elbdr_checker_top.write("\n")
    elbdr_checker_top.write("-- Checkers instantiation\n")
    elbdr_checker_top.write(
        "CHECKERS: ELBDR_checkers generic map (cur_addr_rst => 5, NoC_size => 4)\n"
    )
    elbdr_checker_top.write(
        "                         port map (empty=>empty, flit_type=>flit_type, \n"
    )
    elbdr_checker_top.write(
        "								  Req_N_in=>Req_N_sig, Req_W_in=>Req_W_sig, Req_S_in=>Req_S_sig, Req_L_in=>Req_L_sig, dst_addr => dst_addr,\n"
    )
    string_to_write = ""
    if '1' in checker_id:
        string_to_write += "err_LBDR_Req_onehot => err_LBDR_Req_onehot,"
    if '2' in checker_id:
        string_to_write += "err_LBDR_dst_addr_checker => err_LBDR_dst_addr_checker,"
    if '3' in checker_id:
        string_to_write += "err_LBDR_Req_tail_allzero => err_LBDR_Req_tail_allzero,"
    if '4' in checker_id:
        string_to_write += "err_LBDR_Req_allzero => err_LBDR_Req_allzero,"

    elbdr_checker_top.write(string_to_write[:len(string_to_write) - 1] +
                            ");\n")

    elbdr_checker_top.write(
        "                                  -- err_LBDR_Req_not_Local => err_LBDR_Req_not_Local);\n"
    )
    elbdr_checker_top.write("\n")
    elbdr_checker_top.write("end behavior;\n")

    elbdr_checker_top.close()