From caa96d98c532cd6345c8107ce416b74cb5f27670 Mon Sep 17 00:00:00 2001 From: Julian Mendez <julian.mendez@cern.ch> Date: Fri, 12 Jul 2019 11:34:40 +0200 Subject: [PATCH] * Remove LpGBT emulator * Connect reset to VIO * Update example with the latest LpGBT-FPGA core version * Add PRBS Generator / checkers (remove old gen/checker) --- Constraints/kcu105_clks.xdc | 22 +- Constraints/kcu105_io.xdc | 20 +- TestBench_hw/LpGBT_model/dataPath.v | 152 ----- TestBench_hw/LpGBT_model/dataPathFecCounter.v | 64 -- .../LpGBT_model/descrambler36bitOrder36.v | 38 -- TestBench_hw/LpGBT_model/downLinkDataPath.v | 106 --- .../LpGBT_model/downLinkDeinterleaver.v | 57 -- TestBench_hw/LpGBT_model/downLinkFECDecoder.v | 98 --- TestBench_hw/LpGBT_model/gf_add_3.v | 15 - TestBench_hw/LpGBT_model/gf_add_4.v | 15 - TestBench_hw/LpGBT_model/gf_add_5.v | 15 - TestBench_hw/LpGBT_model/gf_inv_3.v | 33 - TestBench_hw/LpGBT_model/gf_inv_5.v | 75 -- TestBench_hw/LpGBT_model/gf_log_3.v | 66 -- TestBench_hw/LpGBT_model/gf_log_5.v | 203 ------ TestBench_hw/LpGBT_model/gf_multBy2_3.v | 16 - TestBench_hw/LpGBT_model/gf_multBy2_4.v | 17 - TestBench_hw/LpGBT_model/gf_multBy2_5.v | 18 - TestBench_hw/LpGBT_model/gf_multBy3_4.v | 17 - TestBench_hw/LpGBT_model/gf_multBy3_5.v | 18 - TestBench_hw/LpGBT_model/gf_mult_3.v | 17 - TestBench_hw/LpGBT_model/gf_mult_4.v | 12 - TestBench_hw/LpGBT_model/gf_mult_5.v | 13 - TestBench_hw/LpGBT_model/rs_decoder_N7K5.v | 136 ---- TestBench_hw/LpGBT_model/rs_encoder_N15K13.v | 121 ---- TestBench_hw/LpGBT_model/rs_encoder_N31K29.v | 119 ---- .../LpGBT_model/scrambler51bitOrder49.v | 51 -- .../LpGBT_model/scrambler53bitOrder49.v | 49 -- .../LpGBT_model/scrambler58bitOrder58.v | 47 -- .../LpGBT_model/scrambler60bitOrder58.v | 49 -- TestBench_hw/LpGBT_model/upLinkDataPath.v | 136 ---- TestBench_hw/LpGBT_model/upLinkDataSelect.v | 111 --- TestBench_hw/LpGBT_model/upLinkFECEncoder.v | 114 ---- TestBench_hw/LpGBT_model/upLinkInterleaver.v | 154 ----- TestBench_hw/LpGBT_model/upLinkScrambler.v | 160 ----- TestBench_hw/datarouter_top.vhd | 80 --- TestBench_hw/downlinkstimulis_top.vhd | 184 ----- .../jtag_controller/jtag_controller_top.vhd | 191 ------ .../jtag_controller/lpgbt_axi_control.vhd | 281 -------- TestBench_hw/lpgbt_downlinkGenerator.vhd | 165 +++++ TestBench_hw/lpgbtemul_top.vhd | 642 ------------------ TestBench_hw/lpgbtfpga_top.vhd | 275 ++++---- TestBench_hw/prbs/prbs7_16b_checker.vhd | 115 ++++ TestBench_hw/prbs/prbs7_1b_checker.vhd | 79 +++ TestBench_hw/prbs/prbs7_1b_generator.vhd | 86 +++ TestBench_hw/prbs/prbs7_2b_checker.vhd | 90 +++ TestBench_hw/prbs/prbs7_2b_generator.vhd | 103 +++ TestBench_hw/prbs/prbs7_32b_checker.vhd | 147 ++++ TestBench_hw/prbs/prbs7_4b_checker.vhd | 94 +++ TestBench_hw/prbs/prbs7_4b_generator.vhd | 100 +++ TestBench_hw/prbs/prbs7_64b_generator.vhd | 117 ++++ TestBench_hw/prbs/prbs7_8b_checker.vhd | 99 +++ TestBench_hw/prbs/prbs7_8b_generator.vhd | 88 +++ TestBench_hw/resetgen_top.vhd | 73 -- TestBench_hw/top_tb.vhd | 522 +++++--------- TestBench_hw/uplink_checker.vhd | 291 ++++++++ TestBench_hw/uplinkstimulis_top.vhd | 502 -------------- .../sources_1/ip/jtag_axi_0/jtag_axi_0.xci | 58 -- .../sources_1/ip/vio_0/vio_0.xci | 113 +-- Vivado/lpgbt-fpga-kcu105.xpr | 275 +------- 60 files changed, 2023 insertions(+), 5101 deletions(-) delete mode 100644 TestBench_hw/LpGBT_model/dataPath.v delete mode 100644 TestBench_hw/LpGBT_model/dataPathFecCounter.v delete mode 100644 TestBench_hw/LpGBT_model/descrambler36bitOrder36.v delete mode 100644 TestBench_hw/LpGBT_model/downLinkDataPath.v delete mode 100644 TestBench_hw/LpGBT_model/downLinkDeinterleaver.v delete mode 100644 TestBench_hw/LpGBT_model/downLinkFECDecoder.v delete mode 100644 TestBench_hw/LpGBT_model/gf_add_3.v delete mode 100644 TestBench_hw/LpGBT_model/gf_add_4.v delete mode 100644 TestBench_hw/LpGBT_model/gf_add_5.v delete mode 100644 TestBench_hw/LpGBT_model/gf_inv_3.v delete mode 100644 TestBench_hw/LpGBT_model/gf_inv_5.v delete mode 100644 TestBench_hw/LpGBT_model/gf_log_3.v delete mode 100644 TestBench_hw/LpGBT_model/gf_log_5.v delete mode 100644 TestBench_hw/LpGBT_model/gf_multBy2_3.v delete mode 100644 TestBench_hw/LpGBT_model/gf_multBy2_4.v delete mode 100644 TestBench_hw/LpGBT_model/gf_multBy2_5.v delete mode 100644 TestBench_hw/LpGBT_model/gf_multBy3_4.v delete mode 100644 TestBench_hw/LpGBT_model/gf_multBy3_5.v delete mode 100644 TestBench_hw/LpGBT_model/gf_mult_3.v delete mode 100644 TestBench_hw/LpGBT_model/gf_mult_4.v delete mode 100644 TestBench_hw/LpGBT_model/gf_mult_5.v delete mode 100644 TestBench_hw/LpGBT_model/rs_decoder_N7K5.v delete mode 100644 TestBench_hw/LpGBT_model/rs_encoder_N15K13.v delete mode 100644 TestBench_hw/LpGBT_model/rs_encoder_N31K29.v delete mode 100644 TestBench_hw/LpGBT_model/scrambler51bitOrder49.v delete mode 100644 TestBench_hw/LpGBT_model/scrambler53bitOrder49.v delete mode 100644 TestBench_hw/LpGBT_model/scrambler58bitOrder58.v delete mode 100644 TestBench_hw/LpGBT_model/scrambler60bitOrder58.v delete mode 100644 TestBench_hw/LpGBT_model/upLinkDataPath.v delete mode 100644 TestBench_hw/LpGBT_model/upLinkDataSelect.v delete mode 100644 TestBench_hw/LpGBT_model/upLinkFECEncoder.v delete mode 100644 TestBench_hw/LpGBT_model/upLinkInterleaver.v delete mode 100644 TestBench_hw/LpGBT_model/upLinkScrambler.v delete mode 100644 TestBench_hw/datarouter_top.vhd delete mode 100644 TestBench_hw/downlinkstimulis_top.vhd delete mode 100644 TestBench_hw/jtag_controller/jtag_controller_top.vhd delete mode 100644 TestBench_hw/jtag_controller/lpgbt_axi_control.vhd create mode 100644 TestBench_hw/lpgbt_downlinkGenerator.vhd delete mode 100644 TestBench_hw/lpgbtemul_top.vhd create mode 100644 TestBench_hw/prbs/prbs7_16b_checker.vhd create mode 100644 TestBench_hw/prbs/prbs7_1b_checker.vhd create mode 100644 TestBench_hw/prbs/prbs7_1b_generator.vhd create mode 100644 TestBench_hw/prbs/prbs7_2b_checker.vhd create mode 100644 TestBench_hw/prbs/prbs7_2b_generator.vhd create mode 100644 TestBench_hw/prbs/prbs7_32b_checker.vhd create mode 100644 TestBench_hw/prbs/prbs7_4b_checker.vhd create mode 100644 TestBench_hw/prbs/prbs7_4b_generator.vhd create mode 100644 TestBench_hw/prbs/prbs7_64b_generator.vhd create mode 100644 TestBench_hw/prbs/prbs7_8b_checker.vhd create mode 100644 TestBench_hw/prbs/prbs7_8b_generator.vhd delete mode 100644 TestBench_hw/resetgen_top.vhd create mode 100644 TestBench_hw/uplink_checker.vhd delete mode 100644 TestBench_hw/uplinkstimulis_top.vhd delete mode 100644 Vivado/lpgbt-fpga-kcu105.srcs/sources_1/ip/jtag_axi_0/jtag_axi_0.xci diff --git a/Constraints/kcu105_clks.xdc b/Constraints/kcu105_clks.xdc index 5be94bc..bd54a04 100644 --- a/Constraints/kcu105_clks.xdc +++ b/Constraints/kcu105_clks.xdc @@ -33,25 +33,15 @@ create_clock -period 3.125 -name SMA_MGT_REFCLK [get_ports SMA_MGT_REFCLK_P] set_property RXSLIDE_MODE PMA [get_cells -hier -filter {NAME =~ *GTHE3_CHANNEL_PRIM_INST}] -set_property LOC GTHE3_CHANNEL_X0Y9 [get_cells -hierarchical -filter {NAME =~ *lpgbtemul_top_inst*gen_channel_container[0].*gen_gthe3_channel_inst[0].GTHE3_CHANNEL_PRIM_INST}] -set_property LOC GTHE3_CHANNEL_X0Y10 [get_cells -hierarchical -filter {NAME =~ *lpgbtFpga_top_inst*gen_channel_container[0].*gen_gthe3_channel_inst[0].GTHE3_CHANNEL_PRIM_INST}] -##===================================================================================================## -##===================================================================================================## +##====================## +## TIMING CONSTRAINTS ## +##====================## +# Multicycle constraints set_multicycle_path 3 -from [get_pins {lpgbtFpga_top_inst/LpGBT_FPGA_Uplink_datapath_inst/uplinkFrame_pipelined_s_reg[*]/C}] -setup set_multicycle_path 2 -from [get_pins {lpgbtFpga_top_inst/LpGBT_FPGA_Uplink_datapath_inst/uplinkFrame_pipelined_s_reg[*]/C}] -hold set_multicycle_path 3 -from [get_pins -hierarchical -filter {NAME =~ lpgbtFpga_top_inst/LpGBT_FPGA_Uplink_datapath_inst*descrambledData_reg[*]/C}] -setup set_multicycle_path 2 -from [get_pins -hierarchical -filter {NAME =~ lpgbtFpga_top_inst/LpGBT_FPGA_Uplink_datapath_inst*descrambledData_reg[*]/C}] -hold -#Debug: no need to constraint the design for debug -set_false_path -to [get_pins -hierarchical -filter {NAME =~ *ila_core_inst*/D}] -#Debug: no need to constraint the design for static signal (status) -set_false_path -to [get_pins uplinkstimulis_top_inst/uplink_error_o_reg/D] -#Ready status: false route - timing is not critical for asynchronous reset (long duration) -set_false_path -from [get_pins lpgbtemul_top_inst/mgt_framealigner_inst/sta_headerLocked_s_reg/C] - -set_multicycle_path 5 -from [get_pins {lpgbtemul_top_inst/rxGearbox_inst/dat_outFrame_o_reg[*]/C}] -setup -set_multicycle_path 4 -from [get_pins {lpgbtemul_top_inst/rxGearbox_inst/dat_outFrame_o_reg[*]/C}] -hold - -set_multicycle_path 2 -from [get_pins -hierarchical -filter {NAME =~ lpgbtemul_top_inst*LpGBT_Model_dataPath_inst*scrambledData_reg[*]/C}] -setup -set_multicycle_path 1 -from [get_pins -hierarchical -filter {NAME =~ lpgbtemul_top_inst*LpGBT_Model_dataPath_inst*scrambledData_reg[*]/C}] -hold +set_multicycle_path -setup -to [get_pins -hierarchical -filter {NAME =~ lpgbtFpga_top_inst/LpGBT_FPGA_dataPath_inst/scrambler36bitOrder36_inst/scrambledData*/D}] 3 +set_multicycle_path -hold -to [get_pins -hierarchical -filter {NAME =~ lpgbtFpga_top_inst/LpGBT_FPGA_dataPath_inst/scrambler36bitOrder36_inst/scrambledData*/D}] 2 \ No newline at end of file diff --git a/Constraints/kcu105_io.xdc b/Constraints/kcu105_io.xdc index 484d098..4b96dac 100644 --- a/Constraints/kcu105_io.xdc +++ b/Constraints/kcu105_io.xdc @@ -25,19 +25,12 @@ set_property PACKAGE_PIN T2 [get_ports SFP0_RX_P] set_property PACKAGE_PIN T1 [get_ports SFP0_RX_N] set_property PACKAGE_PIN U4 [get_ports SFP0_TX_P] -set_property PACKAGE_PIN V2 [get_ports SFP1_RX_P] -set_property PACKAGE_PIN V1 [get_ports SFP1_RX_N] -set_property PACKAGE_PIN W4 [get_ports SFP1_TX_P] -set_property PACKAGE_PIN W3 [get_ports SFP1_TX_N] - ## SFP CONTROL: ##------------- # IO_0_12 set_property PACKAGE_PIN AL8 [get_ports SFP0_TX_DISABLE] set_property IOSTANDARD LVCMOS18 [get_ports SFP0_TX_DISABLE] -set_property PACKAGE_PIN AM9 [get_ports SFP1_TX_DISABLE] -set_property IOSTANDARD LVCMOS18 [get_ports SFP1_TX_DISABLE] ##====================## ## SIGNALS FORWARDING ## @@ -53,15 +46,4 @@ set_property SLEW FAST [get_ports USER_SMA_GPIO_P] set_property PACKAGE_PIN G27 [get_ports USER_SMA_GPIO_N] set_property IOSTANDARD LVCMOS18 [get_ports USER_SMA_GPIO_N] -set_property SLEW FAST [get_ports USER_SMA_GPIO_N] - -##===================================================================================================## -##===================================================================================================## - -#set_false_path -to [get_pins -hier -filter {NAME =~ *debug*/D}] -#set_false_path -to [get_pins -hier -filter {NAME =~ *debug*/D}] - -#set_false_path -from [get_pins -hier -filter {NAME =~ vio*}] -#set_false_path -to [get_pins -hier -filter {NAME =~ vio*}] - -#set_multicycle_path -end -from [get_pins -hier -filter {NAME =~lpgbtFpga_top_inst/rxGearbox_5g12_inst/dat_outFrame_o_reg[*]/C}] -to [get_pins -hier -filter {NAME =~uplinkstimulis_top_inst/*/D}] 8 \ No newline at end of file +set_property SLEW FAST [get_ports USER_SMA_GPIO_N] \ No newline at end of file diff --git a/TestBench_hw/LpGBT_model/dataPath.v b/TestBench_hw/LpGBT_model/dataPath.v deleted file mode 100644 index e5e5471..0000000 --- a/TestBench_hw/LpGBT_model/dataPath.v +++ /dev/null @@ -1,152 +0,0 @@ -/* ***************************************************************************** - * lpGBTX * - * Copyright (C) 2011-2016 GBTX Team, CERN * - * * - * This IP block is free for HEP experiments and other scientific research * - * purposes. Commercial exploitation of a chip containing the IP is not * - * permitted. You can not redistribute the IP without written permission * - * from the authors. Any modifications of the IP have to be communicated back * - * to the authors. The use of the IP should be acknowledged in publications, * - * public presentations, user manual, and other documents. * - * * - * This IP is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * - * FOR A PARTICULAR PURPOSE. * - * * - ******************************************************************************* - * - * file: downLinkDeinterleaver.v - * - * downLinkDeinterleaver - * - * History: - * 2016/05/20 Szymon Kulis : Created - * 2016/12/20 Szymon Kulis : Data muxing (bert) removed - * - **/ - -module LpGBT_Model_dataPath ( - // Clocks inputs: - input downClki, - input upClki, - input upLinkDataPathEnable, - input downLinkDataPathEnable, - - // ------------------------------------------------------------------------- - // - Down link ------------------------------------------------------------- - // ------------------------------------------------------------------------- - // data input - input [63:0] downLinkFrame, - - // data outputs - output [15:0] downLinkDataGroup0, - output [15:0] downLinkDataGroup1, - output [1:0] downLinkDataEc, - output [1:0] downLinkDataIc, - output [3:0] downLinkHeader, - // control signals - input downLinkBypassDeinterleaver, - input downLinkBypassFECDecoder, - input downLinkBypassDescsrambler, - // -- fec counter -- - input enableFECErrCounter, - output [15:0] fecCorrectionCount, - - // ------------------------------------------------------------------------- - // - Up link --------------------------------------------------------------- - // ------------------------------------------------------------------------- - // input data: - input [31:0] upLinkData0, - input [31:0] upLinkData1, - input [31:0] upLinkData2, - input [31:0] upLinkData3, - input [31:0] upLinkData4, - input [31:0] upLinkData5, - input [31:0] upLinkData6, - input [1:0] upLinkDataIC, - input [1:0] upLinkDataEC, - - // controll signals - input upLinkScramblerBypass, - input upLinkScramblerReset, - input upLinkFecBypass, - input upLinkInterleaverBypass, - input fecMode, - input txDataRate, - - // output data - output [255:0] upLinkFrame -); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg default triplicate -// tmrg do_not_triplicate upLinkFrame -// tmrg do_not_triplicate downLinkFrame -// -------------------------------------------------------------------------- // - - wire upLinkClk = upClki & upLinkDataPathEnable; - wire downLinkClk = downClki & downLinkDataPathEnable; - - wire [31:0] downLinkData; - assign downLinkDataGroup1=downLinkData[31:16]; - assign downLinkDataGroup0=downLinkData[15:0]; - - downLinkDataPath DLDP ( - .bypassDeinterleaver(downLinkBypassDeinterleaver), - .bypassDescrambler(downLinkBypassDescsrambler), - .bypassFECDecoder(downLinkBypassFECDecoder), - .clk(downLinkClk), - .dataEC(downLinkDataEc), - .dataIC(downLinkDataIc), - .dataOut(downLinkData), - .downLinkFrame(downLinkFrame), - .enableFECErrCounter(enableFECErrCounter), - .fecCorrectionCount(fecCorrectionCount), - .header(downLinkHeader) - ); - - wire [5:0] txDummyFec5 = 6'b001100;// TODO FIXME check the values !! - wire [9:0] txDummyFec12= 10'b0101010101;// TODO FIXME check the values !! - wire [111:0] upLinkDataLow, upLinkDataHigh; - - assign upLinkDataLow[0+:16] = upLinkData0[0 +: 16]; - assign upLinkDataLow[16+:16] = upLinkData1[0 +: 16]; - assign upLinkDataLow[32+:16] = upLinkData2[0 +: 16]; - assign upLinkDataLow[48+:16] = upLinkData3[0 +: 16]; - assign upLinkDataLow[64+:16] = upLinkData4[0 +: 16]; - assign upLinkDataLow[80+:16] = upLinkData5[0 +: 16]; - assign upLinkDataLow[96+:16] = upLinkData6[0 +: 16]; - - assign upLinkDataHigh[0+:16] = upLinkData0[16+: 16]; - assign upLinkDataHigh[16+:16] = upLinkData1[16+: 16]; - assign upLinkDataHigh[32+:16] = upLinkData2[16+: 16]; - assign upLinkDataHigh[48+:16] = upLinkData3[16+: 16]; - assign upLinkDataHigh[64+:16] = upLinkData4[16+: 16]; - assign upLinkDataHigh[80+:16] = upLinkData5[16+: 16]; - assign upLinkDataHigh[96+:16] = upLinkData6[16+: 16]; - - upLinkDataPath ULDP ( - .clk40M(upLinkClk), - .txData0(upLinkData0), - .txData1(upLinkData1), - .txData2(upLinkData2), - .txData3(upLinkData3), - .txData4(upLinkData4), - .txData5(upLinkData5), - .txData6(upLinkData6), - .txIC(upLinkDataIC), - .txEC(upLinkDataEC), - .txDummyFec5(6'd0), - .txDummyFec12(10'd0), - .scramblerBypass(upLinkScramblerBypass), - .interleaverBypass(upLinkInterleaverBypass), - .fecBypass(upLinkFecBypass), - .fecMode(fecMode), - .txDataRate(txDataRate), - .scramblerReset(upLinkScramblerReset), - .upLinkFrame(upLinkFrame) - ); - -endmodule diff --git a/TestBench_hw/LpGBT_model/dataPathFecCounter.v b/TestBench_hw/LpGBT_model/dataPathFecCounter.v deleted file mode 100644 index 759dc7b..0000000 --- a/TestBench_hw/LpGBT_model/dataPathFecCounter.v +++ /dev/null @@ -1,64 +0,0 @@ -/** **************************************************************************** - * lpGBTX * - * Copyright (C) 2011-2016 GBTX Team, CERN * - * * - * This IP block is free for HEP experiments and other scientific research * - * purposes. Commercial exploitation of a chip containing the IP is not * - * permitted. You can not redistribute the IP without written permission * - * from the authors. Any modifications of the IP have to be communicated back * - * to the authors. The use of the IP should be acknowledged in publications, * - * public presentations, user manual, and other documents. * - * * - * This IP is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * - * FOR A PARTICULAR PURPOSE. * - * * - ******************************************************************************* - * - * file: upCounter.v - * - * upCounter - * - * History: - * 2016/05/21 Szymon Kulis : Created - * - **/ - -module dataPathFecCounter( - input enable, - input clk, - input [15:0] addValue, - output reg [15:0] count -); - // tmrg do_not_touch - reg clkGate; - wire rst=!enable; - wire clkGated=clk&clkGate; - wire enableVoted=enable; - reg [16:0] countNext; - wire [16:0] countNextVoted=countNext; - - // latch for clock gate - always @(clk or enable) - if(!clk) - clkGate=enable; - - // counter register - always @(posedge clk or posedge rst) - if (rst) - count <= 16'b0; - else - count <= countNextVoted; - - // next state logic - always @(count or enable or addValue) - begin - if (!enable) - countNext=0; - else - countNext=count+addValue; - if (countNext>17'hffff) - countNext=17'hffff; - end - -endmodule diff --git a/TestBench_hw/LpGBT_model/descrambler36bitOrder36.v b/TestBench_hw/LpGBT_model/descrambler36bitOrder36.v deleted file mode 100644 index 757ff7d..0000000 --- a/TestBench_hw/LpGBT_model/descrambler36bitOrder36.v +++ /dev/null @@ -1,38 +0,0 @@ -/* Module: Descrambler36bitOrder36 */ -/* Created: Paulo Moreira, 2015/09/15 */ -/* Institute: CERN */ -/* Version: 1.0 */ - -/* Descrambler width: 36 - bits */ -/* Descrambler order: 36 */ -/* Recursive equation used for the scrambler: Si = Di xnor Si-25 xnor Si-36 */ - -`timescale 1 ps / 1 ps - -module descrambler36bitOrder36( - input [35:0] scrambledData, - input clock, - input bypass, - output reg [35:0] descrambledData - ); - -reg [35:0] memoryRegister; -wire [35:0] iMemoryRegister; -wire [35:0] iMemoryRegisterVoted = iMemoryRegister; - -wire [35:0] iDescrambledData; -wire [35:0] iDescrambledDataVoted = iDescrambledData; - -always @(posedge clock) - begin - memoryRegister <= iMemoryRegisterVoted; - descrambledData <= iDescrambledDataVoted; - end - -// Descrambler polynomial and bypass mux -assign - iDescrambledData[35:25] = (bypass)? scrambledData[35:25] : scrambledData[35:25] ~^ scrambledData[10:0] ~^ memoryRegister[35:25], - iDescrambledData[24:0] = (bypass)? scrambledData[34:0] : scrambledData[24:0] ~^ memoryRegister[35:11] ~^ memoryRegister[24:0], - iMemoryRegister[35:0] = (bypass)? 36'h000000000 : scrambledData[35:0]; - -endmodule diff --git a/TestBench_hw/LpGBT_model/downLinkDataPath.v b/TestBench_hw/LpGBT_model/downLinkDataPath.v deleted file mode 100644 index 910e250..0000000 --- a/TestBench_hw/LpGBT_model/downLinkDataPath.v +++ /dev/null @@ -1,106 +0,0 @@ -/** **************************************************************************** - * lpGBTX * - * Copyright (C) 2011-2016 GBTX Team, CERN * - * * - * This IP block is free for HEP experiments and other scientific research * - * purposes. Commercial exploitation of a chip containing the IP is not * - * permitted. You can not redistribute the IP without written permission * - * from the authors. Any modifications of the IP have to be communicated back * - * to the authors. The use of the IP should be acknowledged in publications, * - * public presentations, user manual, and other documents. * - * * - * This IP is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * - * FOR A PARTICULAR PURPOSE. * - * * - ******************************************************************************* - * - * file: downLinkDeinterleaver.v - * - * downLinkDeinterleaver - * - * History: - * 2016/05/20 Szymon Kulis : Created - * 2016/11/02 José Fonseca : Modified - * - **/ - -module downLinkDataPath ( - // Clocks inputs: - input clk, - - // data input - input [63:0] downLinkFrame, - - // data outputs - output [31:0] dataOut, - output [1:0] dataEC, - output [1:0] dataIC, - output [3:0] header, - - // control signals - input bypassDeinterleaver, - input bypassFECDecoder, - input bypassDescrambler, - - // -- fec counter -- - input enableFECErrCounter, - output [15:0] fecCorrectionCount - ); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg default triplicate -// tmrg do_not_triplicate downLinkFrame -// -------------------------------------------------------------------------- // - - - wire [35:0] dataDeint; - wire [23:0] fecDeint; - wire [35:0] decData; - reg [35:0] decDataReg; - wire [35:0] descrambledData; - reg [63:0] downLinkFrameReg; - - downLinkDeinterleaver DLD ( - .bypass(bypassDeinterleaver), - .downLinkFrame(downLinkFrame), - .data(dataDeint), - .fec(fecDeint) - ); - - downLinkFECDecoder DLFD ( - .clk(clk), - .bypass(bypassFECDecoder), - .enableFECErrCounter(enableFECErrCounter), - .data(dataDeint), - .fec(fecDeint), - .dataOut(decData), - .fecCorrectionCount(fecCorrectionCount) - ); - - descrambler36bitOrder36 DES ( - .bypass(bypassDescrambler), - .clock(clk), - .scrambledData(decData), - .descrambledData(descrambledData) - ); -/* - downLinkBERT DLBERT( - .enable(enableBERT), - .clk(clk40M), - .dataIn(descrambledData[31:0]), - .pattern(bertPattern), - .errCount(bertCount) - ); -*/ - assign dataOut = descrambledData[31:0]; - assign dataEC = descrambledData[33:32]; - assign dataIC = descrambledData[35:34]; - - -// assign header = downLinkFrame[63:60]; // version with the header in front - assign header = {downLinkFrame[63],downLinkFrame[61],downLinkFrame[59],downLinkFrame[57]}; // header interleaved with data for DC balance - -endmodule diff --git a/TestBench_hw/LpGBT_model/downLinkDeinterleaver.v b/TestBench_hw/LpGBT_model/downLinkDeinterleaver.v deleted file mode 100644 index c235b18..0000000 --- a/TestBench_hw/LpGBT_model/downLinkDeinterleaver.v +++ /dev/null @@ -1,57 +0,0 @@ -/** **************************************************************************** - * lpGBTX * - * Copyright (C) 2011-2016 GBTX Team, CERN * - * * - * This IP block is free for HEP experiments and other scientific research * - * purposes. Commercial exploitation of a chip containing the IP is not * - * permitted. You can not redistribute the IP without written permission * - * from the authors. Any modifications of the IP have to be communicated back * - * to the authors. The use of the IP should be acknowledged in publications, * - * public presentations, user manual, and other documents. * - * * - * This IP is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * - * FOR A PARTICULAR PURPOSE. * - * * - ******************************************************************************* - * - * file: downLinkDeinterleaver.v - * - * downLinkDeinterleaver - * - * History: - * 2016/05/20 Szymon Kulis : Created - * 2016/11/02 José Fonseca : Modified - * - **/ - -module downLinkDeinterleaver ( - input bypass, - input [63:0] downLinkFrame, - output [35:0] data, - output [23:0] fec - ); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // - -// -------------------------------------------------------------------------- // - - // Code 0 - assign data[8:0] = (bypass) ? downLinkFrame[32:24] : {downLinkFrame[50:48], downLinkFrame[38:36], downLinkFrame[26:24]}; - assign fec[5:0] = (bypass) ? downLinkFrame[5:0] : {downLinkFrame[14:12], downLinkFrame[2:0]}; - - // Code 1 - assign data[17:9] = (bypass) ? downLinkFrame[41:33] : {downLinkFrame[53:51], downLinkFrame[41:39], downLinkFrame[29:27]}; - assign fec[11:6] = (bypass) ? downLinkFrame[11:6] : {downLinkFrame[17:15], downLinkFrame[5:3]}; - - // Code 2 - assign data[26:18] = (bypass) ? downLinkFrame[50:42] : {downLinkFrame[56:54], downLinkFrame[44:42], downLinkFrame[32:30]}; - assign fec[17:12] = (bypass) ? downLinkFrame[17:12] : {downLinkFrame[20:18], downLinkFrame[8:6]}; - - // Code 3 - assign data[35:27] = (bypass) ? {downLinkFrame[62], downLinkFrame[60], downLinkFrame[58], downLinkFrame[56:51]} : {downLinkFrame[62], downLinkFrame[60], downLinkFrame[58], downLinkFrame[47:45], downLinkFrame[35:33]}; - assign fec[23:18] = (bypass) ? downLinkFrame[23:18] : {downLinkFrame[23:21], downLinkFrame[11:9]}; - -endmodule diff --git a/TestBench_hw/LpGBT_model/downLinkFECDecoder.v b/TestBench_hw/LpGBT_model/downLinkFECDecoder.v deleted file mode 100644 index 8b4e982..0000000 --- a/TestBench_hw/LpGBT_model/downLinkFECDecoder.v +++ /dev/null @@ -1,98 +0,0 @@ -/** **************************************************************************** - * lpGBTX * - * Copyright (C) 2011-2016 GBTX Team, CERN * - * * - * This IP block is free for HEP experiments and other scientific research * - * purposes. Commercial exploitation of a chip containing the IP is not * - * permitted. You can not redistribute the IP without written permission * - * from the authors. Any modifications of the IP have to be communicated back * - * to the authors. The use of the IP should be acknowledged in publications, * - * public presentations, user manual, and other documents. * - * * - * This IP is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * - * FOR A PARTICULAR PURPOSE. * - * * - ******************************************************************************* - * - * file: downLinkFECDecoder.v - * - * downLinkFECDecoder - * - * History: - * 2016/05/20 Szymon Kulis : Created - * 2016/11/02 José Fonseca : Modified - * - **/ - -module downLinkFECDecoder ( - input clk, - input bypass, - input enableFECErrCounter, - input [35:0] data, - input [23:0] fec, - output [35:0] dataOut, - output [15:0] fecCorrectionCount -); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg do_not_touch -// -------------------------------------------------------------------------- // - - - wire [20:0] virtualFrame_C0; - wire [20:0] virtualFrame_C1; - wire [20:0] virtualFrame_C2; - wire [20:0] virtualFrame_C3; - wire [14:0] decData_C0; - wire [14:0] decData_C1; - wire [14:0] decData_C2; - wire [14:0] decData_C3; - wire [1:0] fecErrorSub0; - wire [1:0] fecErrorSub1; - wire [1:0] fecErrorSub2; - wire [1:0] fecErrorSub3; - - assign virtualFrame_C0 = {fec[5:0], 6'b0, data[8:0]}; - assign virtualFrame_C1 = {fec[11:6], 6'b0, data[17:9]}; - assign virtualFrame_C2 = {fec[17:12], 6'b0, data[26:18]}; - assign virtualFrame_C3 = {fec[23:18], 6'b0, data[35:27]}; - - rs_decoder_N7K5 RSD0 ( - .msgInput(virtualFrame_C0), - .error(fecErrorSub0), - .decMsg(decData_C0) - ); - - rs_decoder_N7K5 RSD1 ( - .msgInput(virtualFrame_C1), - .error(fecErrorSub1), - .decMsg(decData_C1) - ); - - rs_decoder_N7K5 RSD2 ( - .msgInput(virtualFrame_C2), - .error(fecErrorSub2), - .decMsg(decData_C2) - ); - - rs_decoder_N7K5 RSD3 ( - .msgInput(virtualFrame_C3), - .error(fecErrorSub3), - .decMsg(decData_C3) - ); - - wire [15:0] fecCounterAddValue = fecErrorSub0+fecErrorSub1+fecErrorSub2+fecErrorSub3; - - dataPathFecCounter EC( - .enable(enableFECErrCounter), - .clk(clk), - .addValue(fecCounterAddValue), - .count(fecCorrectionCount) - ); - - assign dataOut = (bypass) ? data : {decData_C3[8:0], decData_C2[8:0], decData_C1[8:0], decData_C0[8:0]}; - -endmodule diff --git a/TestBench_hw/LpGBT_model/gf_add_3.v b/TestBench_hw/LpGBT_model/gf_add_3.v deleted file mode 100644 index fc95a55..0000000 --- a/TestBench_hw/LpGBT_model/gf_add_3.v +++ /dev/null @@ -1,15 +0,0 @@ -module gf_add_3(op1, op2, res); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg do_not_touch -// -------------------------------------------------------------------------- // - - input [2:0] op1; - input [2:0] op2; - output [2:0] res; - - assign res = op1 ^ op2; - -endmodule diff --git a/TestBench_hw/LpGBT_model/gf_add_4.v b/TestBench_hw/LpGBT_model/gf_add_4.v deleted file mode 100644 index d9dfd52..0000000 --- a/TestBench_hw/LpGBT_model/gf_add_4.v +++ /dev/null @@ -1,15 +0,0 @@ -module gf_add_4(op1, op2, res); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg do_not_touch -// -------------------------------------------------------------------------- // - - input [3:0] op1; - input [3:0] op2; - output [3:0] res; - - assign res = op1 ^ op2; - -endmodule diff --git a/TestBench_hw/LpGBT_model/gf_add_5.v b/TestBench_hw/LpGBT_model/gf_add_5.v deleted file mode 100644 index c906d39..0000000 --- a/TestBench_hw/LpGBT_model/gf_add_5.v +++ /dev/null @@ -1,15 +0,0 @@ -module gf_add_5(op1, op2, res); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg do_not_touch -// -------------------------------------------------------------------------- // - - input [4:0] op1; - input [4:0] op2; - output [4:0] res; - - assign res = op1 ^ op2; - -endmodule diff --git a/TestBench_hw/LpGBT_model/gf_inv_3.v b/TestBench_hw/LpGBT_model/gf_inv_3.v deleted file mode 100644 index 943769b..0000000 --- a/TestBench_hw/LpGBT_model/gf_inv_3.v +++ /dev/null @@ -1,33 +0,0 @@ -module gf_inv_3(op, res); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg do_not_touch -// -------------------------------------------------------------------------- // - - input [2:0] op; - output reg [2:0] res; - - always @(op) begin - case(op) - 3'd0 : - res = 3'd0; - 3'd1 : - res = 3'd1; - 3'd2 : - res = 3'd5; - 3'd3 : - res = 3'd6; - 3'd4 : - res = 3'd7; - 3'd5 : - res = 3'd2; - 3'd6 : - res = 3'd3; - 3'd7 : - res = 3'd4; - endcase - end -endmodule - diff --git a/TestBench_hw/LpGBT_model/gf_inv_5.v b/TestBench_hw/LpGBT_model/gf_inv_5.v deleted file mode 100644 index bfeb7aa..0000000 --- a/TestBench_hw/LpGBT_model/gf_inv_5.v +++ /dev/null @@ -1,75 +0,0 @@ -module gf_inv_5(op, res); - - input [4:0] op; - output reg [4:0] res; - - always @(*) begin - case(op) - 5'd0 : - res = 5'd0; - 5'd1 : - res = 5'd1; - 5'd2 : - res = 5'd18; - 5'd3 : - res = 5'd28; - 5'd4 : - res = 5'd9; - 5'd5 : - res = 5'd23; - 5'd6 : - res = 5'd14; - 5'd7 : - res = 5'd12; - 5'd8 : - res = 5'd22; - 5'd9 : - res = 5'd4; - 5'd10 : - res = 5'd25; - 5'd11 : - res = 5'd16; - 5'd12 : - res = 5'd7; - 5'd13 : - res = 5'd15; - 5'd14 : - res = 5'd6; - 5'd15 : - res = 5'd13; - 5'd16 : - res = 5'd11; - 5'd17 : - res = 5'd24; - 5'd18 : - res = 5'd2; - 5'd19 : - res = 5'd29; - 5'd20 : - res = 5'd30; - 5'd21 : - res = 5'd26; - 5'd22 : - res = 5'd8; - 5'd23 : - res = 5'd5; - 5'd24 : - res = 5'd17; - 5'd25 : - res = 5'd10; - 5'd26 : - res = 5'd21; - 5'd27 : - res = 5'd31; - 5'd28 : - res = 5'd3; - 5'd29 : - res = 5'd19; - 5'd30 : - res = 5'd20; - 5'd31 : - res = 5'd27; - endcase - end -endmodule - diff --git a/TestBench_hw/LpGBT_model/gf_log_3.v b/TestBench_hw/LpGBT_model/gf_log_3.v deleted file mode 100644 index 32901b9..0000000 --- a/TestBench_hw/LpGBT_model/gf_log_3.v +++ /dev/null @@ -1,66 +0,0 @@ -module gf_log_3(op, err, res); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg do_not_touch -// -------------------------------------------------------------------------- // - - input [2:0] op; - output reg err; - output reg [2:0] res; - - always @(op) begin - case(op) - 3'd0 : - begin - err = 1; - res = 3'd0; - end - - 3'd1 : - begin - err = 0; - res = 3'd0; - end - - 3'd2 : - begin - err = 0; - res = 3'd1; - end - - 3'd3 : - begin - err = 0; - res = 3'd3; - end - - 3'd4 : - begin - err = 0; - res = 3'd2; - end - - 3'd5 : - begin - err = 0; - res = 3'd6; - end - - 3'd6 : - begin - err = 0; - res = 3'd4; - end - - 3'd7 : - begin - err = 0; - res = 3'd5; - end - - endcase - end -endmodule - diff --git a/TestBench_hw/LpGBT_model/gf_log_5.v b/TestBench_hw/LpGBT_model/gf_log_5.v deleted file mode 100644 index 95b75c1..0000000 --- a/TestBench_hw/LpGBT_model/gf_log_5.v +++ /dev/null @@ -1,203 +0,0 @@ -module gf_log_5(op, err, res); - - input [4:0] op; - output reg err; - output reg [4:0] res; - - always @(*) begin - case(op) - 5'd0 : - begin - err = 1; - res = 5'd0; - end - - 5'd1 : - begin - err = 0; - res = 5'd0; - end - - 5'd2 : - begin - err = 0; - res = 5'd1; - end - - 5'd3 : - begin - err = 0; - res = 5'd18; - end - - 5'd4 : - begin - err = 0; - res = 5'd2; - end - - 5'd5 : - begin - err = 0; - res = 5'd5; - end - - 5'd6 : - begin - err = 0; - res = 5'd19; - end - - 5'd7 : - begin - err = 0; - res = 5'd11; - end - - 5'd8 : - begin - err = 0; - res = 5'd3; - end - - 5'd9 : - begin - err = 0; - res = 5'd29; - end - - 5'd10 : - begin - err = 0; - res = 5'd6; - end - - 5'd11 : - begin - err = 0; - res = 5'd27; - end - - 5'd12 : - begin - err = 0; - res = 5'd20; - end - - 5'd13 : - begin - err = 0; - res = 5'd8; - end - - 5'd14 : - begin - err = 0; - res = 5'd12; - end - - 5'd15 : - begin - err = 0; - res = 5'd23; - end - - 5'd16 : - begin - err = 0; - res = 5'd4; - end - - 5'd17 : - begin - err = 0; - res = 5'd10; - end - - 5'd18 : - begin - err = 0; - res = 5'd30; - end - - 5'd19 : - begin - err = 0; - res = 5'd17; - end - - 5'd20 : - begin - err = 0; - res = 5'd7; - end - - 5'd21 : - begin - err = 0; - res = 5'd22; - end - - 5'd22 : - begin - err = 0; - res = 5'd28; - end - - 5'd23 : - begin - err = 0; - res = 5'd26; - end - - 5'd24 : - begin - err = 0; - res = 5'd21; - end - - 5'd25 : - begin - err = 0; - res = 5'd25; - end - - 5'd26 : - begin - err = 0; - res = 5'd9; - end - - 5'd27 : - begin - err = 0; - res = 5'd16; - end - - 5'd28 : - begin - err = 0; - res = 5'd13; - end - - 5'd29 : - begin - err = 0; - res = 5'd14; - end - - 5'd30 : - begin - err = 0; - res = 5'd24; - end - - 5'd31 : - begin - err = 0; - res = 5'd15; - end - endcase - end -endmodule - diff --git a/TestBench_hw/LpGBT_model/gf_multBy2_3.v b/TestBench_hw/LpGBT_model/gf_multBy2_3.v deleted file mode 100644 index 1e692b7..0000000 --- a/TestBench_hw/LpGBT_model/gf_multBy2_3.v +++ /dev/null @@ -1,16 +0,0 @@ -module gf_multBy2_3(op, res); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg do_not_touch -// -------------------------------------------------------------------------- // - - input [2:0] op; - output reg [2:0] res; - - always @(op) begin - res = {op[1], op[0]^op[2], op[2]}; - end - -endmodule diff --git a/TestBench_hw/LpGBT_model/gf_multBy2_4.v b/TestBench_hw/LpGBT_model/gf_multBy2_4.v deleted file mode 100644 index aed2592..0000000 --- a/TestBench_hw/LpGBT_model/gf_multBy2_4.v +++ /dev/null @@ -1,17 +0,0 @@ -module gf_multBy2_4(op, res); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg do_not_touch -// -------------------------------------------------------------------------- // - - input [3:0] op; - output [3:0] res; - - assign res[0] = op[3]; - assign res[1] = op[0] ^ op[3]; - assign res[2] = op[1]; - assign res[3] = op[2]; - -endmodule diff --git a/TestBench_hw/LpGBT_model/gf_multBy2_5.v b/TestBench_hw/LpGBT_model/gf_multBy2_5.v deleted file mode 100644 index 5bae606..0000000 --- a/TestBench_hw/LpGBT_model/gf_multBy2_5.v +++ /dev/null @@ -1,18 +0,0 @@ -module gf_multBy2_5(op, res); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg do_not_touch -// -------------------------------------------------------------------------- // - - input [4:0] op; - output [4:0] res; - - assign res[0] = op[4]; - assign res[1] = op[0]; - assign res[2] = op[1] ^ op[4]; - assign res[3] = op[2]; - assign res[4] = op[3]; - -endmodule diff --git a/TestBench_hw/LpGBT_model/gf_multBy3_4.v b/TestBench_hw/LpGBT_model/gf_multBy3_4.v deleted file mode 100644 index 2242c16..0000000 --- a/TestBench_hw/LpGBT_model/gf_multBy3_4.v +++ /dev/null @@ -1,17 +0,0 @@ -module gf_multBy3_4(op, res); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg do_not_touch -// -------------------------------------------------------------------------- // - - input [3:0] op; - output [3:0] res; - - assign res[0] = op[3] ^ op[0]; - assign res[1] = op[1] ^ op[0] ^ op[3]; - assign res[2] = op[2] ^ op[1]; - assign res[3] = op[3] ^ op[2]; - -endmodule diff --git a/TestBench_hw/LpGBT_model/gf_multBy3_5.v b/TestBench_hw/LpGBT_model/gf_multBy3_5.v deleted file mode 100644 index dd4e7f7..0000000 --- a/TestBench_hw/LpGBT_model/gf_multBy3_5.v +++ /dev/null @@ -1,18 +0,0 @@ -module gf_multBy3_5(op, res); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg do_not_touch -// -------------------------------------------------------------------------- // - - input [4:0] op; - output [4:0] res; - - assign res[0] = op[4] ^ op[0]; - assign res[1] = op[1] ^ op[0]; - assign res[2] = op[2] ^ op[1] ^ op[4]; - assign res[3] = op[3] ^ op[2]; - assign res[4] = op[4] ^ op[3]; - -endmodule diff --git a/TestBench_hw/LpGBT_model/gf_mult_3.v b/TestBench_hw/LpGBT_model/gf_mult_3.v deleted file mode 100644 index ed21551..0000000 --- a/TestBench_hw/LpGBT_model/gf_mult_3.v +++ /dev/null @@ -1,17 +0,0 @@ -module gf_mult_3(op1, op2, res); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg do_not_touch -// -------------------------------------------------------------------------- // - - input [2:0] op1; - input [2:0] op2; - output [2:0] res; - - assign res[0] = (op1[1] & op2[2]) ^ (op1[2] & op2[1]) ^ (op1[0] & op2[0]); - assign res[1] = (op1[1] & op2[0]) ^ (op1[0] & op2[1]) ^ (op1[2] & op2[1]) ^ (op1[1] & op2[2]) ^ (op1[2] & op2[2]); - assign res[2] = (op1[2] & op2[0]) ^ (op1[1] & op2[1]) ^ (op1[0] & op2[2]) ^ (op1[2] & op2[2]); - -endmodule diff --git a/TestBench_hw/LpGBT_model/gf_mult_4.v b/TestBench_hw/LpGBT_model/gf_mult_4.v deleted file mode 100644 index 1b9cac6..0000000 --- a/TestBench_hw/LpGBT_model/gf_mult_4.v +++ /dev/null @@ -1,12 +0,0 @@ -module gf_mult_4(op1, op2, res); - - input [3:0] op1; - input [3:0] op2; - output [3:0] res; - - assign res[0] = (op1[1] & op2[3]) ^ (op1[2] & op2[2]) ^ (op1[3] & op2[1]) ^ (op1[0] & op2[0]); - assign res[1] = (op1[1] & op2[0]) ^ (op1[0] & op2[1]) ^ (op1[3] & op2[1]) ^ (op1[2] & op2[2]) ^ (op1[3] & op2[2]) ^ (op1[1] & op2[3]) ^ (op1[2] & op2[3]); - assign res[2] = (op1[2] & op2[0]) ^ (op1[1] & op2[1]) ^ (op1[0] & op2[2]) ^ (op1[3] & op2[2]) ^ (op1[2] & op2[3]) ^ (op1[3] & op2[3]); - assign res[3] = (op1[3] & op2[0]) ^ (op1[2] & op2[1]) ^ (op1[1] & op2[2]) ^ (op1[0] & op2[3]) ^ (op1[3] & op2[3]); - -endmodule diff --git a/TestBench_hw/LpGBT_model/gf_mult_5.v b/TestBench_hw/LpGBT_model/gf_mult_5.v deleted file mode 100644 index c691227..0000000 --- a/TestBench_hw/LpGBT_model/gf_mult_5.v +++ /dev/null @@ -1,13 +0,0 @@ -module gf_mult_5(op1, op2, res); - - input [4:0] op1; - input [4:0] op2; - output [4:0] res; - - assign res[0] = (((((op1[4] & op2[4]) ^ (op1[1] & op2[4])) ^ (op1[2] & op2[3])) ^ (op1[3] & op2[2])) ^ (op1[4] & op2[1])) ^ (op1[0] & op2[0]); - assign res[1] = ((((op1[1] & op2[0]) ^ (op1[0] & op2[1])) ^ (op1[4] & op2[2])) ^ (op1[3] & op2[3])) ^ (op1[2] & op2[4]); - assign res[2] = (((((((((op1[2] & op2[0]) ^ (op1[1] & op2[1])) ^ (op1[4] & op2[1])) ^ (op1[0] & op2[2])) ^ (op1[3] & op2[2])) ^ (op1[2] & op2[3])) ^ (op1[4] & op2[3])) ^ (op1[1] & op2[4])) ^ (op1[3] & op2[4])) ^ (op1[4] & op2[4]); - assign res[3] = (((((((op1[3] & op2[0]) ^ (op1[2] & op2[1])) ^ (op1[1] & op2[2])) ^ (op1[4] & op2[2])) ^ (op1[0] & op2[3])) ^ (op1[3] & op2[3])) ^ (op1[2] & op2[4])) ^ (op1[4] & op2[4]); - assign res[4] = ((((((op1[4] & op2[0]) ^ (op1[3] & op2[1])) ^ (op1[2] & op2[2])) ^ (op1[1] & op2[3])) ^ (op1[4] & op2[3])) ^ (op1[0] & op2[4])) ^ (op1[3] & op2[4]); - -endmodule diff --git a/TestBench_hw/LpGBT_model/rs_decoder_N7K5.v b/TestBench_hw/LpGBT_model/rs_decoder_N7K5.v deleted file mode 100644 index 86c9770..0000000 --- a/TestBench_hw/LpGBT_model/rs_decoder_N7K5.v +++ /dev/null @@ -1,136 +0,0 @@ -/** **************************************************************************** - * lpGBTX * - * Copyright (C) 2011-2016 GBTX Team, CERN * - * * - * This IP block is free for HEP experiments and other scientific research * - * purposes. Commercial exploitation of a chip containing the IP is not * - * permitted. You can not redistribute the IP without written permission * - * from the authors. Any modifications of the IP have to be communicated back * - * to the authors. The use of the IP should be acknowledged in publications, * - * public presentations, user manual, and other documents. * - * * - * This IP is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * - * FOR A PARTICULAR PURPOSE. * - * * - ******************************************************************************* - * - * file: rs_decoder_N7K5.v - * - * rs_decoder_N7K5 - * - * History: - * 2016/09 José Fonseca : Created - * 2016/10/06 José Fonseca : Concluded - * - **/ - -module rs_decoder_N7K5(msgInput, error, decMsg); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg do_not_touch -// -------------------------------------------------------------------------- // - - parameter N = 7; - parameter K = 5; - parameter m = 3; - parameter INP_BW = N*m; - parameter OUT_BW = K*m; - - // IO definitions - input [INP_BW-1:0] msgInput; - output [1:0] error; - output reg [OUT_BW-1:0] decMsg; - - // Connection wires and regs - wire [m-1:0] outSt1; - wire [m-1:0] outSt2; - wire [m-1:0] outSt3; - wire [m-1:0] outSt4; - wire [m-1:0] outSt5; - wire [m-1:0] outSt6; - wire [m-1:0] outAdd0; - wire [m-1:0] outAdd1; - wire [m-1:0] outAdd2; - wire [m-1:0] outAdd3; - wire [m-1:0] outAdd4; - wire [m-1:0] outAdd5; - wire [m-1:0] outMult0; - wire [m-1:0] outMult1; - wire [m-1:0] outMult2; - wire [m-1:0] outMult3; - wire [m-1:0] outMult4; - wire [m-1:0] outMult5; - wire [m-1:0] outMult6; - wire [m-1:0] syndr0; - wire [m-1:0] syndr1; - wire [m-1:0] syndr0_inv; - wire [m-1:0] syndrProd; - wire [m-1:0] errorPos; - - // Evaluating the first syndrome - gf_add_3 ADD_0 (.op1(msgInput[0 +: m]), .op2(msgInput[m +: m]), .res(outSt1)); - gf_add_3 ADD_1 (.op1(msgInput[2*m +: m]), .op2(outSt1), .res(outSt2)); - gf_add_3 ADD_2 (.op1(msgInput[3*m +: m]), .op2(outSt2), .res(outSt3)); - gf_add_3 ADD_3 (.op1(msgInput[4*m +: m]), .op2(outSt3), .res(outSt4)); - gf_add_3 ADD_4 (.op1(msgInput[5*m +: m]), .op2(outSt4), .res(outSt5)); - gf_add_3 ADD_5 (.op1(msgInput[6*m +: m]), .op2(outSt5), .res(syndr0)); - - // Evaluating the second syndrome - gf_multBy2_3 MULT2_0 (.op(msgInput[0 +: m]), .res(outMult0)); - gf_add_3 ADD1_0 (.op1(outMult0), .op2(msgInput[m +: m]), .res(outAdd0)); - - gf_multBy2_3 MULT2_1 (.op(outAdd0), .res(outMult1)); - gf_add_3 ADD1_1 (.op1(outMult1), .op2(msgInput[2*m +: m]), .res(outAdd1)); - - gf_multBy2_3 MULT2_2 (.op(outAdd1), .res(outMult2)); - gf_add_3 ADD1_2 (.op1(outMult2), .op2(msgInput[3*m +: m]), .res(outAdd2)); - - gf_multBy2_3 MULT2_3 (.op(outAdd2), .res(outMult3)); - gf_add_3 ADD1_3 (.op1(outMult3), .op2(msgInput[4*m +: m]), .res(outAdd3)); - - gf_multBy2_3 MULT2_4 (.op(outAdd3), .res(outMult4)); - gf_add_3 ADD1_4 (.op1(outMult4), .op2(msgInput[5*m +: m]), .res(outAdd4)); - - gf_multBy2_3 MULT2_5 (.op(outAdd4), .res(outMult5)); - gf_add_3 ADD1_5 (.op1(outMult5), .op2(msgInput[6*m +: m]), .res(syndr1)); - - // Evaluate position of error - gf_inv_3 INV3 (.op(syndr0), .res(syndr0_inv)); - gf_mult_3 MULT3 (.op1(syndr0_inv), .op2(syndr1), .res(syndrProd)); - gf_log_3 LOG3 (.op(syndrProd), .err(domainErr), .res(errorPos)); - - // Number of Errors - assign error = syndr0[0] + syndr0[1] + syndr0[2]; - - // Correct message.. Correction on parity bits is ignored! - always @* begin - if(errorPos == 3'd2) - decMsg[4*m +: m] = msgInput[4*m +: m] ^ syndr0; - else - decMsg[4*m +: m] = msgInput[4*m +: m]; - - if(errorPos == 3'd3) - decMsg[3*m +: m] = msgInput[3*m +: m] ^ syndr0; - else - decMsg[3*m +: m] = msgInput[3*m +: m]; - - if(errorPos == 3'd4) - decMsg[2*m +: m] = msgInput[2*m +: m] ^ syndr0; - else - decMsg[2*m +: m] = msgInput[2*m +: m]; - - if(errorPos == 3'd5) - decMsg[m +: m] = msgInput[m +: m] ^ syndr0; - else - decMsg[m +: m] = msgInput[m +: m]; - - if(errorPos == 3'd6) - decMsg[0 +: m] = msgInput[0 +: m] ^ syndr0; - else - decMsg[0 +: m] = msgInput[0 +: m]; - end - -endmodule diff --git a/TestBench_hw/LpGBT_model/rs_encoder_N15K13.v b/TestBench_hw/LpGBT_model/rs_encoder_N15K13.v deleted file mode 100644 index 3ff22d6..0000000 --- a/TestBench_hw/LpGBT_model/rs_encoder_N15K13.v +++ /dev/null @@ -1,121 +0,0 @@ -/** **************************************************************************** - * lpGBTX * - * Copyright (C) 2011-2016 GBTX Team, CERN * - * * - * This IP block is free for HEP experiments and other scientific research * - * purposes. Commercial exploitation of a chip containing the IP is not * - * permitted. You can not redistribute the IP without written permission * - * from the authors. Any modifications of the IP have to be communicated back * - * to the authors. The use of the IP should be acknowledged in publications, * - * public presentations, user manual, and other documents. * - * * - * This IP is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * - * FOR A PARTICULAR PURPOSE. * - * * - ******************************************************************************* - * - * file: rs_encoder_N15K13.v - * - * rs_encoder_N15K13 - * - * History: - * 2016/09 José Fonseca : Created - * 2016/10/06 José Fonseca : Concluded - * - **/ - -`timescale 1ns/1ps - -module rs_encoder_N15K13 #(parameter N=15, - parameter K=13, - parameter SYMB_BITWIDTH=4) - (msg, - parity); - // tmrg do_not_touch - - // Dependent Parameters - parameter P = N-K; - parameter INP_BW = SYMB_BITWIDTH*K; - parameter OUT_BW = SYMB_BITWIDTH*N; - parameter POL_BW = SYMB_BITWIDTH*P; - parameter STG_BW = SYMB_BITWIDTH*(P+1); - - // IO Definition - input [INP_BW-1:0] msg; - output reg [POL_BW-1:0] parity; - - // Connecting wires and regs - wire [STG_BW-1:0] stageOut [K-1:0]; - wire [STG_BW-1:0] multOut [K-1:0]; - - // Generation Variables for automatic module instantiation - genvar i,j; - integer k; - - // ---------------- The Parallel LFSR HDL description ---------------- // - - // In the first layer, the rightmost node is an addition to zero, so - // we route it directly to the stage output - assign stageOut[0][SYMB_BITWIDTH*P +: SYMB_BITWIDTH] = msg[0 +: SYMB_BITWIDTH]; - - // Since in the first layer there are no adders, the stageOut is - // connected to the multiplier output. Hence, the multOut is set to zero. - assign multOut[0][0 +: SYMB_BITWIDTH*P] = {(SYMB_BITWIDTH*P){1'b0}}; - - // The rightmost multOut is never used (we only add the input codeword - // with the previous node), so it is set to zero. On the other hand, - // the leftmost node only performs multiplication, so multOut is - // routed to stageOut. - generate - for (i=0; i < K; i = i + 1) begin - assign multOut[i][SYMB_BITWIDTH*P +: SYMB_BITWIDTH] = {SYMB_BITWIDTH{1'b0}}; - if (i != 0) begin - assign stageOut[i][0 +: SYMB_BITWIDTH] = multOut[i][0 +: SYMB_BITWIDTH]; - end - end - endgenerate - - // Generates the instances of the GF(2^m) of the LFSR parallel network - // The first line is a particular case... - - // The GF multiplications units in the first stage - gf_multBy2_4 mult_0_0 (.op(msg[0 +: SYMB_BITWIDTH]), - .res(stageOut[0][0 +: SYMB_BITWIDTH])); - gf_multBy3_4 mult_0_1 (.op(msg[0 +: SYMB_BITWIDTH]), - .res(stageOut[0][SYMB_BITWIDTH +: SYMB_BITWIDTH])); - - // The remaining stages.. - generate - for (i=1; i < K; i = i + 1) begin - // The edge GF addition unit - gf_add_4 add_i (.op1(msg[i*SYMB_BITWIDTH +: SYMB_BITWIDTH]), - .op2(stageOut[i-1][SYMB_BITWIDTH*(P-1) +: SYMB_BITWIDTH]), - .res(stageOut[i][SYMB_BITWIDTH*P +: SYMB_BITWIDTH])); - end - endgenerate - - generate - for(i=1; i < K; i = i + 1) begin - // The GF multiplication units - gf_multBy2_4 mult_i_0 (.op(stageOut[i][SYMB_BITWIDTH*P +: SYMB_BITWIDTH]), - .res(multOut[i][0 +: SYMB_BITWIDTH])); - - gf_multBy3_4 mult_i_1 (.op(stageOut[i][SYMB_BITWIDTH*P +: SYMB_BITWIDTH]), - .res(multOut[i][SYMB_BITWIDTH +: SYMB_BITWIDTH])); - for (j=1; j < P; j = j + 1) begin - gf_add_4 add_i_j (.op1(multOut[i][SYMB_BITWIDTH*j +: SYMB_BITWIDTH]), - .op2(stageOut[i-1][SYMB_BITWIDTH*(j-1) +: SYMB_BITWIDTH]), - .res(stageOut[i][SYMB_BITWIDTH*j +: SYMB_BITWIDTH])); - end - end - endgenerate - - always @* begin - //parity <= {stageOut[K-1][0 +: SYMB_BITWIDTH], stageOut[K-1][SYMB_BITWIDTH +: SYMB_BITWIDTH],msg}; - for (k = 0; k < P; k = k + 1) begin - parity[k*SYMB_BITWIDTH +: SYMB_BITWIDTH] = stageOut[K-1][STG_BW-(k+2)*SYMB_BITWIDTH +: SYMB_BITWIDTH]; - end - end - -endmodule diff --git a/TestBench_hw/LpGBT_model/rs_encoder_N31K29.v b/TestBench_hw/LpGBT_model/rs_encoder_N31K29.v deleted file mode 100644 index 78582cf..0000000 --- a/TestBench_hw/LpGBT_model/rs_encoder_N31K29.v +++ /dev/null @@ -1,119 +0,0 @@ -/** **************************************************************************** - * lpGBTX * - * Copyright (C) 2011-2016 GBTX Team, CERN * - * * - * This IP block is free for HEP experiments and other scientific research * - * purposes. Commercial exploitation of a chip containing the IP is not * - * permitted. You can not redistribute the IP without written permission * - * from the authors. Any modifications of the IP have to be communicated back * - * to the authors. The use of the IP should be acknowledged in publications, * - * public presentations, user manual, and other documents. * - * * - * This IP is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * - * FOR A PARTICULAR PURPOSE. * - * * - ******************************************************************************* - * - * file: rs_encoder_N31K29.v - * - * rs_encoder_N31K29 - * - * History: - * 2016/09 José Fonseca : Created - * 2016/10/06 José Fonseca : Concluded - * - **/ - -`timescale 1ns/1ps - -module rs_encoder_N31K29 #(parameter N=31, - parameter K=29, - parameter SYMB_BITWIDTH=5) - (msg, - parity); - - // tmrg do_not_touch - - // Dependent Parameters - parameter P = N-K; - parameter INP_BW = SYMB_BITWIDTH*K; - parameter OUT_BW = SYMB_BITWIDTH*N; - parameter POL_BW = SYMB_BITWIDTH*P; - parameter STG_BW = SYMB_BITWIDTH*(P+1); - - // IO Definition - input [INP_BW-1:0] msg; - output reg [POL_BW-1:0] parity; - - // Connecting wires and regs - wire [STG_BW-1:0] stageOut [K-1:0]; - wire [STG_BW-1:0] multOut [K-1:0]; - - // Generation Variables for automatic module instantiation - genvar i,j; - integer k; - - // ---------------- The Parallel LFSR HDL description ---------------- // - - // In the first layer, the rightmost node is an addition to zero, so - // we route it directly to the stage output - assign stageOut[0][SYMB_BITWIDTH*P +: SYMB_BITWIDTH] = msg[0 +: SYMB_BITWIDTH]; - - // Since in the first layer there are no adders, the stageOut is - // connected to the multiplier output. Hence, the multOut is set to zero. - assign multOut[0][0 +: SYMB_BITWIDTH*P] = {(SYMB_BITWIDTH*P){1'b0}}; - - // The rightmost multOut is never used (we only add the input codeword - // with the previous node), so it is set to zero. On the other hand, - // the leftmost node only performs multiplication, so multOut is - // routed to stageOut. - for (i=0; i < K; i = i + 1) begin - assign multOut[i][SYMB_BITWIDTH*P +: SYMB_BITWIDTH] = {SYMB_BITWIDTH{1'b0}}; - if (i != 0) begin - assign stageOut[i][0 +: SYMB_BITWIDTH] = multOut[i][0 +: SYMB_BITWIDTH]; - end - end - - // Generates the instances of the GF(2^m) of the LFSR parallel network - // The first line is a particular case... - - // The GF multiplications units in the first stage - gf_multBy2_5 mult_0_0 (.op(msg[0 +: SYMB_BITWIDTH]), - .res(stageOut[0][0 +: SYMB_BITWIDTH])); - gf_multBy3_5 mult_0_1 (.op(msg[0 +: SYMB_BITWIDTH]), - .res(stageOut[0][SYMB_BITWIDTH +: SYMB_BITWIDTH])); - - // The remaining stages.. - generate - for (i=1; i < K; i = i + 1) begin - // The edge GF addition unit - gf_add_5 add_i (.op1(msg[i*SYMB_BITWIDTH +: SYMB_BITWIDTH]), - .op2(stageOut[i-1][SYMB_BITWIDTH*(P-1) +: SYMB_BITWIDTH]), - .res(stageOut[i][SYMB_BITWIDTH*P +: SYMB_BITWIDTH])); - end - endgenerate - - generate - for(i=1; i < K; i = i + 1) begin - // The GF multiplication units - gf_multBy2_5 mult_i_0 (.op(stageOut[i][SYMB_BITWIDTH*P +: SYMB_BITWIDTH]), - .res(multOut[i][0 +: SYMB_BITWIDTH])); - - gf_multBy3_5 mult_i_1 (.op(stageOut[i][SYMB_BITWIDTH*P +: SYMB_BITWIDTH]), - .res(multOut[i][SYMB_BITWIDTH +: SYMB_BITWIDTH])); - for (j=1; j < P; j = j + 1) begin - gf_add_5 add_i_j (.op1(multOut[i][SYMB_BITWIDTH*j +: SYMB_BITWIDTH]), - .op2(stageOut[i-1][SYMB_BITWIDTH*(j-1) +: SYMB_BITWIDTH]), - .res(stageOut[i][SYMB_BITWIDTH*j +: SYMB_BITWIDTH])); - end - end - endgenerate - - always @* begin - for (k = 0; k < P; k = k + 1) begin - parity[k*SYMB_BITWIDTH +: SYMB_BITWIDTH] = stageOut[K-1][STG_BW-(k+2)*SYMB_BITWIDTH +: SYMB_BITWIDTH]; - end - end - -endmodule diff --git a/TestBench_hw/LpGBT_model/scrambler51bitOrder49.v b/TestBench_hw/LpGBT_model/scrambler51bitOrder49.v deleted file mode 100644 index 0975865..0000000 --- a/TestBench_hw/LpGBT_model/scrambler51bitOrder49.v +++ /dev/null @@ -1,51 +0,0 @@ -/* Module: scrambler51bitOrder49 */ -/* Created: Paulo Moreira, 2015/09/18 */ -/* Modified: José Fonseca, 2016/10/21 */ -/* 2016/05/30 Kulis : Test partterns removed */ -/* (moved to test pattern generator block) */ -/* Institute: CERN */ -/* Version: 1.0 */ - -/* Scrambler width: 51 - bits */ -/* Scrambler order: 49 */ -/* Scrambling recursive equation: Si = Di xnor Si-40 xnor Si-49 */ - -`timescale 1 ps / 1 ps - -module scrambler51bitOrder49 #(parameter INIT_SEED = 51'h7f1835baaca14) - ( - input wire [50:0] data, - input wire clock, - input wire reset, - input wire bypass, - output reg [50:0] scrambledData - ); - -// tmrg default triplicate - -wire [50:0] iScrambledData; -wire [50:0] iScrambledDataVoted = iScrambledData; - -// Scrambler output register (+ feedback register) + bypass mux -always @(posedge clock) - begin - if (reset == 1'b1) - scrambledData <= INIT_SEED; - else - scrambledData <= iScrambledDataVoted; - end - -// synopsys translate_off -initial - begin - scrambledData=$random; - end -// synopsys translate_on - -// Scrambler polynomial and bypass mux -assign - iScrambledData[50:49] = (bypass)? data[50:49] : data[50:49] ~^ data[10:9] ~^ scrambledData[21:20] ~^ data[1:0] ~^ scrambledData[3:2], - iScrambledData[48:40] = (bypass)? data[48:40] : data[48:40] ~^ data[8:0] ~^ scrambledData[19:11] ~^ scrambledData[10:2] ~^ scrambledData[50:42], - iScrambledData[39:0] = (bypass)? data[39:0] : data[39:0] ~^ scrambledData[50:11] ~^ scrambledData[41:2]; - -endmodule diff --git a/TestBench_hw/LpGBT_model/scrambler53bitOrder49.v b/TestBench_hw/LpGBT_model/scrambler53bitOrder49.v deleted file mode 100644 index 21f7feb..0000000 --- a/TestBench_hw/LpGBT_model/scrambler53bitOrder49.v +++ /dev/null @@ -1,49 +0,0 @@ -/* Module: scrambler51bitOrder49 */ -/* Created: Paulo Moreira, 2015/09/18 */ -/* Modified: José Fonseca, 2016/10/21 */ -/* 2016/05/30 Kulis : Test partterns removed */ -/* (moved to test pattern generator block) */ -/* Institute: CERN */ -/* Version: 1.0 */ - -/* Scrambler width: 51 - bits */ -/* Scrambler order: 49 */ -/* Scrambling recursive equation: Si = Di xnor Si-40 xnor Si-49 */ - -`timescale 1 ps / 1 ps - -module scrambler53bitOrder49 #(parameter INIT_SEED = 53'h1f16348aab1a1a) - ( - input wire [52:0] data, - input wire clock, - input wire reset, - input wire bypass, - output reg [52:0] scrambledData - ); - -wire [52:0] iScrambledData; -wire [52:0] iScrambledDataVoted = iScrambledData; - -// Scrambler output register (+ feedback register) + bypass mux -always @(posedge clock) - begin - if (reset == 1'b1) - scrambledData <= INIT_SEED; - else - scrambledData <= iScrambledDataVoted; -end - -// synopsys translate_off -initial - begin - scrambledData=$random; - end -// synopsys translate_on - -// Scrambler polynomial and bypass mux -assign - iScrambledData[52:49] = (bypass) ? data[52:49] : data[52:49] ~^ data[12:9] ~^ scrambledData[23:20] ~^ data[3:0] ~^ scrambledData[5:2], - iScrambledData[48:40] = (bypass) ? data[48:40] : data[48:40] ~^ data[8:0] ~^ scrambledData[19:11] ~^ scrambledData[10:2] ~^ scrambledData[50:42], - iScrambledData[39:0] = (bypass) ? data[39:0] : data[39:0] ~^ scrambledData[50:11] ~^ scrambledData[41:2]; - -endmodule diff --git a/TestBench_hw/LpGBT_model/scrambler58bitOrder58.v b/TestBench_hw/LpGBT_model/scrambler58bitOrder58.v deleted file mode 100644 index 23038b3..0000000 --- a/TestBench_hw/LpGBT_model/scrambler58bitOrder58.v +++ /dev/null @@ -1,47 +0,0 @@ -/* Module: scrambler58bitOrder58 */ -/* Created: Paulo Moreira, 2015/09/15 */ -/* 2016/05/30 Kulis : Test partterns removed */ -/* (moved to test pattern generator block) */ -/* Institute: CERN */ -/* Version: 1.0 */ - -/* Scrambler width: 58 - bits */ -/* Scrambler order: 58 */ -/* Scrambling recursive equation: Si = Di xnor Si-39 xnor Si-58 */ - -`timescale 1 ps / 1 ps - -module scrambler58bitOrder58 #(parameter INIT_SEED = 58'h112abaa1231ba11) - ( - input wire [57:0] data, - input wire clock, - input wire reset, - input wire bypass, - output reg [57:0] scrambledData - ); - -wire [57:0] iScrambledData; -wire [57:0] iScrambledDataVoted = iScrambledData; - -// Scrambler output register (+ feedback register) + bypass mux -always @(posedge clock) - begin - if (reset == 1'b1) - scrambledData <= INIT_SEED; - else - scrambledData <= iScrambledDataVoted; - end - -// synopsys translate_off -initial - begin - scrambledData=$random; - end -// synopsys translate_on - -// Scrambler polynomial and bypass mux -assign - iScrambledData[57:39] = (bypass)? data[57:39] : data[57:39] ~^ data[18:0] ~^ scrambledData[37:19] ~^ scrambledData[18:0] ~^ scrambledData[57:39], - iScrambledData[38:0] = (bypass)? data[38:0] : data[38:0] ~^ scrambledData[57:19] ~^ scrambledData[38:0]; - -endmodule diff --git a/TestBench_hw/LpGBT_model/scrambler60bitOrder58.v b/TestBench_hw/LpGBT_model/scrambler60bitOrder58.v deleted file mode 100644 index efa363a..0000000 --- a/TestBench_hw/LpGBT_model/scrambler60bitOrder58.v +++ /dev/null @@ -1,49 +0,0 @@ -/* Module: scrambler58bitOrder58 */ -/* Created: Paulo Moreira, 2015/09/15 */ -/* Modified: José Fonseca, 2016/10/21 */ -/* 2016/05/30 Kulis : Test partterns removed */ -/* (moved to test pattern generator block) */ -/* Institute: CERN */ -/* Version: 1.0 */ - -/* Scrambler width: 60 - bits */ -/* Scrambler order: 58 */ -/* Scrambling recursive equation: Si = Di xnor Si-39 xnor Si-58 */ - -`timescale 1 ps / 1 ps - -module scrambler60bitOrder58 #(parameter INIT_SEED = 60'h1faab124cade111) - ( - input wire [59:0] data, - input wire clock, - input wire reset, - input wire bypass, - output reg [59:0] scrambledData - ); - -wire [59:0] iScrambledData; -wire [59:0] iScrambledDataVoted = iScrambledData; - -// Scrambler output register (+ feedback register) + bypass mux -always @(posedge clock) - begin - if (reset == 1'b1) - scrambledData <= INIT_SEED; - else - scrambledData <= iScrambledDataVoted; - end - -// synopsys translate_off -initial - begin - scrambledData=$random; - end -// synopsys translate_on - -// Scrambler polynomial and bypass mux -assign - iScrambledData[59:58] = (bypass) ? data[59:58] : data[59:58] ~^ data[20:19] ~^ scrambledData[39:38] ~^ data[1:0] ~^ scrambledData[1:0], - iScrambledData[57:39] = (bypass) ? data[57:39] : data[57:39] ~^ data[18:0] ~^ scrambledData[37:19] ~^ scrambledData[18:0] ~^ scrambledData[57:39], - iScrambledData[38:0] = (bypass) ? data[38:0] : data[38:0] ~^ scrambledData[57:19] ~^ scrambledData[38:0]; - -endmodule diff --git a/TestBench_hw/LpGBT_model/upLinkDataPath.v b/TestBench_hw/LpGBT_model/upLinkDataPath.v deleted file mode 100644 index be2e404..0000000 --- a/TestBench_hw/LpGBT_model/upLinkDataPath.v +++ /dev/null @@ -1,136 +0,0 @@ -/** **************************************************************************** - * lpGBTX * - * Copyright (C) 2011-2016 GBTX Team, CERN * - * * - * This IP block is free for HEP experiments and other scientific research * - * purposes. Commercial exploitation of a chip containing the IP is not * - * permitted. You can not redistribute the IP without written permission * - * from the authors. Any modifications of the IP have to be communicated back * - * to the authors. The use of the IP should be acknowledged in publications, * - * public presentations, user manual, and other documents. * - * * - * This IP is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * - * FOR A PARTICULAR PURPOSE. * - * * - ******************************************************************************* - * - * file: upLinkDataPath.v - * - * upLinkDataPath - * - * Controll signals : - * txDataRate: - * ‘0’ - 5.12 Gb/s - * ‘1’ - 10.24 Gb/s - * - * fecMode: - * ‘0’ - FEC 5 - * ‘1’ - FEC 12 - * - * History: - * 2016/05/20 Szymon Kulis : Created - * 2016/10/25 José Foseca : Modified - * 2016/12/08 Szymon Kulis : BERT generator added - * - **/ - - -module upLinkDataPath ( - // input cloks: - input clk40M, - - // input data: - input [31:0] txData0, - input [31:0] txData1, - input [31:0] txData2, - input [31:0] txData3, - input [31:0] txData4, - input [31:0] txData5, - input [31:0] txData6, - input [1:0] txIC, - input [1:0] txEC, - input [5:0] txDummyFec5, - input [9:0] txDummyFec12, - - // controll signals - input scramblerBypass, - input interleaverBypass, - input fecBypass, - input fecMode, - input txDataRate, - input scramblerReset, - // output data - output [255:0] upLinkFrame -); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg default triplicate -// -------------------------------------------------------------------------- // - - wire [233:0] dataFec5; - wire [205:0] dataFec12; - - upLinkDataSelect ULDS( - .clk(clk40M), - .dataFec12(dataFec12), - .dataFec5(dataFec5), - .dataRate(txDataRate), - .fecMode(fecMode), - .txDataGroup0(txData0), - .txDataGroup1(txData1), - .txDataGroup2(txData2), - .txDataGroup3(txData3), - .txDataGroup4(txData4), - .txDataGroup5(txData5), - .txDataGroup6(txData6), - .txDummyFec5(txDummyFec5), - .txDummyFec12(txDummyFec12), - .txEC(txEC), - .txIC(txIC) - ); - - wire [233:0] scrambledDataFec5; - wire [205:0] scrambledDataFec12; - - upLinkScrambler UPS ( - .bypass(scramblerBypass), - .clk(clk40M), - .dataFec12(dataFec12), - .dataFec5(dataFec5), - .fecMode(fecMode), - .reset(scramblerReset), - .scrambledDataFec12(scrambledDataFec12), - .scrambledDataFec5(scrambledDataFec5), - .txDataRate(txDataRate) - ); - - wire [19:0] fec5_enc, fec5; - wire [47:0] fec12_enc, fec12; - - upLinkFECEncoder ULFE ( - .dataFec12(scrambledDataFec12), - .dataFec5(scrambledDataFec5), - .fec12(fec12_enc), - .fec5(fec5_enc), - .drMode(txDataRate) - ); - - assign fec5 = (fecBypass) ? 20'd0 : fec5_enc; - assign fec12 = (fecBypass) ? 48'd0 : fec12_enc; - - upLinkInterleaver ULI ( - .clk(clk40M), - .bypass(interleaverBypass), - .dataFec12(scrambledDataFec12), - .dataFec5(scrambledDataFec5), - .fec12(fec12), - .fec5(fec5), - .fecMode(fecMode), - .txDataRate(txDataRate), - .upLinkFrame(upLinkFrame) - ); - -endmodule diff --git a/TestBench_hw/LpGBT_model/upLinkDataSelect.v b/TestBench_hw/LpGBT_model/upLinkDataSelect.v deleted file mode 100644 index bb2a070..0000000 --- a/TestBench_hw/LpGBT_model/upLinkDataSelect.v +++ /dev/null @@ -1,111 +0,0 @@ -/** **************************************************************************** - * lpGBTX * - * Copyright (C) 2011-2016 GBTX Team, CERN * - * * - * This IP block is free for HEP experiments and other scientific research * - * purposes. Commercial exploitation of a chip containing the IP is not * - * permitted. You can not redistribute the IP without written permission * - * from the authors. Any modifications of the IP have to be communicated back * - * to the authors. The use of the IP should be acknowledged in publications, * - * public presentations, user manual, and other documents. * - * * - * This IP is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * - * FOR A PARTICULAR PURPOSE. * - * * - ******************************************************************************* - * - * file: upLinkDataSelect.v - * - * upLinkDataSelect - * - * Controll signals : - - * fecMode: - * ‘0’ - FEC 5 - * ‘1’ - FEC 12 - * - * History: - * 2016/05/30 Szymon Kulis : Created - * 2016/10/19 José Fonseca : Modified - * - **/ - -module upLinkDataSelect( - // clocks: - input clk, - - // input data: - input [31:0] txDataGroup0, - input [31:0] txDataGroup1, - input [31:0] txDataGroup2, - input [31:0] txDataGroup3, - input [31:0] txDataGroup4, - input [31:0] txDataGroup5, - input [31:0] txDataGroup6, - - input [1:0] txIC, - input [1:0] txEC, - input [5:0] txDummyFec5, - input [9:0] txDummyFec12, - - // controll signals: - input fecMode, - input dataRate, - - // output data: - output reg [233:0] dataFec5, - output reg [205:0] dataFec12 -); - - // tmrg default triplicate - - localparam FEC5 = 1'b0; - localparam FEC12 = 1'b1; - localparam DR5G = 1'b0; - localparam DR10G = 1'b1; - - always @* begin - if (fecMode == FEC5) begin - dataFec12 = 0; - if (dataRate == DR10G) begin - dataFec5 = {txIC, txEC, txDummyFec5[5:0], txDataGroup6, - txDataGroup5, - txDataGroup4, - txDataGroup3, - txDataGroup2, - txDataGroup1, - txDataGroup0}; - end - else begin - dataFec5 = {118'd0, txIC, txEC, txDataGroup6[15:0], - txDataGroup5[15:0], - txDataGroup4[15:0], - txDataGroup3[15:0], - txDataGroup2[15:0], - txDataGroup1[15:0], - txDataGroup0[15:0]}; - end - end - else begin - dataFec5=0; - if (dataRate == DR10G) begin - dataFec12 = {txIC, txEC, txDummyFec12[9:0], txDataGroup5[31:0], - txDataGroup4[31:0], - txDataGroup3[31:0], - txDataGroup2[31:0], - txDataGroup1[31:0], - txDataGroup0[31:0]}; - end - else begin - dataFec12 = {104'd0, txIC, txEC, txDummyFec12[1:0], txDataGroup5[15:0], - txDataGroup4[15:0], - txDataGroup3[15:0], - txDataGroup2[15:0], - txDataGroup1[15:0], - txDataGroup0[15:0]}; - end - end - end -endmodule - diff --git a/TestBench_hw/LpGBT_model/upLinkFECEncoder.v b/TestBench_hw/LpGBT_model/upLinkFECEncoder.v deleted file mode 100644 index 6145637..0000000 --- a/TestBench_hw/LpGBT_model/upLinkFECEncoder.v +++ /dev/null @@ -1,114 +0,0 @@ - -/** **************************************************************************** - * lpGBTX * - * Copyright (C) 2011-2016 GBTX Team, CERN * - * * - * This IP block is free for HEP experiments and other scientific research * - * purposes. Commercial exploitation of a chip containing the IP is not * - * permitted. You can not redistribute the IP without written permission * - * from the authors. Any modifications of the IP have to be communicated back * - * to the authors. The use of the IP should be acknowledged in publications, * - * public presentations, user manual, and other documents. * - * * - * This IP is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * - * FOR A PARTICULAR PURPOSE. * - * * - ******************************************************************************* - * - * file: upLinkFECEncoder.v - * - * upLinkFECEncoder - * - * Control flags : - - * drMode: - * ‘0’ - 5.12 Gbps - * ‘1’ - 10.24 Gbps - * - * History: - * 2016/05/30 Szymon Kulis : Created - * 2016/10/19 José Fonseca : Updated - * - **/ - -module upLinkFECEncoder( - // input data: - input [233:0] dataFec5, - input [205:0] dataFec12, - - // Control flag - input drMode, - - // output FEC codes: - output [19:0] fec5, - output [47:0] fec12 -); -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg do_not_touch -// -------------------------------------------------------------------------- // - -// ----------------------------------------------------------------------------- -// --------------------- FEC 5 Encoders -------------------------------------- -// ----------------------------------------------------------------------------- - - // wire [144:0] FEC5virtFrame_C0 = {29'b0, dataFec5[115:0]}; - // wire [144:0] FEC5virtFrame_C1 = {29'b0, dataFec5[115:0]}; - - wire [144:0] FEC5virtFrame_C0; - wire [144:0] FEC5virtFrame_C1; - - assign FEC5virtFrame_C0 = (drMode) ? {26'd0, dataFec5[233:232], dataFec5[116:0]} : {29'd0, dataFec5[115:0]}; - assign FEC5virtFrame_C1 = {29'd0, dataFec5[231:117]}; - - - rs_encoder_N31K29 FEC5_C0 (.msg(FEC5virtFrame_C0), .parity(fec5[9:0])); - - rs_encoder_N31K29 FEC5_C1 (.msg(FEC5virtFrame_C1), .parity(fec5[19:10])); - -// ----------------------------------------------------------------------------- -// --------------------- FEC 12 Encoders -------------------------------------- -// ----------------------------------------------------------------------------- - - wire [51:0] FEC12virtFrame_C0; - wire [51:0] FEC12virtFrame_C1; - wire [51:0] FEC12virtFrame_C2; - wire [51:0] FEC12virtFrame_C3; - wire [51:0] FEC12virtFrame_C4; - wire [51:0] FEC12virtFrame_C5; - - assign FEC12virtFrame_C0 = (drMode) ? {16'd0, dataFec12[135:134], dataFec12[33:0]} : {16'd0, dataFec12[67:66], dataFec12[33:0]}; - assign FEC12virtFrame_C1 = (drMode) ? {16'd0, dataFec12[169:168], dataFec12[67:34]} : {18'd0, dataFec12[101:100], dataFec12[65:34]}; - assign FEC12virtFrame_C2 = (drMode) ? {16'd0, dataFec12[203:202], dataFec12[101:68]} : {20'd0, dataFec12[99:68]}; - assign FEC12virtFrame_C3 = {18'd0, dataFec12[205:204], dataFec12[133:102]}; - assign FEC12virtFrame_C4 = {20'd0, dataFec12[167:136]}; - assign FEC12virtFrame_C5 = {20'd0, dataFec12[201:170]}; - - rs_encoder_N15K13 FEC12_C0 (.msg(FEC12virtFrame_C0), .parity(fec12[7:0])); - - rs_encoder_N15K13 FEC12_C1 (.msg(FEC12virtFrame_C1), .parity(fec12[15:8])); - - rs_encoder_N15K13 FEC12_C2 ( - .msg(FEC12virtFrame_C2), - .parity(fec12[23:16]) - ); - - rs_encoder_N15K13 FEC12_C3 ( - .msg(FEC12virtFrame_C3), - .parity(fec12[31:24]) - ); - - rs_encoder_N15K13 FEC12_C4 ( - .msg(FEC12virtFrame_C4), - .parity(fec12[39:32]) - ); - - rs_encoder_N15K13 FEC12_C5 ( - .msg(FEC12virtFrame_C5), - .parity(fec12[47:40]) - ); - -endmodule - diff --git a/TestBench_hw/LpGBT_model/upLinkInterleaver.v b/TestBench_hw/LpGBT_model/upLinkInterleaver.v deleted file mode 100644 index d5e55b0..0000000 --- a/TestBench_hw/LpGBT_model/upLinkInterleaver.v +++ /dev/null @@ -1,154 +0,0 @@ -/** **************************************************************************** - * lpGBTX * - * Copyright (C) 2011-2016 GBTX Team, CERN * - * * - * This IP block is free for HEP experiments and other scientific research * - * purposes. Commercial exploitation of a chip containing the IP is not * - * permitted. You can not redistribute the IP without written permission * - * from the authors. Any modifications of the IP have to be communicated back * - * to the authors. The use of the IP should be acknowledged in publications, * - * public presentations, user manual, and other documents. * - * * - * This IP is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * - * FOR A PARTICULAR PURPOSE. * - * * - ******************************************************************************* - * - * file: upLinkInterleaver.v - * - * upLinkInterleaver - * - * History: - * 2016/05/30 Szymon Kulis : Created File - * 2016/10/26 José Fonseca : Implemented and completed - * - **/ - -module upLinkInterleaver ( - // clocks: - input clk, - - // input data (and fec codes) - input [233:0] dataFec5, - input [205:0] dataFec12, - input [19:0] fec5, - input [47:0] fec12, - - // control signals - input txDataRate, - input fecMode, - input bypass, - - // output data: - output reg [255:0] upLinkFrame -); - -// -------------------------------------------------------------------------- // -// ------------- Triple Modular Redundancy Generator Directives ------------- // -// -------------------------------------------------------------------------- // -// tmrg default triplicate -// -------------------------------------------------------------------------- // - localparam FEC5 = 1'b0; - localparam FEC12 = 1'b1; - localparam TxDataRate5G12 = 1'b0; - localparam TxDataRate10G24 = 1'b1; - localparam HEADER = 2'b10; - - -/* - wire clkGateH=(txDataRate==TxDataRate10G24); - - wire clkL=clk; - wire clkH=clk&clkGateH; - - reg [255:0] upLinkFrameNext; - - always @(posedge clkL) - upLinkFrame [127:0] <= upLinkFrameNext[127:0]; - - always @(posedge clkH) - upLinkFrame [255:128] <= upLinkFrameNext[255:128]; - - localparam HEADERH = 2'b10; - localparam HEADERL = 2'b01; -*/ - - always @(dataFec5 or dataFec12 or fec5 or fec12 or fecMode or txDataRate or bypass) begin - if(fecMode == FEC5) begin - if(txDataRate == TxDataRate5G12) begin - upLinkFrame[127:0] = {HEADER, dataFec5[115:0], fec5[9:0]}; - upLinkFrame[255:128] = 128'b0; - end - else begin - if(bypass) - upLinkFrame[255:0] = {HEADER, dataFec5, fec5}; - else begin - upLinkFrame[255:0] = {HEADER, dataFec5[233:232], dataFec5[116:115], - dataFec5[231:227], dataFec5[114:110], - dataFec5[226:222], dataFec5[109:105], - dataFec5[221:217], dataFec5[104:100], - dataFec5[216:212], dataFec5[99:95], - dataFec5[211:207], dataFec5[94:90], - dataFec5[206:202], dataFec5[89:85], - dataFec5[201:197], dataFec5[84:80], - dataFec5[196:192], dataFec5[79:75], - dataFec5[191:187], dataFec5[74:70], - dataFec5[186:182], dataFec5[69:65], - dataFec5[181:177], dataFec5[64:60], - dataFec5[176:172], dataFec5[59:55], - dataFec5[171:167], dataFec5[54:50], - dataFec5[166:162], dataFec5[49:45], - dataFec5[161:157], dataFec5[44:40], - dataFec5[156:152], dataFec5[39:35], - dataFec5[151:147], dataFec5[34:30], - dataFec5[146:142], dataFec5[29:25], - dataFec5[141:137], dataFec5[24:20], - dataFec5[136:132], dataFec5[19:15], - dataFec5[131:127], dataFec5[14:10], - dataFec5[126:122], dataFec5[9:5], - dataFec5[121:117], dataFec5[4:0], - fec5[19:15], fec5[9:5], fec5[14:10], fec5[4:0]}; - end - end - end - else begin - if(txDataRate == TxDataRate5G12) begin - if(bypass) - upLinkFrame[127:0] = {HEADER, dataFec12, fec12}; - else begin - upLinkFrame[127:0] = {HEADER, dataFec12[101:100], dataFec12[67:66], dataFec12[33:32], - dataFec12[99:96], dataFec12[65:62] , dataFec12[31:28], - dataFec12[95:92], dataFec12[61:58] , dataFec12[27:24], - dataFec12[91:88], dataFec12[57:54] , dataFec12[23:20], - dataFec12[87:84], dataFec12[53:50] , dataFec12[19:16], - dataFec12[83:80], dataFec12[49:46] , dataFec12[15:12], - dataFec12[79:76], dataFec12[45:42] , dataFec12[11:8], - dataFec12[75:72], dataFec12[41:38] , dataFec12[7:4], - dataFec12[71:68], dataFec12[37:34] , dataFec12[3:0], - fec12[23:20] , fec12[15:12] , fec12[7:4], - fec12[19:16] , fec12[11:8] , fec12[3:0]}; - end - upLinkFrame[255:128] = 128'b0; - end - else begin - if(bypass) - upLinkFrame[255:0] = {HEADER, dataFec12, fec12}; - else begin - upLinkFrame[255:0] = {HEADER, dataFec12[205:204], dataFec12[203:202], dataFec12[101:100], dataFec12[169:168], dataFec12[67:66], dataFec12[135:134], dataFec12[33:32], - dataFec12[201:198], dataFec12[167:164], dataFec12[133:130], dataFec12[99:96], dataFec12[65:62], dataFec12[31:28], - dataFec12[197:194], dataFec12[163:160], dataFec12[129:126], dataFec12[95:92], dataFec12[61:58], dataFec12[27:24], - dataFec12[193:190], dataFec12[159:156], dataFec12[125:122], dataFec12[91:88], dataFec12[57:54], dataFec12[23:20], - dataFec12[189:186], dataFec12[155:152], dataFec12[121:118], dataFec12[87:84], dataFec12[53:50], dataFec12[19:16], - dataFec12[185:182], dataFec12[151:148], dataFec12[117:114], dataFec12[83:80], dataFec12[49:46], dataFec12[15:12], - dataFec12[181:178], dataFec12[147:144], dataFec12[113:110], dataFec12[79:76], dataFec12[45:42], dataFec12[11:8], - dataFec12[177:174], dataFec12[143:140], dataFec12[109:106], dataFec12[75:72], dataFec12[41:38], dataFec12[7:4], - dataFec12[173:170], dataFec12[139:136], dataFec12[105:102], dataFec12[71:68], dataFec12[37:34], dataFec12[3:0], - fec12[47:44], fec12[39:36], fec12[31:28], fec12[23:20], fec12[15:12], fec12[7:4], - fec12[43:40], fec12[35:32], fec12[27:24], fec12[19:16], fec12[11:8], fec12[3:0]}; - end - end - end - end - -endmodule diff --git a/TestBench_hw/LpGBT_model/upLinkScrambler.v b/TestBench_hw/LpGBT_model/upLinkScrambler.v deleted file mode 100644 index eddca7c..0000000 --- a/TestBench_hw/LpGBT_model/upLinkScrambler.v +++ /dev/null @@ -1,160 +0,0 @@ - -/** **************************************************************************** - * lpGBTX * - * Copyright (C) 2011-2016 GBTX Team, CERN * - * * - * This IP block is free for HEP experiments and other scientific research * - * purposes. Commercial exploitation of a chip containing the IP is not * - * permitted. You can not redistribute the IP without written permission * - * from the authors. Any modifications of the IP have to be communicated back * - * to the authors. The use of the IP should be acknowledged in publications, * - * public presentations, user manual, and other documents. * - * * - * This IP is distributed in the hope that it will be useful, but WITHOUT ANY * - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * - * FOR A PARTICULAR PURPOSE. * - * * - ******************************************************************************* - * - * file: upLinkScrambler.v - * - * upLinkScrambler - * - * Controll signals : - - * fecMode: - * ‘0’ - FEC 5 - * ‘1’ - FEC 12 - * - * History: - * 2016/05/30 Szymon Kulis : Created - * 2016/10/26 José Fonseca : Completed - * - **/ - -module upLinkScrambler( - // input clocks: - input clk, - // input data: - input [233:0] dataFec5, - input [205:0] dataFec12, - - // controll signals: - input fecMode, - input txDataRate, - input reset, - input bypass, - - // output data: - output [233:0] scrambledDataFec5, - output [205:0] scrambledDataFec12 - -); - // tmrg default triplicate - localparam FEC5 = 1'b0; - localparam FEC12 = 1'b1; - localparam TxDataRate5G12 = 1'b0; - localparam TxDataRate10G24= 1'b1; - - reg clkGate10GFEC12; - reg clkGate10GFEC5; - reg clkGate5GFEC12; - reg clkGate5GFEC5; - - wire clk10GFEC12=clk&clkGate10GFEC12; - wire clk10GFEC5 =clk&clkGate10GFEC5; - wire clk5GFEC12 =clk&clkGate5GFEC12; - wire clk5GFEC5 =clk&clkGate5GFEC5; - - - always @(fecMode or txDataRate) - begin - clkGate10GFEC12=1'b0; - clkGate10GFEC5 =1'b0; - clkGate5GFEC12 =1'b0; - clkGate5GFEC5 =1'b0; - case ({txDataRate,fecMode}) - {TxDataRate5G12, FEC5}: begin clkGate5GFEC5=1'b1; end - {TxDataRate5G12, FEC12}: begin clkGate5GFEC12=1'b1; end - {TxDataRate10G24, FEC5}: begin clkGate10GFEC5=1'b1; clkGate5GFEC5=1'b1; end - {TxDataRate10G24,FEC12}: begin clkGate10GFEC12=1'b1; clkGate5GFEC12=1'b1; end - endcase - end - -// ----------------------------------------------------------------------------- -// --------------------- FEC 5 scramblers -------------------------------------- -// ----------------------------------------------------------------------------- - -// low data rate - scrambler58bitOrder58 FEC5L0 ( - .bypass(bypass), - .clock(clk5GFEC5), - .data(dataFec5[57:0]), - .reset(reset), - .scrambledData(scrambledDataFec5[57:0]) - ); - - scrambler58bitOrder58 FEC5L1 ( - .bypass(bypass), - .clock(clk5GFEC5), - .data(dataFec5[115:58]), - .reset(reset), - .scrambledData(scrambledDataFec5[115:58]) - ); - -// high data rate - scrambler58bitOrder58 FEC5H0 ( - .bypass(bypass), - .clock(clk10GFEC5), - .data(dataFec5[173:116]), - .reset(reset), - .scrambledData(scrambledDataFec5[173:116]) - ); - - scrambler60bitOrder58 FEC5H1 ( - .bypass(bypass), - .clock(clk10GFEC5), - .data(dataFec5[233:174]), - .reset(reset), - .scrambledData(scrambledDataFec5[233:174]) - ); - -// ----------------------------------------------------------------------------- -// --------------------- FEC 12 scramblers ------------------------------------- -// ----------------------------------------------------------------------------- - -// low data rate - scrambler51bitOrder49 FEC12L0 ( - .bypass(bypass), - .clock(clk5GFEC12), - .data(dataFec12[50:0]), - .reset(reset), - .scrambledData(scrambledDataFec12[50:00]) - ); - - scrambler51bitOrder49 FEC12L1 ( - .bypass(bypass), - .clock(clk5GFEC12), - .data(dataFec12[101:51]), - .reset(reset), - .scrambledData(scrambledDataFec12[101:51]) - ); - -// high data rate - scrambler51bitOrder49 FEC12H0 ( - .bypass(bypass), - .clock(clk10GFEC12), - .data(dataFec12[152:102]), - .reset(reset), - .scrambledData(scrambledDataFec12[152:102]) - ); - - scrambler53bitOrder49 FEC12H1 ( - .bypass(bypass), - .clock(clk10GFEC12), - .data(dataFec12[205:153]), - .reset(reset), - .scrambledData(scrambledDataFec12[205:153]) - ); -endmodule - diff --git a/TestBench_hw/datarouter_top.vhd b/TestBench_hw/datarouter_top.vhd deleted file mode 100644 index ddd05cc..0000000 --- a/TestBench_hw/datarouter_top.vhd +++ /dev/null @@ -1,80 +0,0 @@ --- IEEE VHDL standard library: -library ieee; -use ieee.std_logic_1164.all; - ---=================================================================================================-- ---####################################### Entity ##############################################-- ---=================================================================================================-- -entity datarouter_top is - port ( - uplinkSelectDataRate_i : in std_logic; -- '0': 5.12Gbps / '1': 10.24Gbps - uplinkSelectFEC_i : in std_logic; -- '0': FEC5 / '1': FEC12 - - upLinkData0 : in std_logic_vector(31 downto 0); - upLinkData1 : in std_logic_vector(31 downto 0); - upLinkData2 : in std_logic_vector(31 downto 0); - upLinkData3 : in std_logic_vector(31 downto 0); - upLinkData4 : in std_logic_vector(31 downto 0); - upLinkData5 : in std_logic_vector(31 downto 0); - upLinkData6 : in std_logic_vector(31 downto 0); - - upLinkData : out std_logic_vector(229 downto 0) - ); -end datarouter_top; - ---=================================================================================================-- ---#################################### Architecture ###########################################-- ---=================================================================================================-- - -architecture behavioral of datarouter_top is - - signal upLinkData_00_s : std_logic_vector(229 downto 0); - signal upLinkData_01_s : std_logic_vector(229 downto 0); - signal upLinkData_10_s : std_logic_vector(229 downto 0); - signal upLinkData_11_s : std_logic_vector(229 downto 0); - -begin --========#### Architecture Body ####========-- - - upLinkData_00_s(229 downto 112) <= (others => '0'); - upLinkData_00_s(111 downto 0) <= upLinkData6(15 downto 0) & - upLinkData5(15 downto 0) & - upLinkData4(15 downto 0) & - upLinkData3(15 downto 0) & - upLinkData2(15 downto 0) & - upLinkData1(15 downto 0) & - upLinkData0(15 downto 0); - - upLinkData_01_s(229 downto 96) <= (others => '0'); - upLinkData_01_s(95 downto 0) <= upLinkData5(15 downto 0) & - upLinkData4(15 downto 0) & - upLinkData3(15 downto 0) & - upLinkData2(15 downto 0) & - upLinkData1(15 downto 0) & - upLinkData0(15 downto 0); - - upLinkData_10_s(229 downto 224) <= (others => '0'); - upLinkData_10_s(223 downto 0) <= upLinkData6 & - upLinkData5 & - upLinkData4 & - upLinkData3 & - upLinkData2 & - upLinkData1 & - upLinkData0; - - upLinkData_11_s(229 downto 192) <= (others => '0'); - upLinkData_11_s(191 downto 0) <= upLinkData5 & - upLinkData4 & - upLinkData3 & - upLinkData2 & - upLinkData1 & - upLinkData0; - - upLinkData <= upLinkData_00_s when uplinkSelectDataRate_i = '0' and uplinkSelectFEC_i = '0' else - upLinkData_01_s when uplinkSelectDataRate_i = '0' and uplinkSelectFEC_i = '1' else - upLinkData_10_s when uplinkSelectDataRate_i = '1' and uplinkSelectFEC_i = '0' else - upLinkData_11_s when uplinkSelectDataRate_i = '1' and uplinkSelectFEC_i = '1'; - -end behavioral; ---=================================================================================================-- ---#################################################################################################-- ---=================================================================================================-- \ No newline at end of file diff --git a/TestBench_hw/downlinkstimulis_top.vhd b/TestBench_hw/downlinkstimulis_top.vhd deleted file mode 100644 index c8e61ca..0000000 --- a/TestBench_hw/downlinkstimulis_top.vhd +++ /dev/null @@ -1,184 +0,0 @@ --- IEEE VHDL standard library: -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.all; - ---=================================================================================================-- ---####################################### Entity ##############################################-- ---=================================================================================================-- -entity downlinkstimulis_top is - generic ( - flag_pattern_c : std_logic_vector(7 downto 0) := x"ff"; - init_data_c : std_logic_vector(31 downto 0) := x"e459b8a4" - ); - port ( - downlink_txrdy_i : in std_logic; - downlink_rxrdy_i : in std_logic; - - downlink_txclock_i : in std_logic; - downlink_txen_i : in std_logic; - downlink_rxclock_i : in std_logic; - downlink_rxen_i : in std_logic; - - downlinkData_o : out std_logic_vector(31 downto 0); - downlinkData_i : in std_logic_vector(31 downto 0); - - downlink_txFlag_o : out std_logic; - downlink_rxFlag_o : out std_logic; - - downlink_error_o : out std_logic - ); -end downlinkstimulis_top; - ---=================================================================================================-- ---#################################### Architecture ###########################################-- ---=================================================================================================-- - -architecture behavioral of downlinkstimulis_top is - - signal check_prev_cnter_g0_s : unsigned(7 downto 0); - signal check_prev_cnter_g1_s : unsigned(7 downto 0); - signal check_prev_cnter_g2_s : unsigned(7 downto 0); - signal check_prev_cnter_g3_s : unsigned(7 downto 0); - - signal checker_rdy_s : std_logic; - -begin --========#### Architecture Body ####========-- - - downlinkGen_proc: process(downlink_txrdy_i, downlink_txclock_i) - variable cnter_g0 : unsigned(7 downto 0); - variable cnter_g1 : unsigned(7 downto 0); - variable cnter_g2 : unsigned(7 downto 0); - variable cnter_g3 : unsigned(7 downto 0); - begin - - if downlink_txrdy_i = '0' then - cnter_g0 := unsigned(init_data_c(7 downto 0)); --x"74"; - cnter_g1 := unsigned(init_data_c(15 downto 8)); --x"20"; - cnter_g2 := unsigned(init_data_c(23 downto 16)); --x"a6"; - cnter_g3 := unsigned(init_data_c(31 downto 24)); --x"18"; - - downlinkData_o <= x"00000000"; - - elsif rising_edge(downlink_txclock_i) then - - if downlink_txen_i = '1' then - - -- Flag generator - downlink_txFlag_o <= '0'; - if std_logic_vector(cnter_g0) = flag_pattern_c then - downlink_txFlag_o <= '1'; - end if; - - -- Data generator - downlinkData_o <= std_logic_vector(cnter_g3) & std_logic_vector(cnter_g2) & std_logic_vector(cnter_g1) & std_logic_vector(cnter_g0); - - if cnter_g0 = x"FF" then - cnter_g0 := x"00"; - else - cnter_g0 := cnter_g0 + 1; - end if; - - if cnter_g1 = x"FF" then - cnter_g1 := x"00"; - else - cnter_g1 := cnter_g1 + 1; - end if; - - if cnter_g2 = x"FF" then - cnter_g2 := x"00"; - else - cnter_g2 := cnter_g2 + 1; - end if; - - if cnter_g3 = x"FF" then - cnter_g3 := x"00"; - else - cnter_g3 := cnter_g3 + 1; - end if; - end if; - end if; - - end process; - - downlinkCheck_proc: process(downlink_rxrdy_i, downlink_rxclock_i) - variable check_expected_cnter_g0_s : unsigned(7 downto 0); - variable check_expected_cnter_g1_s : unsigned(7 downto 0); - variable check_expected_cnter_g2_s : unsigned(7 downto 0); - variable check_expected_cnter_g3_s : unsigned(7 downto 0); - begin - - if downlink_rxrdy_i = '0' then - checker_rdy_s <= '0'; - downlink_error_o <= '0'; - - elsif rising_edge(downlink_rxclock_i) then - - if downlink_rxen_i = '1' then - - downlink_rxFlag_o <= '0'; - if downLinkData_i(7 downto 0) = flag_pattern_c then - downlink_rxFlag_o <= '1'; - end if; - - check_prev_cnter_g0_s <= unsigned(downLinkData_i(7 downto 0)); - check_prev_cnter_g1_s <= unsigned(downLinkData_i(15 downto 8)); - check_prev_cnter_g2_s <= unsigned(downLinkData_i(23 downto 16)); - check_prev_cnter_g3_s <= unsigned(downLinkData_i(31 downto 24)); - - -- Check value - if checker_rdy_s = '1' then - - if check_prev_cnter_g0_s = x"FF" then - check_expected_cnter_g0_s := x"00"; - else - check_expected_cnter_g0_s := check_prev_cnter_g0_s + 1; - end if; - - if check_prev_cnter_g1_s = x"FF" then - check_expected_cnter_g1_s := x"00"; - else - check_expected_cnter_g1_s := check_prev_cnter_g1_s + 1; - end if; - - if check_prev_cnter_g2_s = x"FF" then - check_expected_cnter_g2_s := x"00"; - else - check_expected_cnter_g2_s := check_prev_cnter_g2_s + 1; - end if; - - if check_prev_cnter_g3_s = x"FF" then - check_expected_cnter_g3_s := x"00"; - else - check_expected_cnter_g3_s := check_prev_cnter_g3_s + 1; - end if; - - if unsigned(downLinkData_i(7 downto 0)) /= check_expected_cnter_g0_s then - downlink_error_o <= '1'; - end if; - - if unsigned(downLinkData_i(15 downto 8)) /= check_expected_cnter_g1_s then - downlink_error_o <= '1'; - end if; - - if unsigned(downLinkData_i(23 downto 16)) /= check_expected_cnter_g2_s then - downlink_error_o <= '1'; - end if; - - if unsigned(downLinkData_i(31 downto 24)) /= check_expected_cnter_g3_s then - downlink_error_o <= '1'; - end if; - - end if; - - checker_rdy_s <= '1'; - - end if; - end if; - - end process; - -end behavioral; ---=================================================================================================-- ---#################################################################################################-- ---=================================================================================================-- \ No newline at end of file diff --git a/TestBench_hw/jtag_controller/jtag_controller_top.vhd b/TestBench_hw/jtag_controller/jtag_controller_top.vhd deleted file mode 100644 index fe650f5..0000000 --- a/TestBench_hw/jtag_controller/jtag_controller_top.vhd +++ /dev/null @@ -1,191 +0,0 @@ ----------------------------------------------------------------------------------- --- Company: --- Engineer: --- --- Create Date: 27.01.2016 17:21:58 --- Design Name: --- Module Name: xlx_ku_phaligner_mmcm_controller - Behavioral --- Project Name: --- Target Devices: --- Tool Versions: --- Description: --- --- Dependencies: --- --- Revision: --- Revision 0.01 - File Created --- Additional Comments: --- ----------------------------------------------------------------------------------- - - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; - --- Uncomment the following library declaration if using --- arithmetic functions with Signed or Unsigned values -use IEEE.NUMERIC_STD.ALL; - --- Uncomment the following library declaration if instantiating --- any Xilinx leaf cells in this code. ---library UNISIM; ---use UNISIM.VComponents.all; - - -entity jtag_controller_top is - Port ( - CLK_I : in std_logic; - RESET_I : in std_logic; - - reset_lpgbtfpga : out std_logic; - downlinkLpGBTEmulReady : in std_logic - ); -end jtag_controller_top; - -architecture Behavioral of jtag_controller_top is - - COMPONENT jtag_axi_0 - PORT ( - aclk : IN STD_LOGIC; - aresetn : IN STD_LOGIC; - m_axi_awaddr : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - m_axi_awprot : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); - m_axi_awvalid : OUT STD_LOGIC; - m_axi_awready : IN STD_LOGIC; - m_axi_wdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - m_axi_wstrb : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); - m_axi_wvalid : OUT STD_LOGIC; - m_axi_wready : IN STD_LOGIC; - m_axi_bresp : IN STD_LOGIC_VECTOR(1 DOWNTO 0); - m_axi_bvalid : IN STD_LOGIC; - m_axi_bready : OUT STD_LOGIC; - m_axi_araddr : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - m_axi_arprot : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); - m_axi_arvalid : OUT STD_LOGIC; - m_axi_arready : IN STD_LOGIC; - m_axi_rdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0); - m_axi_rresp : IN STD_LOGIC_VECTOR(1 DOWNTO 0); - m_axi_rvalid : IN STD_LOGIC; - m_axi_rready : OUT STD_LOGIC - ); - END COMPONENT; - - COMPONENT lpgbt_axi_control - generic( - -- Width of S_AXI data bus. - C_S_AXI_DATA_WIDTH : integer := 32; - -- Width of S_AXI address bus. - C_S_AXI_ADDR_WIDTH : integer := 5 - ); - port( - -- AXI4LITE Interface - S_AXI_ACLK : in std_logic; - S_AXI_ARESETN : in std_logic; - S_AXI_AWADDR : in std_logic_vector(C_S_AXI_ADDR_WIDTH - 1 downto 0); - S_AXI_AWVALID : in std_logic; - S_AXI_AWREADY : out std_logic; - S_AXI_WDATA : in std_logic_vector(C_S_AXI_DATA_WIDTH - 1 downto 0); - S_AXI_WSTRB : in std_logic_vector((C_S_AXI_DATA_WIDTH / 8) - 1 downto 0); - S_AXI_WVALID : in std_logic; - S_AXI_WREADY : out std_logic; - S_AXI_BRESP : out std_logic_vector(1 downto 0); - S_AXI_BVALID : out std_logic; - S_AXI_BREADY : in std_logic; - S_AXI_ARADDR : in std_logic_vector(C_S_AXI_ADDR_WIDTH - 1 downto 0); - S_AXI_ARVALID : in std_logic; - S_AXI_ARREADY : out std_logic; - S_AXI_RDATA : out std_logic_vector(C_S_AXI_DATA_WIDTH - 1 downto 0); - S_AXI_RRESP : out std_logic_vector(1 downto 0); - S_AXI_RVALID : out std_logic; - S_AXI_RREADY : in std_logic; - - -- Control GBT-FPGA - reset_lpgbtfpga : out std_logic; - - -- Get GBT-FPGA Status - downlinkLpGBTEmulReady : in std_logic - ); - END COMPONENT; - - signal m_axi_awaddr : STD_LOGIC_VECTOR(31 DOWNTO 0); - signal m_axi_awprot : STD_LOGIC_VECTOR(2 DOWNTO 0); - signal m_axi_awvalid : STD_LOGIC; - signal m_axi_awready : STD_LOGIC; - signal m_axi_wdata : STD_LOGIC_VECTOR(31 DOWNTO 0); - signal m_axi_wstrb : STD_LOGIC_VECTOR(3 DOWNTO 0); - signal m_axi_wvalid : STD_LOGIC; - signal m_axi_wready : STD_LOGIC; - signal m_axi_bresp : STD_LOGIC_VECTOR(1 DOWNTO 0); - signal m_axi_bvalid : STD_LOGIC; - signal m_axi_bready : STD_LOGIC; - signal m_axi_araddr : STD_LOGIC_VECTOR(31 DOWNTO 0); - signal m_axi_arprot : STD_LOGIC_VECTOR(2 DOWNTO 0); - signal m_axi_arvalid : STD_LOGIC; - signal m_axi_arready : STD_LOGIC; - signal m_axi_rdata : STD_LOGIC_VECTOR(31 DOWNTO 0); - signal m_axi_rresp : STD_LOGIC_VECTOR(1 DOWNTO 0); - signal m_axi_rvalid : STD_LOGIC; - signal m_axi_rready : STD_LOGIC; - - signal reset_n : STD_LOGIC; -begin - - reset_n <= not(RESET_I); - - jtag_master_inst : jtag_axi_0 - PORT MAP ( - aclk => CLK_I, - aresetn => reset_n, - m_axi_awaddr => m_axi_awaddr, - m_axi_awprot => m_axi_awprot, - m_axi_awvalid => m_axi_awvalid, - m_axi_awready => m_axi_awready, - m_axi_wdata => m_axi_wdata, - m_axi_wstrb => m_axi_wstrb, - m_axi_wvalid => m_axi_wvalid, - m_axi_wready => m_axi_wready, - m_axi_bresp => m_axi_bresp, - m_axi_bvalid => m_axi_bvalid, - m_axi_bready => m_axi_bready, - m_axi_araddr => m_axi_araddr, - m_axi_arprot => m_axi_arprot, - m_axi_arvalid => m_axi_arvalid, - m_axi_arready => m_axi_arready, - m_axi_rdata => m_axi_rdata, - m_axi_rresp => m_axi_rresp, - m_axi_rvalid => m_axi_rvalid, - m_axi_rready => m_axi_rready - ); - - lpgbt_axi_control_inst: lpgbt_axi_control - Port map( - - -- AXI4LITE Interface - S_AXI_ACLK => CLK_I, - S_AXI_ARESETN => reset_n, - S_AXI_AWADDR => m_axi_awaddr(4 downto 0), - S_AXI_AWVALID => m_axi_awvalid, - S_AXI_AWREADY => m_axi_awready, - S_AXI_WDATA => m_axi_wdata, - S_AXI_WSTRB => m_axi_wstrb, - S_AXI_WVALID => m_axi_wvalid, - S_AXI_WREADY => m_axi_wready, - S_AXI_BRESP => m_axi_bresp, - S_AXI_BVALID => m_axi_bvalid, - S_AXI_BREADY => m_axi_bready, - S_AXI_ARADDR => m_axi_araddr(4 downto 0), - S_AXI_ARVALID => m_axi_arvalid, - S_AXI_ARREADY => m_axi_arready, - S_AXI_RDATA => m_axi_rdata, - S_AXI_RRESP => m_axi_rresp, - S_AXI_RVALID => m_axi_rvalid, - S_AXI_RREADY => m_axi_rready, - - -- To GBT-FPGA - reset_lpgbtfpga => reset_lpgbtfpga, - - -- From GBT-FPGA - downlinkLpGBTEmulReady => downlinkLpGBTEmulReady - ); - -end Behavioral; diff --git a/TestBench_hw/jtag_controller/lpgbt_axi_control.vhd b/TestBench_hw/jtag_controller/lpgbt_axi_control.vhd deleted file mode 100644 index 74b5b97..0000000 --- a/TestBench_hw/jtag_controller/lpgbt_axi_control.vhd +++ /dev/null @@ -1,281 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.all; - -entity lpgbt_axi_control is - generic( - -- Width of S_AXI data bus. - C_S_AXI_DATA_WIDTH : integer := 32; - -- Width of S_AXI address bus. - C_S_AXI_ADDR_WIDTH : integer := 5 - ); - port( - -- AXI4LITE Interface - S_AXI_ACLK : in std_logic; - S_AXI_ARESETN : in std_logic; - S_AXI_AWADDR : in std_logic_vector(C_S_AXI_ADDR_WIDTH - 1 downto 0); - S_AXI_AWVALID : in std_logic; - S_AXI_AWREADY : out std_logic; - S_AXI_WDATA : in std_logic_vector(C_S_AXI_DATA_WIDTH - 1 downto 0); - S_AXI_WSTRB : in std_logic_vector((C_S_AXI_DATA_WIDTH / 8) - 1 downto 0); - S_AXI_WVALID : in std_logic; - S_AXI_WREADY : out std_logic; - S_AXI_BRESP : out std_logic_vector(1 downto 0); - S_AXI_BVALID : out std_logic; - S_AXI_BREADY : in std_logic; - S_AXI_ARADDR : in std_logic_vector(C_S_AXI_ADDR_WIDTH - 1 downto 0); - S_AXI_ARVALID : in std_logic; - S_AXI_ARREADY : out std_logic; - S_AXI_RDATA : out std_logic_vector(C_S_AXI_DATA_WIDTH - 1 downto 0); - S_AXI_RRESP : out std_logic_vector(1 downto 0); - S_AXI_RVALID : out std_logic; - S_AXI_RREADY : in std_logic; - - -- Control GBT-FPGA - reset_lpgbtfpga : out std_logic; - - -- Get GBT-FPGA Status - downlinkLpGBTEmulReady : in std_logic - ); -end lpgbt_axi_control; - -architecture arch of lpgbt_axi_control is - - -- AXI4LITE signals - signal axi_awaddr : std_logic_vector(C_S_AXI_ADDR_WIDTH - 1 downto 0); - signal axi_awready : std_logic; - signal axi_wready : std_logic; - signal axi_bresp : std_logic_vector(1 downto 0); - signal axi_bvalid : std_logic; - signal axi_araddr : std_logic_vector(C_S_AXI_ADDR_WIDTH - 1 downto 0); - signal axi_arready : std_logic; - signal axi_rdata : std_logic_vector(C_S_AXI_DATA_WIDTH - 1 downto 0); - signal axi_rresp : std_logic_vector(1 downto 0); - signal axi_rvalid : std_logic; - - -- ADDR_LSB is used for addressing 32 bit registers/memories - constant ADDR_LSB : integer := (C_S_AXI_DATA_WIDTH / 32) + 1; - constant OPT_MEM_ADDR_BITS : integer := 2; - - -- Slave register read/write signals - signal slv_reg_rden : std_logic; - signal slv_reg_wren : std_logic; - - -- Signal that stores the current register's value - signal reg_data_out : std_logic_vector(C_S_AXI_DATA_WIDTH - 1 downto 0); - - signal new_control_val : std_logic := '0'; - - signal rx_reply_received_s : std_logic; - -begin - - -- I/O Connections assignments - S_AXI_AWREADY <= axi_awready; - S_AXI_WREADY <= axi_wready; - S_AXI_BRESP <= axi_bresp; - S_AXI_BVALID <= axi_bvalid; - S_AXI_ARREADY <= axi_arready; - S_AXI_RDATA <= axi_rdata; - S_AXI_RRESP <= axi_rresp; - S_AXI_RVALID <= axi_rvalid; - - -- Implement axi_awready generation - -- axi_awready is asserted for one S_AXI_ACLK clock cycle when both - -- S_AXI_AWVALID and S_AXI_WVALID are asserted. axi_awready is - -- de-asserted when reset is low. - process(S_AXI_ACLK) - begin - if rising_edge(S_AXI_ACLK) then - if S_AXI_ARESETN = '0' then - axi_awready <= '0'; - else - if (axi_awready = '0' and S_AXI_AWVALID = '1' and S_AXI_WVALID = '1') then - -- slave is ready to accept write address when - -- there is a valid write address and write data - -- on the write address and data bus. This design - -- expects no outstanding transactions. - axi_awready <= '1'; - else - axi_awready <= '0'; - end if; - end if; - end if; - end process; - - -- Implement axi_awaddr latching - -- This process is used to latch the address when both - -- S_AXI_AWVALID and S_AXI_WVALID are valid. - process(S_AXI_ACLK) - begin - if rising_edge(S_AXI_ACLK) then - if S_AXI_ARESETN = '0' then - axi_awaddr <= (others => '0'); - else - if (axi_awready = '0' and S_AXI_AWVALID = '1' and S_AXI_WVALID = '1') then - -- Write Address latching - axi_awaddr <= S_AXI_AWADDR; - end if; - end if; - end if; - end process; - - -- Implement axi_wready generation - -- axi_wready is asserted for one S_AXI_ACLK clock cycle when both - -- S_AXI_AWVALID and S_AXI_WVALID are asserted. axi_wready is - -- de-asserted when reset is low. - process(S_AXI_ACLK) - begin - if rising_edge(S_AXI_ACLK) then - if S_AXI_ARESETN = '0' then - axi_wready <= '0'; - else - if (axi_wready = '0' and S_AXI_WVALID = '1' and S_AXI_AWVALID = '1') then - -- slave is ready to accept write data when - -- there is a valid write address and write data - -- on the write address and data bus. This design - -- expects no outstanding transactions. - axi_wready <= '1'; - else - axi_wready <= '0'; - end if; - end if; - end if; - end process; - - -- Implement memory mapped register select and write logic generation - -- The write data is accepted and written to memory mapped registers when - -- axi_awready, S_AXI_WVALID, axi_wready and S_AXI_WVALID are asserted. Write strobes are used to - -- select byte enables of slave registers while writing. - -- These registers are cleared when reset (active low) is applied. - -- Slave register write enable is asserted when valid address and data are available - -- and the slave is ready to accept the write address and write data. - slv_reg_wren <= axi_wready and S_AXI_WVALID and axi_awready and S_AXI_AWVALID; - - process(S_AXI_ACLK) - variable loc_addr : std_logic_vector(OPT_MEM_ADDR_BITS downto 0); - begin - if rising_edge(S_AXI_ACLK) then - - if S_AXI_ARESETN = '0' then - reset_lpgbtfpga <= '0'; - else - loc_addr := axi_awaddr(ADDR_LSB + OPT_MEM_ADDR_BITS downto ADDR_LSB); - if (slv_reg_wren = '1') then - case loc_addr is - when b"000" => - - if (S_AXI_WSTRB(0) = '1') then - reset_lpgbtfpga <= S_AXI_WDATA(0); - end if; - - when others => NULL; - - end case; - end if; - end if; - end if; - end process; - - -- Implement write response logic generation - -- The write response and response valid signals are asserted by the slave - -- when axi_wready, S_AXI_WVALID, axi_wready and S_AXI_WVALID are asserted. - -- This marks the acceptance of address and indicates the status of - -- write transaction. - process(S_AXI_ACLK) - begin - if rising_edge(S_AXI_ACLK) then - if S_AXI_ARESETN = '0' then - axi_bvalid <= '0'; - axi_bresp <= "00"; --need to work more on the responses - else - if (axi_awready = '1' and S_AXI_AWVALID = '1' and axi_wready = '1' and S_AXI_WVALID = '1' and axi_bvalid = '0') then - axi_bvalid <= '1'; - axi_bresp <= "00"; - elsif (S_AXI_BREADY = '1' and axi_bvalid = '1') then --check if bready is asserted while bvalid is high) - axi_bvalid <= '0'; -- (there is a possibility that bready is always asserted high) - end if; - end if; - end if; - end process; - - -- Implement axi_arready generation - -- axi_arready is asserted for one S_AXI_ACLK clock cycle when - -- S_AXI_ARVALID is asserted. axi_awready is - -- de-asserted when reset (active low) is asserted. - -- The read address is also latched when S_AXI_ARVALID is - -- asserted. axi_araddr is reset to zero on reset assertion. - process(S_AXI_ACLK) - begin - if rising_edge(S_AXI_ACLK) then - if S_AXI_ARESETN = '0' then - axi_arready <= '0'; - axi_araddr <= (others => '1'); - else - if (axi_arready = '0' and S_AXI_ARVALID = '1') then - -- indicates that the slave has acceped the valid read address - axi_arready <= '1'; - -- Read Address latching - axi_araddr <= S_AXI_ARADDR; - else - axi_arready <= '0'; - end if; - end if; - end if; - end process; - - -- Implement axi_arvalid generation - -- axi_rvalid is asserted for one S_AXI_ACLK clock cycle when both - -- S_AXI_ARVALID and axi_arready are asserted. The slave registers - -- data are available on the axi_rdata bus at this instance. The - -- assertion of axi_rvalid marks the validity of read data on the - -- bus and axi_rresp indicates the status of read transaction.axi_rvalid - -- is deasserted on reset (active low). axi_rresp and axi_rdata are - -- cleared to zero on reset (active low). - process(S_AXI_ACLK) - begin - if rising_edge(S_AXI_ACLK) then - if S_AXI_ARESETN = '0' then - axi_rvalid <= '0'; - axi_rresp <= "00"; - else - if (axi_arready = '1' and S_AXI_ARVALID = '1' and axi_rvalid = '0') then - -- Valid read data is available at the read data bus - axi_rvalid <= '1'; - axi_rresp <= "00"; -- 'OKAY' response - elsif (axi_rvalid = '1' and S_AXI_RREADY = '1') then - -- Read data is accepted by the master - axi_rvalid <= '0'; - end if; - end if; - end if; - end process; - - -- Implement memory mapped register select and read logic generation - -- Slave register read enable is asserted when valid address is available - -- and the slave is ready to accept the read address. - slv_reg_rden <= axi_arready and S_AXI_ARVALID and (not axi_rvalid); - - reg_data_out <= x"0000000" & "000" & downlinkLpGBTEmulReady when axi_araddr(ADDR_LSB + OPT_MEM_ADDR_BITS downto ADDR_LSB) = b"000" else - x"00000000"; - - -- Output register or memory read data - process(S_AXI_ACLK) is - begin - if (rising_edge(S_AXI_ACLK)) then - - if (S_AXI_ARESETN = '0') then - axi_rdata <= (others => '0'); - else - if (slv_reg_rden = '1') then - -- When there is a valid read address (S_AXI_ARVALID) with - -- acceptance of read address by the slave (axi_arready), - -- output the read dada - -- Read address mux - axi_rdata <= reg_data_out; -- register read data - end if; - end if; - end if; - end process; - -end arch; \ No newline at end of file diff --git a/TestBench_hw/lpgbt_downlinkGenerator.vhd b/TestBench_hw/lpgbt_downlinkGenerator.vhd new file mode 100644 index 0000000..8f24817 --- /dev/null +++ b/TestBench_hw/lpgbt_downlinkGenerator.vhd @@ -0,0 +1,165 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use ieee.numeric_std.all; + +entity lpgbt_elink_downlinkGenerator is + port( + --clk40Mhz_Tx_i : in std_logic; + clk320DnLink_i : in std_logic; + clkEnDnLink_i : in std_logic; + + generator_rst_i : in std_logic; + + config_group0_i : in std_logic_vector(1 downto 0); + config_group1_i : in std_logic_vector(1 downto 0); + config_group2_i : in std_logic_vector(1 downto 0); + config_group3_i : in std_logic_vector(1 downto 0); + + fixed_pattern_i : in std_logic_vector(31 downto 0); + + downlink_o : out std_logic_vector(31 downto 0); + + eport_gen_rdy_o : out std_logic_vector(15 downto 0) + ); +end lpgbt_elink_downlinkGenerator; + +architecture rtl of lpgbt_elink_downlinkGenerator is + + -- EPORT generators + component prbs7_2b_generator + generic( + INIT_c : in std_logic_vector(7 downto 0) + ); + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + err_pattern_i : in std_logic_vector(7 downto 0); + rep_delay_i : in std_logic_vector(23 downto 0); + prbs_word_o : out std_logic_vector(1 downto 0); + rdy_o : out std_logic + ); + end component; + + component prbs7_4b_generator + generic( + INIT_c : in std_logic_vector(7 downto 0) + ); + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + err_pattern_i : in std_logic_vector(7 downto 0); + rep_delay_i : in std_logic_vector(23 downto 0); + prbs_word_o : out std_logic_vector(3 downto 0); + rdy_o : out std_logic + ); + end component; + + component prbs7_8b_generator + generic( + INIT_c : in std_logic_vector(7 downto 0) + ); + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + err_pattern_i : in std_logic_vector(7 downto 0); + rep_delay_i : in std_logic_vector(23 downto 0); + prbs_word_o : out std_logic_vector(7 downto 0); + rdy_o : out std_logic + ); + end component; + + type elink_80prbs_arr_T is array (integer range <>) of std_logic_vector(1 downto 0); + type elink_160prbs_arr_T is array (integer range <>) of std_logic_vector(3 downto 0); + type elink_320prbs_arr_T is array (integer range <>) of std_logic_vector(7 downto 0); + + signal reset_synch_s : std_logic; + signal prbs7_80data_s : elink_80prbs_arr_T(15 downto 0); + signal prbs7_160data_s : elink_160prbs_arr_T(7 downto 0); + signal prbs7_320data_s : elink_320prbs_arr_T(3 downto 0); + signal rst_dst_s : std_logic; + +begin + + reset_synch_proc: process(generator_rst_i, clk320DnLink_i) + begin + if generator_rst_i = '1' then + rst_dst_s <= '1'; + reset_synch_s <= '1'; + elsif rising_edge(clk320DnLink_i) then + rst_dst_s <= '0'; + reset_synch_s <= rst_dst_s; + end if; + end process; + + multi_elink_gen_80mbps: for i in 0 to 15 generate + prbs7_2b_generator_inst: prbs7_2b_generator + generic map( + INIT_c => x"a4" + ) + port map( + reset_i => reset_synch_s, + clk_i => clk320DnLink_i, + clken_i => clkEnDnLink_i, + err_pattern_i => (others => '0'), -- No error injection + rep_delay_i => (others => '0'), -- No error injection + prbs_word_o => prbs7_80data_s(i), + rdy_o => eport_gen_rdy_o(i) + ); + end generate; + + multi_elink_gen_160mbps: for i in 0 to 7 generate + prbs7_2b_generator_inst: prbs7_4b_generator + generic map( + INIT_c => x"a4" + ) + port map( + reset_i => reset_synch_s, + clk_i => clk320DnLink_i, + clken_i => clkEnDnLink_i, + err_pattern_i => (others => '0'), -- No error injection + rep_delay_i => (others => '0'), -- No error injection + prbs_word_o => prbs7_160data_s(i), + rdy_o => eport_gen_rdy_o(i) + ); + end generate; + + multi_elink_gen_320mbps: for i in 0 to 3 generate + prbs7_2b_generator_inst: prbs7_8b_generator + generic map( + INIT_c => x"a4" + ) + port map( + reset_i => reset_synch_s, + clk_i => clk320DnLink_i, + clken_i => clkEnDnLink_i, + err_pattern_i => (others => '0'), -- No error injection + rep_delay_i => (others => '0'), -- No error injection + prbs_word_o => prbs7_320data_s(i), + rdy_o => eport_gen_rdy_o(i) + ); + end generate; + + downlink_o(7 downto 0) <= prbs7_320data_s(0) when config_group0_i = "11" else + prbs7_160data_s(1) & prbs7_160data_s(0) when config_group0_i = "10" else + prbs7_80data_s(3) & prbs7_80data_s(2) & prbs7_80data_s(1) & prbs7_80data_s(0) when config_group0_i = "01" else + fixed_pattern_i(7 downto 0); + + downlink_o(15 downto 8) <= prbs7_320data_s(1) when config_group1_i = "11" else + prbs7_160data_s(3) & prbs7_160data_s(2) when config_group1_i = "10" else + prbs7_80data_s(7) & prbs7_80data_s(6) & prbs7_80data_s(5) & prbs7_80data_s(4) when config_group0_i = "01" else + fixed_pattern_i(15 downto 8); + + downlink_o(23 downto 16) <= prbs7_320data_s(2) when config_group2_i = "11" else + prbs7_160data_s(5) & prbs7_160data_s(4) when config_group2_i = "10" else + prbs7_80data_s(11) & prbs7_80data_s(10) & prbs7_80data_s(9) & prbs7_80data_s(8) when config_group0_i = "01" else + fixed_pattern_i(23 downto 16); + + downlink_o(31 downto 24) <= prbs7_320data_s(3) when config_group3_i = "11" else + prbs7_160data_s(7) & prbs7_160data_s(6) when config_group3_i = "10" else + prbs7_80data_s(15) & prbs7_80data_s(14) & prbs7_80data_s(13) & prbs7_80data_s(12) when config_group0_i = "01" else + fixed_pattern_i(31 downto 24); + +end rtl; diff --git a/TestBench_hw/lpgbtemul_top.vhd b/TestBench_hw/lpgbtemul_top.vhd deleted file mode 100644 index 1f27a03..0000000 --- a/TestBench_hw/lpgbtemul_top.vhd +++ /dev/null @@ -1,642 +0,0 @@ --- IEEE VHDL standard library: -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.all; - -use work.lpgbtfpga_package.all; ---=================================================================================================-- ---####################################### Entity ##############################################-- ---=================================================================================================-- - -entity lpgbtemul_top is - port( - -- Resets - rst_downlink_i : in std_logic; - rst_uplink_i : in std_logic; - - -- DownLink - downlinkClk_o : out std_logic; - downlinkClkEn_o : out std_logic; - - downLinkDataGroup0 : out std_logic_vector(15 downto 0); - downLinkDataGroup1 : out std_logic_vector(15 downto 0); - downLinkDataEc : out std_logic_vector(1 downto 0); - downLinkDataIc : out std_logic_vector(1 downto 0); - - downLinkBypassDeinterleaver : in std_logic; - downLinkBypassFECDecoder : in std_logic; - downLinkBypassDescsrambler : in std_logic; - - enableFECErrCounter : in std_logic; - fecCorrectionCount : out std_logic_vector(15 downto 0); - - downlinkRdy_o : out std_logic; - - -- uplink data - uplinkClk_o : out std_logic; - uplinkClkEn_i : in std_logic; - - upLinkData0 : in std_logic_vector(31 downto 0); - upLinkData1 : in std_logic_vector(31 downto 0); - upLinkData2 : in std_logic_vector(31 downto 0); - upLinkData3 : in std_logic_vector(31 downto 0); - upLinkData4 : in std_logic_vector(31 downto 0); - upLinkData5 : in std_logic_vector(31 downto 0); - upLinkData6 : in std_logic_vector(31 downto 0); - upLinkDataIC : in std_logic_vector(1 downto 0); - upLinkDataEC : in std_logic_vector(1 downto 0); - - uplinkRdy_o : out std_logic; - - -- MGT - clk_mgtrefclk_i : in std_logic; --! Transceiver serial clock - clk_mgtfreedrpclk_i : in std_logic; - - mgt_rxn_i : in std_logic; - mgt_rxp_i : in std_logic; - mgt_txn_o : out std_logic; - mgt_txp_o : out std_logic; - - mgt_rdy_o : out std_logic; - - -- Uplink controll signals - upLinkScramblerBypass : in std_logic; - upLinkScramblerReset : in std_logic; - upLinkFecBypass : in std_logic; - upLinkInterleaverBypass : in std_logic; - fecMode : in std_logic; - txDataRate : in std_logic - ); -end lpgbtemul_top; - ---=================================================================================================-- ---#################################### Architecture ###########################################-- ---=================================================================================================-- - -architecture behabioral of lpgbtemul_top is - - signal clk_mgtTxUsrclkToEmul_s : std_logic; - signal clk_mgtRxUsrclkToEmul_s : std_logic; - - signal dat_downLinkWord_fromMgt_s : std_logic_vector(31 downto 0); - signal sta_mgtRxRdy_s : std_logic; - - signal rst_pattsearch_s : std_logic; - signal ctr_clkSlip_s : std_logic; - signal sta_headeLocked_s : std_logic; - signal sta_headerFlag_s : std_logic; - - signal sta_rxgbxRdy_s : std_logic; - - signal rstn_datapath_s : std_logic; - signal rst_datapath_s : std_logic; - - signal dat_downLinkWord_fromGb_s : std_logic_vector(255 downto 0); - signal dat_downLinkWord_fromGbInv_s : std_logic_vector(63 downto 0); - signal dat_downLinkWord_toPattSrch_s : std_logic_vector(15 downto 0); - - signal clk_mgtTxUsrclk_s : std_logic; - signal clk_mgtRxUsrclk_s : std_logic; - - signal downlinkRdy_s0 : std_logic; - signal downlinkRdy_s1 : std_logic; - signal sta_mgtTxRdy_s : std_logic; - - signal uplinkClkEn_sh_s : std_logic; - signal uplinkClkEn_shgb_s : std_logic; - signal sta_txGbRdy_s : std_logic; - - signal dat_upLinkWord_fromLpGBT_s : std_logic_vector(255 downto 0); - signal dat_upLinkWord_fromLpGBT_pipeline_s : std_logic_vector(255 downto 0); - signal dat_upLinkWord_toGb_s : std_logic_vector(255 downto 0); - signal dat_upLinkWord_toGb_pipeline_s : std_logic_vector(255 downto 0); - signal dat_upLinkWord_fromGb_s : std_logic_vector(31 downto 0); - - signal rst_uplinkGb_s : std_logic; - signal rst_uplinkGb_synch_s : std_logic; - signal rst_uplinkMgt_s : std_logic; - signal rst_uplinkInitDone_s : std_logic; - signal rst_downlinkInitDone_s : std_logic; - - signal RX_CLKEn_s : std_logic; - signal RX_CLK40_s : std_logic; - - signal downLinkDataIc_s : std_logic_vector(1 downto 0); - signal downLinkDataEc_s : std_logic_vector(1 downto 0); - signal downLinkDataGroup1_s : std_logic_vector(15 downto 0); - signal downLinkDataGroup0_s : std_logic_vector(15 downto 0); - - signal clk_dataFlag_rxGb_s : std_logic; - - signal upLinkData0_s : std_logic_vector(31 downto 0); - signal upLinkData1_s : std_logic_vector(31 downto 0); - signal upLinkData2_s : std_logic_vector(31 downto 0); - signal upLinkData3_s : std_logic_vector(31 downto 0); - signal upLinkData4_s : std_logic_vector(31 downto 0); - signal upLinkData5_s : std_logic_vector(31 downto 0); - signal upLinkData6_s : std_logic_vector(31 downto 0); - signal upLinkDataIC_s : std_logic_vector(1 downto 0); - signal upLinkDataEC_s : std_logic_vector(1 downto 0); - - COMPONENT LpGBT_Model_dataPath - PORT ( - -- Clock - upClki : in std_logic; - downClki : in std_logic; - downLinkDataPathEnable : in std_logic; - upLinkDataPathEnable : in std_logic; - - -- DownLink - downLinkFrame : in std_logic_vector(63 downto 0); - - downLinkDataGroup0 : out std_logic_vector(15 downto 0); - downLinkDataGroup1 : out std_logic_vector(15 downto 0); - downLinkDataEc : out std_logic_vector(1 downto 0); - downLinkDataIc : out std_logic_vector(1 downto 0); - downLinkHeader : out std_logic_vector(3 downto 0); - - downLinkBypassDeinterleaver : in std_logic; - downLinkBypassFECDecoder : in std_logic; - downLinkBypassDescsrambler : in std_logic; - - enableFECErrCounter : in std_logic; - fecCorrectionCount : out std_logic_vector(15 downto 0); - - -- uplink data - upLinkData0 : in std_logic_vector(31 downto 0); - upLinkData1 : in std_logic_vector(31 downto 0); - upLinkData2 : in std_logic_vector(31 downto 0); - upLinkData3 : in std_logic_vector(31 downto 0); - upLinkData4 : in std_logic_vector(31 downto 0); - upLinkData5 : in std_logic_vector(31 downto 0); - upLinkData6 : in std_logic_vector(31 downto 0); - upLinkDataIC : in std_logic_vector(1 downto 0); - upLinkDataEC : in std_logic_vector(1 downto 0); - - -- Uplink controll signals - upLinkScramblerBypass : in std_logic; - upLinkScramblerReset : in std_logic; - upLinkFecBypass : in std_logic; - upLinkInterleaverBypass : in std_logic; - fecMode : in std_logic; - txDataRate : in std_logic; - - -- Uplink output data - upLinkFrame : out std_logic_vector(255 downto 0) - ); - END COMPONENT; - - COMPONENT mgt - port ( - -- Clocks - MGT_REFCLK_i : in std_logic; - MGT_FREEDRPCLK_i : in std_logic; - - MGT_RXUSRCLK_o : out std_logic; - MGT_TXUSRCLK_o : out std_logic; - - -- Resets - MGT_TXRESET_i : in std_logic; - MGT_RXRESET_i : in std_logic; - - -- Control & Status - MGT_RXSlide_i : in std_logic; - MGT_TXREADY_o : out std_logic; - MGT_RXREADY_o : out std_logic; - - MGT_TX_ALIGNED_o : out std_logic; - MGT_TX_PIPHASE_o : out std_logic_vector(6 downto 0); - MGT_ENTXCALIBIN_i : in std_logic; - MGT_TXCALIB_i : in std_logic_vector(6 downto 0); - - -- Data - MGT_USRWORD_i : in std_logic_vector(31 downto 0); - MGT_USRWORD_o : out std_logic_vector(31 downto 0); - - RXn_i : in std_logic; - RXp_i : in std_logic; - TXn_o : out std_logic; - TXp_o : out std_logic - ); - END COMPONENT; - - COMPONENT mgt_framealigner - generic ( - c_wordRatio : integer; - c_headerPattern : std_logic_vector; - c_wordSize : integer; - c_allowedFalseHeader : integer; - c_allowedFalseHeaderOverN : integer; - c_requiredTrueHeader : integer; - - c_resetOnEven : integer := 0; - c_bitslip_mindly : integer := 40 - ); - port ( - -- Clock(s) - clk_pcsRx_i : in std_logic; - clk_freeRunningClk_i : in std_logic; - - -- Reset(s) - rst_pattsearch_i : in std_logic; - rst_mgtctrler_i : in std_logic; - rst_rstoneven_o : out std_logic; - - -- Control - cmd_bitslipCtrl_o : out std_logic; - cmd_rstonevenoroddsel_i : in std_logic; - - -- Status - sta_headerLocked_o : out std_logic; - sta_headerFlag_o : out std_logic; - - -- Data - dat_word_i : in std_logic_vector(c_headerPattern'length-1 downto 0) - ); - END COMPONENT; - - COMPONENT rxGearbox - generic ( - c_clockRatio : integer; - c_inputWidth : integer; - c_outputWidth : integer - ); - port ( - -- Clock and reset - clk_inClk_i : in std_logic; - clk_clkEn_i : in std_logic; - clk_dataFlag_o : out std_logic; - - rst_gearbox_i : in std_logic; - - -- Data - dat_inFrame_i : in std_logic_vector((c_inputWidth-1) downto 0); - dat_outFrame_o : out std_logic_vector((c_inputWidth*c_clockRatio)-1 downto 0); - - -- Status - sta_gbRdy_o : out std_logic - ); - END COMPONENT; - - COMPONENT txGearbox - generic ( - c_clockRatio : integer; - c_inputWidth : integer; - c_outputWidth : integer - ); - port ( - -- Clock and reset - clk_inClk_i : in std_logic; - clk_clkEn_i : in std_logic; - clk_outClk_i : in std_logic; - - rst_gearbox_i : in std_logic; - - -- Data - dat_inFrame_i : in std_logic_vector((c_inputWidth-1) downto 0); - dat_outFrame_o : out std_logic_vector((c_outputWidth-1) downto 0); - - -- Status - sta_gbRdy_o : out std_logic - ); - END COMPONENT; - -begin --========#### Architecture Body ####========-- - - rst_pattsearch_s <= not(sta_mgtRxRdy_s); - rst_datapath_s <= not(sta_headeLocked_s); - - rst_uplinkGb_s <= rst_uplink_i or not(sta_mgtTxRdy_s) or not(sta_headeLocked_s); - rst_uplinkMgt_s <= not(sta_headeLocked_s); - - uplinkRdy_o <= sta_txGbRdy_s; - - --Rdy process (delay from 1 clock) - process(sta_rxgbxRdy_s, clk_mgtRxUsrclk_s) - begin - if sta_rxgbxRdy_s = '0' then - downlinkRdy_o <= '0'; - downlinkRdy_s0 <= '0'; - downlinkRdy_s1 <= '0'; - elsif rising_edge(clk_mgtRxUsrclk_s) then - if RX_CLKEn_s = '1' then - downlinkRdy_s0 <= '1'; - downlinkRdy_s1 <= downlinkRdy_s0; - downlinkRdy_o <= downlinkRdy_s1; - end if; - end if; - end process; - - -- MGT - mgt_inst: mgt - port map( - -- Clocks - MGT_REFCLK_i => clk_mgtrefclk_i, - MGT_FREEDRPCLK_i => clk_mgtfreedrpclk_i, - - MGT_RXUSRCLK_o => clk_mgtRxUsrclk_s, - MGT_TXUSRCLK_o => clk_mgtTxUsrclk_s, - - -- Resets - MGT_TXRESET_i => rst_downlink_i, -- rst_uplinkMgt_s, JM: issue - reseting the Tx side resets also the CPLL that is used by the Rx - MGT_RXRESET_i => rst_downlink_i, - - -- Control & Status - MGT_RXSlide_i => ctr_clkSlip_s, - MGT_TXREADY_o => sta_mgtTxRdy_s, - MGT_RXREADY_o => sta_mgtRxRdy_s, - - MGT_TX_ALIGNED_o => open, - MGT_TX_PIPHASE_o => open, - MGT_ENTXCALIBIN_i => '0', - MGT_TXCALIB_i => "0000000", - - -- Data - MGT_USRWORD_i => dat_upLinkWord_fromGb_s, - MGT_USRWORD_o => dat_downLinkWord_fromMgt_s, - - RXn_i => mgt_rxn_i, - RXp_i => mgt_rxp_i, - TXn_o => mgt_txn_o, - TXp_o => mgt_txp_o - ); - - mgt_rdy_o <= sta_mgtTxRdy_s and sta_mgtRxRdy_s; - - -- Pattern aligner - mgt_framealigner_inst: mgt_framealigner - GENERIC map ( - c_wordRatio => 8, - c_headerPattern => x"F00F", - c_wordSize => 32, - c_allowedFalseHeader => 32, - c_allowedFalseHeaderOverN => 40, - c_requiredTrueHeader => 30, - c_bitslip_mindly => 40 - ) - PORT map ( - -- Clock(s) - clk_pcsRx_i => clk_mgtRxUsrclk_s, - clk_freeRunningClk_i => '0', -- Not used: rst on even is not enabled - - -- Reset(s) - rst_pattsearch_i => rst_pattsearch_s, - rst_mgtctrler_i => '0', -- Not used: rst on even is not enabled - rst_rstoneven_o => open, -- Not used: rst on even is not enabled - - -- Control - cmd_bitslipCtrl_o => ctr_clkSlip_s, - cmd_rstonevenoroddsel_i => '0', -- Not used: rst on even is not enabled - - -- Status - sta_headerLocked_o => sta_headeLocked_s, - sta_headerFlag_o => sta_headerFlag_s, - - -- Data - dat_word_i => dat_downLinkWord_toPattSrch_s - ); - - - dat_downLinkWord_toPattSrch_s <= dat_downLinkWord_fromMgt_s(24) & dat_downLinkWord_fromMgt_s(25) & dat_downLinkWord_fromMgt_s(26) & dat_downLinkWord_fromMgt_s(27) & - dat_downLinkWord_fromMgt_s(16) & dat_downLinkWord_fromMgt_s(17) & dat_downLinkWord_fromMgt_s(18) & dat_downLinkWord_fromMgt_s(19) & - dat_downLinkWord_fromMgt_s(8) & dat_downLinkWord_fromMgt_s(9) & dat_downLinkWord_fromMgt_s(10) & dat_downLinkWord_fromMgt_s(11) & - dat_downLinkWord_fromMgt_s(3) & dat_downLinkWord_fromMgt_s(2) & dat_downLinkWord_fromMgt_s(1) & dat_downLinkWord_fromMgt_s(0); - - -- Downlink gearbox - rxGearbox_inst: rxGearbox - generic map( - c_clockRatio => 8, - c_inputWidth => 32, - c_outputWidth => 64 - ) - port map( - -- Clock and reset - clk_inClk_i => clk_mgtRxUsrclk_s, - clk_clkEn_i => sta_headerFlag_s, - clk_dataFlag_o => clk_dataFlag_rxGb_s, - rst_gearbox_i => rst_datapath_s, - - -- Data - dat_inFrame_i => dat_downLinkWord_fromMgt_s, - dat_outFrame_o => dat_downLinkWord_fromGb_s, - - -- Status - sta_gbRdy_o => sta_rxgbxRdy_s - ); - - --! Multicycle path configuration (downlink) - syncShiftRegDown_proc: process(sta_rxgbxRdy_s, clk_mgtRxUsrclk_s) - variable cnter : integer range 0 to 7; - begin - - if sta_rxgbxRdy_s = '0' then - cnter := 0; - RX_CLKEn_s <= '0'; - rst_downlinkInitDone_s <= '0'; - - elsif rising_edge(clk_mgtRxUsrclk_s) then - if clk_dataFlag_rxGb_s = '1' then - cnter := 0; - rst_downlinkInitDone_s <= '1'; - elsif rst_downlinkInitDone_s = '1' then - cnter := cnter + 1; - end if; - - RX_CLKEn_s <= '0'; - if cnter = 4 then - RX_CLKEn_s <= rst_downlinkInitDone_s; - end if; - end if; - end process; - - -- Uplink gearbox - txGearbox_inst: txGearbox - generic map ( - c_clockRatio => 8, - c_inputWidth => 256, - c_outputWidth => 32 - ) - port map ( - -- Clock and reset - clk_inClk_i => clk_mgtTxUsrclk_s, --RX_CLKEn_s, - clk_clkEn_i => uplinkClkEn_shgb_s, --'1', - clk_outClk_i => clk_mgtTxUsrclk_s, - - rst_gearbox_i => rst_uplinkGb_synch_s, - - -- Data - dat_inFrame_i => dat_upLinkWord_toGb_pipeline_s, - dat_outFrame_o => dat_upLinkWord_fromGb_s, - - -- Status - sta_gbRdy_o => sta_txGbRdy_s - ); - - - - --! Multicycle path configuration - syncShiftRegUp_proc: process(rst_uplink_i, clk_mgtTxUsrclk_s) - variable cnter : integer range 0 to 7; - begin - - if rst_uplink_i = '1' then - cnter := 0; - uplinkClkEn_shgb_s <= '0'; - rst_uplinkGb_synch_s <= '1'; - rst_uplinkInitDone_s <= '0'; - - upLinkData0_s <= (others => '0'); - upLinkData1_s <= (others => '0'); - upLinkData2_s <= (others => '0'); - upLinkData3_s <= (others => '0'); - upLinkData4_s <= (others => '0'); - upLinkData5_s <= (others => '0'); - upLinkData6_s <= (others => '0'); - upLinkDataIC_s <= (others => '0'); - upLinkDataEC_s <= (others => '0'); - - elsif rising_edge(clk_mgtTxUsrclk_s) then - if uplinkClkEn_i = '1' then - cnter := 0; - - upLinkData0_s <= upLinkData0; - upLinkData1_s <= upLinkData1; - upLinkData2_s <= upLinkData2; - upLinkData3_s <= upLinkData3; - upLinkData4_s <= upLinkData4; - upLinkData5_s <= upLinkData5; - upLinkData6_s <= upLinkData6; - upLinkDataIC_s <= upLinkDataIC; - upLinkDataEC_s <= upLinkDataEC; - - rst_uplinkInitDone_s <= '1'; - - elsif rst_uplinkInitDone_s = '1' then - cnter := cnter + 1; - end if; - - uplinkClkEn_shgb_s <= '0'; - if cnter = 4 then - uplinkClkEn_shgb_s <= '1'; - rst_uplinkGb_synch_s <= rst_uplinkGb_s or not(rst_uplinkInitDone_s); - end if; - end if; - end process; - - uplinkClkEn_sh_s <= uplinkClkEn_i; - uplinkClk_o <= clk_mgtTxUsrclk_s; --RX_CLKEn_s; - downlinkClk_o <= clk_mgtRxUsrclk_s; - downlinkClkEn_o <= RX_CLKEn_s; --RX_CLKEn_s; - - --! Clocks for emulator - down_clkToEmul_proc: process(sta_mgtRxRdy_s, clk_mgtRxUsrclk_s) - begin - if sta_mgtRxRdy_s = '0' then - clk_mgtRxUsrclkToEmul_s <= '0'; - elsif rising_edge(clk_mgtRxUsrclk_s) then - clk_mgtRxUsrclkToEmul_s <= '0'; - if RX_CLKEn_s = '1' then - clk_mgtRxUsrclkToEmul_s <= '1'; - end if; - end if; - end process; - - up_clkToEmul_proc: process(rst_uplinkInitDone_s, clk_mgtTxUsrclk_s) - begin - if rst_uplinkInitDone_s = '0' then - clk_mgtTxUsrclkToEmul_s <= '0'; - elsif rising_edge(clk_mgtTxUsrclk_s) then - clk_mgtTxUsrclkToEmul_s <= '0'; - if uplinkClkEn_sh_s = '1' then - clk_mgtTxUsrclkToEmul_s <= '1'; - end if; - end if; - end process; - - -- LpGBT Model - LpGBT_Model_dataPath_inst: LpGBT_Model_dataPath - port map ( - -- Clock - upClki => clk_mgtTxUsrclkToEmul_s, --RX_CLK40_s, - downClki => clk_mgtRxUsrclkToEmul_s, - downLinkDataPathEnable => '1', - upLinkDataPathEnable => '1', --RX_CLKEn_s, - - -- DownLink - downLinkFrame => dat_downLinkWord_fromGb_s(63 downto 0), - - downLinkDataGroup0 => downLinkDataGroup0_s, - downLinkDataGroup1 => downLinkDataGroup1_s, - downLinkDataEc => downLinkDataEc_s, - downLinkDataIc => downLinkDataIc_s, - downLinkHeader => open, - - downLinkBypassDeinterleaver => downLinkBypassDeinterleaver, - downLinkBypassFECDecoder => downLinkBypassFECDecoder, - downLinkBypassDescsrambler => downLinkBypassDescsrambler, - - enableFECErrCounter => enableFECErrCounter, - fecCorrectionCount => fecCorrectionCount, - - upLinkData0 => upLinkData0_s, - upLinkData1 => upLinkData1_s, - upLinkData2 => upLinkData2_s, - upLinkData3 => upLinkData3_s, - upLinkData4 => upLinkData4_s, - upLinkData5 => upLinkData5_s, - upLinkData6 => upLinkData6_s, - upLinkDataIC => upLinkDataIC, - upLinkDataEC => upLinkDataEC, - - -- Uplink controll signals - upLinkScramblerBypass => upLinkScramblerBypass, - upLinkScramblerReset => rst_datapath_s, - upLinkFecBypass => upLinkFecBypass, - upLinkInterleaverBypass => upLinkInterleaverBypass, - fecMode => fecMode, - txDataRate => txDataRate, - - -- Uplink output data - upLinkFrame => dat_upLinkWord_fromLpGBT_s - ); - - upLinkPipelineBeforeOversampling_proc: process(rst_uplink_i, clk_mgtTxUsrclk_s) - begin - if rst_uplink_i = '1' then - dat_upLinkWord_fromLpGBT_pipeline_s <= (others => '0'); - elsif rising_edge(clk_mgtTxUsrclk_s) then - if uplinkClkEn_shgb_s = '1' then - dat_upLinkWord_fromLpGBT_pipeline_s <= dat_upLinkWord_fromLpGBT_s; - end if; - end if; - end process; - - upLinkPipelineAfterOversampling_proc: process(rst_uplink_i, clk_mgtTxUsrclk_s) - begin - if rst_uplink_i = '1' then - dat_upLinkWord_toGb_pipeline_s <= (others => '0'); - elsif rising_edge(clk_mgtTxUsrclk_s) then - if uplinkClkEn_shgb_s = '1' then - dat_upLinkWord_toGb_pipeline_s <= dat_upLinkWord_toGb_s; - end if; - end if; - end process; - - - -- Uplink oversampler - oversampler_gen: for i in 0 to 127 generate - oversampler_ph_gen: for j in 0 to 1 generate - dat_upLinkWord_toGb_s((i*2)+j) <= dat_upLinkWord_fromLpGBT_pipeline_s(i) when txDataRate = '0' else - dat_upLinkWord_fromLpGBT_pipeline_s((i*2)+j); - end generate; - end generate; - - downLinkDataGroup0 <= downLinkDataGroup0_s; - downLinkDataGroup1 <= downLinkDataGroup1_s; - downLinkDataEc <= downLinkDataEc_s; - downLinkDataIc <= downLinkDataIc_s; - -end behabioral; ---=================================================================================================-- ---#################################################################################################-- ---=================================================================================================-- \ No newline at end of file diff --git a/TestBench_hw/lpgbtfpga_top.vhd b/TestBench_hw/lpgbtfpga_top.vhd index 16ed548..b41e6be 100644 --- a/TestBench_hw/lpgbtfpga_top.vhd +++ b/TestBench_hw/lpgbtfpga_top.vhd @@ -89,171 +89,206 @@ architecture behavioral of lpgbtFpga_top is -- Components declaration COMPONENT LpGBT_FPGA_Downlink_datapath - PORT ( + GENERIC( + MULTICYCLE_DELAY : integer range 0 to 7 := 3 --! Multicycle delay + ); + port ( -- Clocks - donwlinkClk_i : in std_logic; - downlinkClkEn_i : in std_logic; - + donwlinkClk_i : in std_logic; --! Downlink datapath clock (either 320 or 40MHz) + downlinkClkEn_i : in std_logic; --! Clock enable (1 over 8 when encoding runs @ 320Mhz, '1' @ 40MHz) downlinkRst_i : in std_logic; -- Down link - downlinkUserData_i : in std_logic_vector(31 downto 0); - downlinkEcData_i : in std_logic_vector(1 downto 0); - downlinkIcData_i : in std_logic_vector(1 downto 0); + downlinkUserData_i : in std_logic_vector(31 downto 0); --! Downlink data (user) + downlinkEcData_i : in std_logic_vector(1 downto 0); --! Downlink EC field + downlinkIcData_i : in std_logic_vector(1 downto 0); --! Downlink IC field - downLinkFrame_o : out std_logic_vector(63 downto 0); + -- Output + downLinkFrame_o : out std_logic_vector(63 downto 0); --! Downlink encoded frame (IC + EC + User Data + FEC) - downLinkBypassInterleaver_i : in std_logic; - downLinkBypassFECEncoder_i : in std_logic; - downLinkBypassScrambler_i : in std_logic; + -- Configuration + downLinkBypassInterleaver_i : in std_logic; --! Bypass downlink interleaver (test purpose only) + downLinkBypassFECEncoder_i : in std_logic; --! Bypass downlink FEC (test purpose only) + downLinkBypassScrambler_i : in std_logic; --! Bypass downlink scrambler (test purpose only) - downlinkReady_o : out std_logic + -- Status + downlinkReady_o : out std_logic --! Downlink ready status ); END COMPONENT; COMPONENT txGearbox generic ( - c_clockRatio : integer; - c_inputWidth : integer; - c_outputWidth : integer + c_clockRatio : integer; --! Clock ratio is clock_out / clock_in (shall be an integer) + c_inputWidth : integer; --! Bus size of the input word + c_outputWidth : integer --! Bus size of the output word (Warning: c_clockRatio/(c_inputWidth/c_outputWidth) shall be an integer) ); port ( -- Clock and reset - clk_inClk_i : in std_logic; - clk_clkEn_i : in std_logic; - clk_outClk_i : in std_logic; - - rst_gearbox_i : in std_logic; - + clk_inClk_i : in std_logic; --! Input clock (frame clock) + clk_clkEn_i : in std_logic; --! Input clock enable when multicycle path or '1' + clk_outClk_i : in std_logic; --! Output clock (from the MGT) + + rst_gearbox_i : in std_logic; --! Reset signal + -- Data - dat_inFrame_i : in std_logic_vector((c_inputWidth-1) downto 0); - dat_outFrame_o : out std_logic_vector((c_outputWidth-1) downto 0); - + dat_inFrame_i : in std_logic_vector((c_inputWidth-1) downto 0); --! Input data + dat_outFrame_o : out std_logic_vector((c_outputWidth-1) downto 0); --! Output data + -- Status - sta_gbRdy_o : out std_logic + sta_gbRdy_o : out std_logic --! Ready signal ); END COMPONENT; COMPONENT LpGBT_FPGA_Uplink_datapath GENERIC( - DATARATE : integer range 0 to 2 := DYNAMIC; - FEC : integer range 0 to 2 := DYNAMIC - ); - PORT ( - -- Clock and reset - uplinkClk_i : in std_logic; - uplinkClkInEn_i : in std_logic; - uplinkClkOutEn_o : out std_logic; - uplinkRst_i : in std_logic; - - -- Input - uplinkFrame_i : in std_logic_vector(255 downto 0); - - -- Data - uplinkUserData_o : out std_logic_vector(229 downto 0); - uplinkEcData_o : out std_logic_vector(1 downto 0); - uplinkIcData_o : out std_logic_vector(1 downto 0); - - -- Control - uplinkSelectDataRate_i : in std_logic; -- '0': 5.12Gbps / '1': 10.24Gbps - uplinkSelectFEC_i : in std_logic; -- '0': FEC5 / '1': FEC12 - uplinkBypassInterleaver_i : in std_logic; - uplinkBypassFECEncoder_i : in std_logic; - uplinkBypassScrambler_i : in std_logic; - - uplinkReady_o : out std_logic + DATARATE : integer range 0 to 2 := DYNAMIC; --! Datarate selection can be: DYNAMIC, DATARATE_10G24 or DATARATE_5G12 + FEC : integer range 0 to 2 := DYNAMIC; --! FEC selection can be: DYNAMIC, FEC5 or FEC12 + MULTICYCLE_DELAY : integer range 0 to 7 := 3 --! Multicycle delay + ); + PORT ( + -- Clock and reset + uplinkClk_i : in std_logic; --! Input clock used to decode the received data + uplinkClkInEn_i : in std_logic; --! Clock enable from Rx gearbox (Data flag) + uplinkClkOutEn_o : out std_logic; --! Clock enable shifted from N clock cycle (clock data out - used by the user's logic) + uplinkRst_i : in std_logic; --! Uplink datapath's reset signal + + -- Input + uplinkFrame_i : in std_logic_vector(255 downto 0); --! Input frame coming from the MGT -> Rx Gearbox. + --! In case of 5g12 datarate, the data bus of 128 bits shall be duplicated + --! as followind: uplinkFrame_i <= data_5g12 & data_5g12 + -- Data + uplinkUserData_o : out std_logic_vector(229 downto 0); --! User output (decoded data). The payload size varies depending on the + --! datarate/FEC configuration: + --! * *FEC5 / 5.12 Gbps*: 112bit + --! * *FEC12 / 5.12 Gbps*: 98bit + --! * *FEC5 / 10.24 Gbps*: 230bit + --! * *FEC12 / 10.24 Gbps*: 202bit + uplinkEcData_o : out std_logic_vector(1 downto 0); --! EC field value received from the LpGBT + uplinkIcData_o : out std_logic_vector(1 downto 0); --! IC field value received from the LpGBT + + -- Control + uplinkSelectDataRate_i : in std_logic; --! Datarate selection (only in DYNAMIC mode) -> '0': 5.12Gbps / '1': 10.24Gbps + uplinkSelectFEC_i : in std_logic; --! FEC selection (only in DYNAMIC mode) -> '0': FEC5 / '1': FEC12 + uplinkBypassInterleaver_i : in std_logic; --! Bypass uplink interleaver (test purpose only) + uplinkBypassFECEncoder_i : in std_logic; --! Bypass uplink FEC (test purpose only) + uplinkBypassScrambler_i : in std_logic; --! Bypass uplink scrambler (test purpose only) + + -- Status + uplinkDataCorrected_o : out std_logic_vector(229 downto 0); --! Flag allowing to know which bit(s) were toggled by the FEC + uplinkIcCorrected_o : out std_logic_vector(1 downto 0); --! Flag allowing to know which bit(s) of the IC field were toggled by the FEC + uplinkEcCorrected_o : out std_logic_vector(1 downto 0); --! Flag allowing to know which bit(s) of the EC field were toggled by the FEC + uplinkReady_o : out std_logic --! Ready signal from the uplink decoder ); END COMPONENT; - COMPONENT mgt - PORT ( - -- Clocks - MGT_REFCLK_i : in std_logic; - MGT_FREEDRPCLK_i : in std_logic; - - MGT_RXUSRCLK_o : out std_logic; - MGT_TXUSRCLK_o : out std_logic; - - -- Resets - MGT_TXRESET_i : in std_logic; - MGT_RXRESET_i : in std_logic; - - -- Control & Status - MGT_RXSlide_i : in std_logic; - MGT_TXREADY_o : out std_logic; - MGT_RXREADY_o : out std_logic; - - MGT_TX_ALIGNED_o : out std_logic; - MGT_TX_PIPHASE_o : out std_logic_vector(6 downto 0); - MGT_ENTXCALIBIN_i : in std_logic; - MGT_TXCALIB_i : in std_logic_vector(6 downto 0); - - -- Data - MGT_USRWORD_i : in std_logic_vector(31 downto 0); - MGT_USRWORD_o : out std_logic_vector(31 downto 0); - - RXn_i : in std_logic; - RXp_i : in std_logic; - TXn_o : out std_logic; - TXp_o : out std_logic + COMPONENT mgt + port ( + --=============-- + -- Clocks -- + --=============-- + MGT_REFCLK_i : in std_logic; + MGT_FREEDRPCLK_i : in std_logic; + + MGT_RXUSRCLK_o : out std_logic; + MGT_TXUSRCLK_o : out std_logic; + + --=============-- + -- Resets -- + --=============-- + MGT_TXRESET_i : in std_logic; + MGT_RXRESET_i : in std_logic; + + --=============-- + -- Control -- + --=============-- + MGT_RXSlide_i : in std_logic; + + MGT_ENTXCALIBIN_i : in std_logic; + MGT_TXCALIB_i : in std_logic_vector(6 downto 0); + + --=============-- + -- Status -- + --=============-- + MGT_TXREADY_o : out std_logic; + MGT_RXREADY_o : out std_logic; + + MGT_TX_ALIGNED_o : out std_logic; + MGT_TX_PIPHASE_o : out std_logic_vector(6 downto 0); + --==============-- + -- Data -- + --==============-- + MGT_USRWORD_i : in std_logic_vector(31 downto 0); + MGT_USRWORD_o : out std_logic_vector(31 downto 0); + + --===============-- + -- Serial intf. -- + --===============-- + RXn_i : in std_logic; + RXp_i : in std_logic; + + TXn_o : out std_logic; + TXp_o : out std_logic ); END COMPONENT; COMPONENT mgt_framealigner generic ( - c_wordRatio : integer; - c_headerPattern : std_logic_vector; - c_wordSize : integer; - c_allowedFalseHeader : integer; - c_allowedFalseHeaderOverN : integer; - c_requiredTrueHeader : integer; - - c_resetOnEven : integer := 0; - c_bitslip_mindly : integer := 40 + c_wordRatio : integer; --! Word ration: frameclock / mgt_wordclock + c_headerPattern : std_logic_vector; --! Header pattern specified by the standard + c_wordSize : integer; --! Size of the MGT word + c_allowedFalseHeader : integer; --! Number of false header allowed to avoid unlock on frame error + c_allowedFalseHeaderOverN : integer; --! Number of header checked to know wether the lock is lost or not + c_requiredTrueHeader : integer; --! Number of true header required to go in locked state + + c_resetOnEven : integer := 0; --! Reset on even bitslip (1: Enabled/ 0: disabled) + c_resetDuration : integer := 10; --! Reset duration (in clk_freeRunningClk_i periods) + c_bitslip_mindly : integer := 40 --! Number of clock cycle required when asserting the bitslip signal ); - port ( + port ( -- Clock(s) - clk_pcsRx_i : in std_logic; - clk_freeRunningClk_i : in std_logic; - + clk_pcsRx_i : in std_logic; --! MGT Wordclock + clk_freeRunningClk_i : in std_logic; --! Free running clock for MGT reset (reset on even feature) + -- Reset(s) - rst_pattsearch_i : in std_logic; - rst_mgtctrler_i : in std_logic; - rst_rstoneven_o : out std_logic; - + rst_pattsearch_i : in std_logic; --! Rst the pattern search state machines + rst_mgtctrler_i : in std_logic; --! Rst the "reset on even" controller + rst_rstoneven_o : out std_logic; --! Output reset asserted when reset is even or odd depending on cmd_rstonevenoroddsel_i + -- Control - cmd_bitslipCtrl_o : out std_logic; - cmd_rstonevenoroddsel_i : in std_logic; - + cmd_bitslipCtrl_o : out std_logic; --! Bitslip signal to shift the parrallel word + cmd_rstonevenoroddsel_i : in std_logic; --! Select how to reset the MGT (even or odd bitslip) + -- Status - sta_headerLocked_o : out std_logic; - sta_headerFlag_o : out std_logic; - + sta_headerLocked_o : out std_logic; --! Status: header is locked + sta_headerFlag_o : out std_logic; --! Status: header flag (1 pulse over c_wordRatio) + -- Data - dat_word_i : in std_logic_vector(c_headerPattern'length-1 downto 0) - ); + dat_word_i : in std_logic_vector(c_headerPattern'length-1 downto 0) --! Header bits from the MGT word (compared with c_headerPattern) + ); END COMPONENT; COMPONENT rxGearbox generic ( - c_clockRatio : integer; - c_inputWidth : integer; - c_outputWidth : integer + c_clockRatio : integer; --! Clock ratio is clock_out / clock_in (shall be an integer) + c_inputWidth : integer; --! Bus size of the input word + c_outputWidth : integer; --! Bus size of the output word (Warning: c_clockRatio/(c_inputWidth/c_outputWidth) shall be an integer) + c_counterInitValue : integer := 2 --! Initialization value of the gearbox counter (3 for simulation / 2 for real HW) ); port ( -- Clock and reset - clk_inClk_i : in std_logic; - clk_clkEn_i : in std_logic; + clk_inClk_i : in std_logic; --! Input clock (from MGT) + clk_outClk_i : in std_logic; --! Output clock (from MGT) + clk_clkEn_i : in std_logic; --! Clock enable (e.g.: header flag) clk_dataFlag_o : out std_logic; - rst_gearbox_i : in std_logic; - - -- Data - dat_inFrame_i : in std_logic_vector((c_inputWidth-1) downto 0); - dat_outFrame_o : out std_logic_vector((c_inputWidth*c_clockRatio)-1 downto 0); + rst_gearbox_i : in std_logic; --! Reset signal + -- Data + dat_inFrame_i : in std_logic_vector((c_inputWidth-1) downto 0); --! Input data from MGT + dat_outFrame_o : out std_logic_vector((c_inputWidth*c_clockRatio)-1 downto 0); --! Output data, concatenation of word when the word ratio is lower than clock ration (e.g.: out <= word & word;) + -- Status - sta_gbRdy_o : out std_logic + sta_gbRdy_o : out std_logic --! Ready signal ); END COMPONENT; @@ -323,7 +358,7 @@ begin --========#### Architecture Body ####========-- -- Downlink reset scheme: -- Step 1: Reset the MGT Tx (using downlinkRst_i signal) -- Step 2: Tx gearbox is reseted by the sta_mgtTxRdy_s signal from the MGT - -- Step 3: Tx datapath is reseted by the sta_txGbRdy_s signal from the tx Gearbox + -- Step 3: Tx datapath is reseted by the sta_txGbRdy_s signal from the tx Gearbox rst_txgearbox_s <= not(sta_mgtTxRdy_s); downlinkRst_to_datapath_s <= not(sta_txGbRdy_s); @@ -401,6 +436,7 @@ begin --========#### Architecture Body ####========-- port map ( -- Clock and reset clk_inClk_i => clk_mgtRxUsrclk_s, + clk_outClk_i => clk_mgtRxUsrclk_s, clk_clkEn_i => sta_headerFlag_10g24_s, clk_dataFlag_o => clk_dataFlag_rxgearbox_10g24_s, @@ -423,6 +459,7 @@ begin --========#### Architecture Body ####========-- port map ( -- Clock and reset clk_inClk_i => clk_mgtRxUsrclk_s, + clk_outClk_i => clk_mgtRxUsrclk_s, clk_clkEn_i => sta_headerFlag_5g12_s, clk_dataFlag_o => clk_dataFlag_rxgearbox_5g12_s, diff --git a/TestBench_hw/prbs/prbs7_16b_checker.vhd b/TestBench_hw/prbs/prbs7_16b_checker.vhd new file mode 100644 index 0000000..cc0fae7 --- /dev/null +++ b/TestBench_hw/prbs/prbs7_16b_checker.vhd @@ -0,0 +1,115 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity prbs7_16b_checker is + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + prbs_word_i : in std_logic_vector(15 downto 0); + err_o : out std_logic_vector(15 downto 0); + rdy_o : out std_logic + ); +end prbs7_16b_checker; + +architecture rtl of prbs7_16b_checker is + signal feedback_reg : std_logic_vector(15 downto 0); + signal err_s : std_logic_vector(15 downto 0); + + type checker_state_T is (waitForLock, Locked); + signal status : checker_state_T; + + constant STATS_CONFIG_c : integer := 10; + signal cnt_stats : integer range 0 to STATS_CONFIG_c; + +begin + + checker_fsm_proc: process(reset_i, clk_i) + begin + if reset_i = '1' then + status <= waitForLock; + cnt_stats <= 0; + + elsif rising_edge(clk_i) then + case status is + when waitForLock => + if cnt_stats= STATS_CONFIG_c then + status <= Locked; + else + if err_s = x"0000" and feedback_reg /= x"0000" then + cnt_stats <= cnt_stats + 1; + else + cnt_stats <= 0; + end if; + end if; + + when Locked => null; + end case; + end if; + end process; + + -- PRBS7 equation: x^7 + x^6 + 1 + -- LSB first + prbs7_proc: process(reset_i, clk_i) + variable cnter : integer range 0 to 1; + begin + + if reset_i = '1' then + feedback_reg <= (others => '0'); + err_s <= x"0000"; + + elsif rising_edge(clk_i) then + + if clken_i = '1' then + + err_s(0) <= prbs_word_i(0) xor (feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2)); + err_s(1) <= prbs_word_i(1) xor (feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3)); + err_s(2) <= prbs_word_i(2) xor (feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4)); + err_s(3) <= prbs_word_i(3) xor (feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5)); + err_s(4) <= prbs_word_i(4) xor (feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0)); + err_s(5) <= prbs_word_i(5) xor (feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1)); + err_s(6) <= prbs_word_i(6) xor (feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2)); + err_s(7) <= prbs_word_i(7) xor (feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3)); + err_s(8) <= prbs_word_i(8) xor (feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4)); + err_s(9) <= prbs_word_i(9) xor (feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5)); + err_s(10) <= prbs_word_i(10) xor (feedback_reg(1) xor feedback_reg(0)); + err_s(11) <= prbs_word_i(11) xor (feedback_reg(2) xor feedback_reg(1)); + err_s(12) <= prbs_word_i(12) xor (feedback_reg(3) xor feedback_reg(2)); + err_s(13) <= prbs_word_i(13) xor (feedback_reg(4) xor feedback_reg(3)); + err_s(14) <= prbs_word_i(14) xor (feedback_reg(5) xor feedback_reg(4)); + err_s(15) <= prbs_word_i(15) xor (feedback_reg(6) xor feedback_reg(5)); + + if status /= Locked then + feedback_reg <= prbs_word_i; + else + feedback_reg(0) <= feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2); + feedback_reg(1) <= feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3); + feedback_reg(2) <= feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4); + feedback_reg(3) <= feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5); + feedback_reg(4) <= feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0); + feedback_reg(5) <= feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1); + feedback_reg(6) <= feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2); + feedback_reg(7) <= feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3); + feedback_reg(8) <= feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4); + feedback_reg(9) <= feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5); + feedback_reg(10) <= feedback_reg(1) xor feedback_reg(0); + feedback_reg(11) <= feedback_reg(2) xor feedback_reg(1); + feedback_reg(12) <= feedback_reg(3) xor feedback_reg(2); + feedback_reg(13) <= feedback_reg(4) xor feedback_reg(3); + feedback_reg(14) <= feedback_reg(5) xor feedback_reg(4); + feedback_reg(15) <= feedback_reg(6) xor feedback_reg(5); + end if; + + + end if; + + end if; + + end process; + + err_o <= err_s; + rdy_o <= '1' when status = Locked else '0'; + +end rtl; \ No newline at end of file diff --git a/TestBench_hw/prbs/prbs7_1b_checker.vhd b/TestBench_hw/prbs/prbs7_1b_checker.vhd new file mode 100644 index 0000000..77d4505 --- /dev/null +++ b/TestBench_hw/prbs/prbs7_1b_checker.vhd @@ -0,0 +1,79 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity prbs7_1b_checker is + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + prbs_word_i : in std_logic; + err_o : out std_logic_vector(3 downto 0); + rdy_o : out std_logic + ); +end prbs7_1b_checker; + +architecture rtl of prbs7_1b_checker is + signal feedback_reg : std_logic_vector(7 downto 0); + signal err_s : std_logic_vector(3 downto 0); + + type checker_state_T is (waitForLock, Locked); + signal status : checker_state_T; + + constant STATS_CONFIG_c : integer := 10; + signal cnt_stats : integer range 0 to STATS_CONFIG_c; +begin + + -- PRBS7 equation: x^7 + x^6 + 1 + -- LSB first + checker_fsm_proc: process(reset_i, clk_i) + begin + if reset_i = '1' then + status <= waitForLock; + cnt_stats <= 0; + + elsif rising_edge(clk_i) then + case status is + when waitForLock => + if err_s = "0000" and feedback_reg /= x"00" then + cnt_stats <= cnt_stats + 1; + else + cnt_stats <= 0; + end if; + + if cnt_stats= STATS_CONFIG_c then + status <= Locked; + end if; + + when Locked => null; + end case; + end if; + end process; + + prbs7_proc: process(reset_i, clk_i) + begin + + if reset_i = '1' then + feedback_reg <= (others => '0'); + err_s <= "0000"; + + elsif rising_edge(clk_i) then + if clken_i = '1' then + err_s(0) <= (feedback_reg(6) xor feedback_reg(5)) xor prbs_word_i; + err_s(3 downto 1) <= "000"; + + feedback_reg(7 downto 1) <= feedback_reg(6 downto 0); + if status /= Locked then + feedback_reg(0) <= prbs_word_i; + else + feedback_reg(0) <= (feedback_reg(5) xor feedback_reg(6)); + end if; + end if; + end if; + end process; + + err_o <= err_s; + rdy_o <= '1' when status = Locked else '0'; + +end rtl; \ No newline at end of file diff --git a/TestBench_hw/prbs/prbs7_1b_generator.vhd b/TestBench_hw/prbs/prbs7_1b_generator.vhd new file mode 100644 index 0000000..15b54ca --- /dev/null +++ b/TestBench_hw/prbs/prbs7_1b_generator.vhd @@ -0,0 +1,86 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity prbs7_1b_generator is + generic( + INIT_c : in std_logic_vector(7 downto 0) + ); + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + err_pattern_i : in std_logic_vector(7 downto 0); + rep_delay_i : in std_logic_vector(23 downto 0); + prbs_word_o : out std_logic; + rdy_o : out std_logic + ); +end prbs7_1b_generator; + +architecture rtl of prbs7_1b_generator is + signal feedback_reg : std_logic_vector(7 downto 0) := INIT_c; + signal prbs_word_s : std_logic; + signal err_cnter_s : unsigned(24 downto 0); + signal inject_error_s : std_logic; + signal onceinject_done_s : std_logic; + signal err_patt_pos_s : integer range 0 to 7; + signal err_pattern_s : std_logic; + +begin + + -- PRBS7 equation: x^7 + x^6 + 1 + -- LSB first + + prbs7_proc: process(reset_i, clk_i) + begin + + if reset_i = '1' then + feedback_reg <= INIT_c; + prbs_word_s <= '0'; + rdy_o <= '0'; + err_cnter_s <= (others => '0'); + err_pattern_s <= '0'; + err_patt_pos_s <= 0; + + elsif rising_edge(clk_i) then + if clken_i = '1' then + rdy_o <= '1'; + prbs_word_s <= feedback_reg(6) xor feedback_reg(5); + feedback_reg <= feedback_reg(6 downto 0) & (feedback_reg(6) xor feedback_reg(5)); + + err_pattern_s <= '0'; + + if err_pattern_i /= x"00" then + if std_logic_vector(err_cnter_s) = rep_delay_i then + if rep_delay_i /= x"000000" or onceinject_done_s = '0' then + err_pattern_s <= err_pattern_i(err_patt_pos_s); + if err_patt_pos_s = 7 then + err_patt_pos_s <= 0; + err_cnter_s <= (others => '0'); + onceinject_done_s <= '1'; + else + err_patt_pos_s <= err_patt_pos_s+1; + end if; + end if; + else + if err_patt_pos_s = 7 then + err_cnter_s <= err_cnter_s + 1; + err_patt_pos_s <= 0; + else + err_patt_pos_s <= err_patt_pos_s + 1; + end if; + end if; + else + err_cnter_s <= (others => '0'); + onceinject_done_s <= '0'; + err_patt_pos_s <= 0; + end if; + end if; + end if; + + end process; + + prbs_word_o <= prbs_word_s xor err_pattern_s; + +end rtl; \ No newline at end of file diff --git a/TestBench_hw/prbs/prbs7_2b_checker.vhd b/TestBench_hw/prbs/prbs7_2b_checker.vhd new file mode 100644 index 0000000..90fee2c --- /dev/null +++ b/TestBench_hw/prbs/prbs7_2b_checker.vhd @@ -0,0 +1,90 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity prbs7_2b_checker is + port ( + reset_i : in std_logic; + clk_i : in std_logic; + + clken_i : in std_logic; + prbs_word_i : in std_logic_vector(1 downto 0); + err_o : out std_logic_vector(3 downto 0); + rdy_o : out std_logic + ); +end prbs7_2b_checker; + +architecture rtl of prbs7_2b_checker is + signal feedback_reg : std_logic_vector(7 downto 0); + signal err_s : std_logic_vector(3 downto 0); + + type checker_state_T is (waitForLock, Locked); + signal status : checker_state_T; + + constant STATS_CONFIG_c : integer := 10; + signal cnt_stats : integer range 0 to STATS_CONFIG_c; +begin + + -- PRBS7 equation: x^7 + x^6 + 1 + -- LSB first + checker_fsm_proc: process(reset_i, clk_i) + begin + if reset_i = '1' then + status <= waitForLock; + cnt_stats <= 0; + + elsif rising_edge(clk_i) then + case status is + when waitForLock => + + if cnt_stats= STATS_CONFIG_c then + status <= Locked; + else + if err_s = "0000" and feedback_reg /= x"00" then + cnt_stats <= cnt_stats + 1; + else + cnt_stats <= 0; + end if; + end if; + + when Locked => null; + end case; + end if; + end process; + + prbs7_proc: process(reset_i, clk_i) + begin + + if reset_i = '1' then + feedback_reg <= (others => '0'); + err_s <= "0000"; + + elsif rising_edge(clk_i) then + + if clken_i = '1' then + + err_s(0) <= (feedback_reg(4) xor feedback_reg(5)) xor prbs_word_i(0); + err_s(1) <= (feedback_reg(6) xor feedback_reg(5)) xor prbs_word_i(1); + err_s(2) <= '0'; + err_s(3) <= '0'; + + + feedback_reg(7 downto 2) <= feedback_reg(5 downto 0); + if status /= Locked then + feedback_reg(0) <= prbs_word_i(0); + feedback_reg(1) <= prbs_word_i(1); + else + feedback_reg(0) <= (feedback_reg(4) xor feedback_reg(5)); + feedback_reg(1) <= (feedback_reg(6) xor feedback_reg(5)); + end if; + end if; + + end if; + + end process; + + err_o <= err_s; + rdy_o <= '1' when status = Locked else '0'; + +end rtl; \ No newline at end of file diff --git a/TestBench_hw/prbs/prbs7_2b_generator.vhd b/TestBench_hw/prbs/prbs7_2b_generator.vhd new file mode 100644 index 0000000..d38ab5b --- /dev/null +++ b/TestBench_hw/prbs/prbs7_2b_generator.vhd @@ -0,0 +1,103 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity prbs7_2b_generator is + generic( + INIT_c : in std_logic_vector(7 downto 0) + ); + port ( + reset_i : in std_logic; + clk_i : in std_logic; + + err_pattern_i : in std_logic_vector(7 downto 0); + rep_delay_i : in std_logic_vector(23 downto 0); + + clken_i : in std_logic; + prbs_word_o : out std_logic_vector(1 downto 0); + rdy_o : out std_logic + ); +end prbs7_2b_generator; + +architecture rtl of prbs7_2b_generator is + signal feedback_reg : std_logic_vector(7 downto 0) := INIT_c; + signal prbs_word_s : std_logic_vector(1 downto 0); + signal err_cnter_s : unsigned(24 downto 0); + signal inject_error_s : std_logic; + signal onceinject_done_s : std_logic; + signal err_patt_pos_s : integer range 0 to 6; + signal err_pattern_s : std_logic_vector(1 downto 0); + +begin + + -- PRBS7 equation: x^7 + x^6 + 1 + -- LSB first + + prbs7_proc: process(reset_i, clk_i) + variable cnter : integer range 0 to 1; + begin + + if reset_i = '1' then + feedback_reg <= INIT_c; + prbs_word_s <= (others => '0'); + rdy_o <= '0'; + err_cnter_s <= (others => '0'); + err_pattern_s <= (others => '0'); + err_patt_pos_s <= 0; + + elsif rising_edge(clk_i) then + + if clken_i = '1' then + rdy_o <= '1'; + + prbs_word_s(0) <= feedback_reg(5) xor feedback_reg(4); + prbs_word_s(1) <= feedback_reg(6) xor feedback_reg(5); + + feedback_reg(7 downto 2) <= feedback_reg(5 downto 0); + feedback_reg(0) <= feedback_reg(5) xor feedback_reg(4); + feedback_reg(1) <= feedback_reg(6) xor feedback_reg(5); + + err_pattern_s <= "00"; + + if err_pattern_i /= x"00" then + if std_logic_vector(err_cnter_s) = rep_delay_i then + if rep_delay_i /= x"000000" or onceinject_done_s = '0' then + err_pattern_s <= err_pattern_i(err_patt_pos_s+1 downto err_patt_pos_s); + if err_patt_pos_s = 6 then + err_patt_pos_s <= 0; + err_cnter_s <= (others => '0'); + onceinject_done_s <= '1'; + + elsif err_patt_pos_s = 2 then + err_patt_pos_s <= 4; + + elsif err_patt_pos_s = 4 then + err_patt_pos_s <= 6; + + else + err_patt_pos_s <= 2; + end if; + end if; + else + if err_patt_pos_s = 6 then + err_cnter_s <= err_cnter_s + 1; + err_patt_pos_s <= 0; + else + err_patt_pos_s <= err_patt_pos_s + 2; + end if; + end if; + else + err_cnter_s <= (others => '0'); + onceinject_done_s <= '0'; + err_patt_pos_s <= 0; + end if; + end if; + + end if; + + end process; + + prbs_word_o <= prbs_word_s xor err_pattern_s; + +end rtl; \ No newline at end of file diff --git a/TestBench_hw/prbs/prbs7_32b_checker.vhd b/TestBench_hw/prbs/prbs7_32b_checker.vhd new file mode 100644 index 0000000..040a0ec --- /dev/null +++ b/TestBench_hw/prbs/prbs7_32b_checker.vhd @@ -0,0 +1,147 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity prbs7_32b_checker is + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + prbs_word_i : in std_logic_vector(31 downto 0); + err_o : out std_logic_vector(31 downto 0); + rdy_o : out std_logic + ); +end prbs7_32b_checker; + +architecture rtl of prbs7_32b_checker is + signal feedback_reg : std_logic_vector(31 downto 0); + signal err_s : std_logic_vector(31 downto 0); + + type checker_state_T is (waitForLock, Locked); + signal status : checker_state_T; + + constant STATS_CONFIG_c : integer := 10; + signal cnt_stats : integer range 0 to STATS_CONFIG_c; + +begin + + checker_fsm_proc: process(reset_i, clk_i) + begin + if reset_i = '1' then + status <= waitForLock; + cnt_stats <= 0; + + elsif rising_edge(clk_i) then + case status is + when waitForLock => + if cnt_stats= STATS_CONFIG_c then + status <= Locked; + else + if err_s = x"00000000" and feedback_reg /= x"00000000" then + cnt_stats <= cnt_stats + 1; + else + cnt_stats <= 0; + end if; + end if; + + when Locked => null; + end case; + end if; + end process; + + -- PRBS7 equation: x^7 + x^6 + 1 + -- LSB first + prbs7_proc: process(reset_i, clk_i) + variable cnter : integer range 0 to 1; + begin + + if reset_i = '1' then + feedback_reg <= (others => '0'); + err_s <= x"00000000"; + + elsif rising_edge(clk_i) then + + if clken_i = '1' then + + err_s(0) <= prbs_word_i(0) xor (feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4)); + err_s(1) <= prbs_word_i(1) xor (feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5)); + err_s(2) <= prbs_word_i(2) xor (feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0)); + err_s(3) <= prbs_word_i(3) xor (feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1)); + err_s(4) <= prbs_word_i(4) xor (feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2)); + err_s(5) <= prbs_word_i(5) xor (feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3)); + err_s(6) <= prbs_word_i(6) xor (feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4)); + err_s(7) <= prbs_word_i(7) xor (feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5)); + err_s(8) <= prbs_word_i(8) xor (feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0)); + err_s(9) <= prbs_word_i(9) xor (feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1)); + err_s(10) <= prbs_word_i(10) xor (feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2)); + err_s(11) <= prbs_word_i(11) xor (feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3)); + err_s(12) <= prbs_word_i(12) xor (feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4)); + err_s(13) <= prbs_word_i(13) xor (feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5)); + err_s(14) <= prbs_word_i(14) xor (feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0)); + err_s(15) <= prbs_word_i(15) xor (feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1)); + err_s(16) <= prbs_word_i(16) xor (feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2)); + err_s(17) <= prbs_word_i(17) xor (feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3)); + err_s(18) <= prbs_word_i(18) xor (feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4)); + err_s(19) <= prbs_word_i(19) xor (feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5)); + err_s(20) <= prbs_word_i(20) xor (feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0)); + err_s(21) <= prbs_word_i(21) xor (feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1)); + err_s(22) <= prbs_word_i(22) xor (feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2)); + err_s(23) <= prbs_word_i(23) xor (feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3)); + err_s(24) <= prbs_word_i(24) xor (feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4)); + err_s(25) <= prbs_word_i(25) xor (feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5)); + err_s(26) <= prbs_word_i(26) xor (feedback_reg(1) xor feedback_reg(0)); + err_s(27) <= prbs_word_i(27) xor (feedback_reg(2) xor feedback_reg(1)); + err_s(28) <= prbs_word_i(28) xor (feedback_reg(3) xor feedback_reg(2)); + err_s(29) <= prbs_word_i(29) xor (feedback_reg(4) xor feedback_reg(3)); + err_s(30) <= prbs_word_i(30) xor (feedback_reg(5) xor feedback_reg(4)); + err_s(31) <= prbs_word_i(31) xor (feedback_reg(6) xor feedback_reg(5)); + + if status /= Locked then + feedback_reg <= prbs_word_i; + else + feedback_reg(0) <= (feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4)); + feedback_reg(1) <= (feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5)); + feedback_reg(2) <= (feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0)); + feedback_reg(3) <= (feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1)); + feedback_reg(4) <= (feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2)); + feedback_reg(5) <= (feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3)); + feedback_reg(6) <= (feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4)); + feedback_reg(7) <= (feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5)); + feedback_reg(8) <= (feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0)); + feedback_reg(9) <= (feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1)); + feedback_reg(10) <= (feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2)); + feedback_reg(11) <= (feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3)); + feedback_reg(12) <= (feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4)); + feedback_reg(13) <= (feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5)); + feedback_reg(14) <= (feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0)); + feedback_reg(15) <= (feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1)); + feedback_reg(16) <= (feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2)); + feedback_reg(17) <= (feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3)); + feedback_reg(18) <= (feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4)); + feedback_reg(19) <= (feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5)); + feedback_reg(20) <= (feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0)); + feedback_reg(21) <= (feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1)); + feedback_reg(22) <= (feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2)); + feedback_reg(23) <= (feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3)); + feedback_reg(24) <= (feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4)); + feedback_reg(25) <= (feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5)); + feedback_reg(26) <= (feedback_reg(1) xor feedback_reg(0)); + feedback_reg(27) <= (feedback_reg(2) xor feedback_reg(1)); + feedback_reg(28) <= (feedback_reg(3) xor feedback_reg(2)); + feedback_reg(29) <= (feedback_reg(4) xor feedback_reg(3)); + feedback_reg(30) <= (feedback_reg(5) xor feedback_reg(4)); + feedback_reg(31) <= (feedback_reg(6) xor feedback_reg(5)); + end if; + + + end if; + + end if; + + end process; + + err_o <= err_s; + rdy_o <= '1' when status = Locked else '0'; + +end rtl; \ No newline at end of file diff --git a/TestBench_hw/prbs/prbs7_4b_checker.vhd b/TestBench_hw/prbs/prbs7_4b_checker.vhd new file mode 100644 index 0000000..5bccc3f --- /dev/null +++ b/TestBench_hw/prbs/prbs7_4b_checker.vhd @@ -0,0 +1,94 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity prbs7_4b_checker is + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + prbs_word_i : in std_logic_vector(3 downto 0); + err_o : out std_logic_vector(3 downto 0); + rdy_o : out std_logic + ); +end prbs7_4b_checker; + +architecture rtl of prbs7_4b_checker is + signal feedback_reg : std_logic_vector(7 downto 0); + signal err_s : std_logic_vector(3 downto 0); + + type checker_state_T is (waitForLock, Locked); + signal status : checker_state_T; + + constant STATS_CONFIG_c : integer := 10; + signal cnt_stats : integer range 0 to STATS_CONFIG_c; +begin + + checker_fsm_proc: process(reset_i, clk_i) + begin + if reset_i = '1' then + status <= waitForLock; + cnt_stats <= 0; + + elsif rising_edge(clk_i) then + case status is + when waitForLock => + if cnt_stats= STATS_CONFIG_c then + status <= Locked; + else + if err_s = "0000" and feedback_reg /= x"00" then + cnt_stats <= cnt_stats + 1; + else + cnt_stats <= 0; + end if; + end if; + + when Locked => null; + end case; + end if; + end process; + + -- PRBS7 equation: x^7 + x^6 + 1 + -- LSB first + prbs7_proc: process(reset_i, clk_i) + variable cnter : integer range 0 to 1; + begin + + if reset_i = '1' then + feedback_reg <= (others => '0'); + err_s <= "0000"; + + elsif rising_edge(clk_i) then + + if clken_i = '1' then + + err_s(0) <= (feedback_reg(2) xor feedback_reg(3)) xor prbs_word_i(0); + err_s(1) <= (feedback_reg(3) xor feedback_reg(4)) xor prbs_word_i(1); + err_s(2) <= (feedback_reg(4) xor feedback_reg(5)) xor prbs_word_i(2); + err_s(3) <= (feedback_reg(5) xor feedback_reg(6)) xor prbs_word_i(3); + + feedback_reg(7 downto 4) <= feedback_reg(3 downto 0); + if status /= Locked then + feedback_reg(0) <= prbs_word_i(0); + feedback_reg(1) <= prbs_word_i(1); + feedback_reg(2) <= prbs_word_i(2); + feedback_reg(3) <= prbs_word_i(3); + else + feedback_reg(0) <= (feedback_reg(2) xor feedback_reg(3)); + feedback_reg(1) <= (feedback_reg(3) xor feedback_reg(4)); + feedback_reg(2) <= (feedback_reg(4) xor feedback_reg(5)); + feedback_reg(3) <= (feedback_reg(5) xor feedback_reg(6)); + end if; + + + end if; + + end if; + + end process; + + err_o <= err_s; + rdy_o <= '1' when status = Locked else '0'; + +end rtl; \ No newline at end of file diff --git a/TestBench_hw/prbs/prbs7_4b_generator.vhd b/TestBench_hw/prbs/prbs7_4b_generator.vhd new file mode 100644 index 0000000..740265f --- /dev/null +++ b/TestBench_hw/prbs/prbs7_4b_generator.vhd @@ -0,0 +1,100 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity prbs7_4b_generator is + generic( + INIT_c : in std_logic_vector(7 downto 0) + ); + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + + err_pattern_i : in std_logic_vector(7 downto 0); + rep_delay_i : in std_logic_vector(23 downto 0); + + prbs_word_o : out std_logic_vector(3 downto 0); + rdy_o : out std_logic + ); +end prbs7_4b_generator; + +architecture rtl of prbs7_4b_generator is + signal feedback_reg : std_logic_vector(7 downto 0) := INIT_c; + signal prbs_word_s : std_logic_vector(3 downto 0); + signal err_pattern_s : std_logic_vector(3 downto 0); + signal err_cnter_s : unsigned(24 downto 0); + signal inject_error_s : std_logic; + signal onceinject_done_s : std_logic; + signal err_patt_pos_s : integer range 0 to 4; +begin + + -- PRBS7 equation: x^7 + x^6 + 1 + -- LSB first + + prbs7_proc: process(reset_i, clk_i) + variable cnter : integer range 0 to 1; + begin + + if reset_i = '1' then + feedback_reg <= INIT_c; + prbs_word_s <= (others => '0'); + rdy_o <= '0'; + err_cnter_s <= (others => '0'); + err_pattern_s <= (others => '0'); + err_patt_pos_s <= 0; + + elsif rising_edge(clk_i) then + + if clken_i = '1' then + rdy_o <= '1'; + + prbs_word_s(0) <= feedback_reg(2) xor feedback_reg(3); + prbs_word_s(1) <= feedback_reg(3) xor feedback_reg(4); + prbs_word_s(2) <= feedback_reg(4) xor feedback_reg(5); + prbs_word_s(3) <= feedback_reg(6) xor feedback_reg(5); + + feedback_reg(7 downto 4) <= feedback_reg(3 downto 0); + feedback_reg(0) <= feedback_reg(2) xor feedback_reg(3); + feedback_reg(1) <= feedback_reg(3) xor feedback_reg(4); + feedback_reg(2) <= feedback_reg(4) xor feedback_reg(5); + feedback_reg(3) <= feedback_reg(6) xor feedback_reg(5); + + err_pattern_s <= x"0"; + + if err_pattern_i /= x"00" then + if std_logic_vector(err_cnter_s) = rep_delay_i then + if rep_delay_i /= x"000000" or onceinject_done_s = '0' then + err_pattern_s <= err_pattern_i(err_patt_pos_s+3 downto err_patt_pos_s); + if err_patt_pos_s = 4 then + err_patt_pos_s <= 0; + err_cnter_s <= (others => '0'); + onceinject_done_s <= '1'; + else + err_patt_pos_s <= 4; + end if; + end if; + else + if err_patt_pos_s = 4 then + err_cnter_s <= err_cnter_s + 1; + err_patt_pos_s <= 0; + else + err_patt_pos_s <= 4; + end if; + end if; + else + err_cnter_s <= (others => '0'); + onceinject_done_s <= '0'; + err_patt_pos_s <= 0; + end if; + + end if; + + end if; + + end process; + + prbs_word_o <= prbs_word_s xor err_pattern_s; + +end rtl; \ No newline at end of file diff --git a/TestBench_hw/prbs/prbs7_64b_generator.vhd b/TestBench_hw/prbs/prbs7_64b_generator.vhd new file mode 100644 index 0000000..a72ee5d --- /dev/null +++ b/TestBench_hw/prbs/prbs7_64b_generator.vhd @@ -0,0 +1,117 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity prbs7_64b_generator is + generic( + INIT_c : in std_logic_vector(63 downto 0) + ); + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clk_enable_i : in std_logic; + + prbs_word_o : out std_logic_vector(63 downto 0); + rdy_o : out std_logic + ); +end prbs7_64b_generator; + +architecture rtl of prbs7_64b_generator is + signal feedback_reg : std_logic_vector(63 downto 0) := INIT_c; + signal prbs_word_s : std_logic_vector(63 downto 0) := INIT_c; + +begin + + -- PRBS7 equation: x^7 + x^6 + 1 + -- LSB first + + prbs7_proc: process(reset_i, clk_i) + begin + + if reset_i = '1' then + feedback_reg <= INIT_c; + prbs_word_s <= INIT_c; + rdy_o <= '0'; + + elsif rising_edge(clk_i) then + + if clk_enable_i = '1' then + + prbs_word_s <= feedback_reg; + rdy_o <= '1'; + + feedback_reg(0) <= feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2); + feedback_reg(1) <= feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3); + feedback_reg(2) <= feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4); + feedback_reg(3) <= feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5); + feedback_reg(4) <= feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0); + feedback_reg(5) <= feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1); + feedback_reg(6) <= feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2); + feedback_reg(7) <= feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3); + feedback_reg(8) <= feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4); + feedback_reg(9) <= feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5); + feedback_reg(10) <= feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0); + feedback_reg(11) <= feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1); + feedback_reg(12) <= feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2); + feedback_reg(13) <= feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3); + feedback_reg(14) <= feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4); + feedback_reg(15) <= feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5); + feedback_reg(16) <= feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0); + feedback_reg(17) <= feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1); + feedback_reg(18) <= feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2); + feedback_reg(19) <= feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3); + feedback_reg(20) <= feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4); + feedback_reg(21) <= feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5); + feedback_reg(22) <= feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0); + feedback_reg(23) <= feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1); + feedback_reg(24) <= feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2); + feedback_reg(25) <= feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3); + feedback_reg(26) <= feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4); + feedback_reg(27) <= feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5); + feedback_reg(28) <= feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0); + feedback_reg(29) <= feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1); + feedback_reg(30) <= feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2); + feedback_reg(31) <= feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3); + feedback_reg(32) <= feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4); + feedback_reg(33) <= feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5); + feedback_reg(34) <= feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0); + feedback_reg(35) <= feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1); + feedback_reg(36) <= feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2); + feedback_reg(37) <= feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3); + feedback_reg(38) <= feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4); + feedback_reg(39) <= feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5); + feedback_reg(40) <= feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0); + feedback_reg(41) <= feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1); + feedback_reg(42) <= feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2); + feedback_reg(43) <= feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3); + feedback_reg(44) <= feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4); + feedback_reg(45) <= feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5); + feedback_reg(46) <= feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0); + feedback_reg(47) <= feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1); + feedback_reg(48) <= feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2); + feedback_reg(49) <= feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3); + feedback_reg(50) <= feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4); + feedback_reg(51) <= feedback_reg(1) xor feedback_reg(0) xor feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5); + feedback_reg(52) <= feedback_reg(2) xor feedback_reg(1) xor feedback_reg(1) xor feedback_reg(0); + feedback_reg(53) <= feedback_reg(3) xor feedback_reg(2) xor feedback_reg(2) xor feedback_reg(1); + feedback_reg(54) <= feedback_reg(4) xor feedback_reg(3) xor feedback_reg(3) xor feedback_reg(2); + feedback_reg(55) <= feedback_reg(5) xor feedback_reg(4) xor feedback_reg(4) xor feedback_reg(3); + feedback_reg(56) <= feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4); + feedback_reg(57) <= feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5); + feedback_reg(58) <= feedback_reg(1) xor feedback_reg(0); + feedback_reg(59) <= feedback_reg(2) xor feedback_reg(1); + feedback_reg(60) <= feedback_reg(3) xor feedback_reg(2); + feedback_reg(61) <= feedback_reg(4) xor feedback_reg(3); + feedback_reg(62) <= feedback_reg(5) xor feedback_reg(4); + feedback_reg(63) <= feedback_reg(6) xor feedback_reg(5); + + end if; + + end if; + + end process; + + prbs_word_o <= prbs_word_s; + +end rtl; diff --git a/TestBench_hw/prbs/prbs7_8b_checker.vhd b/TestBench_hw/prbs/prbs7_8b_checker.vhd new file mode 100644 index 0000000..57f45dd --- /dev/null +++ b/TestBench_hw/prbs/prbs7_8b_checker.vhd @@ -0,0 +1,99 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity prbs7_8b_checker is + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + prbs_word_i : in std_logic_vector(7 downto 0); + err_o : out std_logic_vector(7 downto 0); + rdy_o : out std_logic + ); +end prbs7_8b_checker; + +architecture rtl of prbs7_8b_checker is + signal feedback_reg : std_logic_vector(7 downto 0); + signal err_s : std_logic_vector(7 downto 0); + + type checker_state_T is (waitForLock, Locked); + signal status : checker_state_T; + + constant STATS_CONFIG_c : integer := 10; + signal cnt_stats : integer range 0 to STATS_CONFIG_c; + +begin + + checker_fsm_proc: process(reset_i, clk_i) + begin + if reset_i = '1' then + status <= waitForLock; + cnt_stats <= 0; + + elsif rising_edge(clk_i) then + case status is + when waitForLock => + if cnt_stats= STATS_CONFIG_c then + status <= Locked; + else + if err_s = x"00" and feedback_reg /= x"00" then + cnt_stats <= cnt_stats + 1; + else + cnt_stats <= 0; + end if; + end if; + + when Locked => null; + end case; + end if; + end process; + + -- PRBS7 equation: x^7 + x^6 + 1 + -- LSB first + prbs7_proc: process(reset_i, clk_i) + variable cnter : integer range 0 to 1; + begin + + if reset_i = '1' then + feedback_reg <= (others => '0'); + err_s <= x"00"; + + elsif rising_edge(clk_i) then + + if clken_i = '1' then + + err_s(0) <= prbs_word_i(0) xor (feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4)); + err_s(1) <= prbs_word_i(1) xor (feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5)); + err_s(2) <= prbs_word_i(2) xor (feedback_reg(1) xor feedback_reg(0)); + err_s(3) <= prbs_word_i(3) xor (feedback_reg(2) xor feedback_reg(1)); + err_s(4) <= prbs_word_i(4) xor (feedback_reg(3) xor feedback_reg(2)); + err_s(5) <= prbs_word_i(5) xor (feedback_reg(4) xor feedback_reg(3)); + err_s(6) <= prbs_word_i(6) xor (feedback_reg(5) xor feedback_reg(4)); + err_s(7) <= prbs_word_i(7) xor (feedback_reg(6) xor feedback_reg(5)); + + if status /= Locked then + feedback_reg <= prbs_word_i; + else + feedback_reg(0) <= (feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4)); + feedback_reg(1) <= (feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5)); + feedback_reg(2) <= (feedback_reg(1) xor feedback_reg(0)); + feedback_reg(3) <= (feedback_reg(2) xor feedback_reg(1)); + feedback_reg(4) <= (feedback_reg(3) xor feedback_reg(2)); + feedback_reg(5) <= (feedback_reg(4) xor feedback_reg(3)); + feedback_reg(6) <= (feedback_reg(5) xor feedback_reg(4)); + feedback_reg(7) <= (feedback_reg(6) xor feedback_reg(5)); + end if; + + + end if; + + end if; + + end process; + + err_o <= err_s; + rdy_o <= '1' when status = Locked else '0'; + +end rtl; \ No newline at end of file diff --git a/TestBench_hw/prbs/prbs7_8b_generator.vhd b/TestBench_hw/prbs/prbs7_8b_generator.vhd new file mode 100644 index 0000000..98f0888 --- /dev/null +++ b/TestBench_hw/prbs/prbs7_8b_generator.vhd @@ -0,0 +1,88 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity prbs7_8b_generator is + generic( + INIT_c : in std_logic_vector(7 downto 0) + ); + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + + err_pattern_i : in std_logic_vector(7 downto 0); + rep_delay_i : in std_logic_vector(23 downto 0); + + prbs_word_o : out std_logic_vector(7 downto 0); + rdy_o : out std_logic + ); +end prbs7_8b_generator; + +architecture rtl of prbs7_8b_generator is + signal feedback_reg : std_logic_vector(7 downto 0) := INIT_c; + signal prbs_word_s : std_logic_vector(7 downto 0) := INIT_c; + signal err_pattern_s : std_logic_vector(7 downto 0); + signal err_cnter_s : unsigned(24 downto 0); + signal inject_error_s : std_logic; + signal onceinject_done_s : std_logic; + +begin + + -- PRBS7 equation: x^7 + x^6 + 1 + -- LSB first + + prbs7_proc: process(reset_i, clk_i) + begin + + if reset_i = '1' then + feedback_reg <= INIT_c; + prbs_word_s <= INIT_c; + rdy_o <= '0'; + err_cnter_s <= (others => '0'); + err_pattern_s <= (others => '0'); + + elsif rising_edge(clk_i) then + + if clken_i = '1' then + + prbs_word_s <= feedback_reg; + rdy_o <= '1'; + + feedback_reg(0) <= feedback_reg(6) xor feedback_reg(5) xor feedback_reg(5) xor feedback_reg(4); + feedback_reg(1) <= feedback_reg(0) xor feedback_reg(6) xor feedback_reg(5); + feedback_reg(2) <= feedback_reg(1) xor feedback_reg(0); + feedback_reg(3) <= feedback_reg(2) xor feedback_reg(1); + feedback_reg(4) <= feedback_reg(3) xor feedback_reg(2); + feedback_reg(5) <= feedback_reg(4) xor feedback_reg(3); + feedback_reg(6) <= feedback_reg(5) xor feedback_reg(4); + feedback_reg(7) <= feedback_reg(6) xor feedback_reg(5); + + err_pattern_s <= x"00"; + + if err_pattern_i /= x"00" then + if std_logic_vector(err_cnter_s) = rep_delay_i then + if rep_delay_i /= x"000000" or onceinject_done_s = '0' then + err_pattern_s <= err_pattern_i; + onceinject_done_s <= '1'; + end if; + + err_cnter_s <= (others => '0'); + + else + err_cnter_s <= err_cnter_s + 1; + end if; + else + err_cnter_s <= (others => '0'); + onceinject_done_s <= '0'; + end if; + end if; + + end if; + + end process; + + prbs_word_o <= prbs_word_s xor err_pattern_s; + +end rtl; \ No newline at end of file diff --git a/TestBench_hw/resetgen_top.vhd b/TestBench_hw/resetgen_top.vhd deleted file mode 100644 index 2ef3dbf..0000000 --- a/TestBench_hw/resetgen_top.vhd +++ /dev/null @@ -1,73 +0,0 @@ --- IEEE VHDL standard library: -library ieee; -use ieee.std_logic_1164.all; - ---=================================================================================================-- ---####################################### Entity ##############################################-- ---=================================================================================================-- -entity resetgen_top is - port ( - -- Clocks - clk_mgtTxUsrclk_i : in std_logic; - clk_txClkEn_i : in std_logic; - clk_mgtRxUsrclk_i : in std_logic; - clk_rxClkEn_i : in std_logic; - - -- Reset in - rst_downlinkRst_i : in std_logic; - rst_uplinkRst_i : in std_logic; - - -- Reset out - rst_FPGAdownlinkRst_o : out std_logic; - rst_FPGAuplinkRst_o : out std_logic; - rst_ASICdownlinkEn_o : out std_logic; - rst_ASICuplinkEn_o : out std_logic; - - -- Control - rdy_downlinkRdy_i : in std_logic - ); -end resetgen_top; - ---=================================================================================================-- ---#################################### Architecture ###########################################-- ---=================================================================================================-- - -architecture behabioral of resetgen_top is - -begin --========#### Architecture Body ####========-- - - - downRstSynchProc: process(clk_mgtTxUsrclk_i) - begin - if rst_downlinkRst_i = '1' then - rst_FPGAdownlinkRst_o <= '1'; - - elsif rising_edge(clk_mgtTxUsrclk_i) then - if clk_txClkEn_i = '1' then - rst_FPGAdownlinkRst_o <= '0'; - end if; - end if; - - end process; - - upRstSynchProc: process(clk_mgtRxUsrclk_i) - begin - if rst_uplinkRst_i = '1' then - rst_FPGAuplinkRst_o <= '1'; - rst_ASICuplinkEn_o <= '0'; - - elsif rising_edge(clk_mgtRxUsrclk_i) then - if clk_rxClkEn_i = '1' then - rst_FPGAuplinkRst_o <= '0'; - rst_ASICuplinkEn_o <= '1'; - end if; - end if; - - end process; - - rst_ASICdownlinkEn_o <= rdy_downlinkRdy_i; - -end behabioral; ---=================================================================================================-- ---#################################################################################################-- ---=================================================================================================-- \ No newline at end of file diff --git a/TestBench_hw/top_tb.vhd b/TestBench_hw/top_tb.vhd index 7888dc4..3102364 100644 --- a/TestBench_hw/top_tb.vhd +++ b/TestBench_hw/top_tb.vhd @@ -1,17 +1,24 @@ -- IEEE VHDL standard library: library ieee; use ieee.std_logic_1164.all; -use ieee.numeric_std.all; +package bus_multiplexer_pkg is + type conf2b_array is array(natural range <>) of std_logic_vector(1 downto 0); +end package; + --! Xilinx devices library: library unisim; use unisim.vcomponents.all; +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.bus_multiplexer_pkg.all; use work.lpgbtfpga_package.all; + --=================================================================================================-- --####################################### Entity ##############################################-- --=================================================================================================-- - entity lpgbt_fpga_kcu105 is port ( --===============-- @@ -49,18 +56,12 @@ entity lpgbt_fpga_kcu105 is SFP0_TX_N : out std_logic; SFP0_RX_P : in std_logic; SFP0_RX_N : in std_logic; - - SFP1_TX_P : out std_logic; - SFP1_TX_N : out std_logic; - SFP1_RX_P : in std_logic; - SFP1_RX_N : in std_logic; - + -- SFP control: --------------- SFP0_TX_DISABLE : out std_logic; - SFP1_TX_DISABLE : out std_logic; - + --====================-- -- Signals forwarding -- --====================-- @@ -139,145 +140,15 @@ architecture behabioral of lpgbt_fpga_kcu105 is uplinkErrorMaskInject_i : in std_logic_vector(255 downto 0) --! Force bit flip (uplink - serial) ); END COMPONENT; - - COMPONENT lpgbtemul_top - port( - -- Reset - rst_downlink_i : in std_logic; - rst_uplink_i : in std_logic; - - -- DownLink - downlinkClk_o : out std_logic; - downlinkClkEn_o : out std_logic; - - downLinkDataGroup0 : out std_logic_vector(15 downto 0); - downLinkDataGroup1 : out std_logic_vector(15 downto 0); - downLinkDataEc : out std_logic_vector(1 downto 0); - downLinkDataIc : out std_logic_vector(1 downto 0); - - downLinkBypassDeinterleaver : in std_logic; - downLinkBypassFECDecoder : in std_logic; - downLinkBypassDescsrambler : in std_logic; - - enableFECErrCounter : in std_logic; - fecCorrectionCount : out std_logic_vector(15 downto 0); - - downlinkRdy_o : out std_logic; - - -- uplink data - uplinkClk_o : out std_logic; - uplinkClkEn_i : in std_logic; - - upLinkData0 : in std_logic_vector(31 downto 0); - upLinkData1 : in std_logic_vector(31 downto 0); - upLinkData2 : in std_logic_vector(31 downto 0); - upLinkData3 : in std_logic_vector(31 downto 0); - upLinkData4 : in std_logic_vector(31 downto 0); - upLinkData5 : in std_logic_vector(31 downto 0); - upLinkData6 : in std_logic_vector(31 downto 0); - upLinkDataIC : in std_logic_vector(1 downto 0); - upLinkDataEC : in std_logic_vector(1 downto 0); - - uplinkRdy_o : out std_logic; - - - -- MGT - clk_mgtrefclk_i : in std_logic; --! Transceiver serial clock - clk_mgtfreedrpclk_i : in std_logic; - - mgt_rxn_i : in std_logic; - mgt_rxp_i : in std_logic; - mgt_txn_o : out std_logic; - mgt_txp_o : out std_logic; - - mgt_rdy_o : out std_logic; - - -- Uplink controll signals - upLinkScramblerBypass : in std_logic; - upLinkScramblerReset : in std_logic; - upLinkFecBypass : in std_logic; - upLinkInterleaverBypass : in std_logic; - fecMode : in std_logic; - txDataRate : in std_logic - ); - END COMPONENT; - COMPONENT datarouter_top - port ( - uplinkSelectDataRate_i : in std_logic; -- '0': 5.12Gbps / '1': 10.24Gbps - uplinkSelectFEC_i : in std_logic; -- '0': FEC5 / '1': FEC12 - - upLinkData0 : in std_logic_vector(31 downto 0); - upLinkData1 : in std_logic_vector(31 downto 0); - upLinkData2 : in std_logic_vector(31 downto 0); - upLinkData3 : in std_logic_vector(31 downto 0); - upLinkData4 : in std_logic_vector(31 downto 0); - upLinkData5 : in std_logic_vector(31 downto 0); - upLinkData6 : in std_logic_vector(31 downto 0); - - upLinkData : out std_logic_vector(229 downto 0) - ); - END COMPONENT; - - COMPONENT uplinkstimulis_top - port ( - uplink_txrdy_i : in std_logic; - uplink_rxrdy_i : in std_logic; - - uplink_txclock_i : in std_logic; - uplink_txen_i : in std_logic; - uplink_rxclock_i : in std_logic; - uplink_rxen_i : in std_logic; - - uplinkSelectDataRate_i : in std_logic; -- '0': 5.12Gbps / '1': 10.24Gbps - uplinkSelectFEC_i : in std_logic; -- '0': FEC5 / '1': FEC12 - upLinkDataSel_i : in std_logic; - - upLinkData0 : out std_logic_vector(31 downto 0); - upLinkData1 : out std_logic_vector(31 downto 0); - upLinkData2 : out std_logic_vector(31 downto 0); - upLinkData3 : out std_logic_vector(31 downto 0); - upLinkData4 : out std_logic_vector(31 downto 0); - upLinkData5 : out std_logic_vector(31 downto 0); - upLinkData6 : out std_logic_vector(31 downto 0); - - upLinkData : in std_logic_vector(229 downto 0); - - uplink_error_o : out std_logic - ); - END COMPONENT; - - COMPONENT downlinkstimulis_top - port ( - downlink_txrdy_i : in std_logic; - downlink_rxrdy_i : in std_logic; - - downlink_txclock_i : in std_logic; - downlink_txen_i : in std_logic; - downlink_rxclock_i : in std_logic; - downlink_rxen_i : in std_logic; - - downlinkData_o : out std_logic_vector(31 downto 0); - downlinkData_i : in std_logic_vector(31 downto 0); - - downlink_txFlag_o : out std_logic; - downlink_rxFlag_o : out std_logic; - - downlink_error_o : out std_logic - ); - END COMPONENT; - COMPONENT vio_0 PORT ( clk : IN STD_LOGIC; probe_in0 : IN STD_LOGIC_VECTOR(0 DOWNTO 0); probe_in1 : IN STD_LOGIC_VECTOR(0 DOWNTO 0); - probe_in2 : IN STD_LOGIC_VECTOR(0 DOWNTO 0); - probe_in3 : IN STD_LOGIC_VECTOR(0 DOWNTO 0); - probe_in4 : IN STD_LOGIC_VECTOR(0 DOWNTO 0); - probe_in5 : IN STD_LOGIC_VECTOR(0 DOWNTO 0); - probe_in6 : IN STD_LOGIC_VECTOR(0 DOWNTO 0); - probe_in7 : IN STD_LOGIC_VECTOR(6 DOWNTO 0); + probe_in2 : IN STD_LOGIC_VECTOR(15 DOWNTO 0); + probe_in3 : IN STD_LOGIC_VECTOR(27 DOWNTO 0); + probe_out0 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0); probe_out1 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0); probe_out2 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0); @@ -287,21 +158,81 @@ architecture behabioral of lpgbt_fpga_kcu105 is probe_out6 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0); probe_out7 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0); probe_out8 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0); - probe_out9 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); - probe_out10 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0) + probe_out9 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0); + probe_out10 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); + probe_out11 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0); + probe_out12 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0); + probe_out13 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out14 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out15 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out16 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out17 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0); + probe_out18 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out19 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out20 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out21 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out22 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out23 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out24 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out25 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out26 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out27 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out28 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out29 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out30 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out31 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out32 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out33 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out34 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out35 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out36 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out37 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out38 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out39 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out40 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out41 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out42 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out43 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + probe_out44 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0) ); END COMPONENT; - - COMPONENT jtag_controller_top - Port ( - CLK_I : in std_logic; - RESET_I : in std_logic; - reset_lpgbtfpga : out std_logic; - downlinkLpGBTEmulReady : in std_logic + COMPONENT lpgbt_elink_downlinkGenerator is + port( + clk320DnLink_i : in std_logic; + clkEnDnLink_i : in std_logic; + + generator_rst_i : in std_logic; + + config_group0_i : in std_logic_vector(1 downto 0); + config_group1_i : in std_logic_vector(1 downto 0); + config_group2_i : in std_logic_vector(1 downto 0); + config_group3_i : in std_logic_vector(1 downto 0); + + fixed_pattern_i : in std_logic_vector(31 downto 0); + + downlink_o : out std_logic_vector(31 downto 0); + + eport_gen_rdy_o : out std_logic_vector(15 downto 0) ); END COMPONENT; + COMPONENT uplink_checker + port ( + reset_checker_i : in std_logic; + ser320_clk_i : in std_logic; + ser320_clkEn_i : in std_logic; + + data_rate_i : in std_logic; + + elink_config_i : in conf2b_array(27 downto 0); + + error_detected_o : out std_logic_vector(27 downto 0); + + userDataUpLink_i : in std_logic_vector(229 downto 0) + ); + END COMPONENT; + -- Signals: -- Config @@ -396,18 +327,23 @@ architecture behabioral of lpgbt_fpga_kcu105 is signal downlink_txFlag_s : std_logic; signal downlink_rxFlag_s : std_logic; signal upLinkDataSel_s : std_logic; + + + + signal generator_rst_s : std_logic; + signal downconfig_g0_s : std_logic_vector(1 downto 0); + signal downconfig_g1_s : std_logic_vector(1 downto 0); + signal downconfig_g2_s : std_logic_vector(1 downto 0); + signal downconfig_g3_s : std_logic_vector(1 downto 0); + signal downlink_gen_rdy_s : std_logic_vector(15 downto 0); + signal upelink_config_s : conf2b_array(27 downto 0); + signal uperror_detected_s : std_logic_vector(27 downto 0); + signal reset_upchecker_s : std_logic; begin --========#### Architecture Body ####========-- - -- Reset controll - lpgbtfpga_downlinkrst_s <= CPU_RESET or reset_lpgbtfpga_from_jtag; - lpgbtemul_downlinkrst_s <= not(lpgbtfpga_downlinkrdy_s); - - lpgbtemul_uplinkrst_s <= CPU_RESET or reset_lpgbtfpga_from_jtag; - lpgbtfpga_uplinkrst_s <= not(lpgbtemul_uplinkrdy_s); - + -- Reset controll SFP0_TX_DISABLE <= '0'; - SFP1_TX_DISABLE <= '0'; -- Clocks @@ -472,82 +408,10 @@ begin --========#### Architecture Body ####========-- end if; end process; - - uplink_txClkEn_proc: process(lpgbtemul_mgtRdy_s, lpgbtemul_uplinkclk_s) - variable cnter : integer range 0 to 8; - begin - if lpgbtemul_mgtRdy_s = '0' then - cnter := 0; - lpgbtemul_uplinkClkEn_s <= '0'; - - elsif rising_edge(lpgbtemul_uplinkclk_s) then - cnter := cnter + 1; - - if cnter = 8 then - cnter := 0; - end if; - - lpgbtemul_uplinkClkEn_s <= '0'; - if cnter = 0 then - lpgbtemul_uplinkClkEn_s <= '1'; - end if; - - end if; - - end process; -- Data stimulis lpgbtfpga_downlinkEcData_s <= (others => '1'); lpgbtfpga_downlinkIcData_s <= (others => '1'); - - uplinkstimulis_top_inst: uplinkstimulis_top - port map( - uplink_txrdy_i => lpgbtemul_uplinkrdy_s, - uplink_rxrdy_i => lpgbtfpga_uplinkrdy_s, - - uplink_txclock_i => lpgbtemul_uplinkclk_s, - uplink_txen_i => lpgbtemul_uplinkClkEn_s, - uplink_rxclock_i => lpgbtfpga_uplinkclk_s, - uplink_rxen_i => lpgbtfpga_uplinkclken_s, - - uplinkSelectDataRate_i => uplinkSelectDataRate_s, - uplinkSelectFEC_i => uplinkSelectFEC_s, - upLinkDataSel_i => upLinkDataSel_s, - - upLinkData0 => lpgbtemul_uplinkUserData_g0_s, - upLinkData1 => lpgbtemul_uplinkUserData_g1_s, - upLinkData2 => lpgbtemul_uplinkUserData_g2_s, - upLinkData3 => lpgbtemul_uplinkUserData_g3_s, - upLinkData4 => lpgbtemul_uplinkUserData_g4_s, - upLinkData5 => lpgbtemul_uplinkUserData_g5_s, - upLinkData6 => lpgbtemul_uplinkUserData_g6_s, - - upLinkData => lpgbtfpga_uplinkUserData_s, - - uplink_error_o => uplink_error_s - ); - - downlinkstimulis_top_inst: downlinkstimulis_top - port map( - downlink_txrdy_i => lpgbtfpga_downlinkrdy_s, - downlink_rxrdy_i => lpgbtemul_downlinkrdy_s, - - downlink_txclock_i => lpgbtfpga_mgttxclk_s, - downlink_txen_i => lpgbtfgpa_txclken_s, - downlink_rxclock_i => lpgbtemul_downlinkclk_s, - downlink_rxen_i => lpgbtemul_downlinkclken_s, - - downlinkData_o => lpgbtfpga_downlinkUserData_s, - downlinkData_i => lpgbtemul_downlinkUserData_s, - - downlink_txFlag_o => downlink_txFlag_s, - downlink_rxFlag_o => downlink_rxFlag_s, - - downlink_error_o => downlink_error_s - ); - - lpgbtemul_uplinkIcData_s <= (others => '1'); - lpgbtemul_uplinkEcData_s <= (others => '1'); -- LpGBT FPGA lpgbtFpga_top_inst: lpgbtFpga_top @@ -598,133 +462,117 @@ begin --========#### Architecture Body ####========-- mgt_txn_o => SFP0_TX_N, mgt_txp_o => SFP0_TX_P, + -- HPTD IP mgt_txcaliben_i => lpgbtfpga_mgt_txcaliben_s, mgt_txcalib_i => lpgbtfpga_mgt_txpicalib_s, mgt_txaligned_o => lpgbtfpga_mgt_txaligned_s, mgt_txphase_o => lpgbtfpga_mgt_txpiphase_s, - -- Test feature + -- Test feature (not used in the example design) downlink_forceHeaderErr_i => downlink_forceHeaderErr_s, downlinkErrorMaskInject_i => downlinkErrorMaskInject_s, uplink_forceHeaderErr_i => uplink_forceHeaderErr_s, uplinkErrorMaskInject_i => uplinkErrorMaskInject_s ); - - - lpgbtemul_downlinkUserData_s <= lpgbtemul_downlinkUserData_g1_s & lpgbtemul_downlinkUserData_g0_s; - - datarouter_top_inst: datarouter_top - port map ( - uplinkSelectDataRate_i => uplinkSelectDataRate_s, - uplinkSelectFEC_i => uplinkSelectFEC_s, - - upLinkData0 => lpgbtemul_uplinkUserData_g0_s, - upLinkData1 => lpgbtemul_uplinkUserData_g1_s, - upLinkData2 => lpgbtemul_uplinkUserData_g2_s, - upLinkData3 => lpgbtemul_uplinkUserData_g3_s, - upLinkData4 => lpgbtemul_uplinkUserData_g4_s, - upLinkData5 => lpgbtemul_uplinkUserData_g5_s, - upLinkData6 => lpgbtemul_uplinkUserData_g6_s, - - upLinkData => lpgbtemul_uplinkUserData_s - ); - -- LpGBT Model - lpgbtemul_top_inst: lpgbtemul_top - port map( - -- Reset - rst_downlink_i => lpgbtemul_downlinkrst_s, - rst_uplink_i => lpgbtemul_uplinkrst_s, - - -- DownLink - downlinkClk_o => lpgbtemul_downlinkclk_s, - downlinkClkEn_o => lpgbtemul_downlinkclken_s, - - downLinkDataGroup0 => lpgbtemul_downlinkUserData_g0_s, - downLinkDataGroup1 => lpgbtemul_downlinkUserData_g1_s, - downLinkDataEc => lpgbtemul_downlinkEcData_s, - downLinkDataIc => lpgbtemul_downlinkIcData_s, + -- Data pattern generator / checker (PRBS7) + lpgbt_elink_downlinkGenerator_inst: lpgbt_elink_downlinkGenerator + port map( + --clk40Mhz_Tx_i : in std_logic; + clk320DnLink_i => lpgbtfpga_mgttxclk_s, + clkEnDnLink_i => lpgbtfgpa_txclken_s, - downLinkBypassDeinterleaver => downLinkBypassInterleaver_s, - downLinkBypassFECDecoder => downLinkBypassFECEncoder_s, - downLinkBypassDescsrambler => downLinkBypassScrambler_s, + generator_rst_i => generator_rst_s, - enableFECErrCounter => '0', - fecCorrectionCount => open, + -- Group configurations: + -- "11": 320Mbps + -- "10": 160Mbps + -- "01": 80Mbps + -- "00": Fixed pattern + config_group0_i => downconfig_g0_s, + config_group1_i => downconfig_g1_s, + config_group2_i => downconfig_g2_s, + config_group3_i => downconfig_g3_s, - downlinkRdy_o => lpgbtemul_downlinkrdy_s, - - -- uplink data - uplinkClk_o => lpgbtemul_uplinkclk_s, - uplinkClkEn_i => lpgbtemul_uplinkClkEn_s, - - upLinkData0 => lpgbtemul_uplinkUserData_g0_s, - upLinkData1 => lpgbtemul_uplinkUserData_g1_s, - upLinkData2 => lpgbtemul_uplinkUserData_g2_s, - upLinkData3 => lpgbtemul_uplinkUserData_g3_s, - upLinkData4 => lpgbtemul_uplinkUserData_g4_s, - upLinkData5 => lpgbtemul_uplinkUserData_g5_s, - upLinkData6 => lpgbtemul_uplinkUserData_g6_s, - upLinkDataIC => lpgbtemul_uplinkIcData_s, - upLinkDataEC => lpgbtemul_uplinkEcData_s, + downlink_o => lpgbtfpga_downlinkUserData_s, - uplinkRdy_o => lpgbtemul_uplinkrdy_s, + fixed_pattern_i => x"12345678", - -- MGT - clk_mgtrefclk_i => mgtRefClk_from_smaMgtRefClkbuf_s, - clk_mgtfreedrpclk_i => mgt_freedrpclk_s, - - mgt_rxn_i => SFP1_RX_N, - mgt_rxp_i => SFP1_RX_P, - mgt_txn_o => SFP1_TX_N, - mgt_txp_o => SFP1_TX_P, - - mgt_rdy_o => lpgbtemul_mgtRdy_s, - - -- Uplink control signals - upLinkScramblerBypass => upLinkScramblerBypass_s, - upLinkScramblerReset => '0', - upLinkFecBypass => upLinkFecBypass_s, - upLinkInterleaverBypass => upLinkInterleaverBypass_s, - fecMode => uplinkSelectFEC_s, - txDataRate => uplinkSelectDataRate_s + eport_gen_rdy_o => downlink_gen_rdy_s ); + lpgbt_uplinkchecker_inst: uplink_checker + port map( + reset_checker_i => reset_upchecker_s, + ser320_clk_i => lpgbtfpga_uplinkclk_s, + ser320_clkEn_i => lpgbtfpga_uplinkclken_s, + + data_rate_i => uplinkSelectDataRate_s, + + elink_config_i => upelink_config_s, + + error_detected_o => uperror_detected_s, + + userDataUpLink_i => lpgbtfpga_uplinkUserData_s + ); + vio_debug_inst : vio_0 PORT MAP ( clk => mgt_freedrpclk_s, - probe_in0(0) => lpgbtfpga_uplinkrdy_s, - probe_in1(0) => lpgbtfpga_downlinkrdy_s, - probe_in2(0) => lpgbtemul_uplinkrdy_s, - probe_in3(0) => lpgbtemul_downlinkrdy_s, - probe_in4(0) => uplink_error_s, - probe_in5(0) => downlink_error_s, - probe_in6(0) => lpgbtfpga_mgt_txaligned_s, - probe_in7 => lpgbtfpga_mgt_txpiphase_s, - probe_out0(0) => downLinkBypassInterleaver_s, - probe_out1(0) => downLinkBypassFECEncoder_s, - probe_out2(0) => downLinkBypassScrambler_s, - probe_out3(0) => uplinkSelectDataRate_s, - probe_out4(0) => uplinkSelectFEC_s, - probe_out5(0) => upLinkInterleaverBypass_s, - probe_out6(0) => upLinkFecBypass_s, - probe_out7(0) => upLinkScramblerBypass_s, - probe_out8(0) => lpgbtfpga_mgt_txcaliben_s, - probe_out9 => lpgbtfpga_mgt_txpicalib_s, - probe_out10(0) => upLinkDataSel_s - ); - - jtag_controller_inst: jtag_controller_top - Port map( - CLK_I => mgt_freedrpclk_s, - RESET_I => CPU_RESET, - - reset_lpgbtfpga => reset_lpgbtfpga_from_jtag, - downlinkLpGBTEmulReady => lpgbtfpga_downlinkrdy_s - ); + probe_in0(0) => lpgbtfpga_downlinkrdy_s, + probe_in1(0) => lpgbtfpga_uplinkrdy_s, + probe_in2 => downlink_gen_rdy_s, + probe_in3 => uperror_detected_s, + + probe_out0(0) => lpgbtfpga_downlinkrst_s, + probe_out1(0) => lpgbtfpga_uplinkrst_s, + probe_out2(0) => downLinkBypassInterleaver_s, + probe_out3(0) => downLinkBypassFECEncoder_s, + probe_out4(0) => downLinkBypassScrambler_s, + probe_out5(0) => uplinkSelectDataRate_s, + probe_out6(0) => uplinkSelectFEC_s, + probe_out7(0) => upLinkInterleaverBypass_s, + probe_out8(0) => upLinkFecBypass_s, + probe_out9(0) => upLinkScramblerBypass_s, + probe_out10 => lpgbtfpga_mgt_txpicalib_s, + probe_out11(0)=> lpgbtfpga_mgt_txcaliben_s, + probe_out12(0)=> generator_rst_s, + probe_out13 => downconfig_g0_s, + probe_out14 => downconfig_g1_s, + probe_out15 => downconfig_g2_s, + probe_out16 => downconfig_g3_s, + probe_out17(0)=> reset_upchecker_s, + probe_out18 => upelink_config_s(0), + probe_out19 => upelink_config_s(1), + probe_out20 => upelink_config_s(2), + probe_out21 => upelink_config_s(3), + probe_out22 => upelink_config_s(4), + probe_out23 => upelink_config_s(5), + probe_out24 => upelink_config_s(6), + probe_out25 => upelink_config_s(7), + probe_out26 => upelink_config_s(8), + probe_out27 => upelink_config_s(9), + probe_out28 => upelink_config_s(10), + probe_out29 => upelink_config_s(11), + probe_out30 => upelink_config_s(12), + probe_out31 => upelink_config_s(13), + probe_out32 => upelink_config_s(14), + probe_out33 => upelink_config_s(15), + probe_out34 => upelink_config_s(16), + probe_out35 => upelink_config_s(17), + probe_out36 => upelink_config_s(18), + probe_out37 => upelink_config_s(20), + probe_out38 => upelink_config_s(21), + probe_out39 => upelink_config_s(22), + probe_out40 => upelink_config_s(23), + probe_out41 => upelink_config_s(24), + probe_out42 => upelink_config_s(25), + probe_out43 => upelink_config_s(26), + probe_out44 => upelink_config_s(27) + ); - USER_SMA_GPIO_P <= downlink_txFlag_s; - USER_SMA_GPIO_N <= downlink_rxFlag_s; + USER_SMA_GPIO_P <= '1'; + USER_SMA_GPIO_N <= '1'; end behabioral; --=================================================================================================-- diff --git a/TestBench_hw/uplink_checker.vhd b/TestBench_hw/uplink_checker.vhd new file mode 100644 index 0000000..9402858 --- /dev/null +++ b/TestBench_hw/uplink_checker.vhd @@ -0,0 +1,291 @@ +-- IEEE VHDL standard library: +library ieee; +use ieee.std_logic_1164.all; + +package bus_multiplexer_pkg is + type conf2b_array is array(natural range <>) of std_logic_vector(1 downto 0); +end package; + +--! Xilinx devices library: +library unisim; +use unisim.vcomponents.all; + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.bus_multiplexer_pkg.all; + +entity uplink_checker is + port ( + reset_checker_i : in std_logic; + ser320_clk_i : in std_logic; + ser320_clkEn_i : in std_logic; + + data_rate_i : in std_logic; + + elink_config_i : in conf2b_array(27 downto 0); + + error_detected_o : out std_logic_vector(27 downto 0); + + userDataUpLink_i : in std_logic_vector(229 downto 0) + ); +end uplink_checker; + +architecture rtl of uplink_checker is + + component prbs7_32b_checker + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + prbs_word_i : in std_logic_vector(31 downto 0); + err_o : out std_logic_vector(31 downto 0); + rdy_o : out std_logic + ); + end component; + + component prbs7_16b_checker + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + prbs_word_i : in std_logic_vector(15 downto 0); + err_o : out std_logic_vector(15 downto 0); + rdy_o : out std_logic + ); + end component; + + component prbs7_8b_checker + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + prbs_word_i : in std_logic_vector(7 downto 0); + err_o : out std_logic_vector(7 downto 0); + rdy_o : out std_logic + ); + end component; + + component prbs7_4b_checker + port ( + reset_i : in std_logic; + clk_i : in std_logic; + clken_i : in std_logic; + prbs_word_i : in std_logic_vector(3 downto 0); + err_o : out std_logic_vector(3 downto 0); + rdy_o : out std_logic + ); + end component; + + type elink_1g28_T is array(integer range <>) of std_logic_vector(31 downto 0); + type elink_640m_T is array(integer range <>) of std_logic_vector(15 downto 0); + type elink_320m_T is array(integer range <>) of std_logic_vector(7 downto 0); + type elink_160m_T is array(integer range <>) of std_logic_vector(3 downto 0); + type bert_cnter_T is array(integer range <>) of std_logic_vector(63 downto 0); + type err_cnter_T is array(integer range <>) of std_logic_vector(5 downto 0); + type cnt_arr_T is array(integer range <>) of unsigned(31 downto 0); + + signal elink_1g28_s : elink_1g28_T(6 downto 0); -- Maximum of 7 links @ 1.28gbps + signal elink_640m_s : elink_640m_T(14 downto 0); -- Maximum of 14 links @ 640Mbps + signal elink_320m_s : elink_320m_T(27 downto 0); -- Maximum of 28 links @ 320Mbps + signal elink_160m_s : elink_160m_T(27 downto 0); -- Maximum of 28 links @ 160Mbps + + signal elink_1g28_err_s : elink_1g28_T(27 downto 0); + signal elink_640m_err_s : elink_640m_T(27 downto 0); + signal elink_320m_err_s : elink_320m_T(27 downto 0); + signal elink_160m_err_s : elink_160m_T(27 downto 0); + + signal elink_err_s : elink_1g28_T(27 downto 0); + signal cntr_rst_s : std_logic_vector(27 downto 0); + signal elink_prbs_rdy : std_logic_vector(27 downto 0); + + signal elink_1g28_prbsRdy_s : std_logic_vector(27 downto 0); + signal elink_640m_prbsRdy_s : std_logic_vector(27 downto 0); + signal elink_320m_prbsRdy_s : std_logic_vector(27 downto 0); + signal elink_160m_prbsRdy_s : std_logic_vector(27 downto 0); + + signal reset320_s : std_logic; + signal rst_dst_s : std_logic; +begin + + reset_synch_proc: process(reset_checker_i, ser320_clk_i) + begin + if reset_checker_i = '1' then + rst_dst_s <= '1'; + reset320_s <= '1'; + elsif rising_edge(ser320_clk_i) then + rst_dst_s <= '0'; + reset320_s <= rst_dst_s; + end if; + end process; + + elink_1g28_s(0) <= userDataUpLink_i(31 downto 0); + elink_1g28_s(1) <= userDataUpLink_i(63 downto 32); + elink_1g28_s(2) <= userDataUpLink_i(95 downto 64); + elink_1g28_s(3) <= userDataUpLink_i(127 downto 96); + elink_1g28_s(4) <= userDataUpLink_i(159 downto 128); + elink_1g28_s(5) <= userDataUpLink_i(191 downto 160); + elink_1g28_s(6) <= userDataUpLink_i(223 downto 192); + + elink_640m_s(0) <= userDataUpLink_i(15 downto 0); + elink_640m_s(1) <= userDataUpLink_i(31 downto 16) when data_rate_i = '1' else (others => '0'); + elink_640m_s(2) <= userDataUpLink_i(47 downto 32) when data_rate_i = '1' else userDataUpLink_i(31 downto 16); + elink_640m_s(3) <= userDataUpLink_i(63 downto 48) when data_rate_i = '1' else (others => '0'); + elink_640m_s(4) <= userDataUpLink_i(79 downto 64) when data_rate_i = '1' else userDataUpLink_i(47 downto 32); + elink_640m_s(5) <= userDataUpLink_i(95 downto 80) when data_rate_i = '1' else (others => '0'); + elink_640m_s(6) <= userDataUpLink_i(111 downto 96) when data_rate_i = '1' else userDataUpLink_i(63 downto 48); + elink_640m_s(7) <= userDataUpLink_i(127 downto 112) when data_rate_i = '1' else (others => '0'); + elink_640m_s(8) <= userDataUpLink_i(143 downto 128) when data_rate_i = '1' else userDataUpLink_i(79 downto 64); + elink_640m_s(9) <= userDataUpLink_i(159 downto 144) when data_rate_i = '1' else (others => '0'); + elink_640m_s(10) <= userDataUpLink_i(175 downto 160) when data_rate_i = '1' else userDataUpLink_i(95 downto 80); + elink_640m_s(11) <= userDataUpLink_i(191 downto 176) when data_rate_i = '1' else (others => '0'); + elink_640m_s(12) <= userDataUpLink_i(207 downto 192) when data_rate_i = '1' else userDataUpLink_i(111 downto 96); + elink_640m_s(13) <= userDataUpLink_i(223 downto 208) when data_rate_i = '1' else (others => '0'); + + elink_320m_s(0) <= userDataUpLink_i(7 downto 0); + elink_320m_s(1) <= userDataUpLink_i(15 downto 8) when data_rate_i = '1' else (others => '0'); + elink_320m_s(2) <= userDataUpLink_i(23 downto 16) when data_rate_i = '1' else userDataUpLink_i(15 downto 8); + elink_320m_s(3) <= userDataUpLink_i(31 downto 24) when data_rate_i = '1' else (others => '0'); + elink_320m_s(4) <= userDataUpLink_i(39 downto 32) when data_rate_i = '1' else userDataUpLink_i(23 downto 16); + elink_320m_s(5) <= userDataUpLink_i(47 downto 40) when data_rate_i = '1' else (others => '0'); + elink_320m_s(6) <= userDataUpLink_i(55 downto 48) when data_rate_i = '1' else userDataUpLink_i(31 downto 24); + elink_320m_s(7) <= userDataUpLink_i(63 downto 56) when data_rate_i = '1' else (others => '0'); + elink_320m_s(8) <= userDataUpLink_i(71 downto 64) when data_rate_i = '1' else userDataUpLink_i(39 downto 32); + elink_320m_s(9) <= userDataUpLink_i(79 downto 72) when data_rate_i = '1' else (others => '0'); + elink_320m_s(10) <= userDataUpLink_i(87 downto 80) when data_rate_i = '1' else userDataUpLink_i(47 downto 40); + elink_320m_s(11) <= userDataUpLink_i(95 downto 88) when data_rate_i = '1' else (others => '0'); + elink_320m_s(12) <= userDataUpLink_i(103 downto 96) when data_rate_i = '1' else userDataUpLink_i(55 downto 48); + elink_320m_s(13) <= userDataUpLink_i(111 downto 104) when data_rate_i = '1' else (others => '0'); + elink_320m_s(14) <= userDataUpLink_i(119 downto 112) when data_rate_i = '1' else userDataUpLink_i(63 downto 56); + elink_320m_s(15) <= userDataUpLink_i(127 downto 120) when data_rate_i = '1' else (others => '0'); + elink_320m_s(16) <= userDataUpLink_i(135 downto 128) when data_rate_i = '1' else userDataUpLink_i(71 downto 64); + elink_320m_s(17) <= userDataUpLink_i(143 downto 136) when data_rate_i = '1' else (others => '0'); + elink_320m_s(18) <= userDataUpLink_i(151 downto 144) when data_rate_i = '1' else userDataUpLink_i(79 downto 72); + elink_320m_s(19) <= userDataUpLink_i(159 downto 152) when data_rate_i = '1' else (others => '0'); + elink_320m_s(20) <= userDataUpLink_i(167 downto 160) when data_rate_i = '1' else userDataUpLink_i(87 downto 80); + elink_320m_s(21) <= userDataUpLink_i(175 downto 168) when data_rate_i = '1' else (others => '0'); + elink_320m_s(22) <= userDataUpLink_i(183 downto 176) when data_rate_i = '1' else userDataUpLink_i(95 downto 88); + elink_320m_s(23) <= userDataUpLink_i(191 downto 184) when data_rate_i = '1' else (others => '0'); + elink_320m_s(24) <= userDataUpLink_i(199 downto 192) when data_rate_i = '1' else userDataUpLink_i(103 downto 96); + elink_320m_s(25) <= userDataUpLink_i(207 downto 200) when data_rate_i = '1' else (others => '0'); + elink_320m_s(26) <= userDataUpLink_i(215 downto 208) when data_rate_i = '1' else userDataUpLink_i(111 downto 104); + elink_320m_s(27) <= userDataUpLink_i(223 downto 216) when data_rate_i = '1' else (others => '0'); + + elink_160m_s(0) <= userDataUpLink_i(3 downto 0); + elink_160m_s(1) <= userDataUpLink_i(7 downto 4); + elink_160m_s(2) <= userDataUpLink_i(11 downto 8); + elink_160m_s(3) <= userDataUpLink_i(15 downto 12); + elink_160m_s(4) <= userDataUpLink_i(19 downto 16); + elink_160m_s(5) <= userDataUpLink_i(23 downto 20); + elink_160m_s(6) <= userDataUpLink_i(27 downto 24); + elink_160m_s(7) <= userDataUpLink_i(31 downto 28); + elink_160m_s(8) <= userDataUpLink_i(35 downto 32); + elink_160m_s(9) <= userDataUpLink_i(39 downto 36); + elink_160m_s(10) <= userDataUpLink_i(43 downto 40); + elink_160m_s(11) <= userDataUpLink_i(47 downto 44); + elink_160m_s(12) <= userDataUpLink_i(51 downto 48); + elink_160m_s(13) <= userDataUpLink_i(55 downto 52); + elink_160m_s(14) <= userDataUpLink_i(59 downto 56); + elink_160m_s(15) <= userDataUpLink_i(63 downto 60); + elink_160m_s(16) <= userDataUpLink_i(67 downto 64); + elink_160m_s(17) <= userDataUpLink_i(71 downto 68); + elink_160m_s(18) <= userDataUpLink_i(75 downto 72); + elink_160m_s(19) <= userDataUpLink_i(79 downto 76); + elink_160m_s(20) <= userDataUpLink_i(83 downto 80); + elink_160m_s(21) <= userDataUpLink_i(87 downto 84); + elink_160m_s(22) <= userDataUpLink_i(91 downto 88); + elink_160m_s(23) <= userDataUpLink_i(95 downto 92); + elink_160m_s(24) <= userDataUpLink_i(99 downto 96); + elink_160m_s(25) <= userDataUpLink_i(103 downto 100); + elink_160m_s(26) <= userDataUpLink_i(107 downto 104); + elink_160m_s(27) <= userDataUpLink_i(111 downto 108); + + multi_elink_1g28_gen: for i in 0 to 6 generate + prbs7_32b_checker_inst: prbs7_32b_checker + port map( + reset_i => reset320_s, + clk_i => ser320_clk_i, + clken_i => ser320_clkEn_i, + prbs_word_i => elink_1g28_s(i), + err_o => elink_1g28_err_s(i*4), + rdy_o => elink_1g28_prbsRdy_s(i*4) + ); + end generate; + + elink_1g28_prbsRdy_s(3 downto 1) <= "000"; + elink_1g28_prbsRdy_s(7 downto 5) <= "000"; + elink_1g28_prbsRdy_s(11 downto 9) <= "000"; + elink_1g28_prbsRdy_s(15 downto 13) <= "000"; + elink_1g28_prbsRdy_s(19 downto 17) <= "000"; + elink_1g28_prbsRdy_s(23 downto 21) <= "000"; + elink_1g28_prbsRdy_s(27 downto 25) <= "000"; + + multi_elink_640mbps_gen: for i in 0 to 13 generate + prbs7_16b_checker_inst: prbs7_16b_checker + port map( + reset_i => reset320_s, + clk_i => ser320_clk_i, + clken_i => ser320_clkEn_i, + prbs_word_i => elink_640m_s(i), + err_o => elink_640m_err_s(i*2), + rdy_o => elink_640m_prbsRdy_s(i*2) + ); + end generate; + + elink_640m_prbsRdy_s(1) <= '0'; + elink_640m_prbsRdy_s(3) <= '0'; + elink_640m_prbsRdy_s(5) <= '0'; + elink_640m_prbsRdy_s(7) <= '0'; + elink_640m_prbsRdy_s(9) <= '0'; + elink_640m_prbsRdy_s(11) <= '0'; + elink_640m_prbsRdy_s(13) <= '0'; + elink_640m_prbsRdy_s(15) <= '0'; + elink_640m_prbsRdy_s(17) <= '0'; + elink_640m_prbsRdy_s(19) <= '0'; + elink_640m_prbsRdy_s(21) <= '0'; + elink_640m_prbsRdy_s(23) <= '0'; + elink_640m_prbsRdy_s(25) <= '0'; + elink_640m_prbsRdy_s(27) <= '0'; + + multi_elink_320mbps_gen: for i in 0 to 27 generate + prbs7_8b_checker_inst: prbs7_8b_checker + port map( + reset_i => reset320_s, + clk_i => ser320_clk_i, + clken_i => ser320_clkEn_i, + prbs_word_i => elink_320m_s(i), + err_o => elink_320m_err_s(i), + rdy_o => elink_320m_prbsRdy_s(i) + ); + end generate; + + multi_elink_160mbps_gen: for i in 0 to 27 generate + prbs7_4b_checker_inst: prbs7_4b_checker + port map( + reset_i => reset320_s, + clk_i => ser320_clk_i, + clken_i => ser320_clkEn_i, + prbs_word_i => elink_160m_s(i), + err_o => elink_160m_err_s(i), + rdy_o => elink_160m_prbsRdy_s(i) + ); + end generate; + + err_cnter_gen: for i in 0 to 27 generate + + elink_err_s(i) <= elink_1g28_err_s(i) when elink_config_i(i) = "11" else + x"0000" & elink_640m_err_s(i) when elink_config_i(i) = "10" else + x"000000" & elink_320m_err_s(i) when elink_config_i(i) = "01" else + x"0000000" & elink_160m_err_s(i); + + elink_prbs_rdy(i) <= elink_1g28_prbsRdy_s(i) when elink_config_i(i) = "11" else + elink_640m_prbsRdy_s(i) when elink_config_i(i) = "10" else + elink_320m_prbsRdy_s(i) when elink_config_i(i) = "01" else + elink_160m_prbsRdy_s(i); + + error_detected_o(i) <= '0' when elink_err_s(i) = x"00000000" else '1'; + + end generate; + + +end rtl; \ No newline at end of file diff --git a/TestBench_hw/uplinkstimulis_top.vhd b/TestBench_hw/uplinkstimulis_top.vhd deleted file mode 100644 index 840976c..0000000 --- a/TestBench_hw/uplinkstimulis_top.vhd +++ /dev/null @@ -1,502 +0,0 @@ ----- IEEE VHDL standard library: ---library ieee; ---use ieee.std_logic_1164.all; ---use ieee.numeric_std.all; - -----=================================================================================================-- -----####################################### Entity ##############################################-- -----=================================================================================================-- ---entity uplinkstimulis_top is --- port ( --- uplink_txrdy_i : in std_logic; --- uplink_rxrdy_i : in std_logic; - --- uplink_txclock_i : in std_logic; --- uplink_txen_i : in std_logic; --- uplink_rxclock_i : in std_logic; --- uplink_rxen_i : in std_logic; - --- uplinkSelectDataRate_i : in std_logic; -- '0': 5.12Gbps / '1': 10.24Gbps --- uplinkSelectFEC_i : in std_logic; -- '0': FEC5 / '1': FEC12 - --- upLinkData0 : out std_logic_vector(31 downto 0); --- upLinkData1 : out std_logic_vector(31 downto 0); --- upLinkData2 : out std_logic_vector(31 downto 0); --- upLinkData3 : out std_logic_vector(31 downto 0); --- upLinkData4 : out std_logic_vector(31 downto 0); --- upLinkData5 : out std_logic_vector(31 downto 0); --- upLinkData6 : out std_logic_vector(31 downto 0); - --- upLinkData : in std_logic_vector(229 downto 0); - --- uplink_error_o : out std_logic --- ); ---end uplinkstimulis_top; - -----=================================================================================================-- -----#################################### Architecture ###########################################-- -----=================================================================================================-- - ---architecture behavioral of uplinkstimulis_top is - --- signal check_prev_cnter_g0_s : unsigned(31 downto 0); - --- signal checker_rdy_s : std_logic; - ---begin --========#### Architecture Body ####========-- - --- uplinkGen_proc: process(uplink_txrdy_i, uplink_txclock_i) --- variable cnter_g0 : unsigned(31 downto 0); --- begin - --- if uplink_txrdy_i = '0' then --- cnter_g0 := x"a472bc9e"; - --- upLinkData0 <= x"00000000"; --- upLinkData1 <= x"00000000"; --- upLinkData2 <= x"00000000"; --- upLinkData3 <= x"00000000"; --- upLinkData4 <= x"00000000"; --- upLinkData5 <= x"00000000"; --- upLinkData6 <= x"00000000"; - --- elsif rising_edge(uplink_txclock_i) then - --- if uplink_txen_i = '1' then - --- upLinkData0 <= std_logic_vector(cnter_g0); --- upLinkData1 <= std_logic_vector(cnter_g0); --- upLinkData2 <= std_logic_vector(cnter_g0); --- upLinkData3 <= std_logic_vector(cnter_g0); --- upLinkData4 <= std_logic_vector(cnter_g0); --- upLinkData5 <= std_logic_vector(cnter_g0); --- upLinkData6 <= std_logic_vector(cnter_g0); - --- if cnter_g0 = x"FFFFFFFF" then --- cnter_g0 := x"00000000"; --- else --- cnter_g0 := cnter_g0 + 1; --- end if; - --- end if; --- end if; - --- end process; - --- uplinkCheck_proc: process(uplink_rxrdy_i, uplink_rxclock_i) --- variable check_expected_cnter_g0_s : unsigned(31 downto 0); --- begin - --- if uplink_rxrdy_i = '0' then --- checker_rdy_s <= '0'; --- uplink_error_o <= '0'; - --- elsif rising_edge(uplink_rxclock_i) then - --- if uplink_rxen_i = '1' then - --- -- Get Value --- check_prev_cnter_g0_s <= unsigned(x"0000" & upLinkData(15 downto 0)); - --- -- Check value --- if checker_rdy_s = '1' then - --- if (uplinkSelectDataRate_i = '1' and check_prev_cnter_g0_s = x"FFFFFFFF") or (uplinkSelectDataRate_i = '0' and check_prev_cnter_g0_s = x"0000FFFF") then --- check_expected_cnter_g0_s := x"00000000"; --- else --- check_expected_cnter_g0_s := check_prev_cnter_g0_s + 1; --- end if; - --- if uplinkSelectDataRate_i = '1' then --- if unsigned(upLinkData(31 downto 0)) /= check_expected_cnter_g0_s then --- uplink_error_o <= '1'; --- end if; - --- if unsigned(upLinkData(63 downto 32)) /= check_expected_cnter_g0_s then --- uplink_error_o <= '1'; --- end if; - --- if unsigned(upLinkData(95 downto 64)) /= check_expected_cnter_g0_s then --- uplink_error_o <= '1'; --- end if; - --- if unsigned(upLinkData(127 downto 96)) /= check_expected_cnter_g0_s then --- uplink_error_o <= '1'; --- end if; - --- if unsigned(upLinkData(159 downto 128)) /= check_expected_cnter_g0_s then --- uplink_error_o <= '1'; --- end if; - --- if unsigned(upLinkData(191 downto 160)) /= check_expected_cnter_g0_s then --- uplink_error_o <= '1'; --- end if; - --- if uplinkSelectFEC_i = '0' and unsigned(upLinkData(223 downto 192)) /= check_expected_cnter_g0_s then --- uplink_error_o <= '1'; --- end if; - --- else --- if unsigned(upLinkData(15 downto 0)) /= check_expected_cnter_g0_s then --- uplink_error_o <= '1'; --- end if; - --- if unsigned(upLinkData(31 downto 16)) /= check_expected_cnter_g0_s then --- uplink_error_o <= '1'; --- end if; - --- if unsigned(upLinkData(47 downto 32)) /= check_expected_cnter_g0_s then --- uplink_error_o <= '1'; --- end if; - --- if unsigned(upLinkData(63 downto 48)) /= check_expected_cnter_g0_s then --- uplink_error_o <= '1'; --- end if; - --- if unsigned(upLinkData(79 downto 64)) /= check_expected_cnter_g0_s then --- uplink_error_o <= '1'; --- end if; - --- if unsigned(upLinkData(95 downto 80)) /= check_expected_cnter_g0_s then --- uplink_error_o <= '1'; --- end if; - --- if uplinkSelectFEC_i = '0' and unsigned(upLinkData(111 downto 96)) /= check_expected_cnter_g0_s then --- uplink_error_o <= '1'; --- end if; - --- end if; - --- end if; - --- checker_rdy_s <= '1'; - --- end if; --- end if; - --- end process; - ---end behavioral; -----=================================================================================================-- -----#################################################################################################-- -----=================================================================================================-- - - --- IEEE VHDL standard library: -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.all; - ---=================================================================================================-- ---####################################### Entity ##############################################-- ---=================================================================================================-- -entity uplinkstimulis_top is - port ( - uplink_txrdy_i : in std_logic; - uplink_rxrdy_i : in std_logic; - - uplink_txclock_i : in std_logic; - uplink_txen_i : in std_logic; - uplink_rxclock_i : in std_logic; - uplink_rxen_i : in std_logic; - - uplinkSelectDataRate_i : in std_logic; -- '0': 5.12Gbps / '1': 10.24Gbps - uplinkSelectFEC_i : in std_logic; -- '0': FEC5 / '1': FEC12 - upLinkDataSel_i : in std_logic; - - upLinkData0 : out std_logic_vector(31 downto 0); - upLinkData1 : out std_logic_vector(31 downto 0); - upLinkData2 : out std_logic_vector(31 downto 0); - upLinkData3 : out std_logic_vector(31 downto 0); - upLinkData4 : out std_logic_vector(31 downto 0); - upLinkData5 : out std_logic_vector(31 downto 0); - upLinkData6 : out std_logic_vector(31 downto 0); - - upLinkData : in std_logic_vector(229 downto 0); - - uplink_error_o : out std_logic - ); -end uplinkstimulis_top; - ---=================================================================================================-- ---#################################### Architecture ###########################################-- ---=================================================================================================-- - -architecture behavioral of uplinkstimulis_top is - - signal check_prev_cnter_g0_s : unsigned(31 downto 0); - signal check_prev_cnter_g1_s : unsigned(31 downto 0); - signal check_prev_cnter_g2_s : unsigned(31 downto 0); - signal check_prev_cnter_g3_s : unsigned(31 downto 0); - signal check_prev_cnter_g4_s : unsigned(31 downto 0); - signal check_prev_cnter_g5_s : unsigned(31 downto 0); - signal check_prev_cnter_g6_s : unsigned(31 downto 0); - - signal checker_rdy_s : std_logic; - -begin --========#### Architecture Body ####========-- - - uplinkGen_proc: process(uplink_txrdy_i, uplink_txclock_i) - variable cnter_g0 : unsigned(31 downto 0); - variable cnter_g1 : unsigned(31 downto 0); - variable cnter_g2 : unsigned(31 downto 0); - variable cnter_g3 : unsigned(31 downto 0); - variable cnter_g4 : unsigned(31 downto 0); - variable cnter_g5 : unsigned(31 downto 0); - variable cnter_g6 : unsigned(31 downto 0); - begin - - if uplink_txrdy_i = '0' then - cnter_g0 := x"000a0000"; - cnter_g1 := x"00000000"; - cnter_g2 := x"00000b00"; - cnter_g3 := x"00005000"; - cnter_g4 := x"03000000"; - cnter_g5 := x"00000006"; - cnter_g6 := x"00c00000"; - - upLinkData0 <= x"00000000"; - upLinkData1 <= x"00000000"; - upLinkData2 <= x"00000000"; - upLinkData3 <= x"00000000"; - upLinkData4 <= x"00000000"; - upLinkData5 <= x"00000000"; - upLinkData6 <= x"00000000"; - - elsif rising_edge(uplink_txclock_i) then - - if uplink_txen_i = '1' then - - if upLinkDataSel_i = '1' then - upLinkData0 <= std_logic_vector(cnter_g0); - upLinkData1 <= std_logic_vector(cnter_g1); - upLinkData2 <= std_logic_vector(cnter_g2); - upLinkData3 <= std_logic_vector(cnter_g3); - upLinkData4 <= std_logic_vector(cnter_g4); - upLinkData5 <= std_logic_vector(cnter_g5); - upLinkData6 <= std_logic_vector(cnter_g6); - - else - upLinkData0 <= x"a739be8d"; - upLinkData1 <= x"db98acbd"; - upLinkData2 <= x"f24ade56"; - upLinkData3 <= x"5a250fbc"; - upLinkData4 <= x"82bca94d"; - upLinkData5 <= x"baba548d"; - upLinkData6 <= x"0986fac3"; - end if; - - if cnter_g0 = x"FFFFFFFF" then - cnter_g0 := x"00000000"; - else - cnter_g0 := cnter_g0 + 1; - end if; - - if cnter_g1 = x"FFFFFFFF" then - cnter_g1 := x"00000000"; - else - cnter_g1 := cnter_g1 + 1; - end if; - - if cnter_g2 = x"FFFFFFFF" then - cnter_g2 := x"00000000"; - else - cnter_g2 := cnter_g2 + 1; - end if; - - if cnter_g3 = x"FFFFFFFF" then - cnter_g3 := x"00000000"; - else - cnter_g3 := cnter_g3 + 1; - end if; - - if cnter_g4 = x"FFFFFFFF" then - cnter_g4 := x"00000000"; - else - cnter_g4 := cnter_g4 + 1; - end if; - - if cnter_g5 = x"FFFFFFFF" then - cnter_g5 := x"00000000"; - else - cnter_g5 := cnter_g5 + 1; - end if; - - if cnter_g0 = x"FFFFFFFF" then - cnter_g6 := x"00000000"; - else - cnter_g6 := cnter_g6 + 1; - end if; - - end if; - end if; - - end process; - - uplinkCheck_proc: process(uplink_rxrdy_i, uplink_rxclock_i) - variable check_expected_cnter_g0_s : unsigned(31 downto 0); - variable check_expected_cnter_g1_s : unsigned(31 downto 0); - variable check_expected_cnter_g2_s : unsigned(31 downto 0); - variable check_expected_cnter_g3_s : unsigned(31 downto 0); - variable check_expected_cnter_g4_s : unsigned(31 downto 0); - variable check_expected_cnter_g5_s : unsigned(31 downto 0); - variable check_expected_cnter_g6_s : unsigned(31 downto 0); - begin - - if uplink_rxrdy_i = '0' then - checker_rdy_s <= '0'; - uplink_error_o <= '0'; - - elsif rising_edge(uplink_rxclock_i) then - - if uplink_rxen_i = '1' then - - -- Get Value - if uplinkSelectDataRate_i = '1' then - check_prev_cnter_g0_s <= unsigned(upLinkData(31 downto 0)); - check_prev_cnter_g1_s <= unsigned(upLinkData(63 downto 32)); - check_prev_cnter_g2_s <= unsigned(upLinkData(95 downto 64)); - check_prev_cnter_g3_s <= unsigned(upLinkData(127 downto 96)); - check_prev_cnter_g4_s <= unsigned(upLinkData(159 downto 128)); - check_prev_cnter_g5_s <= unsigned(upLinkData(191 downto 160)); - - if uplinkSelectFEC_i = '0' then - check_prev_cnter_g6_s <= unsigned(upLinkData(223 downto 192)); - else - check_prev_cnter_g6_s <= x"00000000"; - end if; - - else - check_prev_cnter_g0_s <= unsigned(x"0000" & upLinkData(15 downto 0)); - check_prev_cnter_g1_s <= unsigned(x"0000" & upLinkData(31 downto 16)); - check_prev_cnter_g2_s <= unsigned(x"0000" & upLinkData(47 downto 32)); - check_prev_cnter_g3_s <= unsigned(x"0000" & upLinkData(63 downto 48)); - check_prev_cnter_g4_s <= unsigned(x"0000" & upLinkData(79 downto 64)); - check_prev_cnter_g5_s <= unsigned(x"0000" & upLinkData(95 downto 80)); - - if uplinkSelectFEC_i = '0' then - check_prev_cnter_g6_s <= unsigned(x"0000" & upLinkData(111 downto 96)); - else - check_prev_cnter_g6_s <= x"00000000"; - end if; - - end if; - - -- Check value - if checker_rdy_s = '1' then - - if (uplinkSelectDataRate_i = '1' and check_prev_cnter_g0_s = x"FFFFFFFF") or (uplinkSelectDataRate_i = '0' and check_prev_cnter_g0_s = x"0000FFFF") then - check_expected_cnter_g0_s := x"00000000"; - else - check_expected_cnter_g0_s := check_prev_cnter_g0_s + 1; - end if; - - if (uplinkSelectDataRate_i = '1' and check_prev_cnter_g1_s = x"FFFFFFFF") or (uplinkSelectDataRate_i = '0' and check_prev_cnter_g1_s = x"0000FFFF") then - check_expected_cnter_g1_s := x"00000000"; - else - check_expected_cnter_g1_s := check_prev_cnter_g1_s + 1; - end if; - - if (uplinkSelectDataRate_i = '1' and check_prev_cnter_g2_s = x"FFFFFFFF") or (uplinkSelectDataRate_i = '0' and check_prev_cnter_g2_s = x"0000FFFF") then - check_expected_cnter_g2_s := x"00000000"; - else - check_expected_cnter_g2_s := check_prev_cnter_g2_s + 1; - end if; - - if (uplinkSelectDataRate_i = '1' and check_prev_cnter_g3_s = x"FFFFFFFF") or (uplinkSelectDataRate_i = '0' and check_prev_cnter_g3_s = x"0000FFFF") then - check_expected_cnter_g3_s := x"00000000"; - else - check_expected_cnter_g3_s := check_prev_cnter_g3_s + 1; - end if; - - if (uplinkSelectDataRate_i = '1' and check_prev_cnter_g4_s = x"FFFFFFFF") or (uplinkSelectDataRate_i = '0' and check_prev_cnter_g4_s = x"0000FFFF") then - check_expected_cnter_g4_s := x"00000000"; - else - check_expected_cnter_g4_s := check_prev_cnter_g4_s + 1; - end if; - - if (uplinkSelectDataRate_i = '1' and check_prev_cnter_g5_s = x"FFFFFFFF") or (uplinkSelectDataRate_i = '0' and check_prev_cnter_g5_s = x"0000FFFF") then - check_expected_cnter_g5_s := x"00000000"; - else - check_expected_cnter_g5_s := check_prev_cnter_g5_s + 1; - end if; - - if (uplinkSelectDataRate_i = '1' and check_prev_cnter_g6_s = x"FFFFFFFF") or (uplinkSelectDataRate_i = '0' and check_prev_cnter_g6_s = x"0000FFFF") then - check_expected_cnter_g6_s := x"00000000"; - else - check_expected_cnter_g6_s := check_prev_cnter_g6_s + 1; - end if; - - if uplinkSelectDataRate_i = '1' then - if unsigned(upLinkData(31 downto 0)) /= check_expected_cnter_g0_s then - uplink_error_o <= '1'; - end if; - - if unsigned(upLinkData(63 downto 32)) /= check_expected_cnter_g1_s then - uplink_error_o <= '1'; - end if; - - if unsigned(upLinkData(95 downto 64)) /= check_expected_cnter_g2_s then - uplink_error_o <= '1'; - end if; - - if unsigned(upLinkData(127 downto 96)) /= check_expected_cnter_g3_s then - uplink_error_o <= '1'; - end if; - - if unsigned(upLinkData(159 downto 128)) /= check_expected_cnter_g4_s then - uplink_error_o <= '1'; - end if; - - if unsigned(upLinkData(191 downto 160)) /= check_expected_cnter_g5_s then - uplink_error_o <= '1'; - end if; - - if uplinkSelectFEC_i = '0' and unsigned(upLinkData(223 downto 192)) /= check_expected_cnter_g6_s then - uplink_error_o <= '1'; - end if; - - else - if unsigned(upLinkData(15 downto 0)) /= check_expected_cnter_g0_s then - uplink_error_o <= '1'; - end if; - - if unsigned(upLinkData(31 downto 16)) /= check_expected_cnter_g1_s then - uplink_error_o <= '1'; - end if; - - if unsigned(upLinkData(47 downto 32)) /= check_expected_cnter_g2_s then - uplink_error_o <= '1'; - end if; - - if unsigned(upLinkData(63 downto 48)) /= check_expected_cnter_g3_s then - uplink_error_o <= '1'; - end if; - - if unsigned(upLinkData(79 downto 64)) /= check_expected_cnter_g4_s then - uplink_error_o <= '1'; - end if; - - if unsigned(upLinkData(95 downto 80)) /= check_expected_cnter_g5_s then - uplink_error_o <= '1'; - end if; - - if uplinkSelectFEC_i = '0' and unsigned(upLinkData(111 downto 96)) /= check_expected_cnter_g6_s then - uplink_error_o <= '1'; - end if; - - end if; - - end if; - - checker_rdy_s <= '1'; - - end if; - end if; - - end process; - -end behavioral; ---=================================================================================================-- ---#################################################################################################-- ---=================================================================================================-- \ No newline at end of file diff --git a/Vivado/lpgbt-fpga-kcu105.srcs/sources_1/ip/jtag_axi_0/jtag_axi_0.xci b/Vivado/lpgbt-fpga-kcu105.srcs/sources_1/ip/jtag_axi_0/jtag_axi_0.xci deleted file mode 100644 index 18ce11b..0000000 --- a/Vivado/lpgbt-fpga-kcu105.srcs/sources_1/ip/jtag_axi_0/jtag_axi_0.xci +++ /dev/null @@ -1,58 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<spirit:design xmlns:xilinx="http://www.xilinx.com" xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <spirit:vendor>xilinx.com</spirit:vendor> - <spirit:library>xci</spirit:library> - <spirit:name>unknown</spirit:name> - <spirit:version>1.0</spirit:version> - <spirit:componentInstances> - <spirit:componentInstance> - <spirit:instanceName>jtag_axi_0</spirit:instanceName> - <spirit:componentRef spirit:vendor="xilinx.com" spirit:library="ip" spirit:name="jtag_axi" spirit:version="1.2"/> - <spirit:configurableElementValues> - <spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.SIGNAL_CLOCK.FREQ_HZ">100000000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.FAMILY">kintexu</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.M_AXI_ADDR_WIDTH">32</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.M_AXI_DATA_WIDTH">32</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.M_AXI_ID_WIDTH">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.M_HAS_BURST">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.PROTOCOL">2</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.RD_TXN_QUEUE_LENGTH">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.WR_TXN_QUEUE_LENGTH">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.Component_Name">jtag_axi_0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.M_AXI_ADDR_WIDTH">32</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.M_AXI_DATA_WIDTH">32</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.M_AXI_ID_WIDTH">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.M_HAS_BURST">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PROTOCOL">2</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.RD_TXN_QUEUE_LENGTH">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.WR_TXN_QUEUE_LENGTH">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.ARCHITECTURE">kintexu</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.BOARD">xilinx.com:kcu105:part0:1.1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.DEVICE">xcku040</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.PACKAGE">ffva1156</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.PREFHDL">VHDL</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.SILICON_REVISION"/> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.SIMULATOR_LANGUAGE">MIXED</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.SPEEDGRADE">-2</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.TEMPERATURE_GRADE">E</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_CUSTOMIZATION">TRUE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_GENERATION">TRUE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPCONTEXT">IP_Flow</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.MANAGED">TRUE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.OUTPUTDIR">.</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SELECTEDSIMMODEL"/> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SHAREDDIR">.</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2016.3</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SYNTHESISFLOW">OUT_OF_CONTEXT</spirit:configurableElementValue> - </spirit:configurableElementValues> - <spirit:vendorExtensions> - <xilinx:componentInstanceExtensions> - <xilinx:configElementInfos> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.PROTOCOL" xilinx:valueSource="user"/> - </xilinx:configElementInfos> - </xilinx:componentInstanceExtensions> - </spirit:vendorExtensions> - </spirit:componentInstance> - </spirit:componentInstances> -</spirit:design> diff --git a/Vivado/lpgbt-fpga-kcu105.srcs/sources_1/ip/vio_0/vio_0.xci b/Vivado/lpgbt-fpga-kcu105.srcs/sources_1/ip/vio_0/vio_0.xci index 1631093..0839726 100644 --- a/Vivado/lpgbt-fpga-kcu105.srcs/sources_1/ip/vio_0/vio_0.xci +++ b/Vivado/lpgbt-fpga-kcu105.srcs/sources_1/ip/vio_0/vio_0.xci @@ -11,13 +11,13 @@ <spirit:configurableElementValues> <spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.SIGNAL_CLOCK.FREQ_HZ">100000000</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_EN_PROBE_IN_ACTIVITY">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_NUM_PROBE_IN">8</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_NUM_PROBE_OUT">11</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_NUM_PROBE_IN">4</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_NUM_PROBE_OUT">45</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_XDEVICEFAMILY">kintexu</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_EN_PROBE_IN_ACTIVITY">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_EN_SYNCHRONIZATION">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_NUM_PROBE_IN">8</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_NUM_PROBE_OUT">11</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_NUM_PROBE_IN">4</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_NUM_PROBE_OUT">45</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN0_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN100_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN101_WIDTH">1</spirit:configurableElementValue> @@ -196,7 +196,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN27_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN28_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN29_WIDTH">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN2_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN2_WIDTH">16</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN30_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN31_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN32_WIDTH">1</spirit:configurableElementValue> @@ -207,7 +207,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN37_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN38_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN39_WIDTH">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN3_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN3_WIDTH">28</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN40_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN41_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_IN42_WIDTH">1</spirit:configurableElementValue> @@ -297,7 +297,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT109_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT109_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT10_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT10_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT10_WIDTH">7</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT110_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT110_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT111_INIT_VAL">0x0</spirit:configurableElementValue> @@ -363,7 +363,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT139_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT139_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT13_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT13_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT13_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT140_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT140_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT141_INIT_VAL">0x0</spirit:configurableElementValue> @@ -385,7 +385,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT149_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT149_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT14_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT14_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT14_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT150_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT150_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT151_INIT_VAL">0x0</spirit:configurableElementValue> @@ -407,7 +407,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT159_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT159_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT15_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT15_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT15_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT160_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT160_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT161_INIT_VAL">0x0</spirit:configurableElementValue> @@ -429,7 +429,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT169_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT169_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT16_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT16_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT16_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT170_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT170_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT171_INIT_VAL">0x0</spirit:configurableElementValue> @@ -473,7 +473,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT189_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT189_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT18_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT18_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT18_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT190_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT190_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT191_INIT_VAL">0x0</spirit:configurableElementValue> @@ -495,7 +495,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT199_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT199_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT19_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT19_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT19_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT1_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT1_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT200_INIT_VAL">0x0</spirit:configurableElementValue> @@ -519,7 +519,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT209_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT209_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT20_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT20_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT20_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT210_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT210_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT211_INIT_VAL">0x0</spirit:configurableElementValue> @@ -541,7 +541,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT219_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT219_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT21_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT21_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT21_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT220_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT220_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT221_INIT_VAL">0x0</spirit:configurableElementValue> @@ -563,7 +563,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT229_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT229_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT22_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT22_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT22_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT230_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT230_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT231_INIT_VAL">0x0</spirit:configurableElementValue> @@ -585,7 +585,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT239_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT239_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT23_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT23_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT23_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT240_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT240_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT241_INIT_VAL">0x0</spirit:configurableElementValue> @@ -607,7 +607,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT249_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT249_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT24_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT24_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT24_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT250_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT250_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT251_INIT_VAL">0x0</spirit:configurableElementValue> @@ -621,49 +621,49 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT255_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT255_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT25_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT25_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT25_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT26_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT26_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT26_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT27_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT27_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT27_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT28_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT28_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT28_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT29_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT29_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT29_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT2_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT2_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT30_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT30_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT30_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT31_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT31_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT31_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT32_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT32_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT32_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT33_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT33_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT33_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT34_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT34_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT34_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT35_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT35_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT35_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT36_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT36_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT36_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT37_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT37_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT37_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT38_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT38_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT38_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT39_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT39_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT39_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT3_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT3_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT40_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT40_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT40_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT41_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT41_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT41_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT42_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT42_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT42_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT43_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT43_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT43_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT44_INIT_VAL">0x0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT44_WIDTH">1</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT44_WIDTH">2</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT45_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT45_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT46_INIT_VAL">0x0</spirit:configurableElementValue> @@ -785,7 +785,7 @@ <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT99_INIT_VAL">0x0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT99_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT9_INIT_VAL">0x00</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT9_WIDTH">7</spirit:configurableElementValue> + <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.C_PROBE_OUT9_WIDTH">1</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.Component_Name">vio_0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.ARCHITECTURE">kintexu</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.BOARD">xilinx.com:kcu105:part0:1.1</spirit:configurableElementValue> @@ -812,7 +812,42 @@ <xilinx:configElementInfos> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_NUM_PROBE_IN" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_NUM_PROBE_OUT" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_IN2_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_IN3_WIDTH" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_IN7_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT10_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT13_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT14_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT15_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT16_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT18_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT19_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT20_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT21_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT22_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT23_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT24_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT25_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT26_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT27_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT28_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT29_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT30_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT31_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT32_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT33_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT34_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT35_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT36_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT37_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT38_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT39_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT40_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT41_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT42_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT43_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT44_WIDTH" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT45_WIDTH" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.C_PROBE_OUT9_WIDTH" xilinx:valueSource="user"/> </xilinx:configElementInfos> </xilinx:componentInstanceExtensions> diff --git a/Vivado/lpgbt-fpga-kcu105.xpr b/Vivado/lpgbt-fpga-kcu105.xpr index 48487c2..67b31d0 100644 --- a/Vivado/lpgbt-fpga-kcu105.xpr +++ b/Vivado/lpgbt-fpga-kcu105.xpr @@ -3,7 +3,7 @@ <!-- --> <!-- Copyright 1986-2016 Xilinx, Inc. All Rights Reserved. --> -<Project Version="7" Minor="17" Path="D:/LpGBT-FPGA/lpgbt-fpga-kcu105 - no hptd for release/Vivado/lpgbt-fpga-kcu105.xpr"> +<Project Version="7" Minor="17" Path="D:/LpGBT-FPGA/lpgbt-fpga-kcu105-git/Vivado/lpgbt-fpga-kcu105.xpr"> <DefaultLaunch Dir="$PRUNDIR"/> <Configuration> <Option Name="Id" Val="ee7b1704ed96439f978269f23d8a0350"/> @@ -20,7 +20,7 @@ <Option Name="BoardPart" Val="xilinx.com:kcu105:part0:1.1"/> <Option Name="ActiveSimSet" Val="sim_1"/> <Option Name="DefaultLib" Val="xil_defaultlib"/> - <Option Name="IPOutputRepo" Val="$PCACHEDIR/ip"/> + <Option Name="IPOutputRepo" Val="$PPRDIR/../../lpgbt-fpga-kcu105 - no hptd for release/Vivado/lpgbt-fpga-kcu105.cache/ip"/> <Option Name="IPCachePermission" Val="read"/> <Option Name="IPCachePermission" Val="write"/> <Option Name="EnableCoreContainer" Val="FALSE"/> @@ -37,13 +37,13 @@ <Option Name="WTVcsLaunchSim" Val="0"/> <Option Name="WTRivieraLaunchSim" Val="0"/> <Option Name="WTActivehdlLaunchSim" Val="0"/> - <Option Name="WTXSimExportSim" Val="17"/> - <Option Name="WTModelSimExportSim" Val="17"/> - <Option Name="WTQuestaExportSim" Val="17"/> - <Option Name="WTIesExportSim" Val="17"/> - <Option Name="WTVcsExportSim" Val="17"/> - <Option Name="WTRivieraExportSim" Val="17"/> - <Option Name="WTActivehdlExportSim" Val="17"/> + <Option Name="WTXSimExportSim" Val="21"/> + <Option Name="WTModelSimExportSim" Val="21"/> + <Option Name="WTQuestaExportSim" Val="21"/> + <Option Name="WTIesExportSim" Val="21"/> + <Option Name="WTVcsExportSim" Val="21"/> + <Option Name="WTRivieraExportSim" Val="21"/> + <Option Name="WTActivehdlExportSim" Val="21"/> <Option Name="GenerateIPUpgradeLog" Val="TRUE"/> <Option Name="XSimRadix" Val="hex"/> <Option Name="XSimTimeUnit" Val="ns"/> @@ -53,140 +53,13 @@ <FileSets Version="1" Minor="31"> <FileSet Name="sources_1" Type="DesignSrcs" RelSrcDir="$PSRCDIR/sources_1"> <Filter Type="Srcs"/> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/gf_mult_3.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/gf_multBy3_5.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/gf_multBy3_4.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/gf_multBy2_5.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/gf_multBy2_4.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/gf_multBy2_3.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/gf_log_3.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/gf_inv_3.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/gf_add_5.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/gf_add_4.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/gf_add_3.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/scrambler60bitOrder58.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/scrambler58bitOrder58.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/scrambler53bitOrder49.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/scrambler51bitOrder49.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/rs_encoder_N31K29.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/rs_encoder_N15K13.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/rs_decoder_N7K5.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/dataPathFecCounter.v"> + <File Path="$PPRDIR/../LpGBT-FPGA/lpgbtfpga_package.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../LpGBT-FPGA/lpgbtfpga_package.vhd"> + <File Path="$PPRDIR/../TestBench_hw/top_tb.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> @@ -246,52 +119,9 @@ <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/upLinkScrambler.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/upLinkInterleaver.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/upLinkFECEncoder.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/upLinkDataSelect.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/downLinkFECDecoder.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/downLinkDeinterleaver.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/descrambler36bitOrder36.v"> + <File Path="$PPRDIR/../Mgt/xlx_ku_mgt_ip_reset_synchronizer.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> @@ -331,21 +161,7 @@ <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/upLinkDataPath.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/downLinkDataPath.v"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <File Path="$PPRDIR/../Mgt/xlx_ku_mgt_ip_reset_synchronizer.vhd"> + <File Path="$PPRDIR/../Mgt/xlx_ku_mgt.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> @@ -357,86 +173,85 @@ <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../LpGBT-FPGA/dataPath/downlink_dataPath.vhd"> + <File Path="$PPRDIR/../LpGBT-FPGA/gearbox/txgearbox.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../TestBench_hw/LpGBT_model/dataPath.v"> + <File Path="$PPRDIR/../LpGBT-FPGA/gearbox/rxgearbox.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../LpGBT-FPGA/gearbox/rxgearbox.vhd"> + <File Path="$PPRDIR/../LpGBT-FPGA/mgtFrameAligner/mgt_frameAligner.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../Mgt/xlx_ku_mgt.vhd"> + <File Path="$PPRDIR/../LpGBT-FPGA/dataPath/downlink_dataPath.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../LpGBT-FPGA/gearbox/txgearbox.vhd"> + <File Path="$PPRDIR/../TestBench_hw/lpgbt_downlinkGenerator.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../LpGBT-FPGA/mgtFrameAligner/mgt_frameAligner.vhd"> + <File Path="$PPRDIR/../TestBench_hw/lpgbtfpga_top.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../TestBench_hw/jtag_controller/lpgbt_axi_control.vhd"> + <File Path="$PPRDIR/../TestBench_hw/uplink_checker.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../TestBench_hw/lpgbtfpga_top.vhd"> + <File Path="$PPRDIR/../TestBench_hw/prbs/prbs7_4b_generator.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../TestBench_hw/uplinkstimulis_top.vhd"> + <File Path="$PPRDIR/../TestBench_hw/prbs/prbs7_8b_checker.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../TestBench_hw/lpgbtemul_top.vhd"> + <File Path="$PPRDIR/../TestBench_hw/prbs/prbs7_8b_generator.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../TestBench_hw/downlinkstimulis_top.vhd"> + <File Path="$PPRDIR/../TestBench_hw/prbs/prbs7_2b_generator.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../TestBench_hw/datarouter_top.vhd"> + <File Path="$PPRDIR/../TestBench_hw/prbs/prbs7_32b_checker.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../TestBench_hw/jtag_controller/jtag_controller_top.vhd"> + <File Path="$PPRDIR/../TestBench_hw/prbs/prbs7_4b_checker.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PPRDIR/../TestBench_hw/top_tb.vhd"> + <File Path="$PPRDIR/../TestBench_hw/prbs/prbs7_16b_checker.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> @@ -509,19 +324,6 @@ <Option Name="UseBlackboxStub" Val="1"/> </Config> </FileSet> - <FileSet Name="jtag_axi_0" Type="BlockSrcs" RelSrcDir="$PSRCDIR/jtag_axi_0"> - <File Path="$PSRCDIR/sources_1/ip/jtag_axi_0/jtag_axi_0.xci"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> - <Config> - <Option Name="TopModule" Val="jtag_axi_0"/> - <Option Name="UseBlackboxStub" Val="1"/> - </Config> - </FileSet> </FileSets> <Simulators> <Simulator Name="XSim"> @@ -566,14 +368,6 @@ <GeneratedRun Dir="$PRUNDIR" File="gen_run.xml"/> <Report Name="ROUTE_DESIGN.REPORT_METHODOLOGY" Enabled="1"/> </Run> - <Run Id="jtag_axi_0_synth_1" Type="Ft3:Synth" SrcSet="jtag_axi_0" Part="xcku040-ffva1156-2-e" ConstrsSet="jtag_axi_0" Description="Vivado Synthesis Defaults" Dir="$PRUNDIR/jtag_axi_0_synth_1" IncludeInArchive="true"> - <Strategy Version="1" Minor="2"> - <StratHandle Name="Vivado Synthesis Defaults" Flow="Vivado Synthesis 2016"/> - <Step Id="synth_design"/> - </Strategy> - <GeneratedRun Dir="$PRUNDIR" File="gen_run.xml"/> - <Report Name="ROUTE_DESIGN.REPORT_METHODOLOGY" Enabled="1"/> - </Run> <Run Id="impl_1" Type="Ft2:EntireDesign" Part="xcku040-ffva1156-2-e" ConstrsSet="constrs_1" Description="Default settings for Implementation." State="current" Dir="$PRUNDIR/impl_1" SynthRun="synth_1" IncludeInArchive="true"> <Strategy Version="1" Minor="2"> <StratHandle Name="Vivado Implementation Defaults" Flow="Vivado Implementation 2016"/> @@ -620,20 +414,5 @@ </Strategy> <Report Name="ROUTE_DESIGN.REPORT_METHODOLOGY" Enabled="1"/> </Run> - <Run Id="jtag_axi_0_impl_1" Type="Ft2:EntireDesign" Part="xcku040-ffva1156-2-e" ConstrsSet="jtag_axi_0" Description="Default settings for Implementation." SynthRun="jtag_axi_0_synth_1" IncludeInArchive="false"> - <Strategy Version="1" Minor="2"> - <StratHandle Name="Vivado Implementation Defaults" Flow="Vivado Implementation 2016"/> - <Step Id="init_design"/> - <Step Id="opt_design"/> - <Step Id="power_opt_design"/> - <Step Id="place_design"/> - <Step Id="post_place_power_opt_design"/> - <Step Id="phys_opt_design"/> - <Step Id="route_design"/> - <Step Id="post_route_phys_opt_design"/> - <Step Id="write_bitstream"/> - </Strategy> - <Report Name="ROUTE_DESIGN.REPORT_METHODOLOGY" Enabled="1"/> - </Run> </Runs> </Project> -- GitLab