/* Generated by Yosys 0.9+3621 (git sha1 84e9fa7, gcc 8.3.1 -fPIC -Os) */

module user_project_wrapper(wb_clk_i, wb_rst_i, wbs_stb_i, wbs_cyc_i, wbs_we_i, wbs_sel_i, wbs_dat_i, wbs_adr_i, wbs_ack_o, wbs_dat_o, la_data_in, la_data_out, la_oen, io_in, io_out, io_oeb, analog_io, user_clock2);
  wire \DATA_AVAILABLE[0] ;
  wire \DATA_AVAILABLE[1] ;
  wire \DATA_AVAILABLE[2] ;
  wire \DATA_AVAILABLE[3] ;
  wire \DATA_FROM_HASH[0] ;
  wire \DATA_FROM_HASH[1] ;
  wire \DATA_FROM_HASH[2] ;
  wire \DATA_FROM_HASH[3] ;
  wire \DATA_FROM_HASH[4] ;
  wire \DATA_FROM_HASH[5] ;
  wire \DATA_FROM_HASH[6] ;
  wire \DATA_FROM_HASH[7] ;
  wire \DATA_TO_HASH[0] ;
  wire \DATA_TO_HASH[1] ;
  wire \DATA_TO_HASH[2] ;
  wire \DATA_TO_HASH[3] ;
  wire \DATA_TO_HASH[4] ;
  wire \DATA_TO_HASH[5] ;
  wire \DATA_TO_HASH[6] ;
  wire \DATA_TO_HASH[7] ;
  wire \HASH_ADDR[0] ;
  wire \HASH_ADDR[1] ;
  wire \HASH_ADDR[2] ;
  wire \HASH_ADDR[3] ;
  wire \HASH_ADDR[4] ;
  wire \HASH_ADDR[5] ;
  wire HASH_EN;
  wire \MACRO_RD_SELECT[0] ;
  wire \MACRO_RD_SELECT[1] ;
  wire \MACRO_RD_SELECT[2] ;
  wire \MACRO_RD_SELECT[3] ;
  wire \MACRO_WR_SELECT[0] ;
  wire \MACRO_WR_SELECT[1] ;
  wire \MACRO_WR_SELECT[2] ;
  wire \MACRO_WR_SELECT[3] ;
  wire \THREAD_COUNT[0][0] ;
  wire \THREAD_COUNT[0][1] ;
  wire \THREAD_COUNT[0][2] ;
  wire \THREAD_COUNT[0][3] ;
  wire \THREAD_COUNT[1][0] ;
  wire \THREAD_COUNT[1][1] ;
  wire \THREAD_COUNT[1][2] ;
  wire \THREAD_COUNT[1][3] ;
  wire \THREAD_COUNT[2][0] ;
  wire \THREAD_COUNT[2][1] ;
  wire \THREAD_COUNT[2][2] ;
  wire \THREAD_COUNT[2][3] ;
  wire \THREAD_COUNT[3][0] ;
  wire \THREAD_COUNT[3][1] ;
  wire \THREAD_COUNT[3][2] ;
  wire \THREAD_COUNT[3][3] ;
  inout [30:0] analog_io;
  input [37:0] io_in;
  output [37:0] io_oeb;
  output [37:0] io_out;
  input [127:0] la_data_in;
  output [127:0] la_data_out;
  input [127:0] la_oen;
  wire m1_clk_local;
  wire one;
  input user_clock2;
  input wb_clk_i;
  input wb_rst_i;
  output wbs_ack_o;
  input [31:0] wbs_adr_i;
  input wbs_cyc_i;
  input [31:0] wbs_dat_i;
  output [31:0] wbs_dat_o;
  input [3:0] wbs_sel_i;
  input wbs_stb_i;
  input wbs_we_i;
  wire zero;
  decred_controller decred_controller_block (
    .CLK_LED(io_out[24]),
    .DATA_AVAILABLE({ \DATA_AVAILABLE[3] , \DATA_AVAILABLE[2] , \DATA_AVAILABLE[1] , \DATA_AVAILABLE[0]  }),
    .DATA_FROM_HASH({ \DATA_FROM_HASH[7] , \DATA_FROM_HASH[6] , \DATA_FROM_HASH[5] , \DATA_FROM_HASH[4] , \DATA_FROM_HASH[3] , \DATA_FROM_HASH[2] , \DATA_FROM_HASH[1] , \DATA_FROM_HASH[0]  }),
    .DATA_TO_HASH({ \DATA_TO_HASH[7] , \DATA_TO_HASH[6] , \DATA_TO_HASH[5] , \DATA_TO_HASH[4] , \DATA_TO_HASH[3] , \DATA_TO_HASH[2] , \DATA_TO_HASH[1] , \DATA_TO_HASH[0]  }),
    .EXT_RESET_N_fromHost(io_in[8]),
    .EXT_RESET_N_toClient(io_out[22]),
    .HASH_ADDR({ \HASH_ADDR[5] , \HASH_ADDR[4] , \HASH_ADDR[3] , \HASH_ADDR[2] , \HASH_ADDR[1] , \HASH_ADDR[0]  }),
    .HASH_EN(HASH_EN),
    .HASH_LED(io_out[26]),
    .ID_fromClient(io_in[18]),
    .ID_toHost(io_out[23]),
    .IRQ_OUT_fromClient(io_in[17]),
    .IRQ_OUT_toHost(io_out[27]),
    .M1_CLK_IN(io_in[10]),
    .M1_CLK_SELECT(io_in[11]),
    .MACRO_RD_SELECT({ \MACRO_RD_SELECT[3] , \MACRO_RD_SELECT[2] , \MACRO_RD_SELECT[1] , \MACRO_RD_SELECT[0]  }),
    .MACRO_WR_SELECT({ \MACRO_WR_SELECT[3] , \MACRO_WR_SELECT[2] , \MACRO_WR_SELECT[1] , \MACRO_WR_SELECT[0]  }),
    .MISO_fromClient(io_in[16]),
    .MISO_toHost(io_out[25]),
    .MOSI_fromHost(io_in[15]),
    .MOSI_toClient(io_out[21]),
    .PLL_INPUT(user_clock2),
    .S1_CLK_IN(io_in[12]),
    .S1_CLK_SELECT(io_in[13]),
    .SCLK_fromHost(io_in[9]),
    .SCLK_toClient(io_out[20]),
    .SCSN_fromHost(io_in[14]),
    .SCSN_toClient(io_out[19]),
    .THREAD_COUNT({ \THREAD_COUNT[0][3] , \THREAD_COUNT[0][2] , \THREAD_COUNT[0][1] , \THREAD_COUNT[0][0]  }),
    .m1_clk_local(m1_clk_local),
    .one(one),
    .zero(zero)
  );
  decred_hash_macro decred_hash_block0 (
    .CLK(m1_clk_local),
    .DATA_AVAILABLE(\DATA_AVAILABLE[0] ),
    .DATA_FROM_HASH({ \DATA_FROM_HASH[7] , \DATA_FROM_HASH[6] , \DATA_FROM_HASH[5] , \DATA_FROM_HASH[4] , \DATA_FROM_HASH[3] , \DATA_FROM_HASH[2] , \DATA_FROM_HASH[1] , \DATA_FROM_HASH[0]  }),
    .DATA_TO_HASH({ \DATA_TO_HASH[7] , \DATA_TO_HASH[6] , \DATA_TO_HASH[5] , \DATA_TO_HASH[4] , \DATA_TO_HASH[3] , \DATA_TO_HASH[2] , \DATA_TO_HASH[1] , \DATA_TO_HASH[0]  }),
    .HASH_ADDR({ \HASH_ADDR[5] , \HASH_ADDR[4] , \HASH_ADDR[3] , \HASH_ADDR[2] , \HASH_ADDR[1] , \HASH_ADDR[0]  }),
    .HASH_EN(HASH_EN),
    .MACRO_RD_SELECT(\MACRO_RD_SELECT[0] ),
    .MACRO_WR_SELECT(\MACRO_WR_SELECT[0] ),
    .THREAD_COUNT({ \THREAD_COUNT[0][3] , \THREAD_COUNT[0][2] , \THREAD_COUNT[0][1] , \THREAD_COUNT[0][0]  })
  );
  decred_hash_macro decred_hash_block1 (
    .CLK(m1_clk_local),
    .DATA_AVAILABLE(\DATA_AVAILABLE[1] ),
    .DATA_FROM_HASH({ \DATA_FROM_HASH[7] , \DATA_FROM_HASH[6] , \DATA_FROM_HASH[5] , \DATA_FROM_HASH[4] , \DATA_FROM_HASH[3] , \DATA_FROM_HASH[2] , \DATA_FROM_HASH[1] , \DATA_FROM_HASH[0]  }),
    .DATA_TO_HASH({ \DATA_TO_HASH[7] , \DATA_TO_HASH[6] , \DATA_TO_HASH[5] , \DATA_TO_HASH[4] , \DATA_TO_HASH[3] , \DATA_TO_HASH[2] , \DATA_TO_HASH[1] , \DATA_TO_HASH[0]  }),
    .HASH_ADDR({ \HASH_ADDR[5] , \HASH_ADDR[4] , \HASH_ADDR[3] , \HASH_ADDR[2] , \HASH_ADDR[1] , \HASH_ADDR[0]  }),
    .HASH_EN(HASH_EN),
    .MACRO_RD_SELECT(\MACRO_RD_SELECT[1] ),
    .MACRO_WR_SELECT(\MACRO_WR_SELECT[1] ),
    .THREAD_COUNT({ \THREAD_COUNT[1][3] , \THREAD_COUNT[1][2] , \THREAD_COUNT[1][1] , \THREAD_COUNT[1][0]  })
  );
  decred_hash_macro decred_hash_block2 (
    .CLK(m1_clk_local),
    .DATA_AVAILABLE(\DATA_AVAILABLE[2] ),
    .DATA_FROM_HASH({ \DATA_FROM_HASH[7] , \DATA_FROM_HASH[6] , \DATA_FROM_HASH[5] , \DATA_FROM_HASH[4] , \DATA_FROM_HASH[3] , \DATA_FROM_HASH[2] , \DATA_FROM_HASH[1] , \DATA_FROM_HASH[0]  }),
    .DATA_TO_HASH({ \DATA_TO_HASH[7] , \DATA_TO_HASH[6] , \DATA_TO_HASH[5] , \DATA_TO_HASH[4] , \DATA_TO_HASH[3] , \DATA_TO_HASH[2] , \DATA_TO_HASH[1] , \DATA_TO_HASH[0]  }),
    .HASH_ADDR({ \HASH_ADDR[5] , \HASH_ADDR[4] , \HASH_ADDR[3] , \HASH_ADDR[2] , \HASH_ADDR[1] , \HASH_ADDR[0]  }),
    .HASH_EN(HASH_EN),
    .MACRO_RD_SELECT(\MACRO_RD_SELECT[2] ),
    .MACRO_WR_SELECT(\MACRO_WR_SELECT[2] ),
    .THREAD_COUNT({ \THREAD_COUNT[2][3] , \THREAD_COUNT[2][2] , \THREAD_COUNT[2][1] , \THREAD_COUNT[2][0]  })
  );
  decred_hash_macro decred_hash_block3 (
    .CLK(m1_clk_local),
    .DATA_AVAILABLE(\DATA_AVAILABLE[3] ),
    .DATA_FROM_HASH({ \DATA_FROM_HASH[7] , \DATA_FROM_HASH[6] , \DATA_FROM_HASH[5] , \DATA_FROM_HASH[4] , \DATA_FROM_HASH[3] , \DATA_FROM_HASH[2] , \DATA_FROM_HASH[1] , \DATA_FROM_HASH[0]  }),
    .DATA_TO_HASH({ \DATA_TO_HASH[7] , \DATA_TO_HASH[6] , \DATA_TO_HASH[5] , \DATA_TO_HASH[4] , \DATA_TO_HASH[3] , \DATA_TO_HASH[2] , \DATA_TO_HASH[1] , \DATA_TO_HASH[0]  }),
    .HASH_ADDR({ \HASH_ADDR[5] , \HASH_ADDR[4] , \HASH_ADDR[3] , \HASH_ADDR[2] , \HASH_ADDR[1] , \HASH_ADDR[0]  }),
    .HASH_EN(HASH_EN),
    .MACRO_RD_SELECT(\MACRO_RD_SELECT[3] ),
    .MACRO_WR_SELECT(\MACRO_WR_SELECT[3] ),
    .THREAD_COUNT({ \THREAD_COUNT[3][3] , \THREAD_COUNT[3][2] , \THREAD_COUNT[3][1] , \THREAD_COUNT[3][0]  })
  );
  assign io_oeb[27:8] = { zero, zero, zero, zero, zero, zero, zero, zero, zero, one, one, one, one, one, one, one, one, one, one, one };
endmodule
