diff --git a/src/rtl/muon_sorter.vhd b/src/rtl/muon_sorter.vhd
index 2347c54f3b486fe590539551529486737b6371f3..1df641d4489b74087cab9125459435554f39fac3 100644
--- a/src/rtl/muon_sorter.vhd
+++ b/src/rtl/muon_sorter.vhd
@@ -60,7 +60,7 @@ architecture behavior of muon_sorter is
 	signal top_cand_comb : MuonCandidateArray(0 to num_out - 1);
 	
 
-	-- pipeline
+	-- pipeline output
 	
 	
 	type sr_t is array (integer range <>) of MuonCandidateArray(0 to num_out - 1);
@@ -74,18 +74,35 @@ architecture behavior of muon_sorter is
 	attribute syn_srlstyle: string;  
     attribute syn_srlstyle of sr : signal is "registers";
     attribute syn_srlstyle of sr_v : signal is "registers";
+    
+   -- pipeline input
+   
+   	type in_sr_t is array (integer range <>) of MuonCandidateArray(0 to num_in - 1);
+	signal in_sr : sr_t(0 to delay);
+	signal in_sr_v : std_logic_vector(0 to delay);
+
+	attribute shreg_extract : string;
+	attribute shreg_extract of in_sr : signal is "no";
+	attribute shreg_extract of in_sr_v : signal is "no";
+	
+	attribute syn_srlstyle: string;  
+    attribute syn_srlstyle of in_sr : signal is "registers";
+    attribute syn_srlstyle of in_sr_v : signal is "registers";
+    
+    signal muon_cand_sr    : MuonCandidateArray(0 to num_in - 1);
+    signal sink_valid_sr : std_logic;
 
 begin
 
 	compare_p : process(all) is
 	begin                               -- process
 	-- generate a comparison matrix
-		for i in muon_cand'range loop
-			for j in muon_cand'range loop
+		for i in muon_cand_sr'range loop
+			for j in muon_cand_sr'range loop
 				-- generate the first half of the comparison matrix
 				if j < i then
 					-- comparison matrix for the top candidate
-					pt_compare(0)(i)(j) <= compare_pt(muon_cand(i).pt, muon_cand(j).pt);
+					pt_compare(0)(i)(j) <= compare_pt(muon_cand_sr(i).pt, muon_cand_sr(j).pt);
 					-- derive the matrices for the next higher candidates
 					for k in 1 to num_out - 1 loop
 						-- invert the comparison result if either candidate is the highest one
@@ -113,13 +130,13 @@ begin
 	-- assign the highset pt candidate index to the corresponding output
 		for k in top_cand'range loop
 			muon             := (sector => X"0", pt => X"0", roi => X"00");
-			for i in muon_cand'range loop
+			for i in muon_cand_sr'range loop
 				-- there can only be one highest pt candidate, so ne can use a logical OR to implement a multiplexer
 				--        enable := pt_compare(k)(i) ?= all_greater;
 				enable      := max_pt(k)(i);
-				muon.pt     := muon.pt or (enable and muon_cand(i).pt);
-				muon.sector := muon.sector or (enable and muon_cand(i).sector);
-				muon.roi    := muon.roi or (enable and muon_cand(i).roi);
+				muon.pt     := muon.pt or (enable and muon_cand_sr(i).pt);
+				muon.sector := muon.sector or (enable and muon_cand_sr(i).sector);
+				muon.roi    := muon.roi or (enable and muon_cand_sr(i).roi);
 			end loop;
 			top_cand_comb(k) <= muon;
 		end loop;                       -- k
@@ -128,17 +145,33 @@ begin
 
 	sr_p : process(all) is
 	begin
-		sr(0)   <= top_cand_comb;
-		sr_v(0) <= sink_valid;
 		if rising_edge(clk) then
 			for i in 1 to delay loop
 				sr(i)   <= sr(i - 1);
 				sr_v(i) <= sr_v(i - 1);
 			end loop;
 		end if;
-	end process sr_p;
 
+
+
+		if rising_edge(clk) then
+			for i in 1 to delay loop
+				in_sr(i)   <= sr(i - 1);
+				in_sr_v(i) <= sr_v(i - 1);
+			end loop;
+		end if;
+	end process sr_p;
+	
+	sr(0)   <= top_cand_comb;
+	sr_v(0) <= sink_valid_sr;
+		
+	in_sr(0)   <= muon_cand;
+	in_sr_v(0) <= sink_valid;
+	
 	top_cand     <= sr(delay);
 	source_valid <= sr_v(delay);
 
+	muon_cand_sr     <= in_sr(delay);
+	sink_valid_sr <= in_sr_v(delay);
+
 end behavior;
