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

module user_project_wrapper(user_clock2, wb_clk_i, wb_rst_i, wbs_ack_o, wbs_cyc_i, wbs_stb_i, wbs_we_i, vccd1, vssd1, vccd2, vssd2, vdda1, vssa1, vdda2, vssa2, analog_io, io_in, io_oeb, io_out, la_data_in, la_data_out, la_oen, wbs_adr_i, wbs_dat_i, wbs_dat_o, wbs_sel_i);
  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 vccd1;
  input vccd2;
  input vdda1;
  input vdda2;
  input vssa1;
  input vssa2;
  input vssd1;
  input vssd2;
  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),
    .vccd1(vccd1),
    .vccd2(vccd2),
    .vdda1(vdda1),
    .vdda2(vdda2),
    .vssa1(vssa1),
    .vssa2(vssa2),
    .vssd1(vssd1),
    .vssd2(vssd2),
    .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]  }),
    .vccd1(vccd1),
    .vccd2(vccd2),
    .vdda1(vdda1),
    .vdda2(vdda2),
    .vssa1(vssa1),
    .vssa2(vssa2),
    .vssd1(vssd1),
    .vssd2(vssd2)
  );
  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]  }),
    .vccd1(vccd1),
    .vccd2(vccd2),
    .vdda1(vdda1),
    .vdda2(vdda2),
    .vssa1(vssa1),
    .vssa2(vssa2),
    .vssd1(vssd1),
    .vssd2(vssd2)
  );
  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]  }),
    .vccd1(vccd1),
    .vccd2(vccd2),
    .vdda1(vdda1),
    .vdda2(vdda2),
    .vssa1(vssa1),
    .vssa2(vssa2),
    .vssd1(vssd1),
    .vssd2(vssd2)
  );
  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]  }),
    .vccd1(vccd1),
    .vccd2(vccd2),
    .vdda1(vdda1),
    .vdda2(vdda2),
    .vssa1(vssa1),
    .vssa2(vssa2),
    .vssd1(vssd1),
    .vssd2(vssd2)
  );
endmodule
