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")
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()
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()
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()
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
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()
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()