\ No newline at end of file
diff --git a/src/rtl/mux/mux.vhd b/src/rtl/mux/mux.vhd
index 17ac096c9aaa96ea8ae15a9dc24196c4fe1c4e8e..d2c3e919cc60c5cf830d316f44b024e88a3fe994 100644
--- a/src/rtl/mux/mux.vhd
+++ b/src/rtl/mux/mux.vhd
@@ -1,60 +1,60 @@
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-entity mux is
-	generic(
-		AW    : natural := 12;
-		DW    : natural := 32;
-		delay : natural := 3            -- delay in clock cycles for pipeline register
-	);
-	port(
-		clk          : in  std_logic;
-		sel          : out std_logic_vector(AW - 1 downto 0);
-		input        : in  std_logic_vector(DW * (2**AW) - 1 downto 0);
-		sink_valid   : in  std_logic;
-		source_valid : out std_logic;
-		output       : out std_logic_vector(DW - 1 downto 0)
-	);
-end entity mux;
-
-architecture RTL of mux is
-
-	signal sel_int     : integer range 0 to 2**AW - 1;
-	signal output_comb : std_logic_vector(DW - 1 downto 0);
-
-	-- pipeline
-
-	type sr_t is array (integer range <>) of std_logic_vector(DW - 1 downto 0);
-	signal sr   : sr_t(0 to delay);
-	signal sr_v : std_logic_vector(0 to delay);
-
-	attribute shreg_extract : string;
-	attribute shreg_extract of sr : signal is "no";
-	attribute shreg_extract of sr_v : signal is "no";
-
-	attribute syn_srlstyle : string;
-	attribute syn_srlstyle of sr : signal is "registers";
-	attribute syn_srlstyle of sr_v : signal is "registers";
-
-begin
-
-	sel_int     <= to_integer(unsigned(sel));
-	output_comb <= input((sel_int + 1) * DW - 1 downto sel_int * DW);
-
-	sr_p : process(all) is
-	begin
-		sr(0)   <= output_comb;
-		sr_v(0) <= sink_valid;
-		if rising_edge(clk) then
-			for i in 1 to delay loop
-				sr(i)   <= sr(i - 1);
-				sr_v(i) <= sr_v(i - 1);
-			end loop;
-		end if;
-	end process sr_p;
-
-	output       <= sr(delay);
-	source_valid <= sr_v(delay);
-
-end architecture RTL;
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity mux is
+	generic(
+		AW    : natural := 12;
+		DW    : natural := 32;
+		delay : natural := 3            -- delay in clock cycles for pipeline register
+	);
+	port(
+		clk          : in  std_logic;
+		sel          : out std_logic_vector(AW - 1 downto 0);
+		input        : in  std_logic_vector(DW * (2**AW) - 1 downto 0);
+		sink_valid   : in  std_logic;
+		source_valid : out std_logic;
+		output       : out std_logic_vector(DW - 1 downto 0)
+	);
+end entity mux;
+
+architecture RTL of mux is
+
+	signal sel_int     : integer range 0 to 2**AW - 1;
+	signal output_comb : std_logic_vector(DW - 1 downto 0);
+
+	-- pipeline
+
+	type sr_t is array (integer range <>) of std_logic_vector(DW - 1 downto 0);
+	signal sr   : sr_t(0 to delay);
+	signal sr_v : std_logic_vector(0 to delay);
+
+	attribute shreg_extract : string;
+	attribute shreg_extract of sr : signal is "no";
+	attribute shreg_extract of sr_v : signal is "no";
+
+	attribute syn_srlstyle : string;
+	attribute syn_srlstyle of sr : signal is "registers";
+	attribute syn_srlstyle of sr_v : signal is "registers";
+
+begin
+
+	sel_int     <= to_integer(unsigned(sel));
+	output_comb <= input((sel_int + 1) * DW - 1 downto sel_int * DW);
+
+	sr_p : process(all) is
+	begin
+		sr(0)   <= output_comb;
+		sr_v(0) <= sink_valid;
+		if rising_edge(clk) then
+			for i in 1 to delay loop
+				sr(i)   <= sr(i - 1);
+				sr_v(i) <= sr_v(i - 1);
+			end loop;
+		end if;
+	end process sr_p;
+
+	output       <= sr(delay);
+	source_valid <= sr_v(delay);
+
+end architecture RTL;
\ No newline at end of file
diff --git a/src/tcl/generate_syn_runs.tcl b/src/tcl/generate_syn_runs.tcl
index 8ad0c4e4a9136ff17835eaff647bb1954a1c8a62..dafa8bd6bfe445971f6560a34d28d5567838e117 100644
--- a/src/tcl/generate_syn_runs.tcl
+++ b/src/tcl/generate_syn_runs.tcl
@@ -1,6 +1,6 @@
 proc create_run {I O D {run 1} opt} {
     puts "Creating run with I = $I, O = $O, D = $D"
-    set prjpre [format "I%03d_O%03d_D%03d" $I $O $D]
+    set prjpre [format "I%03d_O%03d_D%03d_IORET" $I $O $D]
     set prjname [format "%s-%s" $prjpre $opt]
     set basepath "D:/mygitlab/sorting"
     set prjpath [format "%s/syn/%s/wrapper_%s.prj" $basepath $prjname $prjname]
@@ -173,9 +173,9 @@ set cfgs []
 set opts [list freq320retfan10000 freq320retfan16 freq160retfan10000 freq160retfan16 freq80retfan10000 freq80retfan16 freq40retfan10000 freq40retfan16]
 #lappend cfgs [list 16 16 [range 0 2]]
 #lappend cfgs [list 16 2 [range 0 2]]
-#lappend cfgs [list 16 16 [range 0 5]]
-lappend cfgs [list 32 16 [range 0 5]]
-lappend cfgs [list 32 4 [range 0 5]]
+lappend cfgs [list 16 16 [range 0 3]]
+#lappend cfgs [list 32 16 [range 0 5]]
+#lappend cfgs [list 32 4 [range 0 5]]
 #lappend cfgs [list 48 16 [range 0 8]]
 #lappend cfgs [list 64 16 [range 0 10]]
 
diff --git a/src/tcl/generate_syn_runs_mux.tcl b/src/tcl/generate_syn_runs_mux.tcl
new file mode 100644
index 0000000000000000000000000000000000000000..567beabd08de5eabe57ecbea4c27e93db06df27b
--- /dev/null
+++ b/src/tcl/generate_syn_runs_mux.tcl
@@ -0,0 +1,183 @@
+proc create_run {AW DW D {run 1} opt} {
+    puts "Creating run with AW = $AW, DW = $DW, D = $D"
+    set prjpre [format "AW%03d_DW%03d_D%03d" $AW $DW $D]
+    set prjname [format "%s-%s" $prjpre $opt]
+    set basepath "D:/mygitlab/sorting"
+    set prjpath [format "%s/syn/%s/wrapper_mux_%s.prj" $basepath $prjname $prjname]
+    set subprjpath [format "%s/syn/%s/mux_1/mux_%s.prj" $basepath $prjname $prjname]
+    puts $prjpath
+    puts $subprjpath
+    project -new $prjpath
+    add_file -vhdl ${basepath}/src/rtl/mux/mux.vhd
+    add_file -verilog ${basepath}/src/rtl/lfsr.sv    
+    add_file -verilog ${basepath}/src/rtl/reducer.sv
+    add_file -vhdl ${basepath}/src/rtl/shift_reg_tap.vhd    
+	add_file -vhdl ${basepath}/src/rtl/mux/wrapper_mux.vhd  
+    set_option -disable_io_insertion 0
+    set_option -part XCVU9P
+    set_option -package FLGC2104
+    set_option -vhdl2008 1
+    set_option -retiming 0
+    switch $opt {
+	freq160retfan10000 {
+	    set_option -frequency 160
+	    set_option -fanout_limit 10000
+		add_file -constraint ${basepath}/src/xdc/clock_160.sdc
+		add_file -constraint ${basepath}/src/xdc/wrapper.sdc
+	}
+	freq160retfan16 {
+	    set_option -frequency 160
+	    set_option -fanout_limit 16
+		add_file -constraint ${basepath}/src/xdc/clock_160.sdc
+		add_file -constraint ${basepath}/src/xdc/wrapper.sdc
+	}
+	freq80retfan10000 {
+	    set_option -frequency 80
+	    set_option -fanout_limit 10000
+		add_file -constraint ${basepath}/src/xdc/clock_80.sdc
+		add_file -constraint ${basepath}/src/xdc/wrapper.sdc
+	}
+	freq80retfan16 {
+	    set_option -frequency 80
+	    set_option -fanout_limit 16
+		add_file -constraint ${basepath}/src/xdc/clock_80.sdc
+		add_file -constraint ${basepath}/src/xdc/wrapper.sdc
+	}
+	freq320retfan10000 {
+	    set_option -frequency 320
+	    set_option -fanout_limit 10000
+		add_file -constraint ${basepath}/src/xdc/clock_320.sdc
+		add_file -constraint ${basepath}/src/xdc/wrapper.sdc
+	}
+	freq320retfan16 {
+	    set_option -frequency 320
+	    set_option -fanout_limit 16
+		add_file -constraint ${basepath}/src/xdc/clock_320.sdc
+		add_file -constraint ${basepath}/src/xdc/wrapper.sdc
+	}
+	freq40retfan10000 {
+	    set_option -frequency 40
+	    set_option -fanout_limit 10000
+		add_file -constraint ${basepath}/src/xdc/clock_40.sdc
+		add_file -constraint ${basepath}/src/xdc/wrapper.sdc
+	}
+	freq40retfan16 {
+	    set_option -frequency 40
+	    set_option -fanout_limit 16
+		add_file -constraint ${basepath}/src/xdc/clock_40.sdc
+		add_file -constraint ${basepath}/src/xdc/wrapper.sdc
+	}	
+	default {
+	    puts "Invalid opt option!"
+	}
+    }
+    hdl_param -set AW $AW
+    hdl_param -set DW $DW
+    hdl_param -set delay $D
+    project -save $prjpath
+    project -run compile
+    cd ${basepath}/syn
+    export_project -instance mux_1 -add_file {../src/rtl/mux/mux.vhd} -no_default_hdl -project $subprjpath
+
+    project_data -active $subprjpath
+
+    set_option -disable_io_insertion 1
+    set_option -part XCVU9P
+    set_option -package FLGC2104
+    set_option -vhdl2008 1   
+    hdl_param -set AW $AW
+    hdl_param -set DW $DW
+    hdl_param -set delay $D
+    set_option -job pr_1 -add par
+    set_option -job pr_1 -option enable_run 0
+    switch $opt {
+	freq160retfan10000 {
+	    set_option -retiming 1
+	    set_option -frequency 160
+	    set_option -fanout_limit 10000
+		add_file -constraint ${basepath}/src/xdc/clock_160.sdc
+		add_file -constraint ${basepath}/src/xdc/mux.sdc
+	}
+	freq160retfan16 {
+	    set_option -retiming 1
+	    set_option -frequency 160
+	    set_option -fanout_limit 16
+		add_file -constraint ${basepath}/src/xdc/clock_160.sdc
+		add_file -constraint ${basepath}/src/xdc/mux.sdc
+	}
+	freq80retfan10000 {
+	    set_option -retiming 1
+	    set_option -frequency 80
+	    set_option -fanout_limit 10000
+		add_file -constraint ${basepath}/src/xdc/clock_80.sdc
+		add_file -constraint ${basepath}/src/xdc/mux.sdc
+	}
+	freq80retfan16 {
+	    set_option -retiming 1
+	    set_option -frequency 80
+	    set_option -fanout_limit 16
+		add_file -constraint ${basepath}/src/xdc/clock_80.sdc
+		add_file -constraint ${basepath}/src/xdc/mux.sdc
+	}	
+	freq320retfan10000 {
+	    set_option -retiming 1
+	    set_option -frequency 320
+	    set_option -fanout_limit 10000
+		add_file -constraint ${basepath}/src/xdc/clock_320.sdc
+		add_file -constraint ${basepath}/src/xdc/mux.sdc
+	}
+	freq320retfan16 {
+	    set_option -retiming 1
+	    set_option -frequency 320
+	    set_option -fanout_limit 16
+		add_file -constraint ${basepath}/src/xdc/clock_320.sdc
+		add_file -constraint ${basepath}/src/xdc/mux.sdc
+	}
+	freq40retfan10000 {
+	    set_option -retiming 1
+	    set_option -frequency 40
+	    set_option -fanout_limit 10000
+		add_file -constraint ${basepath}/src/xdc/clock_40.sdc
+		add_file -constraint ${basepath}/src/xdc/mux.sdc
+	}
+	freq40retfan16 {
+	    set_option -retiming 1
+	    set_option -frequency 40
+	    set_option -fanout_limit 16
+		add_file -constraint ${basepath}/src/xdc/clock_40.sdc
+		add_file -constraint ${basepath}/src/xdc/mux.sdc
+	}	
+	default {
+	    puts "Invalid opt option!"
+	}
+    }
+
+    
+    project -save $subprjpath
+
+    project_data -active $prjpath
+    set_option -job par_1 -option enable_run 1
+    #impl -active rev_1
+    if {$run == 1} {project -run}  
+    project -save $prjpath
+}
+
+
+proc range {from to {step 1}} {
+    set res $from; while {$to>$from} {lappend res [incr from $step]}; return $res
+}
+
+set cfgs []
+set opts [list freq320retfan10000 freq320retfan16 freq160retfan10000 freq160retfan16 freq80retfan10000 freq80retfan16 freq40retfan10000 freq40retfan16]
+lappend cfgs [list 12 32 [range 0 3]]
+
+foreach cfg $cfgs {
+    foreach {AW DW Dr} $cfg {
+		foreach {D} $Dr {
+			foreach opt $opts {
+				puts "$AW $DW $D"
+				create_run $AW $DW $D 1 $opt
+			}
+		}
+    }
+}
\ No newline at end of file