diff --git a/.gitignore b/.gitignore
index aecc6f43dfbc1cef30b707c7ced4a2f183a62808..d48ca2f74566bc9d4bf5aef62c990c1321349ac5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -56,7 +56,6 @@ simulation/VUnit/*.mem
 *.cf
 **vivado_libs**
 .*
-simulation/VUnit/**
 *.qdb
 *.qtl
 
diff --git a/scripts/filesets/felig_fileset.tcl b/scripts/filesets/felig_fileset.tcl
index 0f9157bea4c9efd9acae9050d082abb740e1e7a2..dc6c7763198e2b8a55785220950e5cdd7863447b 100644
--- a/scripts/filesets/felig_fileset.tcl
+++ b/scripts/filesets/felig_fileset.tcl
@@ -134,11 +134,21 @@ set XDC_FILES_BNL712 [concat $XDC_FILES_BNL712 \
 #  felig_top_BNL712_v2.0.xdc \
 
 set SIM_FILES [concat $SIM_FILES \
-  FELIG/felig_sim_top_bnl712.vhd \
-  FELIG/felig_sim_64b66b_decoding.vhd]
+  FELIG/felig_sim_top_bnl712.vhd\
+  FELIG/felig_sim_64b66b_decoding.vhd\
+  FELIG/felig_lpgbt_sim.vhd\
+  UVVMtests/tb/FELIGemulator_tb.vhd\
+  UVVMtests/tb/FELIGlinkwrapperLPGBT_tb.vhd\
+  UVVMtests/tb/FELIGexternaltrigger_tb.vhd\
+]
 
 set WCFG_FILES [concat $WCFG_FILES \
-  FELIG/waveforms/FELIG_phase2_behav.wcfg]
+  FELIG/waveforms/FELIGemulator_tb_behav.wcfg\
+  FELIG/waveforms/FELIGexternaltrigger_tb_behav.wcfg\
+  FELIG/waveforms/FELIGlinkwrapperLPGBT_tb_behav.wcfg\
+  FELIG/waveforms/felig_lpgbt_sim.wcfg\
+  FELIG/waveforms/FELIG_phase2_behav.wcfg\
+  ]
   
 
   
diff --git a/simulation/FELIG/add_felig_sim_files.tcl b/simulation/FELIG/add_felig_sim_files.tcl
new file mode 100644
index 0000000000000000000000000000000000000000..5a75d248bbd23415cfd17cdc674c9a52aedd8e98
--- /dev/null
+++ b/simulation/FELIG/add_felig_sim_files.tcl
@@ -0,0 +1,20 @@
+#NEEDS TO BE RUN in scripts/FELIX_top/
+source ../helper/clear_filesets.tcl
+
+source ../filesets/felig_fileset.tcl
+
+#set VHDL_FILES [concat $VHDL_FILES $VHDL_FILES_KU]
+set SIM_FILES [concat $SIM_FILES $SIM_FILES_KU]
+
+set scriptdir [pwd]
+set firmware_dir $scriptdir/../../
+
+foreach SIM_FILE $SIM_FILES {
+    add_files -fileset sim_1 -force -norecurse ${firmware_dir}/simulation/$SIM_FILE
+    set_property library work [get_files  ${firmware_dir}/simulation/$SIM_FILE]
+    set_property file_type {VHDL 2008} [get_files  ${firmware_dir}/simulation/$SIM_FILE]
+}
+
+foreach WCFG_FILE $WCFG_FILES {
+   add_files -fileset sim_1 -force -norecurse ${firmware_dir}/simulation/$WCFG_FILE
+}
diff --git a/simulation/FELIG/add_lpgbt_files.tcl b/simulation/FELIG/add_lpgbt_files.tcl
new file mode 100644
index 0000000000000000000000000000000000000000..94774a30cc3131db9dce809fac0b7a4a1d397e2d
--- /dev/null
+++ b/simulation/FELIG/add_lpgbt_files.tcl
@@ -0,0 +1,18 @@
+#NEEDS TO BE RUN in scripts/FELIX_top/
+source ../helper/clear_filesets.tcl
+
+source ../filesets/lpgbt_core_fileset.tcl
+
+set VHDL_FILES [concat $VHDL_FILES $VHDL_FILES_KU]
+
+set scriptdir [pwd]
+set firmware_dir $scriptdir/../../
+
+foreach VHDL_FILE $VHDL_FILES {
+	set file_path [file normalize ${firmware_dir}/sources/${VHDL_FILE}]
+
+	read_vhdl -library work $file_path
+	set_property FILE_TYPE {VHDL 2008} [get_files ${file_path}]
+	add_file $file_path
+}
+
diff --git a/simulation/FELIG/add_ttcemu_files.tcl b/simulation/FELIG/add_ttcemu_files.tcl
new file mode 100644
index 0000000000000000000000000000000000000000..cdafae05c5a7286076d6a5340cc77eca645d08b3
--- /dev/null
+++ b/simulation/FELIG/add_ttcemu_files.tcl
@@ -0,0 +1,18 @@
+#NEEDS TO BE RUN in scripts/FELIX_top/
+source ../helper/clear_filesets.tcl
+
+source ../filesets/ttc_emulator_fileset.tcl
+
+set VHDL_FILES [concat $VHDL_FILES $VHDL_FILES_KU]
+
+set scriptdir [pwd]
+set firmware_dir $scriptdir/../../
+
+foreach VHDL_FILE $VHDL_FILES {
+	set file_path [file normalize ${firmware_dir}/sources/${VHDL_FILE}]
+
+	read_vhdl -library work $file_path
+	set_property FILE_TYPE {VHDL 2008} [get_files ${file_path}]
+	add_file $file_path
+}
+
diff --git a/simulation/FELIG/felig_lpgbt_sim.vhd b/simulation/FELIG/felig_lpgbt_sim.vhd
index 2239a7bc4919815e65a3a3bf3a9d850450718807..b177087690da18cef1aceda4b5ec08108dea23a3 100644
--- a/simulation/FELIG/felig_lpgbt_sim.vhd
+++ b/simulation/FELIG/felig_lpgbt_sim.vhd
@@ -1,3 +1,4 @@
+--ricardo luz, argonne
 
 library IEEE;
     use IEEE.STD_LOGIC_1164.ALL;
@@ -23,7 +24,7 @@ end felig_lpgbt_sim;
 
 architecture Behavioral of felig_lpgbt_sim is
 
-    component clk_wiz_40_0 -- @suppress "Component declaration is not equal to its matching entity"
+    component clk_wiz_40_0 -- @suppress "Component declaratiechoon is not equal to its matching entity"
         port(
             clk_in2    : in  STD_LOGIC;
             clk_in_sel : in  STD_LOGIC;
@@ -151,7 +152,7 @@ begin
                 downlinkUserData_i          => downlinkUserData_i,                  --in
                 downlinkEcData_i            => downlinkEcData_i,                    --in
                 downlinkIcData_i            => downlinkIcData_i,                    --in
-                TXCLK40                     => TXCLK40,                            --in
+                TXCLK40                     => clk40,                            --in
                 TXCLK320                    => GT_TX_WORD_CLK,                      --in
                 RXCLK320m                   => GT_RX_WORD_CLK,                      --in
                 uplinkSelectFEC_i           => CTRL_FECMODE,                        --in
@@ -224,16 +225,12 @@ begin
             Port map
         (
                 clk40_in                        => rxrecclk40m,
-                --TXCLK40                         => txclk40m,--clk40_in,                 --in
-                --RXCLK40                         => rxrecclk40m,                         --in
                 TXCLK320                        => GT_TX_WORD_CLK,                      --in
                 RXCLK320                        => GT_RX_WORD_CLK,                      --in
                 rst_uplink_i                    => TX_RESET_i,                          --in
                 ctr_clkSlip_s                   => RxSlide_FE(i),                       --out
                 aligned                         => alignment_done_f_FE(i),              --out
                 sta_headerFlag_o                => sta_headerFlag_out_FE(i),            --out
-                sta_headerFlag_shift            => open,                                --out
-                clk_dataFlag_rxGb_s_o           => open,                                --out
                 dat_upLinkWord_fromGb_s         => TX_DATA_FE(i),                       --out
                 dat_downLinkWord_fromMgt_s16    => RX_DATA_16b,                         --in
                 rst_dnlink_i                    => rst_dnlink,--RL                      --in
@@ -294,9 +291,9 @@ begin
             if timeout then
                 exit;
             end if;
-            data_to_back_end    <= data_to_back_end + "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001";
-            data_to_front_end   <= data_to_front_end + "00000000000000000000000000000001";
-            wait for 3 us;
+            data_to_back_end    <= data_to_back_end + x"1";
+            data_to_front_end   <= data_to_front_end + x"1";
+            wait for 25 ns;
         end loop;
         wait for 1000 us;
     end process;
diff --git a/simulation/FELIG/felig_sim_top_bnl712.vhd b/simulation/FELIG/felig_sim_top_bnl712.vhd
index f5100041e0f2a594037979d395666b5101cc5e0d..e8f20d1989686af1df9d0278021bf94fb16925c8 100644
--- a/simulation/FELIG/felig_sim_top_bnl712.vhd
+++ b/simulation/FELIG/felig_sim_top_bnl712.vhd
@@ -269,7 +269,7 @@ begin
         lane_control(i).global.FEC      <= '0';--register_map_control.LPGBT_FEC(0)
         lane_control(i).global.DATARATE <= '1';-- not register_map_control.LPGBT_DATARATE(0)
         lane_control(i).global.aligned <= linkValid_array(i);
-        lane_control(i).fmemu_random.SELECT_RANDOM           <= pcie0_register_map_40_control.FMEMU_RANDOM_CONTROL.SELECT_RANDOM;
+        --lane_control(i).fmemu_random.SELECT_RANDOM           <= pcie0_register_map_40_control.FMEMU_RANDOM_CONTROL.SELECT_RANDOM;
         lane_control(i).fmemu_random.FMEMU_RANDOM_RAM_ADDR   <= pcie0_register_map_40_control.FMEMU_RANDOM_RAM_ADDR;
         lane_control(i).fmemu_random.FMEMU_RANDOM_RAM        <= pcie0_register_map_40_control.FMEMU_RANDOM_RAM;
         lane_control(i).fmemu_random.FMEMU_RANDOM_CONTROL    <= pcie0_register_map_40_control.FMEMU_RANDOM_CONTROL;
@@ -585,6 +585,8 @@ begin
 
             link_tx_flag_in              => link_tx_flag_i, --gbt_tx_flag_i,
             link_rx_flag_in              => link_rx_flag_i, -- gbt_rx_flag_i,
+            l1a_int_trigger_out          => open, --sim
+
             lane_control      => lane_control,
             lane_monitor      => open --lane_monitor,
         --            register_map_control_40xtal => pcie0_register_map_40_control,
diff --git a/simulation/FELIG/waveforms/FELIGemulator_tb_behav.wcfg b/simulation/FELIG/waveforms/FELIGemulator_tb_behav.wcfg
new file mode 100644
index 0000000000000000000000000000000000000000..b27d4e6d2e58a1f7cc634accedf3771966f0b148
--- /dev/null
+++ b/simulation/FELIG/waveforms/FELIGemulator_tb_behav.wcfg
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wave_config>
+   <wave_state>
+   </wave_state>
+   <db_ref_list>
+      <db_ref path="FELIGemulator_tb_behav.wdb" id="1">
+         <top_modules>
+            <top_module name="FELIGemulator_tb" />
+            <top_module name="axi_stream_package" />
+            <top_module name="centralrouter_package" />
+            <top_module name="felix_package" />
+            <top_module name="glbl" />
+            <top_module name="ip_lib" />
+            <top_module name="pcie_package" />
+            <top_module name="type_lib" />
+            <top_module name="vcomponents" />
+         </top_modules>
+      </db_ref>
+   </db_ref_list>
+   <zoom_setting>
+      <ZoomStartTime time="0.000000 us"></ZoomStartTime>
+      <ZoomEndTime time="171.908068 us"></ZoomEndTime>
+      <Cursor1Time time="171.908067 us"></Cursor1Time>
+   </zoom_setting>
+   <column_width_setting>
+      <NameColumnWidth column_width="206"></NameColumnWidth>
+      <ValueColumnWidth column_width="150"></ValueColumnWidth>
+   </column_width_setting>
+   <WVObjectSize size="66" />
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/clk40">
+      <obj_property name="ElementShortName">clk40</obj_property>
+      <obj_property name="ObjectShortName">clk40</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/clk160">
+      <obj_property name="ElementShortName">clk160</obj_property>
+      <obj_property name="ObjectShortName">clk160</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/clk240">
+      <obj_property name="ElementShortName">clk240</obj_property>
+      <obj_property name="ObjectShortName">clk240</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/clk320">
+      <obj_property name="ElementShortName">clk320</obj_property>
+      <obj_property name="ObjectShortName">clk320</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/clkTX">
+      <obj_property name="ElementShortName">clkTX[0:0]</obj_property>
+      <obj_property name="ObjectShortName">clkTX[0:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/clkRX">
+      <obj_property name="ElementShortName">clkRX[0:0]</obj_property>
+      <obj_property name="ObjectShortName">clkRX[0:0]</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/m_axis_aclk">
+      <obj_property name="ElementShortName">m_axis_aclk</obj_property>
+      <obj_property name="ObjectShortName">m_axis_aclk</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/clk_prcss">
+      <obj_property name="ElementShortName">clk_prcss</obj_property>
+      <obj_property name="ObjectShortName">clk_prcss</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/link_tx_flag">
+      <obj_property name="ElementShortName">link_tx_flag[0:0]</obj_property>
+      <obj_property name="ObjectShortName">link_tx_flag[0:0]</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/reset">
+      <obj_property name="ElementShortName">reset</obj_property>
+      <obj_property name="ObjectShortName">reset</obj_property>
+   </wvobject>
+   <wvobject fp_name="divider667" type="divider">
+      <obj_property name="label">Emulator</obj_property>
+      <obj_property name="DisplayName">label</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(0)\/emu_0/l1a_trig">
+      <obj_property name="ElementShortName">l1a_trig</obj_property>
+      <obj_property name="ObjectShortName">l1a_trig</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(0)\/emu_0/l1a_id">
+      <obj_property name="ElementShortName">l1a_id[15:0]</obj_property>
+      <obj_property name="ObjectShortName">l1a_id[15:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/elink_data_in">
+      <obj_property name="ElementShortName">elink_data_in[0:111][9:0]</obj_property>
+      <obj_property name="ObjectShortName">elink_data_in[0:111][9:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(0)\/emu_0/def_data_gen/elinkdata_o">
+      <obj_property name="ElementShortName">elinkdata_o[17:0]</obj_property>
+      <obj_property name="ObjectShortName">elinkdata_o[17:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(1)\/emu_0/def_data_gen/elinkdata_o">
+      <obj_property name="ElementShortName">elinkdata_o[17:0]</obj_property>
+      <obj_property name="ObjectShortName">elinkdata_o[17:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(2)\/emu_0/def_data_gen/elinkdata_o">
+      <obj_property name="ElementShortName">elinkdata_o[17:0]</obj_property>
+      <obj_property name="ObjectShortName">elinkdata_o[17:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(3)\/emu_0/def_data_gen/elinkdata_o">
+      <obj_property name="ElementShortName">elinkdata_o[17:0]</obj_property>
+      <obj_property name="ObjectShortName">elinkdata_o[17:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(4)\/emu_0/def_data_gen/elinkdata_o">
+      <obj_property name="ElementShortName">elinkdata_o[17:0]</obj_property>
+      <obj_property name="ObjectShortName">elinkdata_o[17:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(5)\/emu_0/def_data_gen/elinkdata_o">
+      <obj_property name="ElementShortName">elinkdata_o[17:0]</obj_property>
+      <obj_property name="ObjectShortName">elinkdata_o[17:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(6)\/emu_0/def_data_gen/elinkdata_o">
+      <obj_property name="ElementShortName">elinkdata_o[17:0]</obj_property>
+      <obj_property name="ObjectShortName">elinkdata_o[17:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(0)\/emu_0/enc8b10bx/dataIN">
+      <obj_property name="ElementShortName">dataIN[7:0]</obj_property>
+      <obj_property name="ObjectShortName">dataIN[7:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(1)\/emu_0/enc8b10bx/dataIN">
+      <obj_property name="ElementShortName">dataIN[7:0]</obj_property>
+      <obj_property name="ObjectShortName">dataIN[7:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(2)\/emu_0/enc8b10bx/dataIN">
+      <obj_property name="ElementShortName">dataIN[7:0]</obj_property>
+      <obj_property name="ObjectShortName">dataIN[7:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(3)\/emu_0/enc8b10bx/dataIN">
+      <obj_property name="ElementShortName">dataIN[7:0]</obj_property>
+      <obj_property name="ObjectShortName">dataIN[7:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(4)\/emu_0/enc8b10bx/dataIN">
+      <obj_property name="ElementShortName">dataIN[7:0]</obj_property>
+      <obj_property name="ObjectShortName">dataIN[7:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(5)\/emu_0/enc8b10bx/dataIN">
+      <obj_property name="ElementShortName">dataIN[7:0]</obj_property>
+      <obj_property name="ObjectShortName">dataIN[7:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(6)\/emu_0/enc8b10bx/dataIN">
+      <obj_property name="ElementShortName">dataIN[7:0]</obj_property>
+      <obj_property name="ObjectShortName">dataIN[7:0]</obj_property>
+   </wvobject>
+   <wvobject fp_name="divider668" type="divider">
+      <obj_property name="label">GBT/LPGBT out</obj_property>
+      <obj_property name="DisplayName">label</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/link_tx_data">
+      <obj_property name="ElementShortName">link_tx_data[0:0][227:0]</obj_property>
+      <obj_property name="ObjectShortName">link_tx_data[0:0][227:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/link_tx_valid">
+      <obj_property name="ElementShortName">link_tx_valid[0:0]</obj_property>
+      <obj_property name="ObjectShortName">link_tx_valid[0:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/l1id">
+      <obj_property name="ElementShortName">l1id[15:0]</obj_property>
+      <obj_property name="ObjectShortName">l1id[15:0]</obj_property>
+   </wvobject>
+   <wvobject fp_name="divider859" type="divider">
+      <obj_property name="label">maxis</obj_property>
+      <obj_property name="DisplayName">label</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/m_axis">
+      <obj_property name="ElementShortName">m_axis[0:0,0:41]</obj_property>
+      <obj_property name="ObjectShortName">m_axis[0:0,0:41]</obj_property>
+      <obj_property name="isExpanded"></obj_property>
+   </wvobject>
+   <wvobject fp_name="divider859" type="divider">
+      <obj_property name="label">decoder out</obj_property>
+      <obj_property name="DisplayName">label</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/\g_checking_data(0)\/\g_Streams(24)\/data">
+      <obj_property name="ElementShortName">data[31:0]</obj_property>
+      <obj_property name="ObjectShortName">data[31:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/\g_checking_data(0)\/\g_Streams(24)\/data10b">
+      <obj_property name="ElementShortName">data10b[9:0]</obj_property>
+      <obj_property name="ObjectShortName">data10b[9:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/\g_checking_data(0)\/\g_Streams(24)\/count8b">
+      <obj_property name="ElementShortName">count8b[1:0]</obj_property>
+      <obj_property name="ObjectShortName">count8b[1:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/\g_checking_data(0)\/\g_Streams(24)\/count_chunks">
+      <obj_property name="ElementShortName">count_chunks[6:0]</obj_property>
+      <obj_property name="ObjectShortName">count_chunks[6:0]</obj_property>
+      <obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/\g_checking_data(0)\/\g_Streams(24)\/checked">
+      <obj_property name="ElementShortName">checked</obj_property>
+      <obj_property name="ObjectShortName">checked</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/\g_checking_data(0)\/\g_Streams(24)\/check_words">
+      <obj_property name="ElementShortName">check_words</obj_property>
+      <obj_property name="ObjectShortName">check_words</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/\g_checking_data(0)\/\g_Streams(24)\/check_length">
+      <obj_property name="ElementShortName">check_length</obj_property>
+      <obj_property name="ObjectShortName">check_length</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/\g_checking_data(0)\/\g_Streams(24)\/last">
+      <obj_property name="ElementShortName">last</obj_property>
+      <obj_property name="ObjectShortName">last</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/\g_checking_data(0)\/\g_Streams(24)\/keep">
+      <obj_property name="ElementShortName">keep[3:0]</obj_property>
+      <obj_property name="ObjectShortName">keep[3:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/\g_checking_data(0)\/\g_Streams(24)\/exp_checks">
+      <obj_property name="ElementShortName">exp_checks[6:0]</obj_property>
+      <obj_property name="ObjectShortName">exp_checks[6:0]</obj_property>
+      <obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/\g_checking_data(0)\/\g_Streams(24)\/reset_v_ch">
+      <obj_property name="ElementShortName">reset_v_ch</obj_property>
+      <obj_property name="ObjectShortName">reset_v_ch</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/\g_checking_data(0)\/\g_Streams(24)\/cnt_checks">
+      <obj_property name="ElementShortName">cnt_checks[6:0]</obj_property>
+      <obj_property name="ObjectShortName">cnt_checks[6:0]</obj_property>
+      <obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/epath_aligned">
+      <obj_property name="ElementShortName">epath_aligned[0:0,39:0]</obj_property>
+      <obj_property name="ObjectShortName">epath_aligned[0:0,39:0]</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/\g_checking_data(0)\/\g_Streams(24)\/good">
+      <obj_property name="ElementShortName">good</obj_property>
+      <obj_property name="ObjectShortName">good</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/l1a">
+      <obj_property name="ElementShortName">l1a</obj_property>
+      <obj_property name="ObjectShortName">l1a</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/data_good">
+      <obj_property name="ElementShortName">data_good[0:0,39:0]</obj_property>
+      <obj_property name="ObjectShortName">data_good[0:0,39:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/epath_enabled">
+      <obj_property name="ElementShortName">epath_enabled[0:0,39:0]</obj_property>
+      <obj_property name="ObjectShortName">epath_enabled[0:0,39:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/epath_aligned">
+      <obj_property name="ElementShortName">epath_aligned[0:0,39:0]</obj_property>
+      <obj_property name="ObjectShortName">epath_aligned[0:0,39:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/count_final">
+      <obj_property name="ElementShortName">count_final[4:0]</obj_property>
+      <obj_property name="ObjectShortName">count_final[4:0]</obj_property>
+      <obj_property name="Radix">HEXRADIX</obj_property>
+      <obj_property name="CustomSignalColor">#FAAFBE</obj_property>
+      <obj_property name="UseCustomSignalColor">true</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/FELIG_emu/\emulator_inst(0)\/gbt/\dgen_group(0)\/emu_0/l1a_id">
+      <obj_property name="ElementShortName">l1a_id[15:0]</obj_property>
+      <obj_property name="ObjectShortName">l1a_id[15:0]</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/l1a">
+      <obj_property name="ElementShortName">l1a</obj_property>
+      <obj_property name="ObjectShortName">l1a</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/epath_enabled_slv">
+      <obj_property name="ElementShortName">epath_enabled_slv[39:0]</obj_property>
+      <obj_property name="ObjectShortName">epath_enabled_slv[39:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/epath_aligned_slv">
+      <obj_property name="ElementShortName">epath_aligned_slv[39:0]</obj_property>
+      <obj_property name="ObjectShortName">epath_aligned_slv[39:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/epath_aligned_d_slv">
+      <obj_property name="ElementShortName">epath_aligned_d_slv[39:0]</obj_property>
+      <obj_property name="ObjectShortName">epath_aligned_d_slv[39:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/epath_aligned_dd_slv">
+      <obj_property name="ElementShortName">epath_aligned_dd_slv[39:0]</obj_property>
+      <obj_property name="ObjectShortName">epath_aligned_dd_slv[39:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/data_good_slv">
+      <obj_property name="ElementShortName">data_good_slv[39:0]</obj_property>
+      <obj_property name="ObjectShortName">data_good_slv[39:0]</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/reset">
+      <obj_property name="ElementShortName">reset</obj_property>
+      <obj_property name="ObjectShortName">reset</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/reset_d">
+      <obj_property name="ElementShortName">reset_d</obj_property>
+      <obj_property name="ObjectShortName">reset_d</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGemulator_tb/FELIG_emu/l1a_int_trigger">
+      <obj_property name="ElementShortName">l1a_int_trigger</obj_property>
+      <obj_property name="ObjectShortName">l1a_int_trigger</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/enabled_aligned">
+      <obj_property name="ElementShortName">enabled_aligned[15:0][1:0]</obj_property>
+      <obj_property name="ObjectShortName">enabled_aligned[15:0][1:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGemulator_tb/\g_checking_data(0)\/\g_Streams(24)\/exp_checks">
+      <obj_property name="ElementShortName">exp_checks[6:0]</obj_property>
+      <obj_property name="ObjectShortName">exp_checks[6:0]</obj_property>
+      <obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
+   </wvobject>
+</wave_config>
diff --git a/simulation/FELIG/waveforms/FELIGexternaltrigger_tb_behav.wcfg b/simulation/FELIG/waveforms/FELIGexternaltrigger_tb_behav.wcfg
new file mode 100644
index 0000000000000000000000000000000000000000..52cc8eb5e3c0925f0856052ba4d6e1fca9bcf1e7
--- /dev/null
+++ b/simulation/FELIG/waveforms/FELIGexternaltrigger_tb_behav.wcfg
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wave_config>
+   <wave_state>
+   </wave_state>
+   <db_ref_list>
+      <db_ref path="FELIGexternaltrigger_tb_behav.wdb" id="1">
+         <top_modules>
+            <top_module name="FELIGexternaltrigger_tb" />
+            <top_module name="axi_stream_package" />
+            <top_module name="centralrouter_package" />
+            <top_module name="felix_package" />
+            <top_module name="glbl" />
+            <top_module name="ip_lib" />
+            <top_module name="pcie_package" />
+            <top_module name="type_lib" />
+            <top_module name="vcomponents" />
+         </top_modules>
+      </db_ref>
+   </db_ref_list>
+   <zoom_setting>
+      <ZoomStartTime time="0.000000 us"></ZoomStartTime>
+      <ZoomEndTime time="60.000001 us"></ZoomEndTime>
+      <Cursor1Time time="57.542518 us"></Cursor1Time>
+   </zoom_setting>
+   <column_width_setting>
+      <NameColumnWidth column_width="189"></NameColumnWidth>
+      <ValueColumnWidth column_width="66"></ValueColumnWidth>
+   </column_width_setting>
+   <WVObjectSize size="54" />
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/clk40">
+      <obj_property name="ElementShortName">clk40</obj_property>
+      <obj_property name="ObjectShortName">clk40</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/clk320">
+      <obj_property name="ElementShortName">clk320</obj_property>
+      <obj_property name="ObjectShortName">clk320</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/reset">
+      <obj_property name="ElementShortName">reset</obj_property>
+      <obj_property name="ObjectShortName">reset</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/L1A">
+      <obj_property name="ElementShortName">L1A</obj_property>
+      <obj_property name="ObjectShortName">L1A</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/L1A_count">
+      <obj_property name="ElementShortName">L1A_count[7:0]</obj_property>
+      <obj_property name="ObjectShortName">L1A_count[7:0]</obj_property>
+      <obj_property name="isExpanded"></obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/TTCEmu/TTCout">
+      <obj_property name="ElementShortName">TTCout[9:0]</obj_property>
+      <obj_property name="ObjectShortName">TTCout[9:0]</obj_property>
+   </wvobject>
+   <wvobject fp_name="divider20" type="divider">
+      <obj_property name="label">emul</obj_property>
+      <obj_property name="DisplayName">label</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/felig_emulator/TTC_out">
+      <obj_property name="ElementShortName">TTC_out[9:0]</obj_property>
+      <obj_property name="ObjectShortName">TTC_out[9:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/felig_emulator/ttc_fifo_din">
+      <obj_property name="ElementShortName">ttc_fifo_din[9:0]</obj_property>
+      <obj_property name="ObjectShortName">ttc_fifo_din[9:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/felig_emulator/ttc_fifo_dout">
+      <obj_property name="ElementShortName">ttc_fifo_dout[9:0]</obj_property>
+      <obj_property name="ObjectShortName">ttc_fifo_dout[9:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/felig_emulator/TTC_out_fifo">
+      <obj_property name="ElementShortName">TTC_out_fifo[9:0]</obj_property>
+      <obj_property name="ObjectShortName">TTC_out_fifo[9:0]</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/felig_emulator/link_aligned">
+      <obj_property name="ElementShortName">link_aligned</obj_property>
+      <obj_property name="ObjectShortName">link_aligned</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/felig_emulator/ttc_fifo_rst">
+      <obj_property name="ElementShortName">ttc_fifo_rst</obj_property>
+      <obj_property name="ObjectShortName">ttc_fifo_rst</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/felig_emulator/lane_reset">
+      <obj_property name="ElementShortName">lane_reset</obj_property>
+      <obj_property name="ObjectShortName">lane_reset</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/felig_emulator/ext_l1a_trigger">
+      <obj_property name="ElementShortName">ext_l1a_trigger</obj_property>
+      <obj_property name="ObjectShortName">ext_l1a_trigger</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/felig_emulator/ext_l1a_id">
+      <obj_property name="ElementShortName">ext_l1a_id[15:0]</obj_property>
+      <obj_property name="ObjectShortName">ext_l1a_id[15:0]</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/felig_emulator/l1a_trigger">
+      <obj_property name="ElementShortName">l1a_trigger</obj_property>
+      <obj_property name="ObjectShortName">l1a_trigger</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/felig_emulator/l1a_id">
+      <obj_property name="ElementShortName">l1a_id[15:0]</obj_property>
+      <obj_property name="ObjectShortName">l1a_id[15:0]</obj_property>
+   </wvobject>
+   <wvobject fp_name="divider109" type="divider">
+      <obj_property name="label">top</obj_property>
+      <obj_property name="DisplayName">label</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/emu_l1a_id">
+      <obj_property name="ElementShortName">emu_l1a_id[15:0]</obj_property>
+      <obj_property name="ObjectShortName">emu_l1a_id[15:0]</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/emu_l1a">
+      <obj_property name="ElementShortName">emu_l1a</obj_property>
+      <obj_property name="ObjectShortName">emu_l1a</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/tx_data">
+      <obj_property name="ElementShortName">tx_data[227:0]</obj_property>
+      <obj_property name="ObjectShortName">tx_data[227:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/tx_eg_data">
+      <obj_property name="ElementShortName">tx_eg_data[6:0][31:0]</obj_property>
+      <obj_property name="ObjectShortName">tx_eg_data[6:0][31:0]</obj_property>
+   </wvobject>
+   <wvobject fp_name="divider1892" type="divider">
+      <obj_property name="label">data_valid</obj_property>
+      <obj_property name="DisplayName">label</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/aligned">
+      <obj_property name="ElementShortName">aligned</obj_property>
+      <obj_property name="ObjectShortName">aligned</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/data_to_be_checked">
+      <obj_property name="ElementShortName">data_to_be_checked[7:0]</obj_property>
+      <obj_property name="ObjectShortName">data_to_be_checked[7:0]</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/felig_emulator/data_ready_tx_out">
+      <obj_property name="ElementShortName">data_ready_tx_out</obj_property>
+      <obj_property name="ObjectShortName">data_ready_tx_out</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/data_delay">
+      <obj_property name="ElementShortName">data_delay[7:0]</obj_property>
+      <obj_property name="ObjectShortName">data_delay[7:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/data_count">
+      <obj_property name="ElementShortName">data_count[31:0]</obj_property>
+      <obj_property name="ObjectShortName">data_count[31:0]</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/valid_delay">
+      <obj_property name="ElementShortName">valid_delay</obj_property>
+      <obj_property name="ObjectShortName">valid_delay</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/data_size">
+      <obj_property name="ElementShortName">data_size[31:0]</obj_property>
+      <obj_property name="ObjectShortName">data_size[31:0]</obj_property>
+      <obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
+   </wvobject>
+   <wvobject fp_name="divider2164" type="divider">
+      <obj_property name="label">check word</obj_property>
+      <obj_property name="DisplayName">label</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/emu_l1a">
+      <obj_property name="ElementShortName">emu_l1a</obj_property>
+      <obj_property name="ObjectShortName">emu_l1a</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/exp_checks">
+      <obj_property name="ElementShortName">exp_checks[6:0]</obj_property>
+      <obj_property name="ObjectShortName">exp_checks[6:0]</obj_property>
+      <obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/cnt_checks">
+      <obj_property name="ElementShortName">cnt_checks[6:0]</obj_property>
+      <obj_property name="ObjectShortName">cnt_checks[6:0]</obj_property>
+      <obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/data_delay">
+      <obj_property name="ElementShortName">data_delay[7:0]</obj_property>
+      <obj_property name="ObjectShortName">data_delay[7:0]</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/check_words">
+      <obj_property name="ElementShortName">check_words</obj_property>
+      <obj_property name="ObjectShortName">check_words</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/clk40">
+      <obj_property name="ElementShortName">clk40</obj_property>
+      <obj_property name="ObjectShortName">clk40</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/emu_l1a">
+      <obj_property name="ElementShortName">emu_l1a</obj_property>
+      <obj_property name="ObjectShortName">emu_l1a</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/emu_l1a_40">
+      <obj_property name="ElementShortName">emu_l1a_40</obj_property>
+      <obj_property name="ObjectShortName">emu_l1a_40</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/clk320">
+      <obj_property name="ElementShortName">clk320</obj_property>
+      <obj_property name="ObjectShortName">clk320</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/good">
+      <obj_property name="ElementShortName">good</obj_property>
+      <obj_property name="ObjectShortName">good</obj_property>
+   </wvobject>
+   <wvobject fp_name="divider2466" type="divider">
+      <obj_property name="label">triggers</obj_property>
+      <obj_property name="DisplayName">label</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/felig_emulator/ext_l1a_trigger">
+      <obj_property name="ElementShortName">ext_l1a_trigger</obj_property>
+      <obj_property name="ObjectShortName">ext_l1a_trigger</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/felig_emulator/ext_l1a_id">
+      <obj_property name="ElementShortName">ext_l1a_id[15:0]</obj_property>
+      <obj_property name="ObjectShortName">ext_l1a_id[15:0]</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/single_ecr_long">
+      <obj_property name="ElementShortName">single_ecr_long</obj_property>
+      <obj_property name="ObjectShortName">single_ecr_long</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/felig_emulator/ECR">
+      <obj_property name="ElementShortName">ECR</obj_property>
+      <obj_property name="ObjectShortName">ECR</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/l1a_id_register_rst">
+      <obj_property name="ElementShortName">l1a_id_register_rst</obj_property>
+      <obj_property name="ObjectShortName">l1a_id_register_rst</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/next_l1a_id">
+      <obj_property name="ElementShortName">next_l1a_id[15:0]</obj_property>
+      <obj_property name="ObjectShortName">next_l1a_id[15:0]</obj_property>
+   </wvobject>
+   <wvobject fp_name="divider2779" type="divider">
+      <obj_property name="label">checks</obj_property>
+      <obj_property name="DisplayName">label</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/count_triggers">
+      <obj_property name="ElementShortName">count_triggers[7:0]</obj_property>
+      <obj_property name="ObjectShortName">count_triggers[7:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/count_good_ids">
+      <obj_property name="ElementShortName">count_good_ids[7:0]</obj_property>
+      <obj_property name="ObjectShortName">count_good_ids[7:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGexternaltrigger_tb/count_good_data">
+      <obj_property name="ElementShortName">count_good_data[7:0]</obj_property>
+      <obj_property name="ObjectShortName">count_good_data[7:0]</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGexternaltrigger_tb/test">
+      <obj_property name="ElementShortName">test</obj_property>
+      <obj_property name="ObjectShortName">test</obj_property>
+   </wvobject>
+</wave_config>
diff --git a/simulation/FELIG/waveforms/FELIGlinkwrapperLPGBT_tb_behav.wcfg b/simulation/FELIG/waveforms/FELIGlinkwrapperLPGBT_tb_behav.wcfg
new file mode 100644
index 0000000000000000000000000000000000000000..564b986b2bfc4e217c8a1efc0950efe5d20e0dcf
--- /dev/null
+++ b/simulation/FELIG/waveforms/FELIGlinkwrapperLPGBT_tb_behav.wcfg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wave_config>
+   <wave_state>
+   </wave_state>
+   <db_ref_list>
+      <db_ref path="FELIGlinkwrapperLPGBT_tb_behav.wdb" id="1">
+         <top_modules>
+            <top_module name="FELIGlinkwrapperLPGBT_tb" />
+            <top_module name="axi_stream_package" />
+            <top_module name="centralrouter_package" />
+            <top_module name="felix_package" />
+            <top_module name="glbl" />
+            <top_module name="lpgbtfpga_package" />
+            <top_module name="pcie_package" />
+            <top_module name="type_lib" />
+            <top_module name="vcomponents" />
+         </top_modules>
+      </db_ref>
+   </db_ref_list>
+   <zoom_setting>
+      <ZoomStartTime time="16,107.414 ns"></ZoomStartTime>
+      <ZoomEndTime time="16,343.285 ns"></ZoomEndTime>
+      <Cursor1Time time="21,000.000 ns"></Cursor1Time>
+   </zoom_setting>
+   <column_width_setting>
+      <NameColumnWidth column_width="203"></NameColumnWidth>
+      <ValueColumnWidth column_width="152"></ValueColumnWidth>
+   </column_width_setting>
+   <WVObjectSize size="13" />
+   <wvobject type="logic" fp_name="/FELIGlinkwrapperLPGBT_tb/clk40">
+      <obj_property name="ElementShortName">clk40</obj_property>
+      <obj_property name="ObjectShortName">clk40</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGlinkwrapperLPGBT_tb/clk320">
+      <obj_property name="ElementShortName">clk320</obj_property>
+      <obj_property name="ObjectShortName">clk320</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGlinkwrapperLPGBT_tb/reset_clk40">
+      <obj_property name="ElementShortName">reset_clk40</obj_property>
+      <obj_property name="ObjectShortName">reset_clk40</obj_property>
+   </wvobject>
+   <wvobject type="logic" fp_name="/FELIGlinkwrapperLPGBT_tb/reset_done_clk40">
+      <obj_property name="ElementShortName">reset_done_clk40</obj_property>
+      <obj_property name="ObjectShortName">reset_done_clk40</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGlinkwrapperLPGBT_tb/alignment_done_BE">
+      <obj_property name="ElementShortName">alignment_done_BE[0:0]</obj_property>
+      <obj_property name="ObjectShortName">alignment_done_BE[0:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGlinkwrapperLPGBT_tb/alignment_done_FE">
+      <obj_property name="ElementShortName">alignment_done_FE[0:0]</obj_property>
+      <obj_property name="ObjectShortName">alignment_done_FE[0:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGlinkwrapperLPGBT_tb/TX_DATA_BE">
+      <obj_property name="ElementShortName">TX_DATA_BE[0:0][15:0]</obj_property>
+      <obj_property name="ObjectShortName">TX_DATA_BE[0:0][15:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGlinkwrapperLPGBT_tb/TX_DATA_FE">
+      <obj_property name="ElementShortName">TX_DATA_FE[0:0][31:0]</obj_property>
+      <obj_property name="ObjectShortName">TX_DATA_FE[0:0][31:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGlinkwrapperLPGBT_tb/data_to_be_clk40">
+      <obj_property name="ElementShortName">data_to_be_clk40[223:0]</obj_property>
+      <obj_property name="ObjectShortName">data_to_be_clk40[223:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGlinkwrapperLPGBT_tb/uplinkData_i_BE">
+      <obj_property name="ElementShortName">uplinkData_i_BE[0:0][233:0]</obj_property>
+      <obj_property name="ObjectShortName">uplinkData_i_BE[0:0][233:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGlinkwrapperLPGBT_tb/data_to_fe_clk40">
+      <obj_property name="ElementShortName">data_to_fe_clk40[31:0]</obj_property>
+      <obj_property name="ObjectShortName">data_to_fe_clk40[31:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGlinkwrapperLPGBT_tb/downLinkData_i_FE">
+      <obj_property name="ElementShortName">downLinkData_i_FE[0:0][35:0]</obj_property>
+      <obj_property name="ObjectShortName">downLinkData_i_FE[0:0][35:0]</obj_property>
+   </wvobject>
+   <wvobject type="array" fp_name="/FELIGlinkwrapperLPGBT_tb/data_rdy_BE">
+      <obj_property name="ElementShortName">data_rdy_BE[0:0]</obj_property>
+      <obj_property name="ObjectShortName">data_rdy_BE[0:0]</obj_property>
+   </wvobject>
+</wave_config>
diff --git a/simulation/FELIG/felig_lpgbt_sim.wcfg b/simulation/FELIG/waveforms/felig_lpgbt_sim.wcfg
similarity index 97%
rename from simulation/FELIG/felig_lpgbt_sim.wcfg
rename to simulation/FELIG/waveforms/felig_lpgbt_sim.wcfg
index 693d91c8c58801bb51520872a247e72fa229d779..f4a5c3fe33fff60a5ca8c0f0131159046da5febb 100644
--- a/simulation/FELIG/felig_lpgbt_sim.wcfg
+++ b/simulation/FELIG/waveforms/felig_lpgbt_sim.wcfg
@@ -16,13 +16,13 @@
       </db_ref>
    </db_ref_list>
    <zoom_setting>
-      <ZoomStartTime time="977.931 ns"></ZoomStartTime>
-      <ZoomEndTime time="1,004.414 ns"></ZoomEndTime>
-      <Cursor1Time time="1,000.000 ns"></Cursor1Time>
+      <ZoomStartTime time="0.000000 us"></ZoomStartTime>
+      <ZoomEndTime time="21.000001 us"></ZoomEndTime>
+      <Cursor1Time time="9.793750 us"></Cursor1Time>
    </zoom_setting>
    <column_width_setting>
       <NameColumnWidth column_width="203"></NameColumnWidth>
-      <ValueColumnWidth column_width="160"></ValueColumnWidth>
+      <ValueColumnWidth column_width="156"></ValueColumnWidth>
    </column_width_setting>
    <WVObjectSize size="56" />
    <wvobject fp_name="divider1259" type="divider">
@@ -93,6 +93,7 @@
    <wvobject type="array" fp_name="/felig_lpgbt_sim/\limk_loop_FE(0)\/FE_UPLINK_USER_DATA">
       <obj_property name="ElementShortName">FE_UPLINK_USER_DATA[223:0]</obj_property>
       <obj_property name="ObjectShortName">FE_UPLINK_USER_DATA[223:0]</obj_property>
+      <obj_property name="Radix">HEXRADIX</obj_property>
    </wvobject>
    <wvobject type="array" fp_name="/felig_lpgbt_sim/\limk_loop_FE(0)\/FE_UPLINK_IC_DATA">
       <obj_property name="ElementShortName">FE_UPLINK_IC_DATA[1:0]</obj_property>
@@ -105,6 +106,7 @@
    <wvobject type="array" fp_name="/felig_lpgbt_sim/\limk_loop_BE(0)\/uplinkDATA">
       <obj_property name="ElementShortName">uplinkDATA[223:0]</obj_property>
       <obj_property name="ObjectShortName">uplinkDATA[223:0]</obj_property>
+      <obj_property name="Radix">HEXRADIX</obj_property>
    </wvobject>
    <wvobject type="array" fp_name="/felig_lpgbt_sim/\limk_loop_BE(0)\/uplinkIC">
       <obj_property name="ElementShortName">uplinkIC[1:0]</obj_property>
@@ -117,6 +119,8 @@
    <wvobject type="array" fp_name="/felig_lpgbt_sim/uplinkData_i_BE">
       <obj_property name="ElementShortName">uplinkData_i_BE[3:0][233:0]</obj_property>
       <obj_property name="ObjectShortName">uplinkData_i_BE[3:0][233:0]</obj_property>
+      <obj_property name="Radix">HEXRADIX</obj_property>
+      <obj_property name="isExpanded"></obj_property>
    </wvobject>
    <wvobject type="logic" fp_name="/felig_lpgbt_sim/\limk_loop_BE(3)\/lpgbt_BE/lpgbtfpga_uplink_fec5_inst/rst_pattsearch_s">
       <obj_property name="ElementShortName">rst_pattsearch_s</obj_property>
diff --git a/simulation/UVVMtests/tb/FELIGemulator_tb.vhd b/simulation/UVVMtests/tb/FELIGemulator_tb.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..d39becd89e2b902ef41be2ecc7de3bcd7611d95e
--- /dev/null
+++ b/simulation/UVVMtests/tb/FELIGemulator_tb.vhd
@@ -0,0 +1,701 @@
+--ricardo luz, argonne
+--based on simulation/FELIG/felig_sim_top_bnl712.vhd
+
+library IEEE;
+    use IEEE.std_logic_1164.all;
+    use IEEE.numeric_std.all;
+    use IEEE.numeric_std_unsigned.all;
+    use IEEE.std_logic_textio.all;
+    
+    use std.env.all;
+    use std.textio.all;
+    
+    use work.FELIX_package.all;
+    use work.pcie_package.all;
+    use work.axi_stream_package.all;
+    use work.centralRouter_package.all;
+    use work.type_lib.ALL;
+
+library xpm;
+    use xpm.vcomponents.all;
+
+library uvvm_util;
+    context uvvm_util.uvvm_util_context;
+
+entity FELIGemulator_tb is
+    generic(
+        use_vunit       : boolean := false;
+        FIRMWARE_MODE   : integer := 11 --6 GBT, 11 LPGBT
+    );
+    port(
+        uvvm_completed: out std_logic := '0'
+    );
+end FELIGemulator_tb;
+
+architecture tb of FELIGemulator_tb is   
+    function FM_TO_STREAMS (FIRMWARE_MODE:integer)
+        return integer is
+    begin
+        if FIRMWARE_MODE = 11 then
+            return 30;
+        elsif FIRMWARE_MODE = 6 then
+            return 42;
+        else
+            return 0;
+        end if;
+    end function;
+    
+    constant GBT_NUM            : integer := 1;
+    constant NUMELINKmax        : integer := 112; --name number of epahts per egroup (theoretically 2b epath * 112=224, but never happens)
+    constant NUMEGROUPmax       : integer := 7; --name number of egroups
+    constant STREAMS_TOHOST     : integer := FM_TO_STREAMS(FIRMWARE_MODE);
+
+    constant clk40_period       : time      := 25 ns;
+    signal clk_en               : boolean   := false;
+    signal clk40                : std_logic;
+    signal clk40_tmp            : std_logic := '0';
+    signal clk240               : std_logic;
+    signal clk240_tmp           : std_logic := '0';
+    signal clk160               : std_logic;
+    signal clk160_tmp           : std_logic := '0';
+    signal clk320               : std_logic;
+    signal clk320_tmp           : std_logic := '0';
+    signal clk_prcss            : std_logic := '0';
+    signal clkTX                : std_logic_vector(GBT_NUM-1 downto 0);
+    signal clkRX                : std_logic_vector(GBT_NUM-1 downto 0);
+    signal cnt_div		        : std_logic_vector(1 downto 0) := (others => '0');
+    signal cnt_div_max		    : std_logic_vector(1 downto 0) := (others => '0');
+
+    signal reset                : std_logic;
+    signal reset_d              : std_logic;
+
+    signal lane_control         : array_of_lane_control_type(GBT_NUM-1 downto 0);
+    signal lane_monitor         : array_of_lane_monitor_type(GBT_NUM-1 downto 0);
+    signal select_random        : std_logic_vector(0 downto 0) := "0";
+
+    signal link_tx_data         : txrx228b_type(0 to GBT_NUM-1);
+    --signal link_rx_data         : txrx120b_type(0 to GBT_NUM-1);
+    signal link_tx_valid        : std_logic_vector(0 to GBT_NUM-1);
+    signal link_tx_flag         : std_logic_vector(GBT_NUM-1 downto 0);
+    --signal link_rx_flag         : std_logic_vector(GBT_NUM-1 downto 0);
+    
+    signal l1id                 : std_logic_vector(15 downto 0) := (others => '0');
+    signal l1id_buf             : std_logic_vector(15 downto 0) := (others => '0');
+    signal l1a, l1a_d           : std_logic := '0';
+    signal l1a_int_trigger      : std_logic := '0';
+    signal l1a_int_trigger_d    : std_logic := '0';
+    
+    signal m_axis               : axis_32_2d_array_type(0 to GBT_NUM-1, 0 to STREAMS_TOHOST-1);
+    signal m_axis_aclk          : std_logic;
+    type array_2d_8b is array (natural range <>, natural range <>) of std_logic_vector(7 downto 0);
+    type array_2d_3b is array (natural range <>, natural range <>) of std_logic_vector(2 downto 0);
+    type array_2d_1b is array (natural range <>, natural range <>) of std_logic;
+    signal epath_enabled        : array_2d_1b(GBT_NUM-1 downto 0, STREAMS_TOHOST-3 downto 0);
+    signal epath_aligned        : array_2d_1b(GBT_NUM-1 downto 0, STREAMS_TOHOST-3 downto 0);
+    signal epath_width          : array_2d_3b(GBT_NUM-1 downto 0, STREAMS_TOHOST-3 downto 0);
+    signal data_good            : array_2d_1b(GBT_NUM-1 downto 0, STREAMS_TOHOST-3 downto 0);
+    
+    signal epath_enabled_slv    : std_logic_vector((STREAMS_TOHOST-2)*GBT_NUM-1 downto 0);
+    signal epath_aligned_slv    : std_logic_vector((STREAMS_TOHOST-2)*GBT_NUM-1 downto 0);
+    signal epath_aligned_d_slv  : std_logic_vector((STREAMS_TOHOST-2)*GBT_NUM-1 downto 0) := (others => '0');
+    signal epath_aligned_dd_slv : std_logic_vector((STREAMS_TOHOST-2)*GBT_NUM-1 downto 0) := (others => '0');
+    signal data_good_slv        : std_logic_vector((STREAMS_TOHOST-2)*GBT_NUM-1 downto 0) := (others => '0');
+    signal chunk_size           : array_2d_8b(GBT_NUM-1 downto 0, STREAMS_TOHOST-3 downto 0);
+    
+    signal count_final          : std_logic_vector(4 downto 0) := (others => '0');
+    signal enabled_aligned      : array_2b(15 downto 0) := (others => (others => '0'));
+    signal timeout              : boolean := false;
+begin
+
+    --clocks
+
+    clk160_tmp <= not clk160_tmp after clk40_period/8; --160 MHZ
+    clk160     <= clk160_tmp     when  clk_en else '0';
+    clk240_tmp <= not clk240_tmp after clk40_period/12; --240 MHZ
+    clk240     <= clk240_tmp     when  clk_en else '0';
+    clk320_tmp <= not clk320_tmp after clk40_period/16; --320 MHZ
+    clk320     <= clk320_tmp     when  clk_en else '0';
+
+    cnt_div_max <= "11" when FIRMWARE_MODE = 11 else "10" when FIRMWARE_MODE = 6 else "00";
+    clk_prcss   <= clk320 when FIRMWARE_MODE = 11 else clk240 when FIRMWARE_MODE = 6 else '0';
+    clk40       <= clk40_tmp;
+    process(clk_prcss) --clk40 needs to be in sync with clk240 for GBT and clk320 for LPGBT
+    begin
+        if rising_edge(clk_prcss) then
+            if cnt_div = cnt_div_max then
+                cnt_div <= "00";
+                clk40_tmp <= not clk40_tmp;
+            else
+                cnt_div <= cnt_div + "01";
+            end if;
+        end if;
+    end process;
+
+
+    --Link Configuration
+    g_lane_control : for link in 0 to GBT_NUM-1 generate
+        signal elink_output_width   : array_of_slv_2_0(NUMELINKmax-1 downto 0) := (others => "111");
+        signal elink_enable         : std_logic_vector(NUMELINKmax-1 downto 0) := (others => '1');
+        signal data_format          : std_logic_vector(1 downto 0);
+    begin
+        lane_control(link).global.framegen_reset               <= '0';
+        lane_control(link).global.elink_sync                   <= '0';
+        lane_control(link).global.framegen_data_select         <= '0';
+        lane_control(link).global.emu_data_select              <= '1';
+        lane_control(link).global.l1a_source                   <= '0';
+        lane_control(link).global.loopback_fifo_delay          <= "00010";
+        lane_control(link).global.loopback_fifo_reset          <= '0';
+        lane_control(link).global.a_ch_bit_sel                 <= "0000001";
+        lane_control(link).global.b_ch_bit_sel                 <= "0000010";
+        lane_control(link).global.MSB                          <= '1';
+        lane_control(link).global.FEC                          <= '0';
+        lane_control(link).global.DATARATE                     <= '1';
+        lane_control(link).global.aligned                      <= '1'; 
+        lane_control(link).global.l1a_max_count                <= x"0000190";
+
+        lane_control(link).fmemu_random.FMEMU_RANDOM_CONTROL.SELECT_RANDOM <= select_random;
+        lane_control(link).fmemu_random.FMEMU_RANDOM_CONTROL.SEED          <= "1000000000"; --0x200
+        lane_control(link).fmemu_random.FMEMU_RANDOM_CONTROL.POLYNOMIAL    <= "1001000000"; --0x240
+        lane_control(link).fmemu_random.FMEMU_RANDOM_RAM_ADDR              <= "0000000000";
+        lane_control(link).fmemu_random.FMEMU_RANDOM_RAM.WE                <= "0";
+        lane_control(link).fmemu_random.FMEMU_RANDOM_RAM.CHANNEL_SELECT    <= (others=>'0');
+        lane_control(link).fmemu_random.FMEMU_RANDOM_RAM.DATA              <= (others=>'0');
+
+        lane_control(link).emulator(0).output_width  <= "010" when FIRMWARE_MODE = 11 else "000" when FIRMWARE_MODE = 6 else "000";-- 8b 2b
+        lane_control(link).emulator(1).output_width  <= "010" when FIRMWARE_MODE = 11 else "000" when FIRMWARE_MODE = 6 else "000";-- 8b 2b
+        lane_control(link).emulator(2).output_width  <= "011" when FIRMWARE_MODE = 11 else "001" when FIRMWARE_MODE = 6 else "000";--16b 4b
+        lane_control(link).emulator(3).output_width  <= "011" when FIRMWARE_MODE = 11 else "001" when FIRMWARE_MODE = 6 else "000";--16b 4b
+        lane_control(link).emulator(4).output_width  <= "100" when FIRMWARE_MODE = 11 else "010" when FIRMWARE_MODE = 6 else "000";--32b 8b
+        lane_control(link).emulator(5).output_width  <= "100";--32b
+        lane_control(link).emulator(6).output_width  <= "100";--32b
+        
+        data_format <= "01";
+        
+        g_emu_control : for egroup in lane_control(link).emulator'range generate
+            lane_control(link).emulator(egroup).pattern_select   <= "00";
+            lane_control(link).emulator(egroup).data_format      <= data_format;
+            lane_control(link).emulator(egroup).sw_busy          <= '0';
+            lane_control(link).emulator(egroup).reset            <= '0';--emu_reset;
+            lane_control(link).emulator(egroup).chunk_length     <= X"003C"; --60+8
+            lane_control(link).emulator(egroup).userdata         <= X"ABCD";
+            
+            less_that_five : if egroup<5 generate
+                elink_enable(egroup*16+7 downto egroup*16)    <= X"FF" when (lane_control(link).emulator(egroup).output_width <= "000") else
+                                                       X"55" when (lane_control(link).emulator(egroup).output_width <= "001") else
+                                                       X"11" when (lane_control(link).emulator(egroup).output_width <= "010") else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "011") else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "100");
+                elink_enable(egroup*16+15 downto egroup*16+8) <= X"FF" when (lane_control(link).emulator(egroup).output_width <= "000" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"55" when (lane_control(link).emulator(egroup).output_width <= "001" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"11" when (lane_control(link).emulator(egroup).output_width <= "010" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "011" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"00";
+            end generate less_that_five;
+            five : if egroup=5 generate
+                elink_enable(egroup*16+7 downto egroup*16)    <= X"FF" when (lane_control(link).emulator(egroup).output_width <= "000" and FIRMWARE_MODE = 11) else
+                                                                 X"55" when (lane_control(link).emulator(egroup).output_width <= "001" and FIRMWARE_MODE = 11) else
+                                                       X"11" when (lane_control(link).emulator(egroup).output_width <= "010" and FIRMWARE_MODE = 11) else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "011" and FIRMWARE_MODE = 11) else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "100" and FIRMWARE_MODE = 11) else
+                                                       X"00";
+                elink_enable(egroup*16+15 downto egroup*16+8) <= X"FF" when (lane_control(link).emulator(egroup).output_width <= "000" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"55" when (lane_control(link).emulator(egroup).output_width <= "001" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"11" when (lane_control(link).emulator(egroup).output_width <= "010" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "011" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"00";
+            end generate five;
+            six : if egroup=6 generate
+                elink_enable(egroup*16+7 downto egroup*16)    <= X"FF" when (lane_control(link).emulator(egroup).output_width <= "000" and FIRMWARE_MODE = 11 and lane_control(link).global.FEC = '0') else
+                                                       X"55" when (lane_control(link).emulator(egroup).output_width <= "001" and FIRMWARE_MODE = 11 and lane_control(link).global.FEC = '0') else
+                                                       X"11" when (lane_control(link).emulator(egroup).output_width <= "010" and FIRMWARE_MODE = 11 and lane_control(link).global.FEC = '0') else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "011" and FIRMWARE_MODE = 11 and lane_control(link).global.FEC = '0') else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "100" and FIRMWARE_MODE = 11 and lane_control(link).global.FEC = '0') else
+                                                       X"00";
+                elink_enable(egroup*16+15 downto egroup*16+8) <= X"FF" when (lane_control(link).emulator(egroup).output_width <= "000" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1' and lane_control(link).global.FEC = '0') else
+                                                       X"55" when (lane_control(link).emulator(egroup).output_width <= "001" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1' and lane_control(link).global.FEC = '0') else
+                                                       X"11" when (lane_control(link).emulator(egroup).output_width <= "010" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1' and lane_control(link).global.FEC = '0') else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "011" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1' and lane_control(link).global.FEC = '0') else
+                                                       X"00";
+            end generate six;
+            width : for k in 0 to 7 generate
+                elink_output_width(egroup*16+k)   <= lane_control(link).emulator(egroup).output_width;
+                elink_output_width(egroup*16+k+8) <= lane_control(link).emulator(egroup).output_width when (FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else "111";
+            end generate width;
+   
+        end generate g_emu_control;
+                
+        g_elink_control : for epath in lane_control(link).elink'range generate
+            lane_control(link).elink(epath).input_width    <= '0' when data_format = "00" else '1';
+            lane_control(link).elink(epath).endian_mode    <= '0';
+            lane_control(link).elink(epath).enable         <= elink_enable(epath);
+            lane_control(link).elink(epath).output_width   <= elink_output_width(epath);
+        end generate g_elink_control;
+
+    end generate g_lane_control;
+
+    --FELIG emulator wrapper
+    
+    g_lw_signals : for i in 0 to GBT_NUM-1 generate
+        signal count_max    : std_logic_vector(2 downto 0);
+        signal count        : std_logic_vector(2 downto 0) := "000";
+    begin
+        clkTX(i)    <= clk320   when FIRMWARE_MODE = 11 else clk240 when FIRMWARE_MODE = 6 else '0';
+        count_max   <= "111"    when FIRMWARE_MODE = 11 else "101" when FIRMWARE_MODE = 6 else "000";
+        process(clkTX(i))
+        begin
+            if rising_edge(clkTX(i)) then
+                if count = count_max then
+                    count <= "000";
+                    link_tx_flag(i) <= '1';
+                else
+                    count <= count + "001";
+                    link_tx_flag(i) <= '0';
+                end if;
+            end if;
+        end process;
+    end generate g_lw_signals;
+    
+    clkRX <= clkTX;
+    --link_rx_flag <= link_tx_flag;
+    
+    FELIG_emu : entity work.EmulatorWrapper
+        generic map(
+            GBT_NUM                     => GBT_NUM,
+            NUMELINKmax                 => NUMELINKmax,
+            NUMEGROUPmax                => NUMEGROUPmax,
+            FIRMWARE_MODE               => FIRMWARE_MODE)
+        port map (
+            clk40                       => clk40,
+            gt_txusrclk_in              => clkTX,
+            gt_rxusrclk_in              => clkRX,
+            link_tx_data_228b_array_out => link_tx_data,
+            data_ready_tx_out           => link_tx_valid,
+            link_rx_data_120b_array_in  => (others => (others => '0')),
+            link_tx_flag_in             => link_tx_flag,
+            link_rx_flag_in             => (others => '0'),--link_rx_flag,
+            l1a_int_trigger_out         => l1a_int_trigger,
+            lane_control                => lane_control,
+            lane_monitor                => lane_monitor
+        );
+
+    l1id <= lane_monitor(0).global.l1a_id(15 downto 0);
+    process(clk40)
+    begin
+        if rising_edge(clk40) then
+            l1id_buf <= l1id;
+            if l1id_buf /= l1id then
+                l1a <= '1';
+            else
+                l1a <= '0';
+            end if;
+        end if;
+    end process;
+
+    --decoding lpgbt
+    g_dec_LPGBT: if FIRMWARE_MODE = 11 generate
+        signal lpGBT_UPLINK_USER_DATA   : txrx224b_type(0 to GBT_NUM-1);
+        signal AlignmentPulseAlign      : std_logic;
+        signal AlignmentPulseDeAlign    : std_logic;
+    begin
+        m_axis_aclk <= clk240;
+        pulsegen0: entity work.AlignmentPulseGen
+            generic map(
+                MAX_VAL_DEALIGN => 2048, --2048 bytes at 8b10b / 80 Mb/s elink.
+                MAX_VAL_ALIGN => 20 --2 bytes at 8b10b / 80 Mb/s elink.
+            )
+            port map(
+                clk40 => clk40,
+                AlignmentPulseAlign => AlignmentPulseAlign,
+                AlignmentPulseDeAlign => AlignmentPulseDeAlign
+            );
+        g_Links : for link in 0 to GBT_NUM-1 generate
+        begin
+            process(clk40)
+            begin
+                if rising_edge(clk40) then
+                    lpGBT_UPLINK_USER_DATA(link) <= link_tx_data(link)(223 downto 0);
+                end if;
+            end process;
+            g_Egroups: for egroup in 0 to 6 generate
+                signal ElinkWidth   : std_logic_vector(2 downto 0);
+                signal PathEnable   : std_logic_vector(3 downto 0);
+                signal ElinkAligned : std_logic_vector(3 downto 0);
+                signal m_axis_s     : axis_32_array_type(0 to 3);
+            begin
+                g_axisindex: for i in 0 to 3 generate
+                    m_axis(link,egroup*4+i) <= m_axis_s(i);
+                end generate;
+                ElinkWidth <= lane_control(link).emulator(egroup).output_width;
+                PathEnable <= "1111" when ElinkWidth = "010" else
+                              "0101" when ElinkWidth = "011" else
+                              "0001" when ElinkWidth = "100" else
+                              "0000";
+                
+                g_epaths : for epath in 0 to 3 generate
+                    epath_width(link,egroup*4+epath)   <= lane_control(link).emulator(egroup).output_width;
+                    epath_enabled(link,egroup*4+epath) <= PathEnable(epath);
+                    epath_aligned(link,egroup*4+epath) <= ElinkAligned(epath);
+                end generate;
+                --! Instantiate one Egroup.
+                eGroup0: entity work.DecEgroup_8b10b
+                    generic map(
+                        BLOCKSIZE           => 1024,
+                        Support32bWidth     => '1',
+                        Support16bWidth     => '1',
+                        Support8bWidth      => '1',
+                        IncludeElinks       => "1111",
+                        VERSAL              => false
+                    )
+                    port map(
+                        clk40                   => clk40,
+                        daq_reset               => reset,
+                        daq_fifo_flush          => '0',
+                        DataIn                  => lpGBT_UPLINK_USER_DATA(link)(egroup*32+31 downto egroup*32),
+                        EnableIn                => PathEnable,
+                        LinkAligned             => lane_control(link).global.aligned,
+                        ElinkWidth              => ElinkWidth,
+                        AlignmentPulseAlign     => AlignmentPulseAlign,
+                        AlignmentPulseDeAlign   => AlignmentPulseDeAlign,
+                        AutoRealign             => '1',
+                        RealignmentEvent        => open,
+                        PathEncoding            => x"1111", --"0001" per epath. All 8b10b encoded
+                        ElinkAligned            => ElinkAligned,
+                        DecodingErrors          => open,
+                        MsbFirst                => '1',
+                        ReverseInputBits        => (others => '0'),
+                        HGTD_ALTIROC_DECODING   => '0',
+                        FE_BUSY_out             => open,
+                        m_axis                  => m_axis_s,
+                        m_axis_tready           => (others => '1'),
+                        m_axis_aclk             => m_axis_aclk,
+                        m_axis_prog_empty       => open
+                    );
+            end generate g_Egroups;
+        end generate g_Links;
+    end generate g_dec_LPGBT;
+
+    g_dec_GBT: if FIRMWARE_MODE = 6 generate
+        type txrx80b_type                 is array (natural range <>) of std_logic_vector(79 downto 0);
+        signal GBT_UPLINK_USER_DATA     : txrx80b_type(0 to GBT_NUM-1);
+        signal AlignmentPulseAlign      : std_logic;
+        signal AlignmentPulseDeAlign    : std_logic;
+    begin
+        m_axis_aclk <= clk160;
+        pulsegen0: entity work.AlignmentPulseGen
+            generic map(
+                MAX_VAL_DEALIGN => 2048, --2048 bytes at 8b10b / 80 Mb/s elink.
+                MAX_VAL_ALIGN => 20 --2 bytes at 8b10b / 80 Mb/s elink.
+            )
+            port map(
+                clk40 => clk40,
+                AlignmentPulseAlign => AlignmentPulseAlign,
+                AlignmentPulseDeAlign => AlignmentPulseDeAlign
+            );
+        g_Links : for link in 0 to GBT_NUM-1 generate
+        begin
+            process(clk40)
+            begin
+                if rising_edge(clk40) then
+                    GBT_UPLINK_USER_DATA(link) <= link_tx_data(link)(111 downto 32);
+                end if;
+            end process;
+            g_Egroups: for egroup in 0 to 4 generate
+                signal ReverseElinks            : std_logic_vector(7 downto 0);
+                signal ElinkWidth               : std_logic_vector(2 downto 0);
+                signal PathEnable               : std_logic_vector(7 downto 0);
+                signal EnableEgroupTruncation   : std_logic;
+                signal DecoderAligned           : std_logic_vector(7 downto 0);
+                signal m_axis_s                 : axis_32_array_type(0 to 7);
+            begin
+                g_axisindex: for i in 0 to 7 generate
+                    m_axis(link,egroup*8+i) <= m_axis_s(i);
+                end generate;
+                
+                ReverseElinks           <= (others => '0');
+                ElinkWidth              <= lane_control(link).emulator(egroup).output_width;
+                PathEnable              <=  "11111111" when ElinkWidth = "000" else
+                                            "01010101" when ElinkWidth = "001" else
+                                            "00010001" when ElinkWidth = "010" else
+                                            "00000001" when ElinkWidth = "011" else
+                                            "00000000";
+                EnableEgroupTruncation  <= '0'; --to_sl(register_map_control.DECODING_EGROUP_CTRL(link mod 12)(egroup).ENABLE_TRUNCATION);
+                
+                g_epaths : for epath in 0 to 7 generate
+                    epath_width(link,egroup*8+epath)   <= lane_control(link).emulator(egroup).output_width;
+                    epath_enabled(link,egroup*8+epath) <= PathEnable(epath);
+                    epath_aligned(link,egroup*8+epath) <= DecoderAligned(epath);
+                end generate;
+                
+                eGroup0: entity work.DecodingEgroupGBT
+                    generic map(
+                        INCLUDE_16b         => '1',
+                        INCLUDE_8b          => '1',
+                        INCLUDE_4b          => '1',
+                        INCLUDE_2b          => '1',
+                        INCLUDE_8b10b       => '1',
+                        INCLUDE_HDLC        => '0',
+                        INCLUDE_DIRECT      => '0',
+                        BLOCKSIZE           => 1024,
+                        USE_BUILT_IN_FIFO   => x"AA",
+                        GENERATE_FEI4B      => false,
+                        VERSAL              => false
+                    )
+                    port map(
+                        clk40                   => clk40,
+                        daq_reset               => reset,
+                        daq_fifo_flush          => '0',
+                        EpathEnable             => PathEnable,
+                        EpathEncoding           => x"11111111", --"0001" per epath. All 8b10b encoded
+                        ElinkWidth              => ElinkWidth,
+                        MsbFirst                => '1',
+                        ReverseInputBits        => ReverseElinks,
+                        EnableTruncation        => EnableEgroupTruncation,
+                        DecoderAligned          => DecoderAligned,
+                        EGroupData              => GBT_UPLINK_USER_DATA(link)(egroup*16+15 downto egroup*16),
+                        GBTAligned              => lane_control(link).global.aligned,
+                        FE_BUSY_out             => open,
+                        m_axis                  => m_axis_s,
+                        m_axis_tready           => (others => '1'),
+                        m_axis_aclk             => m_axis_aclk,
+                        m_axis_prog_empty       => open,
+                        AlignmentPulseAlign     => AlignmentPulseAlign,
+                        AlignmentPulseDeAlign   => AlignmentPulseDeAlign,
+                        AutoRealign             => '1',
+                        RealignmentEvent        => open
+                    );
+                
+            end generate g_Egroups;
+        end generate g_Links;
+    end generate g_dec_GBT;
+
+    --checking data
+    g_checking_data : for link in 0 to GBT_NUM-1 generate
+        g_Streams: for stream in 0 to STREAMS_TOHOST-3 generate
+            signal data         : std_logic_vector(31 downto 0);
+            signal data10b      : std_logic_vector(9 downto 0);
+            signal valid        : std_logic;
+            signal last         : std_logic;
+            signal keep         : std_logic_vector(3 downto 0);
+            signal count8b      : std_logic_vector(1 downto 0) := "00";
+            signal count_chunks : std_logic_vector(6 downto 0);
+            signal checked      : std_logic := '0';
+            signal check_words  : std_logic := '0';
+            signal check_length : std_logic := '0';
+            signal reset_v_ch   : std_logic := '0';
+            signal width        : std_logic_vector(7 downto 0);
+            signal exp_checks   : std_logic_vector(6 downto 0) := (others => '0');
+            signal cnt_checks   : std_logic_vector(6 downto 0) := (others => '0');
+            signal good         : std_logic := '0';
+        begin
+            data    <= m_axis(link,stream).tdata    when epath_aligned(link,stream) = '1' and epath_enabled(link,stream) = '1' else (others => '0');
+            valid   <= m_axis(link,stream).tvalid   when epath_aligned(link,stream) = '1' and epath_enabled(link,stream) = '1' else '0';
+            last    <= m_axis(link,stream).tlast    when epath_aligned(link,stream) = '1' and epath_enabled(link,stream) = '1' else '0';
+            keep    <= m_axis(link,stream).tkeep    when epath_aligned(link,stream) = '1' and epath_enabled(link,stream) = '1' else (others => '0');
+            width   <= "00000010" when epath_width(link,stream) = "000" else
+                       "00000100" when epath_width(link,stream) = "001" else
+                       "00001000" when epath_width(link,stream) = "010" else
+                       "00010000" when epath_width(link,stream) = "011" else
+                       "00100000" when epath_width(link,stream) = "100" else
+                       "00000000";
+            --data_good(link,stream) <= '0' when stream = 24  else good;
+            data_good(link,stream) <= good;
+            
+            process(m_axis_aclk)
+            begin
+                if rising_edge(m_axis_aclk) then
+                    if count8b = "00" and valid = '0' then
+                        count8b <= count8b;
+                    elsif count8b = "11" then
+                        count8b <= "00";
+                    else
+                        count8b <= count8b + "01";
+                    end if;
+                end if;
+            end process;
+            data10b <= "11" & data( 7 downto  0) when count8b = "00" and valid = '1' and keep(0) = '1' and keep(3 downto 1) = "000" and last = '1' else
+                       "01" & data( 7 downto  0) when count8b = "00" and valid = '1' and keep(0) = '1' else
+                       "11" & data(15 downto  8) when count8b = "01" and keep(1) = '1' and keep(3 downto 2) = "00" and last = '1' else
+                       "01" & data(15 downto  8) when count8b = "01" and keep(1) = '1' else
+                       "11" & data(23 downto 16) when count8b = "01" and keep(2) = '1' and keep(3) = '0' and last = '1' else
+                       "01" & data(23 downto 16) when count8b = "10" and keep(2) = '1'else
+                       last & "1" & data(31 downto 24) when count8b = "11" and keep(3) = '1'else
+                       (others=> '0');
+            process(m_axis_aclk)
+                variable v_chunks : integer := 0;
+                variable size     : integer := 0;
+                variable next_w   : integer := 0;
+                variable next_b   : integer := 0;
+            begin
+                if rising_edge(m_axis_aclk) then
+                    if data10b(9 downto 8) = "01" then
+                        v_chunks := v_chunks + 1;
+                        reset_v_ch <= '0';
+                        --check_length <= '0';
+                    elsif data10b(9 downto 8) = "11" then
+                        v_chunks := v_chunks + 1;
+                        reset_v_ch <= '1';
+                        if v_chunks = size + 8 then --size + header
+                            check_length <= '1';
+                        --else
+                            --check_length <= '0';
+                        end if;
+                    elsif data10b(9 downto 8) = "00" then
+                        --check_length <= '0';
+                        if reset_v_ch = '1' then
+                            if v_chunks = 0 then
+                               cnt_checks <= (others => '0');
+                               reset_v_ch <= '0';
+                            else 
+                                v_chunks := 0;
+                            end if; 
+                        else
+                            reset_v_ch <= '0';
+                        end if;
+                    end if;
+                    
+                    count_chunks    <= std_logic_vector(to_unsigned(v_chunks, count_chunks'length));
+                    exp_checks      <= std_logic_vector(to_unsigned(5 + size/2, exp_checks'length));
+                                        
+                    if v_chunks = 1 and data10b(7 downto 0) = x"aa" and data10b(8) = '1' then --checks first byte
+                        check_words <= '1';
+                    elsif v_chunks = 3 and data10b(8) = '1' then
+                        size := to_integer(unsigned(data10b(7 downto 0)));
+                        chunk_size(link,stream) <= data10b(7 downto 0);
+                    elsif v_chunks = 5 and data10b(7 downto 0) = l1id(7 downto 0) and data10b(8) = '1' then
+                        check_words <= '1';
+                        next_w      := 10;
+                        next_b      := size - 2;
+                    elsif v_chunks = 6 and data10b(7 downto 0) = x"bb" and data10b(8) = '1'then 
+                        check_words <= '1';
+                    elsif v_chunks = 7 and data10b(7 downto 0) = x"aa" and data10b(8) = '1'then
+                        check_words <= '1';
+                    elsif v_chunks = 8 and data10b(7 downto 0) = width and data10b(8) = '1' then
+                        check_words <= '1';
+                    elsif v_chunks = next_w and data10b(7 downto 0) = std_logic_vector(to_unsigned(next_b,8)) and data10b(8) = '1' then
+                        check_words <= '1';
+                        next_w      := next_w + 2;
+                        if next_b > 1 then
+                            next_b      := next_b - 2;
+                        end if;
+                    else
+                        check_words <= '0';
+                    end if;
+                    
+                    if check_words = '1' then
+                        cnt_checks <= cnt_checks + '1';
+                    end if;
+                    
+                    if cnt_checks = exp_checks and check_length = '1' then 
+                        check_length <= '0';
+                        good <= '1';
+                    end if;
+                    
+                    if l1a = '1' then --new trigger
+                        good <= '0';
+                    end if;
+                end if;
+            end process;
+        end generate g_Streams;
+    end generate g_checking_data;
+    
+    process(m_axis_aclk)
+        variable count_f    : integer := 0;
+    begin
+        if rising_edge(m_axis_aclk) then
+            reset_d <= reset;
+            l1a_d <= l1a;
+            l1a_int_trigger_d <= l1a_int_trigger;
+            if l1a_int_trigger = '1' and l1a_int_trigger_d = '0' then
+                epath_aligned_d_slv <= epath_aligned_slv;
+                epath_aligned_dd_slv <= epath_aligned_d_slv; --delaying again because l1a_int_trigger comes before l1a so comparison wouldnt work
+            end if;
+            if l1a_d = '0' and l1a = '1'then
+                count_f := count_f + 1;
+                if data_good_slv = epath_aligned_dd_slv and count_f <= 16 then
+                    count_final <= count_final + '1';
+                        if epath_aligned_dd_slv = epath_enabled_slv then
+                            enabled_aligned(count_f-1) <= "11";
+                        else
+                            enabled_aligned(count_f-1) <= "01";
+                        end if;
+                end if;
+            elsif l1a_d = '1' and l1a = '0' then
+                log(ID_MONITOR,"enabled_aligned value is "&to_string(enabled_aligned(count_f-1),HEX)&". 0: data bad, 1: data good but not all decoders aligned, 3: data goot and aligned", C_SCOPE);
+            end if;
+        end if;
+    end process;
+    
+   g_to_slv_link : for link in 0 to GBT_NUM-1 generate
+        g_to_slv_stream: for stream in 0 to STREAMS_TOHOST-3 generate
+            epath_enabled_slv(link*(STREAMS_TOHOST-2)+stream) <= epath_enabled(link,stream);
+            epath_aligned_slv(link*(STREAMS_TOHOST-2)+stream) <= epath_aligned(link,stream);
+            data_good_slv(link*(STREAMS_TOHOST-2)+stream)     <= data_good(link,stream);
+        end generate g_to_slv_stream;
+    end generate g_to_slv_link;
+    
+    --sim process
+    mainproc : process
+        variable vcnt : std_logic_vector(4 downto 0);
+    begin
+        assert false
+            report "START SIMULATION"
+            severity NOTE;
+        clk_en  <= true;
+        reset <= '0';
+        select_random <= "0";
+        wait for 2 ns;
+        reset <= '1';
+        wait for 50 ns;
+        reset <= '0';
+        log(ID_MONITOR,"chunk size fixed to "&to_string(lane_control(0).emulator(0).chunk_length,DEC), C_SCOPE);
+        while true loop
+            wait until l1a = '1' or timeout;
+            if l1id /= "0000000000000000" then
+                log(ID_MONITOR,"TRIGGER NUMBER "&to_string(l1id,DEC), C_SCOPE);
+                for link in 0 to GBT_NUM-1 loop
+                    for stream in 0 to STREAMS_TOHOST-3 loop
+                        if epath_enabled(link,stream) = '1' then
+                            log(ID_MONITOR,"LINK "&to_string(link)&
+                                           " EPATH "&to_string(stream)&
+                                           " ENABLED "&to_string(epath_enabled(link,stream))&
+                                           " ALIGNED "&to_string(epath_aligned(link,stream))&
+                                           " SIZE "&to_string(chunk_size(link,stream),DEC)&
+                                           " DATA GOOD "&to_string(data_good(link,stream))
+                                           , C_SCOPE);
+                        end if;
+                    end loop;
+                end loop;
+            end if;
+            wait for 1 ns;
+            if timeout or l1id = "0000000000010000" then
+                exit;
+            elsif l1id = "0000000000000111" then
+                select_random <= "1";
+            end if;
+        end loop;
+        wait for 1 us;
+
+        vcnt  := count_final;
+        check_value(vcnt,l1id(4 downto 0), ERROR, "Verifying the number of triggers with good data",C_SCOPE);
+        check_value(timeout,false, ERROR, "Timeout check",C_SCOPE);
+        report_alert_counters(FINAL); -- Report final counters and print conclusion for simulation (Success/Fail)
+        log(ID_LOG_HDR, "SIMULATION COMPLETED", C_SCOPE);
+        
+        -- Finish the simulation
+        if use_vunit = false then
+            std.env.stop;
+        end if;
+        uvvm_completed <= '1';
+        wait;  -- to stop completely
+        finish;
+        wait for 1000 us;
+    end process;
+
+    --timeout
+    timeoutproc : process
+    begin
+        wait for 1000 us;
+        timeout <= true;
+    end process;
+end tb;
+ 
diff --git a/simulation/UVVMtests/tb/FELIGexternaltrigger_tb.vhd b/simulation/UVVMtests/tb/FELIGexternaltrigger_tb.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..a385fad8daebfe226a2fc9b433bc1c7349324210
--- /dev/null
+++ b/simulation/UVVMtests/tb/FELIGexternaltrigger_tb.vhd
@@ -0,0 +1,512 @@
+--ricardo luz, argonne
+
+library IEEE;
+    use IEEE.std_logic_1164.all;
+    use IEEE.numeric_std.all;
+    use IEEE.numeric_std_unsigned.all;
+    use IEEE.std_logic_textio.all;
+    
+    use std.env.all;
+    use std.textio.all;
+    
+    use work.FELIX_package.all;
+    use work.pcie_package.all;
+    use work.axi_stream_package.all;
+    use work.centralRouter_package.all;
+    use work.type_lib.ALL;
+
+library xpm;
+    use xpm.vcomponents.all;
+
+library uvvm_util;
+    context uvvm_util.uvvm_util_context;
+
+entity FELIGexternaltrigger_tb is
+    generic(
+        use_vunit       : boolean := false
+    );
+    port(
+        uvvm_completed: out std_logic := '0'
+    );
+end FELIGexternaltrigger_tb;
+
+architecture Behavioral of FELIGexternaltrigger_tb is
+    function FM_TO_PROTOCOL(FIRMWARE_MODE:integer)
+        return std_logic is
+    begin
+        if FIRMWARE_MODE = FIRMWARE_MODE_FELIG_GBT then
+            return '0';
+        elsif FIRMWARE_MODE = FIRMWARE_MODE_FELIG_LPGBT then
+            return '1';
+        else
+            return '0';
+        end if;
+    end function;
+    constant GBT_NUM            : integer := 1;
+    constant FIRMWARE_MODE      : integer := 11;
+    constant NUMELINKmax        : integer := 112; --name number of epahts per egroup (theoretically 2b epath * 112=224, but never happens)
+    constant NUMEGROUPmax       : integer := 7; --name number of egroups
+    
+    constant clk40_period       : time      := 25 ns;
+    signal clk_en               : boolean   := false;
+    signal clk40                : std_logic;
+    signal clk40_tmp            : std_logic := '0';
+    signal clk320               : std_logic;
+    signal clk320_tmp           : std_logic := '0';
+    signal clk_prcss            : std_logic := '0';
+    signal clkTX                : std_logic_vector(GBT_NUM-1 downto 0);
+    signal clkRX                : std_logic_vector(GBT_NUM-1 downto 0);
+    signal cnt_div		        : std_logic_vector(1 downto 0) := (others => '0');
+    signal cnt_div_max		    : std_logic_vector(1 downto 0) := (others => '0');
+
+    signal reset                : std_logic;
+    signal reset_d              : std_logic;
+    
+    signal register_map_control : register_map_control_type;
+--    signal single_l1a_long      : std_logic_vector(0 downto 0) := "0";
+--    signal single_ecr_long      : std_logic_vector(0 downto 0) := "0";
+--    signal single_bcr_long      : std_logic_vector(0 downto 0) := "0";
+    signal single_l1a_long      : std_logic := '0';
+    signal single_ecr_long      : std_logic := '0';
+    signal single_bcr_long      : std_logic := '0';
+    signal enable_ttc           : std_logic := '0';
+    signal TTCout               : std_logic_vector(9 downto 0) := (others => '0');
+    signal TTCout320               : std_logic_vector(9 downto 0) := (others => '0');
+
+    signal lane_control         : array_of_lane_control_type(GBT_NUM-1 downto 0);
+    signal lane_monitor         : array_of_lane_monitor_type(GBT_NUM-1 downto 0);
+    signal aligned              : std_logic := '0';
+
+    signal L1A                  : std_logic := '0';
+    signal L1A_count            : std_logic_vector(7 downto 0) := (others => '0');
+    signal l1a_id_register_rst  : std_logic := '0';
+    signal txrx_flag            : std_logic := '0';
+    signal rx_data              : std_logic_vector(119 downto 0) := (others => '0');
+    signal tx_data              : std_logic_vector(227 downto 0) := (others => '0');
+    signal tx_eg_data           : array_32b(NUMEGROUPmax-1 downto 0);
+    signal data_to_be_checked   : std_logic_vector(7 downto 0) := (others => '0');
+    signal tx_rdy               : std_logic := '0';
+    signal data_delay           : std_logic_vector(7 downto 0) := (others => '0');
+    signal valid_delay          : std_logic := '0';
+    signal data_count           : std_logic_vector(31 downto 0) := (others => '0');
+    signal data_size            : std_logic_vector(31 downto 0) := (others => '0');
+    
+    signal emu_l1a_id           : std_logic_vector(15 downto 0)  := (others => '0');
+    signal emu_l1a_id_delay     : std_logic_vector(15 downto 0)  := (others => '0');
+    signal emu_l1a              : std_logic := '0';
+    signal emu_l1a_40           : std_logic := '0';
+    signal next_l1a_id          : std_logic_vector(15 downto 0)  := x"0001";
+    
+    signal check_words          : std_logic := '0';
+    signal exp_checks           : std_logic_vector(6 downto 0) := (others => '0');
+    signal cnt_checks           : std_logic_vector(6 downto 0) := (others => '0');
+    signal good                 : std_logic := '0';
+    
+    signal count_good_ids       : std_logic_vector(7 downto 0)  := (others => '0');
+    signal count_good_data      : std_logic_vector(7 downto 0)  := (others => '0');
+    signal count_triggers       : std_logic_vector(7 downto 0) := (others => '0');
+    
+    signal test                 : std_logic := '0';
+    signal timeout              : boolean := false;
+begin
+
+    --clocks
+
+    clk320_tmp <= not clk320_tmp after clk40_period/16; --320 MHZ
+    clk320     <= clk320_tmp     when  clk_en else '0';
+
+    cnt_div_max <= "11";
+    clk_prcss   <= clk320;
+    clk40       <= clk40_tmp;
+    process(clk_prcss)
+    begin
+        if rising_edge(clk_prcss) then
+            if cnt_div = cnt_div_max then
+                cnt_div <= "00";
+                clk40_tmp <= not clk40_tmp;
+            else
+                cnt_div <= cnt_div + "01";
+            end if;
+        end if;
+    end process;
+
+    --gen lane_control for FELIG
+    
+    g_lane_control : for link in 0 to GBT_NUM-1 generate
+        signal elink_output_width   : array_of_slv_2_0(NUMELINKmax-1 downto 0) := (others => "111");
+        signal elink_enable         : std_logic_vector(NUMELINKmax-1 downto 0) := (others => '1');
+        signal data_format          : std_logic_vector(1 downto 0);
+    begin
+        lane_control(link).global.framegen_reset               <= '0';
+        lane_control(link).global.elink_sync                   <= '0';
+        lane_control(link).global.framegen_data_select         <= '0';
+        lane_control(link).global.emu_data_select              <= '1';
+        lane_control(link).global.l1a_source                   <= '1';--EXTERNAL TRIGGER
+        lane_control(link).global.loopback_fifo_delay          <= "00010";
+        lane_control(link).global.loopback_fifo_reset          <= '0';
+        lane_control(link).global.a_ch_bit_sel                 <= "0000000";
+        lane_control(link).global.b_ch_bit_sel                 <= "0000001";
+        lane_control(link).global.MSB                          <= '1';
+        lane_control(link).global.FEC                          <= '0';
+        lane_control(link).global.DATARATE                     <= '1';
+        lane_control(link).global.aligned                      <= aligned; 
+        lane_control(link).global.l1a_max_count                <= x"0000000";
+        lane_control(link).global.lane_reset                   <= '0';
+        lane_control(link).global.l1a_counter_reset            <= l1a_id_register_rst;
+        lane_control(link).fmemu_random.FMEMU_RANDOM_CONTROL.SELECT_RANDOM <= "0";
+        lane_control(link).fmemu_random.FMEMU_RANDOM_CONTROL.SEED          <= "1000000000"; --0x200
+        lane_control(link).fmemu_random.FMEMU_RANDOM_CONTROL.POLYNOMIAL    <= "1001000000"; --0x240
+        lane_control(link).fmemu_random.FMEMU_RANDOM_RAM_ADDR              <= "0000000000";
+        lane_control(link).fmemu_random.FMEMU_RANDOM_RAM.WE                <= "0";
+        lane_control(link).fmemu_random.FMEMU_RANDOM_RAM.CHANNEL_SELECT    <= (others=>'0');
+        lane_control(link).fmemu_random.FMEMU_RANDOM_RAM.DATA              <= (others=>'0');
+
+        lane_control(link).emulator(0).output_width  <= "010" when FIRMWARE_MODE = 11 else "000" when FIRMWARE_MODE = 6 else "000";-- 8b 2b
+        lane_control(link).emulator(1).output_width  <= "010" when FIRMWARE_MODE = 11 else "000" when FIRMWARE_MODE = 6 else "000";-- 8b 2b
+        lane_control(link).emulator(2).output_width  <= "011" when FIRMWARE_MODE = 11 else "001" when FIRMWARE_MODE = 6 else "000";--16b 4b
+        lane_control(link).emulator(3).output_width  <= "011" when FIRMWARE_MODE = 11 else "001" when FIRMWARE_MODE = 6 else "000";--16b 4b
+        lane_control(link).emulator(4).output_width  <= "100" when FIRMWARE_MODE = 11 else "010" when FIRMWARE_MODE = 6 else "000";--32b 8b
+        lane_control(link).emulator(5).output_width  <= "100";--32b
+        lane_control(link).emulator(6).output_width  <= "100";--32b
+        
+        data_format <= "00";
+        
+        g_emu_control : for egroup in lane_control(link).emulator'range generate
+            lane_control(link).emulator(egroup).pattern_select   <= "00";
+            lane_control(link).emulator(egroup).data_format      <= data_format;
+            lane_control(link).emulator(egroup).sw_busy          <= '0';
+            lane_control(link).emulator(egroup).reset            <= '0';--emu_reset;
+            lane_control(link).emulator(egroup).chunk_length     <= X"003C"; --60+8
+            lane_control(link).emulator(egroup).userdata         <= X"ABCD";
+            
+            less_that_five : if egroup<5 generate
+                elink_enable(egroup*16+7 downto egroup*16)    <= X"FF" when (lane_control(link).emulator(egroup).output_width <= "000") else
+                                                       X"55" when (lane_control(link).emulator(egroup).output_width <= "001") else
+                                                       X"11" when (lane_control(link).emulator(egroup).output_width <= "010") else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "011") else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "100");
+                elink_enable(egroup*16+15 downto egroup*16+8) <= X"FF" when (lane_control(link).emulator(egroup).output_width <= "000" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"55" when (lane_control(link).emulator(egroup).output_width <= "001" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"11" when (lane_control(link).emulator(egroup).output_width <= "010" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "011" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"00";
+            end generate less_that_five;
+            five : if egroup=5 generate
+                elink_enable(egroup*16+7 downto egroup*16)    <= X"FF" when (lane_control(link).emulator(egroup).output_width <= "000" and FIRMWARE_MODE = 11) else
+                                                                 X"55" when (lane_control(link).emulator(egroup).output_width <= "001" and FIRMWARE_MODE = 11) else
+                                                       X"11" when (lane_control(link).emulator(egroup).output_width <= "010" and FIRMWARE_MODE = 11) else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "011" and FIRMWARE_MODE = 11) else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "100" and FIRMWARE_MODE = 11) else
+                                                       X"00";
+                elink_enable(egroup*16+15 downto egroup*16+8) <= X"FF" when (lane_control(link).emulator(egroup).output_width <= "000" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"55" when (lane_control(link).emulator(egroup).output_width <= "001" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"11" when (lane_control(link).emulator(egroup).output_width <= "010" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "011" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else
+                                                       X"00";
+            end generate five;
+            six : if egroup=6 generate
+                elink_enable(egroup*16+7 downto egroup*16)    <= X"FF" when (lane_control(link).emulator(egroup).output_width <= "000" and FIRMWARE_MODE = 11 and lane_control(link).global.FEC = '0') else
+                                                       X"55" when (lane_control(link).emulator(egroup).output_width <= "001" and FIRMWARE_MODE = 11 and lane_control(link).global.FEC = '0') else
+                                                       X"11" when (lane_control(link).emulator(egroup).output_width <= "010" and FIRMWARE_MODE = 11 and lane_control(link).global.FEC = '0') else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "011" and FIRMWARE_MODE = 11 and lane_control(link).global.FEC = '0') else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "100" and FIRMWARE_MODE = 11 and lane_control(link).global.FEC = '0') else
+                                                       X"00";
+                elink_enable(egroup*16+15 downto egroup*16+8) <= X"FF" when (lane_control(link).emulator(egroup).output_width <= "000" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1' and lane_control(link).global.FEC = '0') else
+                                                       X"55" when (lane_control(link).emulator(egroup).output_width <= "001" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1' and lane_control(link).global.FEC = '0') else
+                                                       X"11" when (lane_control(link).emulator(egroup).output_width <= "010" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1' and lane_control(link).global.FEC = '0') else
+                                                       X"01" when (lane_control(link).emulator(egroup).output_width <= "011" and FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1' and lane_control(link).global.FEC = '0') else
+                                                       X"00";
+            end generate six;
+            width : for k in 0 to 7 generate
+                elink_output_width(egroup*16+k)   <= lane_control(link).emulator(egroup).output_width;
+                elink_output_width(egroup*16+k+8) <= lane_control(link).emulator(egroup).output_width when (FIRMWARE_MODE = 11 and lane_control(link).global.DATARATE = '1') else "111";
+            end generate width;
+   
+        end generate g_emu_control;
+                
+        g_elink_control : for epath in lane_control(link).elink'range generate
+            lane_control(link).elink(epath).input_width    <= '0' when data_format = "00" else '1';
+            lane_control(link).elink(epath).endian_mode    <= '0';
+            lane_control(link).elink(epath).enable         <= elink_enable(epath);
+            lane_control(link).elink(epath).output_width   <= elink_output_width(epath);
+        end generate g_elink_control;
+
+    end generate g_lane_control;
+    
+    --Generate FELIX TTC signals
+    
+    process(clk40)
+    begin
+        if rising_edge(clk40) then
+            if L1A_count = x"8F" then
+                L1A_count <= x"00";
+                L1A <= '1';
+                count_triggers <= count_triggers + '1';
+            else
+                L1A_count <= L1A_count + x"01";
+                L1A <= '0';
+                if count_triggers = x"04" and L1A_count = x"08" then
+                    single_ecr_long <= '1';
+                    l1a_id_register_rst <= '0';
+                    log(ID_MONITOR,"ECR issued", C_SCOPE);
+                elsif count_triggers = x"09" and L1A_count = x"1F" then
+                    single_ecr_long <= '0';
+                    l1a_id_register_rst <= '1';
+                    log(ID_MONITOR,"L1A ID register reset used", C_SCOPE);
+                else
+                    single_ecr_long <= '0';
+                    l1a_id_register_rst <= '0';
+                end if;
+            end if;
+        end if;
+    end process;
+
+    single_l1a_long <= L1A;
+    register_map_control.TTC_EMU.SEL(1)                 <= enable_ttc;
+    register_map_control.TTC_EMU.ENA(0)                 <= enable_ttc;
+    register_map_control.TTC_EMU_TP_DELAY               <= x"00000040";
+    register_map_control.TTC_EMU_L1A_PERIOD             <= x"00000000";
+    register_map_control.TTC_EMU_ECR_PERIOD             <= x"00000000";
+    register_map_control.TTC_EMU_BCR_PERIOD             <= x"00000dec";
+    register_map_control.TTC_EMU_LONG_CHANNEL_DATA      <= x"00000000";
+    register_map_control.TTC_EMU_CONTROL.BROADCAST      <= "000000";
+    register_map_control.TTC_EMU_RESET(64)              <= reset;
+    register_map_control.TTC_EMU_CONTROL.L1A(24)        <= single_l1a_long;
+    register_map_control.TTC_EMU_CONTROL.ECR(26)        <= single_ecr_long;
+    register_map_control.TTC_EMU_CONTROL.BCR(25)        <= single_bcr_long;
+    register_map_control.TTC_EMU_CONTROL.BUSY_IN_ENABLE <= "0";    
+
+    TTCEmu: entity work.TTC_Emulator
+        port map(
+            Clock => clk40,
+            Reset => reset,
+            register_map_control => register_map_control,
+            add_s8 => open,
+            add_d8 => open,
+            add_strobe => open,
+            add_e => open,
+            TTCout => TTCout, --      : out std_logic_vector(9 downto 0)
+            BUSYIn => '0'
+        );
+
+
+    --cdr ttcout 40 to 320
+    process(clk320)
+        variable count : integer := 0;
+    begin
+        if rising_edge(clk320) then
+            TTCout320 <= TTCout;
+            if count = 7 then
+                count := 0;
+                txrx_flag <= '1';
+            else
+                count := count + 1;
+                txrx_flag <= '0';
+            end if;
+        end if;
+    end process;
+
+    --FELIG emulator
+
+    rx_data(1) <= TTCout320(1); --b channel
+    rx_data(0) <= TTCout320(0); --l1a
+
+    felig_emulator : entity work.emulator
+        generic map (
+            useGBTdataEmulator       => false,
+            sim_emulator             => false,
+            LANE_ID                  => 0,
+            PROTOCOL                 => FM_TO_PROTOCOL(FIRMWARE_MODE)
+        )
+        port map (
+            clk40                   => clk40,
+            lane_rxclk              => clk320,
+            lane_txclk              => clk320,
+            l1a_int_trigger         => '0',
+            l1a_int_int_id          => (others => '0'),
+            l1a_trigger_out         => emu_l1a,
+            gbt_tx_data_228b_out    => tx_data,
+            data_ready_tx_out       => tx_rdy,
+            gbt_rx_data_120b_in     => rx_data,
+            gbt_tx_flag_in          => txrx_flag,
+            gbt_rx_flag_in          => txrx_flag,
+            lane_control            => lane_control(0),
+            lane_monitor            => lane_monitor(0)--,
+        );
+
+    emu_l1a_id  <= lane_monitor(0).global.l1a_id(15 downto 0);
+    
+    g_egroups : for eg in 0 to NUMEGROUPmax-1 generate --assuming LPGBT
+        tx_eg_data(eg) <= tx_data(32*(eg+1)-1 downto 32*eg);
+    end generate;
+    
+    data_to_be_checked  <= tx_data(7 downto 0); -- 1 epath of the 8b egroup
+    
+    --gen data_valid
+    
+    process(clk320)
+        variable count_l1a : integer := 0;
+    begin
+        if rising_edge(clk320) then
+            if aligned = '1'  then
+                if tx_rdy = '1' then
+                    data_delay <= data_to_be_checked;
+                    if valid_delay = '1' then
+                        data_count <= data_count + '1';
+                    else
+                        data_count <= (others => '0');
+                    end if;
+                    
+                    if data_count = x"00000002" then
+                        data_size <= data_delay + x"00000008";
+                    end if;
+                    
+                    if data_count = data_size - x"00000001" and data_size /= x"00000000" then
+                        valid_delay <= '0';
+                    end if;
+                end if;
+                if data_to_be_checked /= data_delay then
+                    valid_delay <= '1';
+                end if;
+            end if;
+            if emu_l1a = '1' then
+                count_l1a := count_l1a + 1;
+                emu_l1a_40 <= '1';
+            else
+                if count_l1a /= 0 then
+                    if count_l1a = 8 then
+                        count_l1a := 0;
+                        emu_l1a_40 <= '0';
+                    else
+                        count_l1a := count_l1a + 1;
+                    end if;
+                end if;
+            end if;
+        end if;
+    end process;
+
+    --check_data (based on FELIGemulator_tb.vhd)
+
+    process(clk40)
+        variable v_chunks   : integer := 0;
+        variable size       : integer := 100;
+        variable next_w     : integer := 100;
+        variable next_b     : integer := 100;
+        variable flag_check : std_logic := '0'; 
+    begin
+        if rising_edge(clk40) then
+            if valid_delay = '1' then
+                v_chunks := v_chunks + 1;
+            else
+                v_chunks := 0;
+            end if;
+            
+            if v_chunks = 1 and data_delay = x"aa" then --checks first byte
+                check_words <= '1';
+                flag_check := '1';
+            elsif v_chunks = 3 then
+                size := to_integer(unsigned(data_delay));
+                --chunk_size(link,stream) <= data_delay;
+            elsif v_chunks = 5 and data_delay = emu_l1a_id(7 downto 0) then
+                check_words <= '1';
+                next_w      := 10;
+                next_b      := size - 2;
+            elsif v_chunks = 6 and data_delay = x"bb" then 
+                check_words <= '1';
+            elsif v_chunks = 7 and data_delay = x"aa" then
+                check_words <= '1';
+            elsif v_chunks = 8 and data_delay = x"8" then
+                check_words <= '1';
+            elsif v_chunks = next_w and data_delay = std_logic_vector(to_unsigned(next_b,8)) then
+                check_words <= '1';
+                next_w      := next_w + 2;
+                if next_b > 1 then
+                    next_b      := next_b - 2;
+                end if;
+            else
+                check_words <= '0';
+            end if;
+            
+            if check_words = '1' then
+                cnt_checks <= cnt_checks + '1';
+            end if;
+            
+            exp_checks <= std_logic_vector(to_unsigned(5 + size/2, exp_checks'length));
+            
+            if cnt_checks = exp_checks and aligned = '1' then 
+                good <= '1';
+            end if;
+            
+            if flag_check = '1' and emu_l1a_40 = '1' then
+                flag_check := '0';
+                cnt_checks <=  (others => '0');
+                good <= '0';
+                if good = '1' then
+                    count_good_data <= count_good_data + '1';
+                end if;
+            end if;
+        end if;
+    end process;
+    
+    --check l1a_id
+    process(clk40)
+    begin
+        if rising_edge(clk40) then
+            emu_l1a_id_delay <= emu_l1a_id;
+            if emu_l1a_id_delay /= emu_l1a_id then
+                if aligned = '1' then
+                    log(ID_MONITOR,"L1A ID is  " & to_string(emu_l1a_id,DEC), C_SCOPE);
+                end if;
+                if emu_l1a_id = next_l1a_id then
+                    count_good_ids <= count_good_ids + '1';
+                    next_l1a_id <= next_l1a_id + '1';
+                end if;
+            end if;
+            if single_ecr_long = '1' or l1a_id_register_rst = '1' then
+                next_l1a_id <= (others => '0');
+            end if;
+        end if;
+    end process;
+
+    --main process
+    mainproc : process
+        variable vcnt : std_logic_vector(4 downto 0);
+    begin
+        assert false
+            report "START SIMULATION"
+            severity NOTE;
+        clk_en  <= true;
+        reset <= '0';
+        wait for 2 ns;
+        reset <= '1';
+        wait for 50 ns;
+        reset <= '0';
+        wait for 50 ns;
+        enable_ttc <= '1';
+        wait for 50 ns;
+        aligned <= '1';
+        
+        wait until (count_triggers = x"0F" and L1A_count = x"4F") or timeout;
+        check_value(count_good_ids,count_triggers, ERROR, "Comparing count_good_ids with count_triggers",C_SCOPE);
+        check_value(count_good_data,count_triggers-'1', ERROR, "Comparing count_good_data with count_triggers",C_SCOPE);
+        check_value(timeout,false, ERROR, "Timeout check",C_SCOPE);
+        report_alert_counters(FINAL); -- Report final counters and print conclusion for simulation (Success/Fail)
+        log(ID_LOG_HDR, "SIMULATION COMPLETED", C_SCOPE);
+        
+        --Finish the simulation
+        if use_vunit = false then
+            std.env.stop;
+        end if;
+        uvvm_completed <= '1';
+        wait;  -- to stop completely
+        finish;
+        wait for 1000 us;
+    end process;
+    
+    --timeout
+    timeoutproc : process
+    begin
+        wait for 500 us;
+        timeout <= true;
+    end process;
+end Behavioral;
diff --git a/simulation/UVVMtests/tb/FELIGlinkwrapperLPGBT_tb.vhd b/simulation/UVVMtests/tb/FELIGlinkwrapperLPGBT_tb.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..a0d0c6ed63c9971bab5c8667034b1f3762bcf765
--- /dev/null
+++ b/simulation/UVVMtests/tb/FELIGlinkwrapperLPGBT_tb.vhd
@@ -0,0 +1,346 @@
+--ricardo luz, argonne
+--based on simulation/FELIG/felig_lpgbt_sim.vhd
+
+library IEEE;
+    use IEEE.std_logic_1164.all;
+    use IEEE.numeric_std.all;
+    use IEEE.numeric_std_unsigned.all;
+    use IEEE.std_logic_textio.all;
+    
+    use std.env.all;
+    use std.textio.all;
+    
+    use work.FELIX_package.all;
+    use work.pcie_package.all;
+    use work.axi_stream_package.all;
+    use work.centralRouter_package.all;
+    use work.type_lib.ALL;
+
+library xpm;
+    use xpm.vcomponents.all;
+
+library uvvm_util;
+    context uvvm_util.uvvm_util_context;
+
+entity FELIGlinkwrapperLPGBT_tb is
+    generic(
+        use_vunit       : boolean := false
+    );
+    port(
+        uvvm_completed: out std_logic := '0'
+    );
+end FELIGlinkwrapperLPGBT_tb;
+
+architecture Behavioral of FELIGlinkwrapperLPGBT_tb is
+
+    constant GBT_NUM                : integer := 1;
+
+    constant clk40_period           : time      := 25 ns;
+    signal clk_en                   : boolean   := false;
+    signal clk40                    : std_logic;
+    signal clk40_tmp                : std_logic := '0';
+    signal clk320                   : std_logic;
+    signal clk320_tmp               : std_logic := '0';
+    signal clk_prcss                : std_logic := '0';
+    signal cnt_div		            : std_logic_vector(1 downto 0) := (others => '0');
+    signal cnt_div_max		        : std_logic_vector(1 downto 0) := (others => '0');
+
+    signal reset                    : std_logic := '0';
+    signal reset_done               : std_logic := '0';
+    signal reset_clk40              : std_logic := '0';
+    signal reset_done_clk40         : std_logic := '0';
+    
+    type data16barray               is array (0 to GBT_NUM-1) of std_logic_vector(15 downto 0);
+    type data32barray               is array (0 to GBT_NUM-1) of std_logic_vector(31 downto 0);
+    type txrx234b_48ch_type         is array (GBT_NUM-1 downto 0) of std_logic_vector(233 downto 0);
+    type txrx36b_48ch_type          is array (GBT_NUM-1 downto 0) of std_logic_vector(35 downto 0);
+
+    --lpgbt BE
+    signal alignment_done_BE        : std_logic_vector(GBT_NUM-1 downto 0);
+    signal data_rdy_BE              : std_logic_vector(GBT_NUM-1 downto 0);
+    signal RxSlide_BE               : std_logic_vector(GBT_NUM-1 downto 0);
+    signal TX_DATA_BE               : data16barray := (others => ("0000000000000000"));
+    signal uplinkData_i_BE          : txrx234b_48ch_type;
+    signal fec_error_i_BE           : std_logic_vector(GBT_NUM-1 downto 0);
+    signal fec_err_cnt_i_BE         : array_32b(0 to GBT_NUM-1);
+
+    --lpgbt FE
+    signal RxSlide_FE               : std_logic_vector(GBT_NUM-1 downto 0);
+    signal alignment_done_FE        : std_logic_vector(GBT_NUM-1 downto 0);
+    signal sta_headerFlag_out_FE    : std_logic_vector(GBT_NUM-1 downto 0);
+    signal TX_DATA_FE               : data32barray := (others => ("00000000000000000000000000000000"));
+    signal downLinkData_i_FE        : txrx36b_48ch_type;
+    signal tx_flag_out_FE           : std_logic_vector(GBT_NUM-1 downto 0);
+
+    --data
+    signal data_to_be               : std_logic_vector(223 downto 0) := (others => '0');
+    signal data_to_fe               : std_logic_vector(31 downto 0) := (others => '0');
+    
+    --check
+    signal aligned                  : std_logic := '0';
+    signal good_FE                  : std_logic_vector(GBT_NUM-1 downto 0) := (others => '0');
+    signal good_BE                  : std_logic_vector(GBT_NUM-1 downto 0) := (others => '0');
+    constant GBT_one                : std_logic_vector(GBT_NUM-1 downto 0) := (others => '1');
+    
+    signal timeout                  : boolean := false;
+begin
+
+    --clocks
+
+    clk320_tmp <= not clk320_tmp after clk40_period/16; --320 MHZ
+    clk320     <= clk320_tmp     when  clk_en else '0';
+
+    cnt_div_max <= "11";
+    clk_prcss   <= clk320;
+    clk40       <= clk40_tmp;
+
+    process(clk_prcss)
+    begin
+        if rising_edge(clk_prcss) then
+            if cnt_div = cnt_div_max then
+                cnt_div <= "00";
+                clk40_tmp <= not clk40_tmp;
+            else
+                cnt_div <= cnt_div + "01";
+            end if;
+        end if;
+    end process;
+
+    --reset
+    
+    process(clk40)
+    begin
+        if clk40'event and clk40='1' then
+            reset_clk40         <= reset;
+            reset_done_clk40    <= reset_done;
+            data_to_be          <= data_to_be + x"1";
+            data_to_fe          <= data_to_fe + x"1";
+        end if;
+    end process;
+
+    -- lpgbt FELIX
+    link_loop_BE : for i in 0 to GBT_NUM-1 generate
+        signal downlinkUserData_i           : std_logic_vector(31 downto 0);
+        signal downlinkEcData_i             : std_logic_vector(1 downto 0);
+        signal downlinkIcData_i             : std_logic_vector(1 downto 0);
+        signal GT_TX_WORD_CLK               : std_logic;
+        signal GT_RX_WORD_CLK               : std_logic;
+        signal uplinkDATA                   : std_logic_vector(223 downto 0);
+        signal uplinkEC                     : std_logic_vector(1 downto 0);
+        signal uplinkIC                     : std_logic_vector(1 downto 0);
+    begin
+        downlinkUserData_i      <= data_to_fe;
+        downlinkIcData_i        <= "00";
+        downlinkEcData_i        <= "11";
+        GT_TX_WORD_CLK          <= clk320;
+        GT_RX_WORD_CLK          <= clk320;
+        lpgbt_BE: entity work.FLX_LpGBT_BE
+            Port map (
+                downlinkUserData_i          => downlinkUserData_i,
+                downlinkEcData_i            => downlinkEcData_i,
+                downlinkIcData_i            => downlinkIcData_i,
+                TXCLK40                     => clk40,
+                TXCLK320                    => GT_TX_WORD_CLK,
+                RXCLK320m                   => GT_RX_WORD_CLK,
+                uplinkSelectFEC_i           => '0', --FEC5
+                data_rdy                    => data_rdy_BE(i),
+                Tx_scrambler_bypass         => '0',
+                Tx_Interleaver_bypass       => '0',
+                Tx_FEC_bypass               => '0',
+                TxData_Out                  => TX_DATA_BE(i),
+                rxdatain                    => TX_DATA_FE(i),
+                GBT_TX_RST                  => reset_clk40,
+                GBT_RX_RST                  => reset_clk40,
+                uplinkBypassInterleaver_i   => '0',
+                uplinkBypassFECEncoder_i    => '0',
+                uplinkBypassScrambler_i     => '0',
+                uplinkMulticycleDelay_i     => "011", --register_map_control.GBT_TX_TC_DLY_VALUE1(2 downto 0);
+                sta_headerFecLocked_o       => alignment_done_BE(i),
+                ctr_clkSlip_o               => RxSlide_BE(i),
+                uplinkReady_o               => open,
+                uplinkUserData_o            => uplinkData_i_BE(i)(229 downto 0),
+                uplinkEcData_o              => uplinkData_i_BE(i)(231 downto 230),
+                uplinkIcData_o              => uplinkData_i_BE(i)(233 downto 232),
+                fec_error_o                 => fec_error_i_BE(i),
+                fec_err_cnt_o               => fec_err_cnt_i_BE(i)
+            );
+        uplinkDATA  <= uplinkData_i_BE(i)(223 downto 0);
+        uplinkEC    <= uplinkData_i_BE(i)(231 downto 230);
+        uplinkIC    <= uplinkData_i_BE(i)(233 downto 232);
+    end generate;
+
+    -- lpgbt FELIG
+    link_loop_FE : for i in 0 to GBT_NUM-1 generate
+        signal GT_TX_WORD_CLK       : std_logic;
+        signal GT_RX_WORD_CLK       : std_logic;
+        signal FE_UPLINK_USER_DATA  : std_logic_vector(223 downto 0);
+        signal FE_UPLINK_IC_DATA    : std_logic_vector(1 downto 0);
+        signal FE_UPLINK_EC_DATA    : std_logic_vector(1 downto 0);
+        signal downlinkDATA         : std_logic_vector(31 downto 0);
+        signal downlinkEC           : std_logic_vector(1 downto 0);
+        signal downlinkIC           : std_logic_vector(1 downto 0);
+        signal count                : std_logic_vector(2 downto 0) := "000";
+        signal data_en              : std_logic;
+    begin
+        GT_TX_WORD_CLK       <= clk320;
+        GT_RX_WORD_CLK       <= clk320;
+        FE_UPLINK_USER_DATA  <= data_to_be;
+        FE_UPLINK_IC_DATA    <= "10";
+        FE_UPLINK_EC_DATA    <= "01";
+        lpgbt_FE: entity work.FLX_LpGBT_FE
+            Port map
+        (
+                clk40_in                        => clk40,
+                TXCLK320                        => GT_TX_WORD_CLK,
+                RXCLK320                        => GT_RX_WORD_CLK,
+                rst_uplink_i                    => reset_clk40,
+                ctr_clkSlip_s                   => RxSlide_FE(i),
+                aligned                         => alignment_done_FE(i),
+                sta_headerFlag_o                => sta_headerFlag_out_FE(i),
+                dat_upLinkWord_fromGb_s         => TX_DATA_FE(i),
+                dat_downLinkWord_fromMgt_s16    => TX_DATA_BE(i),
+                rst_dnlink_i                    => reset_clk40,
+                sta_mgtRxRdy_s                  => reset_done_clk40,
+                downLinkBypassDeinterleaver     => '0',
+                downLinkBypassFECDecoder        => '0',
+                downLinkBypassDescsrambler      => '0',
+                enableFECErrCounter             => '0',
+                upLinkScramblerBypass           => '0',
+                upLinkInterleaverBypass         => '0',
+                fecMode                         => '0', --FEC5
+                txDataRate                      => '1', --10.24 Gb/s
+                phase_sel                       => "100",
+                upLinkData                      => FE_UPLINK_USER_DATA,
+                upLinkDataIC                    => FE_UPLINK_IC_DATA,
+                upLinkDataEC                    => FE_UPLINK_EC_DATA,
+                upLinkDataREADY                 => data_en,
+                downLinkData                    => downLinkData_i_FE(i)(31 downto 0),
+                downLinkDataIC                  => downLinkData_i_FE(i)(33 downto 32),
+                downLinkDataEC                  => downLinkData_i_FE(i)(35 downto 34),
+                tx_flag_out                     => tx_flag_out_FE(i)
+            );
+        downlinkDATA    <= downLinkData_i_FE(i)(31 downto 0);
+        downlinkEC      <= downLinkData_i_FE(i)(33 downto 32);
+        downlinkIC      <= downLinkData_i_FE(i)(35 downto 34);
+        process(GT_TX_WORD_CLK)
+        begin
+            if GT_TX_WORD_CLK'event and GT_TX_WORD_CLK='1' then
+                count <= count + "001";
+                if count = "111" then
+                    data_en <= '1';
+                else
+                    data_en <= '0';
+                end if;
+            end if;
+        end process;
+    end generate;
+
+    --check_data
+    process(clk320)
+    begin
+        if clk320'event and clk320='1' then
+            if alignment_done_FE = GBT_one and alignment_done_BE = GBT_one then
+                aligned <= '1';
+            else
+                aligned <= '0';
+            end if;
+        end if;
+    end process;
+    
+    link_check : for i in 0 to GBT_NUM-1 generate
+        signal dif_FE                   : integer := 0;
+        signal dif_BE                   : integer := 0;
+
+    begin
+        process(clk320)
+        begin
+            if clk320'event and clk320='1' then
+                if cnt_div = "10" and clk40 = '1' and aligned = '1' then
+                    if dif_FE = 0 and dif_BE = 0 then
+                        dif_FE <= to_integer(unsigned(data_to_fe-downLinkData_i_FE(0)(31 downto 0)));
+                        dif_BE <= to_integer(unsigned(data_to_be-uplinkData_i_BE(0)(223 downto 0)));
+                    else
+                        if data_to_fe > downLinkData_i_FE(0)(31 downto 0) then
+                            if dif_FE = to_integer(unsigned(data_to_fe-downLinkData_i_FE(0)(31 downto 0))) then
+                                good_FE(i) <= '1';
+                            else
+                                good_FE(i) <= '0';
+                            end if;
+                        else
+                            good_FE(i) <= '0';
+                        end if;
+                        if data_to_be > uplinkData_i_BE(0)(223 downto 0) then
+                            if dif_BE = to_integer(unsigned(data_to_be-uplinkData_i_BE(0)(223 downto 0))) then
+                                good_BE(i) <= '1';
+                            else
+                                good_BE(i) <= '0';
+                            end if;
+                        else
+                            good_BE(i) <= '0';
+                        end if;
+                    end if;
+                elsif aligned = '0' then
+                    dif_FE <= 0;
+                    dif_BE <= 0;
+                end if;
+            end if;
+        end process;
+    end generate;
+    
+    --sim process
+    mainproc : process
+        variable var_FE : std_logic_vector(GBT_NUM-1 downto 0) := (others => '0');
+        variable var_BE : std_logic_vector(GBT_NUM-1 downto 0) := (others => '0');
+        variable var_br : integer := 0;
+    begin
+        assert false
+            report "START SIMULATION"
+            severity NOTE;
+        clk_en  <= true;
+        wait for 2 us;
+        reset   <= '1';
+        wait for 2 us;
+        reset   <='0';
+        reset_done  <= '1';
+        wait for 5 us;
+        var_br := 0;
+        wait until (aligned = '1' and good_FE = GBT_one and good_FE = GBT_one)  or timeout;
+        var_FE := good_FE;
+        var_BE := good_BE;
+        while true loop
+            if timeout or data_to_fe > "00000000000000000001000000000000" then
+                exit;
+            end if;
+            if good_BE /= var_BE or var_FE /= good_FE then
+                var_br := 1;
+                log(ID_MONITOR,"Value changed. good_BE is "&to_string(good_BE)&" it was "&to_string(var_BE)&". good_FE is "&to_string(good_FE)&" it was "&to_string(var_FE), C_SCOPE);
+                wait for 25 ns;
+                var_BE := good_BE;
+                var_FE := good_FE;
+            else
+                wait for 25 ns;
+            end if;
+        end loop;
+        
+        check_value(var_br, 0, ERROR, "Test if good_BE or good_FE ever changed value. If failed, check output.txt for more detail",C_SCOPE);
+        check_value(timeout,false, ERROR, "Timeout check",C_SCOPE);
+        report_alert_counters(FINAL); -- Report final counters and print conclusion for simulation (Success/Fail)
+        log(ID_LOG_HDR, "SIMULATION COMPLETED", C_SCOPE);
+        
+        -- Finish the simulation
+        if use_vunit = false then
+            std.env.stop;
+        end if;
+        uvvm_completed <= '1';
+        wait;  -- to stop completely
+        finish;
+        wait for 1000 us;
+    end process;
+
+    timeoutproc : process
+    begin
+        wait for 1000 us;
+        timeout <= true;
+    end process;
+
+end Behavioral;
diff --git a/simulation/VUnit/tb/FELIGemulator_GBT_vunit_tb.vhd b/simulation/VUnit/tb/FELIGemulator_GBT_vunit_tb.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..9113d6890f1b34ebfc5fe4209fa58d7654f18cba
--- /dev/null
+++ b/simulation/VUnit/tb/FELIGemulator_GBT_vunit_tb.vhd
@@ -0,0 +1,81 @@
+--! This file is part of the FELIX firmware distribution (https://gitlab.cern.ch/atlas-tdaq-felix/firmware/).
+--! Copyright (C) 2001-2021 CERN for the benefit of the ATLAS collaboration.
+--! Authors:
+--!               Frans Schreuder
+--!
+--!   Licensed under the Apache License, Version 2.0 (the "License");
+--!   you may not use this file except in compliance with the License.
+--!   You may obtain a copy of the License at
+--!
+--!       http://www.apache.org/licenses/LICENSE-2.0
+--!
+--!   Unless required by applicable law or agreed to in writing, software
+--!   distributed under the License is distributed on an "AS IS" BASIS,
+--!   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+--!   See the License for the specific language governing permissions and
+--!   limitations under the License.
+
+--========================================================================================================================
+-- Copyright (c) 2017 by Bitvis AS.  All rights reserved.
+-- You should have received a copy of the license file containing the MIT License (see LICENSE.TXT), if not,
+-- contact Bitvis AS <support@bitvis.no>.
+--
+-- UVVM AND ANY PART THEREOF ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+-- WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+-- OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH UVVM OR THE USE OR OTHER DEALINGS IN UVVM.
+--========================================================================================================================
+
+------------------------------------------------------------------------------------------
+-- VUnit wrapper for FELIGemulator_tb GBT
+------------------------------------------------------------------------------------------
+
+
+library IEEE;
+    use IEEE.std_logic_1164.all;
+    use IEEE.numeric_std.all;
+
+library lib;
+--
+
+library vunit_lib;
+    context vunit_lib.vunit_context;
+
+-- Test case entity
+entity FELIGemulator_GBT_vunit_tb is
+    generic (
+        runner_cfg : string
+    );
+end entity;
+
+architecture func of FELIGemulator_GBT_vunit_tb is
+    signal uvvm_completed : std_logic;
+    constant C_CLK_PERIOD_250 : time := 4 ns;
+begin
+
+    uut_tb: entity work.FELIGemulator_tb
+        generic map(
+            use_vunit => true,
+            FIRMWARE_MODE => 6
+        )
+        port map(
+            uvvm_completed => uvvm_completed
+        );
+
+
+    vunit_main : process is
+    begin
+        report "VUnit initializing";
+        test_runner_setup(runner, runner_cfg);
+        report "VUnit initialized";
+        while uvvm_completed /= '1' loop
+            wait for C_CLK_PERIOD_250;
+        end loop;
+        report "VUnit UVVM done, cleaning up";
+        test_runner_cleanup(runner);
+
+    end process vunit_main;
+
+end architecture;
+
+
diff --git a/simulation/VUnit/tb/FELIGemulator_LPGBT_vunit_tb.vhd b/simulation/VUnit/tb/FELIGemulator_LPGBT_vunit_tb.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..1c30330174c1211522c0412f7af33286f67cf6e5
--- /dev/null
+++ b/simulation/VUnit/tb/FELIGemulator_LPGBT_vunit_tb.vhd
@@ -0,0 +1,81 @@
+--! This file is part of the FELIX firmware distribution (https://gitlab.cern.ch/atlas-tdaq-felix/firmware/).
+--! Copyright (C) 2001-2021 CERN for the benefit of the ATLAS collaboration.
+--! Authors:
+--!               Frans Schreuder
+--!
+--!   Licensed under the Apache License, Version 2.0 (the "License");
+--!   you may not use this file except in compliance with the License.
+--!   You may obtain a copy of the License at
+--!
+--!       http://www.apache.org/licenses/LICENSE-2.0
+--!
+--!   Unless required by applicable law or agreed to in writing, software
+--!   distributed under the License is distributed on an "AS IS" BASIS,
+--!   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+--!   See the License for the specific language governing permissions and
+--!   limitations under the License.
+
+--========================================================================================================================
+-- Copyright (c) 2017 by Bitvis AS.  All rights reserved.
+-- You should have received a copy of the license file containing the MIT License (see LICENSE.TXT), if not,
+-- contact Bitvis AS <support@bitvis.no>.
+--
+-- UVVM AND ANY PART THEREOF ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+-- WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+-- OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH UVVM OR THE USE OR OTHER DEALINGS IN UVVM.
+--========================================================================================================================
+
+------------------------------------------------------------------------------------------
+-- VUnit wrapper for FELIGemulator_tb LPGBT
+------------------------------------------------------------------------------------------
+
+
+library IEEE;
+    use IEEE.std_logic_1164.all;
+    use IEEE.numeric_std.all;
+
+library lib;
+--
+
+library vunit_lib;
+    context vunit_lib.vunit_context;
+
+-- Test case entity
+entity FELIGemulator_LPGBT_vunit_tb is
+    generic (
+        runner_cfg : string
+    );
+end entity;
+
+architecture func of FELIGemulator_LPGBT_vunit_tb is
+    signal uvvm_completed : std_logic;
+    constant C_CLK_PERIOD_250 : time := 4 ns;
+begin
+
+    uut_tb: entity work.FELIGemulator_tb
+        generic map(
+            use_vunit => true,
+            FIRMWARE_MODE => 11
+        )
+        port map(
+            uvvm_completed => uvvm_completed
+        );
+
+
+    vunit_main : process is
+    begin
+        report "VUnit initializing";
+        test_runner_setup(runner, runner_cfg);
+        report "VUnit initialized";
+        while uvvm_completed /= '1' loop
+            wait for C_CLK_PERIOD_250;
+        end loop;
+        report "VUnit UVVM done, cleaning up";
+        test_runner_cleanup(runner);
+
+    end process vunit_main;
+
+end architecture;
+
+
diff --git a/simulation/VUnit/tb/FELIGexternaltrigger_tb.vhd b/simulation/VUnit/tb/FELIGexternaltrigger_tb.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..9081640b0f61cee0b2ea695d70b749c2dc52c260
--- /dev/null
+++ b/simulation/VUnit/tb/FELIGexternaltrigger_tb.vhd
@@ -0,0 +1,80 @@
+--! This file is part of the FELIX firmware distribution (https://gitlab.cern.ch/atlas-tdaq-felix/firmware/).
+--! Copyright (C) 2001-2021 CERN for the benefit of the ATLAS collaboration.
+--! Authors:
+--!               Frans Schreuder
+--!
+--!   Licensed under the Apache License, Version 2.0 (the "License");
+--!   you may not use this file except in compliance with the License.
+--!   You may obtain a copy of the License at
+--!
+--!       http://www.apache.org/licenses/LICENSE-2.0
+--!
+--!   Unless required by applicable law or agreed to in writing, software
+--!   distributed under the License is distributed on an "AS IS" BASIS,
+--!   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+--!   See the License for the specific language governing permissions and
+--!   limitations under the License.
+
+--========================================================================================================================
+-- Copyright (c) 2017 by Bitvis AS.  All rights reserved.
+-- You should have received a copy of the license file containing the MIT License (see LICENSE.TXT), if not,
+-- contact Bitvis AS <support@bitvis.no>.
+--
+-- UVVM AND ANY PART THEREOF ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+-- WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+-- OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH UVVM OR THE USE OR OTHER DEALINGS IN UVVM.
+--========================================================================================================================
+
+------------------------------------------------------------------------------------------
+-- VUnit wrapper for FELIGexternaltrigger_tb
+------------------------------------------------------------------------------------------
+
+
+library IEEE;
+    use IEEE.std_logic_1164.all;
+    use IEEE.numeric_std.all;
+
+library lib;
+--
+
+library vunit_lib;
+    context vunit_lib.vunit_context;
+
+-- Test case entity
+entity FELIGexternaltrigger_vunit_tb is
+    generic (
+        runner_cfg : string
+    );
+end entity;
+
+architecture func of FELIGexternaltrigger_vunit_tb is
+    signal uvvm_completed : std_logic;
+    constant C_CLK_PERIOD_250 : time := 4 ns;
+begin
+
+    uut_tb: entity work.FELIGexternaltrigger_tb
+        generic map(
+            use_vunit => true
+        )
+        port map(
+            uvvm_completed => uvvm_completed
+        );
+
+
+    vunit_main : process is
+    begin
+        report "VUnit initializing";
+        test_runner_setup(runner, runner_cfg);
+        report "VUnit initialized";
+        while uvvm_completed /= '1' loop
+            wait for C_CLK_PERIOD_250;
+        end loop;
+        report "VUnit UVVM done, cleaning up";
+        test_runner_cleanup(runner);
+
+    end process vunit_main;
+
+end architecture;
+
+
diff --git a/simulation/VUnit/tb/FELIGlinkwrapperLPGBT_tb.vhd b/simulation/VUnit/tb/FELIGlinkwrapperLPGBT_tb.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..6db3a59892967eef1a99674413d1e440b8f88fb0
--- /dev/null
+++ b/simulation/VUnit/tb/FELIGlinkwrapperLPGBT_tb.vhd
@@ -0,0 +1,80 @@
+--! This file is part of the FELIX firmware distribution (https://gitlab.cern.ch/atlas-tdaq-felix/firmware/).
+--! Copyright (C) 2001-2021 CERN for the benefit of the ATLAS collaboration.
+--! Authors:
+--!               Frans Schreuder
+--!
+--!   Licensed under the Apache License, Version 2.0 (the "License");
+--!   you may not use this file except in compliance with the License.
+--!   You may obtain a copy of the License at
+--!
+--!       http://www.apache.org/licenses/LICENSE-2.0
+--!
+--!   Unless required by applicable law or agreed to in writing, software
+--!   distributed under the License is distributed on an "AS IS" BASIS,
+--!   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+--!   See the License for the specific language governing permissions and
+--!   limitations under the License.
+
+--========================================================================================================================
+-- Copyright (c) 2017 by Bitvis AS.  All rights reserved.
+-- You should have received a copy of the license file containing the MIT License (see LICENSE.TXT), if not,
+-- contact Bitvis AS <support@bitvis.no>.
+--
+-- UVVM AND ANY PART THEREOF ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+-- WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+-- OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH UVVM OR THE USE OR OTHER DEALINGS IN UVVM.
+--========================================================================================================================
+
+------------------------------------------------------------------------------------------
+-- VUnit wrapper for FELIGlinkwrapperLPGBT_tb
+------------------------------------------------------------------------------------------
+
+
+library IEEE;
+    use IEEE.std_logic_1164.all;
+    use IEEE.numeric_std.all;
+
+library lib;
+--
+
+library vunit_lib;
+    context vunit_lib.vunit_context;
+
+-- Test case entity
+entity FELIGlinkwrapperLPGBT_vunit_tb is
+    generic (
+        runner_cfg : string
+    );
+end entity;
+
+architecture func of FELIGlinkwrapperLPGBT_vunit_tb is
+    signal uvvm_completed : std_logic;
+    constant C_CLK_PERIOD_250 : time := 4 ns;
+begin
+
+    uut_tb: entity work.FELIGlinkwrapperLPGBT_tb
+        generic map(
+            use_vunit => true
+        )
+        port map(
+            uvvm_completed => uvvm_completed
+        );
+
+
+    vunit_main : process is
+    begin
+        report "VUnit initializing";
+        test_runner_setup(runner, runner_cfg);
+        report "VUnit initialized";
+        while uvvm_completed /= '1' loop
+            wait for C_CLK_PERIOD_250;
+        end loop;
+        report "VUnit UVVM done, cleaning up";
+        test_runner_cleanup(runner);
+
+    end process vunit_main;
+
+end architecture;
+
+
diff --git a/sources/FELIG/data_generator/elink_data_emulator.vhd b/sources/FELIG/data_generator/elink_data_emulator.vhd
index e6722a4aae877e2a0a80ed739d950c296bcf0e81..0cb28007d48df7b48c17777f71a1756da1040888 100644
--- a/sources/FELIG/data_generator/elink_data_emulator.vhd
+++ b/sources/FELIG/data_generator/elink_data_emulator.vhd
@@ -328,7 +328,7 @@ begin
         )
         port map(
             src_clk => '0',
-            src_in => fmemu_random.SELECT_RANDOM(0),
+            src_in => fmemu_random.FMEMU_RANDOM_CONTROL.SELECT_RANDOM(fmemu_random.FMEMU_RANDOM_CONTROL.SELECT_RANDOM'low),
             dest_clk => clk,
             dest_out => select_random
         );
diff --git a/sources/FELIG/data_generator/elink_printer_bit_feeder_v2.vhd b/sources/FELIG/data_generator/elink_printer_bit_feeder_v2.vhd
index 85514bcf2864e3df887bd85e1cfc9059a3f8daab..f56c05699432dc1c1fc40afa0174bc48eedfcdb3 100644
--- a/sources/FELIG/data_generator/elink_printer_bit_feeder_v2.vhd
+++ b/sources/FELIG/data_generator/elink_printer_bit_feeder_v2.vhd
@@ -198,7 +198,11 @@ begin
                 end if;
                 if wr_to_reg_final_d = '1' then
                     reg_160_8b10b((count+1)*10 - 1 downto count*10) <= word_test;
-                    reg_160_direc((count+1)*8  - 1 downto count*8 ) <= word_test(7 downto 0);
+                    if MSBfirst = '0' then
+                        reg_160_direc((count+1)*8  - 1 downto count*8 ) <= word_in_d(7 downto 0);
+                    else
+                        reg_160_direc((count+1)*8  - 1 downto count*8 ) <= word_in_d(9 downto 2);
+                    end if;
                     if flag_count <= '0' then
                         if count = count_max then
                             count <= 0;
@@ -322,7 +326,11 @@ begin
                 end if;
                 if wr_to_reg_final_d = '1' then
                     reg_160_8b10b((count+1)*10 - 1 downto count*10) <= word_test;
-                    reg_160_direc((count+1)*8  - 1 downto count*8 ) <= word_test(7 downto 0);
+                    if MSBfirst = '0' then
+                        reg_160_direc((count+1)*8  - 1 downto count*8 ) <= word_in_d(7 downto 0);
+                    else
+                        reg_160_direc((count+1)*8  - 1 downto count*8 ) <= word_in_d(9 downto 2);
+                    end if;
                     if flag_count <= '0' then
                         if count = count_max then
                             count <= 0;
diff --git a/sources/FELIG/data_generator/elink_printer_v2.vhd b/sources/FELIG/data_generator/elink_printer_v2.vhd
index 618cb8b96c9b5f4a4457f9f7fad700a20ab3d9e1..e6657c28cd4df670e1c9b42899a629b620eb0ac6 100644
--- a/sources/FELIG/data_generator/elink_printer_v2.vhd
+++ b/sources/FELIG/data_generator/elink_printer_v2.vhd
@@ -197,6 +197,9 @@ begin
                 --------
                 if (gbt_word_latch = '1') then
                     gbt_payload_i <= gbt_bit_stream;
+                    data_ready    <= '1';
+                else
+                    data_ready    <= '0';
                 end if;
                 --------
                 case gbt_shift_count is
diff --git a/sources/FELIG/emulator/Emulator.vhd b/sources/FELIG/emulator/Emulator.vhd
index 1cd9d00fad48d5b7505575ac6585bb4445c06656..37195b8a81fce5f0d301654e85abf7df1d9c6329 100644
--- a/sources/FELIG/emulator/Emulator.vhd
+++ b/sources/FELIG/emulator/Emulator.vhd
@@ -107,7 +107,7 @@ architecture Behavioral of Emulator is
     signal l1id                             : std_logic_vector( 15 downto 0)  := (others => '0');
     signal l1a_ext_int_id                   : std_logic_vector( 15 downto 0)  := (others => '0'); --MT
     signal l1a_ext_int_id_extra             : std_logic_vector( 31 downto 0)  := (others => '0'); --MT
-    signal l1a_int_int_id_tx_clk            : std_logic_vector(15 downto 0);
+    signal l1a_int_int_id_tx_clk            : std_logic_vector( 15 downto 0)  := (others => '0');
     signal elink_sync                       : std_logic              := '0';
     signal elink_sync_reg                   : std_logic;
     signal emu_data_re                      : std_logic_vector(0 to NUMEGROUPmax-1); --(0 to  4);
@@ -150,6 +150,8 @@ architecture Behavioral of Emulator is
     signal out_of_sync                      : std_logic_vector(NUMEGROUPmax-1 downto 0) := (others => '0');
     signal or_out_of_sync                   : std_logic;
     signal flag_sync                        : std_logic_vector(0 to NUMEGROUPmax-1);
+    signal start_dsp_flag                   : std_logic := '0'; -- so dsp works in sim
+    signal start_dsp                        : std_logic := '0'; -- so dsp works in sim
 
 --RL to be implemented
 --signal aurora_en                    : std_logic_vector(0 to NUMELINKmax-1);
@@ -443,17 +445,22 @@ begin
                     flag_ext_counter_reset <= '0';
                 end if;
             end if;
-        end if;
+            if start_dsp_flag = '0' then
+                start_dsp_flag  <= '1';
+                start_dsp       <= '1';
+            else
+                start_dsp       <= '0';
+            end if;        end if;
     end process;
 
     --l1a id counter
     l1a_ext_int_id_counter : dsp_counter
         PORT MAP (
             CLK                => lane_txclk,
-            CE                => ext_counter_l1a_trigger,
+            CE                => ext_counter_l1a_trigger or start_dsp,
             SCLR              => '0',
             UP              => '1',
-            LOAD              => l1a_ext_counter_reset,
+            LOAD              => l1a_ext_counter_reset or start_dsp,
             L                 => X"000000000000",
             Q(47 downto 16)   => l1a_ext_int_id_extra,
             Q(15 downto  0)   => l1a_ext_int_id
diff --git a/sources/FELIG/emulator/EmulatorWrapper.vhd b/sources/FELIG/emulator/EmulatorWrapper.vhd
index e2da90097e575e98cb1c6442e2d76106d9c2066d..1e1f7fbfb488d2840d5ae7f72ac94d5968c3532d 100644
--- a/sources/FELIG/emulator/EmulatorWrapper.vhd
+++ b/sources/FELIG/emulator/EmulatorWrapper.vhd
@@ -59,7 +59,7 @@ entity EmulatorWrapper is
         FIRMWARE_MODE               : integer := 0
     );
     port(
-        clk40                       : in  std_logic;
+        clk40                       : in std_logic;
         gt_txusrclk_in              : in std_logic_vector(GBT_NUM-1 downto 0);
         gt_rxusrclk_in              : in std_logic_vector(GBT_NUM-1 downto 0);
         link_tx_data_228b_array_out : out txrx228b_type(0 to GBT_NUM-1);
@@ -67,6 +67,7 @@ entity EmulatorWrapper is
         link_rx_data_120b_array_in  : in  txrx120b_type(0 to GBT_NUM-1);
         link_tx_flag_in             : in std_logic_vector(GBT_NUM-1 downto 0);
         link_rx_flag_in             : in std_logic_vector(GBT_NUM-1 downto 0);
+        l1a_int_trigger_out         : out std_logic;
         lane_control                : in  array_of_lane_control_type(GBT_NUM-1 downto 0);
         lane_monitor                : out array_of_lane_monitor_type(GBT_NUM-1 downto 0)
     );
@@ -86,29 +87,30 @@ architecture RTL of EmulatorWrapper is
             return '0';
         end if;
     end function;
-    signal l1a_int_trigger                  : std_logic;
-    signal l1a_int_int_id                   : std_logic_vector(15 downto 0);
-    signal l1a_int_int_id_extra             : std_logic_vector(31 downto 0);
-    signal l1a_int_count, l1a_int_max_count : std_logic_vector(31 downto 0);
+    signal l1a_int_trigger                  : std_logic := '0';
+    signal l1a_int_int_id                   : std_logic_vector(15 downto 0) := (others=>'0');
+    signal l1a_int_int_id_extra             : std_logic_vector(31 downto 0) := (others=>'0');
+    signal l1a_int_count, l1a_int_max_count : std_logic_vector(31 downto 0) := (others=>'0');
     signal l1a_int_max_count_extra          : std_logic_vector(15 downto 0) := (others=>'0');
-    signal l1a_int_count_load               : std_logic;
-    signal l1a_int_int_id_sclr              : std_logic;
+    signal l1a_int_count_load               : std_logic := '0';
+    signal l1a_int_int_id_sclr              : std_logic := '0';
     signal l1a_int_counter_reset            : std_logic := '0';
     signal flag_int_counter_reset           : std_logic := '0';
-    signal counter_reset                    : std_logic;
-
+    signal counter_reset                    : std_logic := '0';
+    signal start_dsp_flag                   : std_logic := '0'; -- so dsp works in sim
+    signal start_dsp                        : std_logic := '0'; -- so dsp works in sim
 begin
 
     l1a_int_max_count   <= "0000" & lane_control(0).global.l1a_max_count;--"0000" & register_map_control_40xtal.FELIG_GLOBAL_CONTROL.FAKE_L1A_RATE;
     counter_reset       <= lane_control(0).global.l1a_counter_reset;
-
+    l1a_int_trigger_out <= l1a_int_trigger;
     l1a_int_counter : dsp_counter
         PORT MAP (
             CLK    => clk40,
             CE    => '1',
             SCLR  => '0',
             UP    => '0',
-            LOAD  => l1a_int_count_load,
+            LOAD  => l1a_int_count_load or start_dsp,
             L(47 downto 32)    => X"0000",
             L(31 downto  0)    => l1a_int_max_count,
             Q(47 downto 32)    => l1a_int_max_count_extra, --MT SIMU+
@@ -118,10 +120,10 @@ begin
     l1a_int_int_id_counter : dsp_counter
         PORT MAP (
             CLK    => clk40,
-            CE    => l1a_int_trigger,
+            CE    => l1a_int_trigger or start_dsp,
             SCLR  => l1a_int_int_id_sclr,
             UP    => '1',
-            LOAD  => l1a_int_counter_reset, --RL
+            LOAD  => l1a_int_counter_reset or start_dsp, --RL
             L    => X"000000000000",
             Q(47 downto 16)    => l1a_int_int_id_extra, --MT SIMU+ open,
             Q(15 downto  0)    => l1a_int_int_id
@@ -144,13 +146,12 @@ begin
 
     process(clk40)
     begin
-        if clk40'event and clk40='1' then
+        if clk40'event and clk40 = '1' then
             if l1a_int_max_count = 0 then
                 l1a_int_trigger <= '0';
                 l1a_int_int_id_sclr <= '1';
                 l1a_int_count_load <= '1';
             elsif l1a_int_count = 0 then
-
                 l1a_int_trigger <= '1';
                 l1a_int_int_id_sclr <= '0';
                 l1a_int_count_load <= '1';
@@ -159,11 +160,16 @@ begin
                 l1a_int_int_id_sclr <= '0';
                 l1a_int_count_load <= '0';
             end if;
+            if start_dsp_flag = '0' then
+                start_dsp_flag  <= '1';
+                start_dsp       <= '1';
+            else
+                start_dsp       <= '0';
+            end if;
         end if;
     end process;
 
     emulator_inst : for link in GBT_NUM-1 downto 0 generate
-
         gbt : entity work.emulator
             generic map (
                 useGBTdataEmulator       => false,
@@ -185,9 +191,7 @@ begin
                 gbt_rx_flag_in          => link_rx_flag_in(link),
                 lane_control            => lane_control(link),
                 lane_monitor            => lane_monitor(link)--,
-
             );
-
     end generate;
 
 end RTL;
diff --git a/sources/FELIG/packages/type_lib.vhd b/sources/FELIG/packages/type_lib.vhd
index 287d22b892d05318a58d283b8d97481520f5aeca..1cbf89c42730879b13412d63a4b762ab0f6dbdfe 100644
--- a/sources/FELIG/packages/type_lib.vhd
+++ b/sources/FELIG/packages/type_lib.vhd
@@ -166,7 +166,6 @@ package type_lib is
     end record lane_global_control;
 
     type lane_emu_random_control is record
-        SELECT_RANDOM           : std_logic_vector(0 downto 0);
         FMEMU_RANDOM_RAM_ADDR   : std_logic_vector(9 downto 0);    -- Controls the address of the ramblock for the random number generator
         FMEMU_RANDOM_RAM        : bitfield_fmemu_random_ram_t_type;
         FMEMU_RANDOM_CONTROL    : bitfield_fmemu_random_control_w_type;
diff --git a/sources/FELIG/templates/LaneRegisterRemapper.vhd b/sources/FELIG/templates/LaneRegisterRemapper.vhd
index f53e89fe74c665454b1023b733366110e1e4acab..439c013c57e3c9fc64e2c96c65949e3b50f733dd 100644
--- a/sources/FELIG/templates/LaneRegisterRemapper.vhd
+++ b/sources/FELIG/templates/LaneRegisterRemapper.vhd
@@ -103,7 +103,6 @@ begin
         lane_control(i).global.l1a_counter_reset            <= register_map_control.FELIG_L1ID_RESET                        (register_map_control.FELIG_L1ID_RESET'low);
         lane_control(i).global.MSB                          <= register_map_control.ENCODING_REVERSE_10B                    (register_map_control.ENCODING_REVERSE_10B'low);
         lane_control(i).global.l1a_max_count                <= register_map_control.FELIG_GLOBAL_CONTROL.FAKE_L1A_RATE;
-        lane_control(i).fmemu_random.SELECT_RANDOM          <= register_map_control.FMEMU_RANDOM_CONTROL.SELECT_RANDOM;
         lane_control(i).fmemu_random.FMEMU_RANDOM_RAM_ADDR  <= register_map_control.FMEMU_RANDOM_RAM_ADDR;
         lane_control(i).fmemu_random.FMEMU_RANDOM_RAM       <= register_map_control.FMEMU_RANDOM_RAM;
         lane_control(i).fmemu_random.FMEMU_RANDOM_CONTROL   <= register_map_control.FMEMU_RANDOM_CONTROL;
diff --git a/sources/FelixTop/felig_top_bnl712.vhd b/sources/FelixTop/felig_top_bnl712.vhd
index 20e80c9ca309b18e74c572e2778ca42d2d563937..65abc364500cb63c2612876310dcb64572fa3efa 100644
--- a/sources/FelixTop/felig_top_bnl712.vhd
+++ b/sources/FelixTop/felig_top_bnl712.vhd
@@ -396,6 +396,7 @@ begin
             link_rx_data_120b_array_in      => link_rx_data_120b_array_tmp,
             link_tx_flag_in                 => link_tx_flag_i,
             link_rx_flag_in                 => link_rx_flag_i,
+            l1a_int_trigger_out             => open, --sim
             lane_control                    => lane_control,
             lane_monitor                    => lane_monitor
         );
diff --git a/sources/ip_cores/sim/Distr_LUT_felig_sim_netlist.vhdl b/sources/ip_cores/sim/Distr_LUT_felig_sim_netlist.vhdl
index 7243ce09c45090948f4372f372cb5f6d3bc40a7f..34e1eb6ddbc8b9e66870d8ca7c9b46819a62e8a6 100644
--- a/sources/ip_cores/sim/Distr_LUT_felig_sim_netlist.vhdl
+++ b/sources/ip_cores/sim/Distr_LUT_felig_sim_netlist.vhdl
@@ -1,661 +1,667 @@
--- Copyright 1986-2018 Xilinx, Inc. All Rights Reserved.
+-- Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
+-- Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved.
 -- --------------------------------------------------------------------------------
--- Tool Version: Vivado v.2018.1 (lin64) Build 2188600 Wed Apr  4 18:39:19 MDT 2018
--- Date        : Tue Nov 12 18:15:58 2019
--- Host        : felix02.hep.anl.gov running 64-bit Scientific Linux release 6.10 (Carbon)
+-- Tool Version: Vivado v.2024.1 (lin64) Build 5076996 Wed May 22 18:36:09 MDT 2024
+-- Date        : Wed Oct 23 09:28:28 2024
+-- Host        : felix04.hep.anl.gov running 64-bit unknown
 -- Command     : write_vhdl -force -mode funcsim
---               /users/mtrovato/Phase1/felig/firmware/Projects/FLX712_FELIG/FLX712_FELIG.srcs/sources_1/ip/Distr_LUT_felig/Distr_LUT_felig_sim_netlist.vhdl
+--               /users/rluz/firmware_copies/241023_FELIG_FLX712_FLX-1507_UVVM_testbench/Projects/FLX712_FELIG/FLX712_FELIG.gen/sources_1/ip/Distr_LUT_felig/Distr_LUT_felig_sim_netlist.vhdl
 -- Design      : Distr_LUT_felig
 -- Purpose     : This VHDL netlist is a functional simulation representation of the design and should not be modified or
 --               synthesized. This netlist cannot be used for SDF annotated simulation.
 -- Device      : xcku115-flvf1924-2-e
 -- --------------------------------------------------------------------------------
-library IEEE;
-use IEEE.STD_LOGIC_1164.ALL;
-library UNISIM;
-use UNISIM.VCOMPONENTS.ALL;
-entity Distr_LUT_felig_blk_mem_gen_prim_wrapper_init is
-  port (
-    doutb : out STD_LOGIC_VECTOR ( 15 downto 0 );
-    clka : in STD_LOGIC;
-    clkb : in STD_LOGIC;
-    wea : in STD_LOGIC_VECTOR ( 0 to 0 );
-    enb : in STD_LOGIC;
-    sleep : in STD_LOGIC;
-    addra : in STD_LOGIC_VECTOR ( 9 downto 0 );
-    addrb : in STD_LOGIC_VECTOR ( 9 downto 0 );
-    dina : in STD_LOGIC_VECTOR ( 15 downto 0 )
-  );
-  attribute ORIG_REF_NAME : string;
-  attribute ORIG_REF_NAME of Distr_LUT_felig_blk_mem_gen_prim_wrapper_init : entity is "blk_mem_gen_prim_wrapper_init";
-end Distr_LUT_felig_blk_mem_gen_prim_wrapper_init;
+`protect begin_protected
+`protect version = 1
+`protect encrypt_agent = "XILINX"
+`protect encrypt_agent_info = "Xilinx Encryption Tool 2024.1"
+`protect key_keyowner="Synopsys", key_keyname="SNPS-VCS-RSA-2", key_method="rsa"
+`protect encoding = (enctype="BASE64", line_length=76, bytes=128)
+`protect key_block
+RSqbsRZSIb+QlYJMfFv1T7uHQ7PiCEXQkl687MHGm2LgPB15GIYcPmqKUSXgtkLsIFes91PTAyyB
+9H9cyY4ZUxedcRg/9ZOB5pm3zPqAbcvGPmg1ivMhr/MlS19t5lYKM2tQo+0Yd+arJXlVZu2BMnvn
++I3G9t9tJuWUIWKjI+I=
 
-architecture STRUCTURE of Distr_LUT_felig_blk_mem_gen_prim_wrapper_init is
-  signal \DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_n_70\ : STD_LOGIC;
-  signal \DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_n_71\ : STD_LOGIC;
-  signal \NLW_DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_CASDOUTA_UNCONNECTED\ : STD_LOGIC_VECTOR ( 15 downto 0 );
-  signal \NLW_DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_CASDOUTB_UNCONNECTED\ : STD_LOGIC_VECTOR ( 15 downto 0 );
-  signal \NLW_DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_CASDOUTPA_UNCONNECTED\ : STD_LOGIC_VECTOR ( 1 downto 0 );
-  signal \NLW_DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_CASDOUTPB_UNCONNECTED\ : STD_LOGIC_VECTOR ( 1 downto 0 );
-  signal \NLW_DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_DOUTADOUT_UNCONNECTED\ : STD_LOGIC_VECTOR ( 15 downto 0 );
-  signal \NLW_DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_DOUTPADOUTP_UNCONNECTED\ : STD_LOGIC_VECTOR ( 1 downto 0 );
-  attribute box_type : string;
-  attribute box_type of \DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram\ : label is "PRIMITIVE";
-begin
-\DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram\: unisim.vcomponents.RAMB18E2
-    generic map(
-      CASCADE_ORDER_A => "NONE",
-      CASCADE_ORDER_B => "NONE",
-      CLOCK_DOMAINS => "INDEPENDENT",
-      DOA_REG => 1,
-      DOB_REG => 1,
-      ENADDRENA => "FALSE",
-      ENADDRENB => "FALSE",
-      INITP_00 => X"0000000000000000000000000000000000000000000000000000000000000000",
-      INITP_01 => X"0000000000000000000000000000000000000000000000000000000000000000",
-      INITP_02 => X"0000000000000000000000000000000000000000000000000000000000000000",
-      INITP_03 => X"0000000000000000000000000000000000000000000000000000000000000000",
-      INITP_04 => X"0000000000000000000000000000000000000000000000000000000000000000",
-      INITP_05 => X"0000000000000000000000000000000000000000000000000000000000000000",
-      INITP_06 => X"0000000000000000000000000000000000000000000000000000000000000000",
-      INITP_07 => X"0000000000000000000000000000000000000000000000000000000000000000",
-      INIT_00 => X"005A005A005A005A0053005300530053004C004C004700470041003B00330021",
-      INIT_01 => X"006D00670067006700670067006700670067006000600060006000600060005A",
-      INIT_02 => X"0074007400740074007400740074006D006D006D006D006D006D006D006D006D",
-      INIT_03 => X"007A007A007A007A007A007A007A007A007A007A007A00740074007400740074",
-      INIT_04 => X"008000800080008000800080008000800080008000800080007A007A007A007A",
-      INIT_05 => X"0086008600860086008600860086008600860086008000800080008000800080",
-      INIT_06 => X"008D008D008D008D008600860086008600860086008600860086008600860086",
-      INIT_07 => X"008D008D008D008D008D008D008D008D008D008D008D008D008D008D008D008D",
-      INIT_08 => X"00930093009300930093009300930093009300930093008D008D008D008D008D",
-      INIT_09 => X"0093009300930093009300930093009300930093009300930093009300930093",
-      INIT_0A => X"0099009900990099009900990099009900990099009900990099009900930093",
-      INIT_0B => X"0099009900990099009900990099009900990099009900990099009900990099",
-      INIT_0C => X"009F009F009F009F009F009F009F009F009F009F009F009F009F009900990099",
-      INIT_0D => X"009F009F009F009F009F009F009F009F009F009F009F009F009F009F009F009F",
-      INIT_0E => X"00A500A500A500A500A500A500A500A5009F009F009F009F009F009F009F009F",
-      INIT_0F => X"00A500A500A500A500A500A500A500A500A500A500A500A500A500A500A500A5",
-      INIT_10 => X"00A500A500A500A500A500A500A500A500A500A500A500A500A500A500A500A5",
-      INIT_11 => X"00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC",
-      INIT_12 => X"00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC",
-      INIT_13 => X"00B200B200B200B200B200AC00AC00AC00AC00AC00AC00AC00AC00AC00AC00AC",
-      INIT_14 => X"00B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B2",
-      INIT_15 => X"00B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B2",
-      INIT_16 => X"00B800B800B800B800B800B800B200B200B200B200B200B200B200B200B200B2",
-      INIT_17 => X"00B800B800B800B800B800B800B800B800B800B800B800B800B800B800B800B8",
-      INIT_18 => X"00B800B800B800B800B800B800B800B800B800B800B800B800B800B800B800B8",
-      INIT_19 => X"00BE00BE00BE00BE00BE00BE00B800B800B800B800B800B800B800B800B800B8",
-      INIT_1A => X"00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE",
-      INIT_1B => X"00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE",
-      INIT_1C => X"00C500C500C500BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE00BE",
-      INIT_1D => X"00C500C500C500C500C500C500C500C500C500C500C500C500C500C500C500C5",
-      INIT_1E => X"00C500C500C500C500C500C500C500C500C500C500C500C500C500C500C500C5",
-      INIT_1F => X"00C500C500C500C500C500C500C500C500C500C500C500C500C500C500C500C5",
-      INIT_20 => X"00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB",
-      INIT_21 => X"00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB",
-      INIT_22 => X"00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB00CB",
-      INIT_23 => X"00D100D100D100D100D100D100D100D100D100D100D100D100D100CB00CB00CB",
-      INIT_24 => X"00D100D100D100D100D100D100D100D100D100D100D100D100D100D100D100D1",
-      INIT_25 => X"00D100D100D100D100D100D100D100D100D100D100D100D100D100D100D100D1",
-      INIT_26 => X"00D700D700D700D700D700D700D700D700D700D700D100D100D100D100D100D1",
-      INIT_27 => X"00D700D700D700D700D700D700D700D700D700D700D700D700D700D700D700D7",
-      INIT_28 => X"00D700D700D700D700D700D700D700D700D700D700D700D700D700D700D700D7",
-      INIT_29 => X"00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE00D700D700D700D700D700D7",
-      INIT_2A => X"00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE",
-      INIT_2B => X"00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE00DE",
-      INIT_2C => X"00E400E400E400E400E400E400E400E400E400E400E400DE00DE00DE00DE00DE",
-      INIT_2D => X"00E400E400E400E400E400E400E400E400E400E400E400E400E400E400E400E4",
-      INIT_2E => X"00E400E400E400E400E400E400E400E400E400E400E400E400E400E400E400E4",
-      INIT_2F => X"00EA00EA00EA00EA00EA00EA00EA00EA00EA00EA00EA00EA00EA00EA00EA00EA",
-      INIT_30 => X"00EA00EA00EA00EA00EA00EA00EA00EA00EA00EA00EA00EA00EA00EA00EA00EA",
-      INIT_31 => X"00F000F000F000F000F000F000F000F000EA00EA00EA00EA00EA00EA00EA00EA",
-      INIT_32 => X"00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F0",
-      INIT_33 => X"00F700F700F700F000F000F000F000F000F000F000F000F000F000F000F000F0",
-      INIT_34 => X"00F700F700F700F700F700F700F700F700F700F700F700F700F700F700F700F7",
-      INIT_35 => X"00FD00FD00F700F700F700F700F700F700F700F700F700F700F700F700F700F7",
-      INIT_36 => X"00FD00FD00FD00FD00FD00FD00FD00FD00FD00FD00FD00FD00FD00FD00FD00FD",
-      INIT_37 => X"0103010301030103010300FD00FD00FD00FD00FD00FD00FD00FD00FD00FD00FD",
-      INIT_38 => X"0103010301030103010301030103010301030103010301030103010301030103",
-      INIT_39 => X"0109010901090109010901090109010901090109010901090103010301030103",
-      INIT_3A => X"0110011001100110011001100109010901090109010901090109010901090109",
-      INIT_3B => X"0116011601160116011001100110011001100110011001100110011001100110",
-      INIT_3C => X"011C011C011C011C011C01160116011601160116011601160116011601160116",
-      INIT_3D => X"012201220122012201220122012201220122011C011C011C011C011C011C011C",
-      INIT_3E => X"0136012F012F012F012F012F012F012901290129012901290129012901290122",
-      INIT_3F => X"016F015D0155014F0149014901430143013D013D013D013D0136013601360136",
-      INIT_A => B"00" & X"0000",
-      INIT_B => B"00" & X"0000",
-      INIT_FILE => "NONE",
-      IS_CLKARDCLK_INVERTED => '0',
-      IS_CLKBWRCLK_INVERTED => '0',
-      IS_ENARDEN_INVERTED => '0',
-      IS_ENBWREN_INVERTED => '0',
-      IS_RSTRAMARSTRAM_INVERTED => '0',
-      IS_RSTRAMB_INVERTED => '0',
-      IS_RSTREGARSTREG_INVERTED => '0',
-      IS_RSTREGB_INVERTED => '0',
-      RDADDRCHANGEA => "FALSE",
-      RDADDRCHANGEB => "FALSE",
-      READ_WIDTH_A => 18,
-      READ_WIDTH_B => 18,
-      RSTREG_PRIORITY_A => "REGCE",
-      RSTREG_PRIORITY_B => "REGCE",
-      SIM_COLLISION_CHECK => "ALL",
-      SLEEP_ASYNC => "FALSE",
-      SRVAL_A => B"00" & X"0000",
-      SRVAL_B => B"00" & X"0000",
-      WRITE_MODE_A => "NO_CHANGE",
-      WRITE_MODE_B => "NO_CHANGE",
-      WRITE_WIDTH_A => 18,
-      WRITE_WIDTH_B => 18
-    )
-        port map (
-      ADDRARDADDR(13 downto 4) => addra(9 downto 0),
-      ADDRARDADDR(3 downto 0) => B"0000",
-      ADDRBWRADDR(13 downto 4) => addrb(9 downto 0),
-      ADDRBWRADDR(3 downto 0) => B"0000",
-      ADDRENA => '0',
-      ADDRENB => '0',
-      CASDIMUXA => '0',
-      CASDIMUXB => '0',
-      CASDINA(15 downto 0) => B"0000000000000000",
-      CASDINB(15 downto 0) => B"0000000000000000",
-      CASDINPA(1 downto 0) => B"00",
-      CASDINPB(1 downto 0) => B"00",
-      CASDOMUXA => '0',
-      CASDOMUXB => '0',
-      CASDOMUXEN_A => '0',
-      CASDOMUXEN_B => '0',
-      CASDOUTA(15 downto 0) => \NLW_DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_CASDOUTA_UNCONNECTED\(15 downto 0),
-      CASDOUTB(15 downto 0) => \NLW_DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_CASDOUTB_UNCONNECTED\(15 downto 0),
-      CASDOUTPA(1 downto 0) => \NLW_DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_CASDOUTPA_UNCONNECTED\(1 downto 0),
-      CASDOUTPB(1 downto 0) => \NLW_DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_CASDOUTPB_UNCONNECTED\(1 downto 0),
-      CASOREGIMUXA => '0',
-      CASOREGIMUXB => '0',
-      CASOREGIMUXEN_A => '0',
-      CASOREGIMUXEN_B => '0',
-      CLKARDCLK => clka,
-      CLKBWRCLK => clkb,
-      DINADIN(15 downto 0) => dina(15 downto 0),
-      DINBDIN(15 downto 0) => B"0000000000000000",
-      DINPADINP(1 downto 0) => B"00",
-      DINPBDINP(1 downto 0) => B"00",
-      DOUTADOUT(15 downto 0) => \NLW_DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_DOUTADOUT_UNCONNECTED\(15 downto 0),
-      DOUTBDOUT(15 downto 0) => doutb(15 downto 0),
-      DOUTPADOUTP(1 downto 0) => \NLW_DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_DOUTPADOUTP_UNCONNECTED\(1 downto 0),
-      DOUTPBDOUTP(1) => \DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_n_70\,
-      DOUTPBDOUTP(0) => \DEVICE_8SERIES.NO_BMM_INFO.SDP.SIMPLE_PRIM18.ram_n_71\,
-      ENARDEN => wea(0),
-      ENBWREN => enb,
-      REGCEAREGCE => '0',
-      REGCEB => enb,
-      RSTRAMARSTRAM => '0',
-      RSTRAMB => '0',
-      RSTREGARSTREG => '0',
-      RSTREGB => '0',
-      SLEEP => sleep,
-      WEA(1 downto 0) => B"11",
-      WEBWE(3 downto 0) => B"0000"
-    );
-end STRUCTURE;
-library IEEE;
-use IEEE.STD_LOGIC_1164.ALL;
-library UNISIM;
-use UNISIM.VCOMPONENTS.ALL;
-entity Distr_LUT_felig_blk_mem_gen_prim_width is
-  port (
-    doutb : out STD_LOGIC_VECTOR ( 15 downto 0 );
-    clka : in STD_LOGIC;
-    clkb : in STD_LOGIC;
-    wea : in STD_LOGIC_VECTOR ( 0 to 0 );
-    enb : in STD_LOGIC;
-    sleep : in STD_LOGIC;
-    addra : in STD_LOGIC_VECTOR ( 9 downto 0 );
-    addrb : in STD_LOGIC_VECTOR ( 9 downto 0 );
-    dina : in STD_LOGIC_VECTOR ( 15 downto 0 )
-  );
-  attribute ORIG_REF_NAME : string;
-  attribute ORIG_REF_NAME of Distr_LUT_felig_blk_mem_gen_prim_width : entity is "blk_mem_gen_prim_width";
-end Distr_LUT_felig_blk_mem_gen_prim_width;
+`protect key_keyowner="Aldec", key_keyname="ALDEC15_001", key_method="rsa"
+`protect encoding = (enctype="BASE64", line_length=76, bytes=256)
+`protect key_block
+VRSQ05ZaB6bIhFIQ823mTvlJaG9+5iW5C3+KxGjq0sq9ziCshKOLpOGPDMmOWDqA4uBaxC5IKISr
+w8+A8mqbYjXo5m1g8sGjNaETS0HKJsK+l5Y++tN4IEUs+DwxgrPR/+LWtChuOzVkfC7BG3LVUEMj
+zM3GAyGcXGJ3sdBItZAfsevyiy7kr4Fw+nk2hWytGteu1NZk3VzPE7KQHLkOlHBPXf6P0j8LpKcr
+2oNDgQ/WaEmg6OOvFeJuaWDaee8Sn6wKP/caMyoGdSeczsPtRrJeoSRlbNHlxhCv7zg+Cn2AgwrR
+PTqGsMrkhv9U0sq+waS0CmwChsk4WB7RspGYUg==
 
-architecture STRUCTURE of Distr_LUT_felig_blk_mem_gen_prim_width is
-begin
-\prim_init.ram\: entity work.Distr_LUT_felig_blk_mem_gen_prim_wrapper_init
-     port map (
-      addra(9 downto 0) => addra(9 downto 0),
-      addrb(9 downto 0) => addrb(9 downto 0),
-      clka => clka,
-      clkb => clkb,
-      dina(15 downto 0) => dina(15 downto 0),
-      doutb(15 downto 0) => doutb(15 downto 0),
-      enb => enb,
-      sleep => sleep,
-      wea(0) => wea(0)
-    );
-end STRUCTURE;
-library IEEE;
-use IEEE.STD_LOGIC_1164.ALL;
-library UNISIM;
-use UNISIM.VCOMPONENTS.ALL;
-entity Distr_LUT_felig_blk_mem_gen_generic_cstr is
-  port (
-    doutb : out STD_LOGIC_VECTOR ( 15 downto 0 );
-    clka : in STD_LOGIC;
-    clkb : in STD_LOGIC;
-    wea : in STD_LOGIC_VECTOR ( 0 to 0 );
-    enb : in STD_LOGIC;
-    sleep : in STD_LOGIC;
-    addra : in STD_LOGIC_VECTOR ( 9 downto 0 );
-    addrb : in STD_LOGIC_VECTOR ( 9 downto 0 );
-    dina : in STD_LOGIC_VECTOR ( 15 downto 0 )
-  );
-  attribute ORIG_REF_NAME : string;
-  attribute ORIG_REF_NAME of Distr_LUT_felig_blk_mem_gen_generic_cstr : entity is "blk_mem_gen_generic_cstr";
-end Distr_LUT_felig_blk_mem_gen_generic_cstr;
+`protect key_keyowner="Mentor Graphics Corporation", key_keyname="MGC-VELOCE-RSA", key_method="rsa"
+`protect encoding = (enctype="BASE64", line_length=76, bytes=128)
+`protect key_block
+tNziOjCznlvIl4dadmB9r23Duf+HQHWOuHmupEU3PJxrazHVtZdNKspG9sRXhF9mjbpnSiKYCdFK
+Jr9W/dxUid36faFIPKQazVTuOiE0hkzVQAGpYxXjT/ITB/9EFBvgvP5L3EAhHv32x6MA1vkFSI7x
+HrZ09YNFEF6T7DPTZE4=
 
-architecture STRUCTURE of Distr_LUT_felig_blk_mem_gen_generic_cstr is
-begin
-\ramloop[0].ram.r\: entity work.Distr_LUT_felig_blk_mem_gen_prim_width
-     port map (
-      addra(9 downto 0) => addra(9 downto 0),
-      addrb(9 downto 0) => addrb(9 downto 0),
-      clka => clka,
-      clkb => clkb,
-      dina(15 downto 0) => dina(15 downto 0),
-      doutb(15 downto 0) => doutb(15 downto 0),
-      enb => enb,
-      sleep => sleep,
-      wea(0) => wea(0)
-    );
-end STRUCTURE;
-library IEEE;
-use IEEE.STD_LOGIC_1164.ALL;
-library UNISIM;
-use UNISIM.VCOMPONENTS.ALL;
-entity Distr_LUT_felig_blk_mem_gen_top is
-  port (
-    doutb : out STD_LOGIC_VECTOR ( 15 downto 0 );
-    clka : in STD_LOGIC;
-    clkb : in STD_LOGIC;
-    wea : in STD_LOGIC_VECTOR ( 0 to 0 );
-    enb : in STD_LOGIC;
-    sleep : in STD_LOGIC;
-    addra : in STD_LOGIC_VECTOR ( 9 downto 0 );
-    addrb : in STD_LOGIC_VECTOR ( 9 downto 0 );
-    dina : in STD_LOGIC_VECTOR ( 15 downto 0 )
-  );
-  attribute ORIG_REF_NAME : string;
-  attribute ORIG_REF_NAME of Distr_LUT_felig_blk_mem_gen_top : entity is "blk_mem_gen_top";
-end Distr_LUT_felig_blk_mem_gen_top;
+`protect key_keyowner="Mentor Graphics Corporation", key_keyname="MGC-VERIF-SIM-RSA-2", key_method="rsa"
+`protect encoding = (enctype="BASE64", line_length=76, bytes=256)
+`protect key_block
+QCYfxgkUHlX1cre1q9aS3sVDIOX36YBK4ZwJXAVUwA6f1OQ77XibjpWJHt5FK9F0PcYp/j21pqzO
+BRdkDcFLVAjxER4J5t5iMVhoeMk+3fpiKfYrm4WFl1ygsJsfFJP0jqO1OkjC8iFBtm3n6b7CTl1o
+cjBbcBp8UgW6E8rf5inXA0dRqybnyxKJSnMFYLinvpVU6QEc4OKO7mi/i/s9p/efiP+CdQf0yDRU
+Fw7o7x0D7tjBv943g5L+4wGZ2JYU+ISqn4Ajxy/bWTTJDe6T/15evhngS61MC8Xjamzc4YLZBP8o
+ShfSLoeZeO+Hk5n3xzJRghM0DQ6Sj7NqXFY68w==
 
-architecture STRUCTURE of Distr_LUT_felig_blk_mem_gen_top is
-begin
-\valid.cstr\: entity work.Distr_LUT_felig_blk_mem_gen_generic_cstr
-     port map (
-      addra(9 downto 0) => addra(9 downto 0),
-      addrb(9 downto 0) => addrb(9 downto 0),
-      clka => clka,
-      clkb => clkb,
-      dina(15 downto 0) => dina(15 downto 0),
-      doutb(15 downto 0) => doutb(15 downto 0),
-      enb => enb,
-      sleep => sleep,
-      wea(0) => wea(0)
-    );
-end STRUCTURE;
-library IEEE;
-use IEEE.STD_LOGIC_1164.ALL;
-library UNISIM;
-use UNISIM.VCOMPONENTS.ALL;
-entity Distr_LUT_felig_blk_mem_gen_v8_4_1_synth is
-  port (
-    doutb : out STD_LOGIC_VECTOR ( 15 downto 0 );
-    clka : in STD_LOGIC;
-    clkb : in STD_LOGIC;
-    wea : in STD_LOGIC_VECTOR ( 0 to 0 );
-    enb : in STD_LOGIC;
-    sleep : in STD_LOGIC;
-    addra : in STD_LOGIC_VECTOR ( 9 downto 0 );
-    addrb : in STD_LOGIC_VECTOR ( 9 downto 0 );
-    dina : in STD_LOGIC_VECTOR ( 15 downto 0 )
-  );
-  attribute ORIG_REF_NAME : string;
-  attribute ORIG_REF_NAME of Distr_LUT_felig_blk_mem_gen_v8_4_1_synth : entity is "blk_mem_gen_v8_4_1_synth";
-end Distr_LUT_felig_blk_mem_gen_v8_4_1_synth;
+`protect key_keyowner="Real Intent", key_keyname="RI-RSA-KEY-1", key_method="rsa"
+`protect encoding = (enctype="BASE64", line_length=76, bytes=256)
+`protect key_block
+Uy8FDDy3dZQGAnMQV0HBesEs+/oZdaq35Kj1PGhy9J/+EBZm0nhhQgYtku8tWABW2jKAC1GtNTvo
+uReQyr1hteMxTbD5OIuqv86eb1hXZVENlZ7ichG8auUjkeHAkaSYNbHOuDLIhSqHEL67XbcZ9zPG
+1JOY3+VONSww0KYPcQbGSo/2DaC5C0Y+mZODRfJ4+b0WXjce6UaJetilBc3VtqqmodIM2d3HDawF
+R0xVJfHj86rXmUkY+SNUw60zsV6raCY6G3k/rXpei1d6zn8tCThkKG5fwiWY8zA7kRdTFIlVKP9h
+fb6kfzRBRT/BgVQ8d4RgEcEVV8m3u/Mf4KIlTw==
 
-architecture STRUCTURE of Distr_LUT_felig_blk_mem_gen_v8_4_1_synth is
-begin
-\gnbram.gnativebmg.native_blk_mem_gen\: entity work.Distr_LUT_felig_blk_mem_gen_top
-     port map (
-      addra(9 downto 0) => addra(9 downto 0),
-      addrb(9 downto 0) => addrb(9 downto 0),
-      clka => clka,
-      clkb => clkb,
-      dina(15 downto 0) => dina(15 downto 0),
-      doutb(15 downto 0) => doutb(15 downto 0),
-      enb => enb,
-      sleep => sleep,
-      wea(0) => wea(0)
-    );
-end STRUCTURE;
-library IEEE;
-use IEEE.STD_LOGIC_1164.ALL;
-library UNISIM;
-use UNISIM.VCOMPONENTS.ALL;
-entity Distr_LUT_felig_blk_mem_gen_v8_4_1 is
-  port (
-    clka : in STD_LOGIC;
-    rsta : in STD_LOGIC;
-    ena : in STD_LOGIC;
-    regcea : in STD_LOGIC;
-    wea : in STD_LOGIC_VECTOR ( 0 to 0 );
-    addra : in STD_LOGIC_VECTOR ( 9 downto 0 );
-    dina : in STD_LOGIC_VECTOR ( 15 downto 0 );
-    douta : out STD_LOGIC_VECTOR ( 15 downto 0 );
-    clkb : in STD_LOGIC;
-    rstb : in STD_LOGIC;
-    enb : in STD_LOGIC;
-    regceb : in STD_LOGIC;
-    web : in STD_LOGIC_VECTOR ( 0 to 0 );
-    addrb : in STD_LOGIC_VECTOR ( 9 downto 0 );
-    dinb : in STD_LOGIC_VECTOR ( 15 downto 0 );
-    doutb : out STD_LOGIC_VECTOR ( 15 downto 0 );
-    injectsbiterr : in STD_LOGIC;
-    injectdbiterr : in STD_LOGIC;
-    eccpipece : in STD_LOGIC;
-    sbiterr : out STD_LOGIC;
-    dbiterr : out STD_LOGIC;
-    rdaddrecc : out STD_LOGIC_VECTOR ( 9 downto 0 );
-    sleep : in STD_LOGIC;
-    deepsleep : in STD_LOGIC;
-    shutdown : in STD_LOGIC;
-    rsta_busy : out STD_LOGIC;
-    rstb_busy : out STD_LOGIC;
-    s_aclk : in STD_LOGIC;
-    s_aresetn : in STD_LOGIC;
-    s_axi_awid : in STD_LOGIC_VECTOR ( 3 downto 0 );
-    s_axi_awaddr : in STD_LOGIC_VECTOR ( 31 downto 0 );
-    s_axi_awlen : in STD_LOGIC_VECTOR ( 7 downto 0 );
-    s_axi_awsize : in STD_LOGIC_VECTOR ( 2 downto 0 );
-    s_axi_awburst : in STD_LOGIC_VECTOR ( 1 downto 0 );
-    s_axi_awvalid : in STD_LOGIC;
-    s_axi_awready : out STD_LOGIC;
-    s_axi_wdata : in STD_LOGIC_VECTOR ( 15 downto 0 );
-    s_axi_wstrb : in STD_LOGIC_VECTOR ( 0 to 0 );
-    s_axi_wlast : in STD_LOGIC;
-    s_axi_wvalid : in STD_LOGIC;
-    s_axi_wready : out STD_LOGIC;
-    s_axi_bid : out STD_LOGIC_VECTOR ( 3 downto 0 );
-    s_axi_bresp : out STD_LOGIC_VECTOR ( 1 downto 0 );
-    s_axi_bvalid : out STD_LOGIC;
-    s_axi_bready : in STD_LOGIC;
-    s_axi_arid : in STD_LOGIC_VECTOR ( 3 downto 0 );
-    s_axi_araddr : in STD_LOGIC_VECTOR ( 31 downto 0 );
-    s_axi_arlen : in STD_LOGIC_VECTOR ( 7 downto 0 );
-    s_axi_arsize : in STD_LOGIC_VECTOR ( 2 downto 0 );
-    s_axi_arburst : in STD_LOGIC_VECTOR ( 1 downto 0 );
-    s_axi_arvalid : in STD_LOGIC;
-    s_axi_arready : out STD_LOGIC;
-    s_axi_rid : out STD_LOGIC_VECTOR ( 3 downto 0 );
-    s_axi_rdata : out STD_LOGIC_VECTOR ( 15 downto 0 );
-    s_axi_rresp : out STD_LOGIC_VECTOR ( 1 downto 0 );
-    s_axi_rlast : out STD_LOGIC;
-    s_axi_rvalid : out STD_LOGIC;
-    s_axi_rready : in STD_LOGIC;
-    s_axi_injectsbiterr : in STD_LOGIC;
-    s_axi_injectdbiterr : in STD_LOGIC;
-    s_axi_sbiterr : out STD_LOGIC;
-    s_axi_dbiterr : out STD_LOGIC;
-    s_axi_rdaddrecc : out STD_LOGIC_VECTOR ( 9 downto 0 )
-  );
-  attribute C_ADDRA_WIDTH : integer;
-  attribute C_ADDRA_WIDTH of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 10;
-  attribute C_ADDRB_WIDTH : integer;
-  attribute C_ADDRB_WIDTH of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 10;
-  attribute C_ALGORITHM : integer;
-  attribute C_ALGORITHM of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 1;
-  attribute C_AXI_ID_WIDTH : integer;
-  attribute C_AXI_ID_WIDTH of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 4;
-  attribute C_AXI_SLAVE_TYPE : integer;
-  attribute C_AXI_SLAVE_TYPE of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_AXI_TYPE : integer;
-  attribute C_AXI_TYPE of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 1;
-  attribute C_BYTE_SIZE : integer;
-  attribute C_BYTE_SIZE of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 9;
-  attribute C_COMMON_CLK : integer;
-  attribute C_COMMON_CLK of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_COUNT_18K_BRAM : string;
-  attribute C_COUNT_18K_BRAM of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "1";
-  attribute C_COUNT_36K_BRAM : string;
-  attribute C_COUNT_36K_BRAM of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "0";
-  attribute C_CTRL_ECC_ALGO : string;
-  attribute C_CTRL_ECC_ALGO of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "NONE";
-  attribute C_DEFAULT_DATA : string;
-  attribute C_DEFAULT_DATA of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "0";
-  attribute C_DISABLE_WARN_BHV_COLL : integer;
-  attribute C_DISABLE_WARN_BHV_COLL of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_DISABLE_WARN_BHV_RANGE : integer;
-  attribute C_DISABLE_WARN_BHV_RANGE of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_ELABORATION_DIR : string;
-  attribute C_ELABORATION_DIR of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "./";
-  attribute C_ENABLE_32BIT_ADDRESS : integer;
-  attribute C_ENABLE_32BIT_ADDRESS of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_EN_DEEPSLEEP_PIN : integer;
-  attribute C_EN_DEEPSLEEP_PIN of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_EN_ECC_PIPE : integer;
-  attribute C_EN_ECC_PIPE of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_EN_RDADDRA_CHG : integer;
-  attribute C_EN_RDADDRA_CHG of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_EN_RDADDRB_CHG : integer;
-  attribute C_EN_RDADDRB_CHG of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_EN_SAFETY_CKT : integer;
-  attribute C_EN_SAFETY_CKT of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_EN_SHUTDOWN_PIN : integer;
-  attribute C_EN_SHUTDOWN_PIN of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_EN_SLEEP_PIN : integer;
-  attribute C_EN_SLEEP_PIN of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_EST_POWER_SUMMARY : string;
-  attribute C_EST_POWER_SUMMARY of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "Estimated Power for IP     :     2.810143 mW";
-  attribute C_FAMILY : string;
-  attribute C_FAMILY of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "kintexu";
-  attribute C_HAS_AXI_ID : integer;
-  attribute C_HAS_AXI_ID of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_HAS_ENA : integer;
-  attribute C_HAS_ENA of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_HAS_ENB : integer;
-  attribute C_HAS_ENB of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 1;
-  attribute C_HAS_INJECTERR : integer;
-  attribute C_HAS_INJECTERR of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_HAS_MEM_OUTPUT_REGS_A : integer;
-  attribute C_HAS_MEM_OUTPUT_REGS_A of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_HAS_MEM_OUTPUT_REGS_B : integer;
-  attribute C_HAS_MEM_OUTPUT_REGS_B of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 1;
-  attribute C_HAS_MUX_OUTPUT_REGS_A : integer;
-  attribute C_HAS_MUX_OUTPUT_REGS_A of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_HAS_MUX_OUTPUT_REGS_B : integer;
-  attribute C_HAS_MUX_OUTPUT_REGS_B of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_HAS_REGCEA : integer;
-  attribute C_HAS_REGCEA of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_HAS_REGCEB : integer;
-  attribute C_HAS_REGCEB of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_HAS_RSTA : integer;
-  attribute C_HAS_RSTA of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_HAS_RSTB : integer;
-  attribute C_HAS_RSTB of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_HAS_SOFTECC_INPUT_REGS_A : integer;
-  attribute C_HAS_SOFTECC_INPUT_REGS_A of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_HAS_SOFTECC_OUTPUT_REGS_B : integer;
-  attribute C_HAS_SOFTECC_OUTPUT_REGS_B of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_INITA_VAL : string;
-  attribute C_INITA_VAL of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "0";
-  attribute C_INITB_VAL : string;
-  attribute C_INITB_VAL of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "0";
-  attribute C_INIT_FILE : string;
-  attribute C_INIT_FILE of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "Distr_LUT_felig.mem";
-  attribute C_INIT_FILE_NAME : string;
-  attribute C_INIT_FILE_NAME of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "Distr_LUT_felig.mif";
-  attribute C_INTERFACE_TYPE : integer;
-  attribute C_INTERFACE_TYPE of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_LOAD_INIT_FILE : integer;
-  attribute C_LOAD_INIT_FILE of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 1;
-  attribute C_MEM_TYPE : integer;
-  attribute C_MEM_TYPE of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 1;
-  attribute C_MUX_PIPELINE_STAGES : integer;
-  attribute C_MUX_PIPELINE_STAGES of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_PRIM_TYPE : integer;
-  attribute C_PRIM_TYPE of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 1;
-  attribute C_READ_DEPTH_A : integer;
-  attribute C_READ_DEPTH_A of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 1024;
-  attribute C_READ_DEPTH_B : integer;
-  attribute C_READ_DEPTH_B of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 1024;
-  attribute C_READ_WIDTH_A : integer;
-  attribute C_READ_WIDTH_A of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 16;
-  attribute C_READ_WIDTH_B : integer;
-  attribute C_READ_WIDTH_B of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 16;
-  attribute C_RSTRAM_A : integer;
-  attribute C_RSTRAM_A of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_RSTRAM_B : integer;
-  attribute C_RSTRAM_B of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_RST_PRIORITY_A : string;
-  attribute C_RST_PRIORITY_A of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "CE";
-  attribute C_RST_PRIORITY_B : string;
-  attribute C_RST_PRIORITY_B of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "CE";
-  attribute C_SIM_COLLISION_CHECK : string;
-  attribute C_SIM_COLLISION_CHECK of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "ALL";
-  attribute C_USE_BRAM_BLOCK : integer;
-  attribute C_USE_BRAM_BLOCK of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_USE_BYTE_WEA : integer;
-  attribute C_USE_BYTE_WEA of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_USE_BYTE_WEB : integer;
-  attribute C_USE_BYTE_WEB of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_USE_DEFAULT_DATA : integer;
-  attribute C_USE_DEFAULT_DATA of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_USE_ECC : integer;
-  attribute C_USE_ECC of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_USE_SOFTECC : integer;
-  attribute C_USE_SOFTECC of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_USE_URAM : integer;
-  attribute C_USE_URAM of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 0;
-  attribute C_WEA_WIDTH : integer;
-  attribute C_WEA_WIDTH of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 1;
-  attribute C_WEB_WIDTH : integer;
-  attribute C_WEB_WIDTH of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 1;
-  attribute C_WRITE_DEPTH_A : integer;
-  attribute C_WRITE_DEPTH_A of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 1024;
-  attribute C_WRITE_DEPTH_B : integer;
-  attribute C_WRITE_DEPTH_B of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 1024;
-  attribute C_WRITE_MODE_A : string;
-  attribute C_WRITE_MODE_A of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "NO_CHANGE";
-  attribute C_WRITE_MODE_B : string;
-  attribute C_WRITE_MODE_B of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "WRITE_FIRST";
-  attribute C_WRITE_WIDTH_A : integer;
-  attribute C_WRITE_WIDTH_A of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 16;
-  attribute C_WRITE_WIDTH_B : integer;
-  attribute C_WRITE_WIDTH_B of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is 16;
-  attribute C_XDEVICEFAMILY : string;
-  attribute C_XDEVICEFAMILY of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "kintexu";
-  attribute ORIG_REF_NAME : string;
-  attribute ORIG_REF_NAME of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "blk_mem_gen_v8_4_1";
-  attribute downgradeipidentifiedwarnings : string;
-  attribute downgradeipidentifiedwarnings of Distr_LUT_felig_blk_mem_gen_v8_4_1 : entity is "yes";
-end Distr_LUT_felig_blk_mem_gen_v8_4_1;
+`protect key_keyowner="Xilinx", key_keyname="xilinxt_2023_11", key_method="rsa"
+`protect encoding = (enctype="BASE64", line_length=76, bytes=256)
+`protect key_block
+Pk1GeRlkUK9lt6DVXYVdtOABlzDEWQDcBsP/p+Wo5HaglDLG5b8gk08xTP3IcJ1RKcfuARPMGO2s
+/VqFbnVADV90T1rhjIuWMcBnzYQK/ALUvwv11Uju9Gn0fvPIz52l3QBnpjHI1nlsFB7WeqkzVfHZ
+tg9gO9bPHjHLjVd9BzH6McrEWY5RkZ0UBy0Fmh/SownJX1b0YGE7LdwKydEMEpyvb28bwTOwfEv/
+4RtsfYtEvTjo6e1ZBm66D9IQmKUu32wzTfn5bFZHdyjZg6+HcTzvHMtQX2+AggXfP6FsO2/83qkb
+0bfj226fnLhr32dJxtsaJS5OR63GYtzDJ05ITA==
 
-architecture STRUCTURE of Distr_LUT_felig_blk_mem_gen_v8_4_1 is
-  signal \<const0>\ : STD_LOGIC;
-begin
-  dbiterr <= \<const0>\;
-  douta(15) <= \<const0>\;
-  douta(14) <= \<const0>\;
-  douta(13) <= \<const0>\;
-  douta(12) <= \<const0>\;
-  douta(11) <= \<const0>\;
-  douta(10) <= \<const0>\;
-  douta(9) <= \<const0>\;
-  douta(8) <= \<const0>\;
-  douta(7) <= \<const0>\;
-  douta(6) <= \<const0>\;
-  douta(5) <= \<const0>\;
-  douta(4) <= \<const0>\;
-  douta(3) <= \<const0>\;
-  douta(2) <= \<const0>\;
-  douta(1) <= \<const0>\;
-  douta(0) <= \<const0>\;
-  rdaddrecc(9) <= \<const0>\;
-  rdaddrecc(8) <= \<const0>\;
-  rdaddrecc(7) <= \<const0>\;
-  rdaddrecc(6) <= \<const0>\;
-  rdaddrecc(5) <= \<const0>\;
-  rdaddrecc(4) <= \<const0>\;
-  rdaddrecc(3) <= \<const0>\;
-  rdaddrecc(2) <= \<const0>\;
-  rdaddrecc(1) <= \<const0>\;
-  rdaddrecc(0) <= \<const0>\;
-  rsta_busy <= \<const0>\;
-  rstb_busy <= \<const0>\;
-  s_axi_arready <= \<const0>\;
-  s_axi_awready <= \<const0>\;
-  s_axi_bid(3) <= \<const0>\;
-  s_axi_bid(2) <= \<const0>\;
-  s_axi_bid(1) <= \<const0>\;
-  s_axi_bid(0) <= \<const0>\;
-  s_axi_bresp(1) <= \<const0>\;
-  s_axi_bresp(0) <= \<const0>\;
-  s_axi_bvalid <= \<const0>\;
-  s_axi_dbiterr <= \<const0>\;
-  s_axi_rdaddrecc(9) <= \<const0>\;
-  s_axi_rdaddrecc(8) <= \<const0>\;
-  s_axi_rdaddrecc(7) <= \<const0>\;
-  s_axi_rdaddrecc(6) <= \<const0>\;
-  s_axi_rdaddrecc(5) <= \<const0>\;
-  s_axi_rdaddrecc(4) <= \<const0>\;
-  s_axi_rdaddrecc(3) <= \<const0>\;
-  s_axi_rdaddrecc(2) <= \<const0>\;
-  s_axi_rdaddrecc(1) <= \<const0>\;
-  s_axi_rdaddrecc(0) <= \<const0>\;
-  s_axi_rdata(15) <= \<const0>\;
-  s_axi_rdata(14) <= \<const0>\;
-  s_axi_rdata(13) <= \<const0>\;
-  s_axi_rdata(12) <= \<const0>\;
-  s_axi_rdata(11) <= \<const0>\;
-  s_axi_rdata(10) <= \<const0>\;
-  s_axi_rdata(9) <= \<const0>\;
-  s_axi_rdata(8) <= \<const0>\;
-  s_axi_rdata(7) <= \<const0>\;
-  s_axi_rdata(6) <= \<const0>\;
-  s_axi_rdata(5) <= \<const0>\;
-  s_axi_rdata(4) <= \<const0>\;
-  s_axi_rdata(3) <= \<const0>\;
-  s_axi_rdata(2) <= \<const0>\;
-  s_axi_rdata(1) <= \<const0>\;
-  s_axi_rdata(0) <= \<const0>\;
-  s_axi_rid(3) <= \<const0>\;
-  s_axi_rid(2) <= \<const0>\;
-  s_axi_rid(1) <= \<const0>\;
-  s_axi_rid(0) <= \<const0>\;
-  s_axi_rlast <= \<const0>\;
-  s_axi_rresp(1) <= \<const0>\;
-  s_axi_rresp(0) <= \<const0>\;
-  s_axi_rvalid <= \<const0>\;
-  s_axi_sbiterr <= \<const0>\;
-  s_axi_wready <= \<const0>\;
-  sbiterr <= \<const0>\;
-GND: unisim.vcomponents.GND
-     port map (
-      G => \<const0>\
-    );
-inst_blk_mem_gen: entity work.Distr_LUT_felig_blk_mem_gen_v8_4_1_synth
-     port map (
-      addra(9 downto 0) => addra(9 downto 0),
-      addrb(9 downto 0) => addrb(9 downto 0),
-      clka => clka,
-      clkb => clkb,
-      dina(15 downto 0) => dina(15 downto 0),
-      doutb(15 downto 0) => doutb(15 downto 0),
-      enb => enb,
-      sleep => sleep,
-      wea(0) => wea(0)
-    );
-end STRUCTURE;
+`protect key_keyowner="Metrics Technologies Inc.", key_keyname="DSim", key_method="rsa"
+`protect encoding = (enctype="BASE64", line_length=76, bytes=256)
+`protect key_block
+LCfWqKmUoUSVOTKNAl5p8n1hfz7SMU2kDOUMBjsDncgSFqiu2zUy1I6GSDrVnF/2umJG5/mWcpvi
+rQaFJOlrJ8DNctSuavdlopRAwTMsVi6dAlNGrAawSiDIxtI3tN3MDVdMiH5H+pJMqMt59yXneyCf
+2RRSRz2sUQK/aj0lXlqKjVJzVbk8HaBQ8akBJF4iWSMK4foIzJ6iO1EupYovuW6uEiO7jQRWezlW
+pbbDenOHHWbfinuX5cbkjpTKHGsEKct65q+ZXJp60m3sconSK3Y2eLQxusuJ1FHDJ4GGKO8mEzCv
+3cfGdXX3pVL81OfGO/JD1aMs9H98CO5ssbHqlw==
+
+`protect key_keyowner="Atrenta", key_keyname="ATR-SG-RSA-1", key_method="rsa"
+`protect encoding = (enctype="BASE64", line_length=76, bytes=384)
+`protect key_block
+A4S1e3DHcTeWzaDVuWDRb3Yf1BjiEsR1RtAeL0BJ7J/oPWMNj96MeGsUiHtZoiYqteTZxqax2cyZ
+PV0cMLoBK4Ya8CyM+BTnkFA2ablsGt5Es4TgG/nFS9VEhmeKxu8boAsqW5697aiqOATJf/LucQh5
+GOnPXHAuPrDj0A/fu8N2QduqGyysWUSc1KsoJ0/0noJYvLJ2yOhFi4uIUYQfG5LOuOrca5P43pqA
+iwUKW/RrFXal2acJdFeXIKffZpKanSV97urdzKyBvf9EPV/M8g9uPFJJ1z6aS+FbknhVPs0pt6eD
++J/qib4gVp/HGnRo4YlxauUMv6Yv9wxiaObY6ttDfYf5p3uzWZMlf3i7YOzZwcd4aS/6+vkD28LG
+L9piBIpLx2dvQy74RdvCVdvaP1LC6RMju9RfuXJhuX4ZAmDxRi0zQyRda838ikzwYeOCSKLIvRPb
+nuJ8Zx2ot8EFqSeGaaRFaEMU6Zf5SptCUuVMHvSkinBewcwrLB5uiJTJ
+
+`protect key_keyowner="Cadence Design Systems.", key_keyname="CDS_RSA_KEY_VER_1", key_method="rsa"
+`protect encoding = (enctype="BASE64", line_length=76, bytes=256)
+`protect key_block
+gj+uMxV+tK4Di7pgSOE82FOBeWmUB1A7OKFOSMUW3qrmQ4/YhryfHMlWPxfAq8avQL7tnBTnRFEg
+czbErdIcNzYjrM7Qq00QC/mTqmeQX4/apbqGvN+rwK4RR5oj22wfTib/UQNEQX6fbpi6PtmAeUR9
+eShsfq+YWcf7z2Zw4Q+o4+E6m4/3CzU68vglNpzNsJ8S9/8XpdIrvAA/WRAX6OEOC4wlNIKDZsq/
++zMbFgSzN1rP844I/CDmxYM0NIzBWWhYBkPfJyQyigmUoXb84lDip0/Dmnq4EHvu7D/tZNnDl5st
+JpftRfEpT6S8e/5MBeKUuhbfg6etHo/oFZvPKQ==
+
+`protect key_keyowner="Synplicity", key_keyname="SYNP15_1", key_method="rsa"
+`protect encoding = (enctype="BASE64", line_length=76, bytes=256)
+`protect key_block
+aWTy3xv6SqKsldtLS2gY4KrTS8U+KtFNRHS314f6EYZy1MHE9t7oICJ8eNB8up8A+odoE23N3fJb
+1alhaadeRWU2GjlIiK1LjZ5PQw+jb1u1GWtRiY+TcTlD75XUlqwykVBrCDfm565DmgZjZle9T3/t
+WEfLo+m/8GfBe8trVnoftsk/XI00BMFXRzw8doPGDhNECS1NUrLebryb9iO5Hf4A/40dtslTARsR
+nicN0KoIIyiQ+QzliqyXU/8VjS45inON8R0Kv9Qx46EXUp7bds5uQ7QycRhpLG0IPnMIweudU67w
+eQmpHJzvZKBCZks/R0OafZx44H6Jib2+QazBCw==
+
+`protect key_keyowner="Mentor Graphics Corporation", key_keyname="MGC-PREC-RSA", key_method="rsa"
+`protect encoding = (enctype="BASE64", line_length=76, bytes=256)
+`protect key_block
+UGdPiChIPj1lSozqzCQx17Bi+8FWSuMUMzXUkDLH5zcP1t8tZLzh4CU4WAR8lmJxn8gH763fLp5c
+RYU6zA0yxHzl2ksc5YRU1XEfQQT9ha8fQnz+18wVKcsa5UIOfMbGDwnS9yfX59ntG8CB0uF8bJKE
+y1CS6U/1Stfs1w2mF94iDxI2n2GJlb1UPtWpmxMBI88hY0GktTPXP2Y7JKl8zRl/Lq0wIF8pHwXk
+B4nOgKm6hfzPj0xZ6E/TuER/JE3fy8RSm24IlL/CUgpReEslEOYjQ4EKKZRG9/fxg26utQWW9p+G
+fWVU53qrFGzBhKQ96Paj1ROkv6hDHyUb6n7uSw==
+
+`protect data_method = "AES128-CBC"
+`protect encoding = (enctype = "BASE64", line_length = 76, bytes = 31088)
+`protect data_block
+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
+wcnhplIi4BGm8Ov+8a31Qy8XeZIPHas=
+`protect end_protected
 library IEEE;
 use IEEE.STD_LOGIC_1164.ALL;
 library UNISIM;
@@ -674,11 +680,11 @@ entity Distr_LUT_felig is
   attribute NotValidForBitStream : boolean;
   attribute NotValidForBitStream of Distr_LUT_felig : entity is true;
   attribute CHECK_LICENSE_TYPE : string;
-  attribute CHECK_LICENSE_TYPE of Distr_LUT_felig : entity is "Distr_LUT_felig,blk_mem_gen_v8_4_1,{}";
+  attribute CHECK_LICENSE_TYPE of Distr_LUT_felig : entity is "Distr_LUT_felig,blk_mem_gen_v8_4_8,{}";
   attribute downgradeipidentifiedwarnings : string;
   attribute downgradeipidentifiedwarnings of Distr_LUT_felig : entity is "yes";
   attribute x_core_info : string;
-  attribute x_core_info of Distr_LUT_felig : entity is "blk_mem_gen_v8_4_1,Vivado 2018.1";
+  attribute x_core_info of Distr_LUT_felig : entity is "blk_mem_gen_v8_4_8,Vivado 2024.1";
 end Distr_LUT_felig;
 
 architecture STRUCTURE of Distr_LUT_felig is
@@ -802,6 +808,10 @@ architecture STRUCTURE of Distr_LUT_felig is
   attribute C_READ_DEPTH_A of U0 : label is 1024;
   attribute C_READ_DEPTH_B : integer;
   attribute C_READ_DEPTH_B of U0 : label is 1024;
+  attribute C_READ_LATENCY_A : integer;
+  attribute C_READ_LATENCY_A of U0 : label is 1;
+  attribute C_READ_LATENCY_B : integer;
+  attribute C_READ_LATENCY_B of U0 : label is 1;
   attribute C_READ_WIDTH_A : integer;
   attribute C_READ_WIDTH_A of U0 : label is 16;
   attribute C_READ_WIDTH_B : integer;
@@ -849,12 +859,14 @@ architecture STRUCTURE of Distr_LUT_felig is
   attribute C_XDEVICEFAMILY : string;
   attribute C_XDEVICEFAMILY of U0 : label is "kintexu";
   attribute downgradeipidentifiedwarnings of U0 : label is "yes";
+  attribute is_du_within_envelope : string;
+  attribute is_du_within_envelope of U0 : label is "true";
   attribute x_interface_info : string;
   attribute x_interface_info of clka : signal is "xilinx.com:interface:bram:1.0 BRAM_PORTA CLK";
   attribute x_interface_parameter : string;
-  attribute x_interface_parameter of clka : signal is "XIL_INTERFACENAME BRAM_PORTA, MEM_SIZE 8192, MEM_WIDTH 32, MEM_ECC NONE, MASTER_TYPE OTHER";
+  attribute x_interface_parameter of clka : signal is "XIL_INTERFACENAME BRAM_PORTA, MEM_ADDRESS_MODE BYTE_ADDRESS, MEM_SIZE 8192, MEM_WIDTH 32, MEM_ECC NONE, MASTER_TYPE OTHER, READ_LATENCY 1";
   attribute x_interface_info of clkb : signal is "xilinx.com:interface:bram:1.0 BRAM_PORTB CLK";
-  attribute x_interface_parameter of clkb : signal is "XIL_INTERFACENAME BRAM_PORTB, MEM_SIZE 8192, MEM_WIDTH 32, MEM_ECC NONE, MASTER_TYPE OTHER";
+  attribute x_interface_parameter of clkb : signal is "XIL_INTERFACENAME BRAM_PORTB, MEM_ADDRESS_MODE BYTE_ADDRESS, MEM_SIZE 8192, MEM_WIDTH 32, MEM_ECC NONE, MASTER_TYPE OTHER, READ_LATENCY 1";
   attribute x_interface_info of enb : signal is "xilinx.com:interface:bram:1.0 BRAM_PORTB EN";
   attribute x_interface_info of addra : signal is "xilinx.com:interface:bram:1.0 BRAM_PORTA ADDR";
   attribute x_interface_info of addrb : signal is "xilinx.com:interface:bram:1.0 BRAM_PORTB ADDR";
@@ -862,7 +874,7 @@ architecture STRUCTURE of Distr_LUT_felig is
   attribute x_interface_info of doutb : signal is "xilinx.com:interface:bram:1.0 BRAM_PORTB DOUT";
   attribute x_interface_info of wea : signal is "xilinx.com:interface:bram:1.0 BRAM_PORTA WE";
 begin
-U0: entity work.Distr_LUT_felig_blk_mem_gen_v8_4_1
+U0: entity work.Distr_LUT_felig_blk_mem_gen_v8_4_8
      port map (
       addra(9 downto 0) => addra(9 downto 0),
       addrb(9 downto 0) => addrb(9 downto 0),
@@ -880,8 +892,8 @@ U0: entity work.Distr_LUT_felig_blk_mem_gen_v8_4_1
       injectdbiterr => '0',
       injectsbiterr => '0',
       rdaddrecc(9 downto 0) => NLW_U0_rdaddrecc_UNCONNECTED(9 downto 0),
-      regcea => '0',
-      regceb => '0',
+      regcea => '1',
+      regceb => '1',
       rsta => '0',
       rsta_busy => NLW_U0_rsta_busy_UNCONNECTED,
       rstb => '0',