data/full_repos/permissive/421223411/verilog/rtl/accelerator/CoreTop.v
data/verilator_xmls/0e0a0b45-d48b-4011-aaf8-3dc66ac7878c.xml
module CoreTop(
  input          clock,
  input          reset,
  input  [127:0] io_la_data_in,
  output [127:0] io_la_data_out,
  input  [127:0] io_la_oenb
);
`ifdef RANDOMIZE_REG_INIT
  reg [127:0] _RAND_0;
  reg [31:0] _RAND_1;
  reg [31:0] _RAND_2;
  reg [31:0] _RAND_3;
  reg [31:0] _RAND_4;
  reg [31:0] _RAND_5;
  reg [31:0] _RAND_6;
  reg [63:0] _RAND_7;
  reg [31:0] _RAND_8;
`endif
  wire  core_clock;
  wire  core_reset;
  wire [15:0] core_io_ibus_addr;
  wire [31:0] core_io_ibus_data_rd;
  wire  core_io_ibus_stb;
  wire  core_io_ibus_ack;
  wire [15:0] core_io_dbus_addr;
  wire  core_io_dbus_we;
  wire [15:0] core_io_dbus_data_rd;
  wire [15:0] core_io_dbus_data_wr;
  wire  core_io_dbus_stb;
  wire  core_io_dbus_ack;
  wire [15:0] core_io_restart_pc;
  wire  core_io_restart_core;
  wire  core_io_waiting;
  wire  core_io_halted;
  wire [63:0] la_data_in_hi = io_la_data_in[127:64];
  wire [127:0] _la_data_in_T_2 = {la_data_in_hi,64'h0};
  reg [127:0] la_data_in;
  reg  ibus_stb_latch;
  reg  dbus_stb_latch;
  wire  _GEN_0 = core_io_ibus_stb | ibus_stb_latch;
  reg  REG;
  wire  ibus_stb_clear = la_data_in[97];
  reg  core_io_ibus_ack_REG;
  wire  ibus_ack_in = la_data_in[96];
  wire  _GEN_2 = core_io_dbus_stb | dbus_stb_latch;
  reg  REG_1;
  wire  dbus_stb_clear = la_data_in[99];
  reg  core_io_dbus_ack_REG;
  wire  dbus_ack_in = la_data_in[98];
  wire [48:0] io_la_data_out_lo = {ibus_stb_latch,core_io_dbus_data_wr,core_io_dbus_addr,core_io_ibus_addr};
  wire [3:0] io_la_data_out_hi = {core_io_halted,core_io_waiting,core_io_dbus_we,dbus_stb_latch};
  reg [52:0] io_la_data_out_REG;
  reg  core_io_restart_core_REG;
  Core core (
    .clock(core_clock),
    .reset(core_reset),
    .io_ibus_addr(core_io_ibus_addr),
    .io_ibus_data_rd(core_io_ibus_data_rd),
    .io_ibus_stb(core_io_ibus_stb),
    .io_ibus_ack(core_io_ibus_ack),
    .io_dbus_addr(core_io_dbus_addr),
    .io_dbus_we(core_io_dbus_we),
    .io_dbus_data_rd(core_io_dbus_data_rd),
    .io_dbus_data_wr(core_io_dbus_data_wr),
    .io_dbus_stb(core_io_dbus_stb),
    .io_dbus_ack(core_io_dbus_ack),
    .io_restart_pc(core_io_restart_pc),
    .io_restart_core(core_io_restart_core),
    .io_waiting(core_io_waiting),
    .io_halted(core_io_halted)
  );
  assign io_la_data_out = {{75'd0}, io_la_data_out_REG};
  assign core_clock = clock;
  assign core_reset = reset;
  assign core_io_ibus_data_rd = la_data_in[95:64];
  assign core_io_ibus_ack = ibus_ack_in & ~core_io_ibus_ack_REG;
  assign core_io_dbus_data_rd = la_data_in[79:64];
  assign core_io_dbus_ack = dbus_ack_in & ~core_io_dbus_ack_REG;
  assign core_io_restart_pc = la_data_in[95:80];
  assign core_io_restart_core = la_data_in[100] & ~core_io_restart_core_REG;
  always @(posedge clock) begin
    if (|io_la_oenb[127:64]) begin
      la_data_in <= 128'h0;
    end else begin
      la_data_in <= _la_data_in_T_2;
    end
    if (reset) begin
      ibus_stb_latch <= 1'h0;
    end else if (ibus_stb_clear & ~REG) begin
      ibus_stb_latch <= 1'h0;
    end else begin
      ibus_stb_latch <= _GEN_0;
    end
    if (reset) begin
      dbus_stb_latch <= 1'h0;
    end else if (dbus_stb_clear & ~REG_1) begin
      dbus_stb_latch <= 1'h0;
    end else begin
      dbus_stb_latch <= _GEN_2;
    end
    REG <= la_data_in[97];
    core_io_ibus_ack_REG <= la_data_in[96];
    REG_1 <= la_data_in[99];
    core_io_dbus_ack_REG <= la_data_in[98];
    io_la_data_out_REG <= {io_la_data_out_hi,io_la_data_out_lo};
    core_io_restart_core_REG <= la_data_in[100];
  end

`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE_MEM_INIT
  integer initvar;
`endif
`ifndef SYNTHESIS
`ifdef FIRRTL_BEFORE_INITIAL
`FIRRTL_BEFORE_INITIAL
`endif
initial begin
  `ifdef RANDOMIZE
    `ifdef INIT_RANDOM
      `INIT_RANDOM
    `endif
    `ifndef VERILATOR
      `ifdef RANDOMIZE_DELAY
        #`RANDOMIZE_DELAY begin end
      `else
        #0.002 begin end
      `endif
    `endif
`ifdef RANDOMIZE_REG_INIT
  _RAND_0 = {4{`RANDOM}};
  la_data_in = _RAND_0[127:0];
  _RAND_1 = {1{`RANDOM}};
  ibus_stb_latch = _RAND_1[0:0];
  _RAND_2 = {1{`RANDOM}};
  dbus_stb_latch = _RAND_2[0:0];
  _RAND_3 = {1{`RANDOM}};
  REG = _RAND_3[0:0];
  _RAND_4 = {1{`RANDOM}};
  core_io_ibus_ack_REG = _RAND_4[0:0];
  _RAND_5 = {1{`RANDOM}};
  REG_1 = _RAND_5[0:0];
  _RAND_6 = {1{`RANDOM}};
  core_io_dbus_ack_REG = _RAND_6[0:0];
  _RAND_7 = {2{`RANDOM}};
  io_la_data_out_REG = _RAND_7[52:0];
  _RAND_8 = {1{`RANDOM}};
  core_io_restart_core_REG = _RAND_8[0:0];
`endif
  `endif
end
`ifdef FIRRTL_AFTER_INITIAL
`FIRRTL_AFTER_INITIAL
`endif
`endif
endmodule
module CoreTop(
  input          clock,
  input          reset,
  input  [127:0] io_la_data_in,
  output [127:0] io_la_data_out,
  input  [127:0] io_la_oenb
);

`ifdef RANDOMIZE_REG_INIT
  reg [127:0] _RAND_0;
  reg [31:0] _RAND_1;
  reg [31:0] _RAND_2;
  reg [31:0] _RAND_3;
  reg [31:0] _RAND_4;
  reg [31:0] _RAND_5;
  reg [31:0] _RAND_6;
  reg [63:0] _RAND_7;
  reg [31:0] _RAND_8;
`endif
  wire  core_clock;
  wire  core_reset;
  wire [15:0] core_io_ibus_addr;
  wire [31:0] core_io_ibus_data_rd;
  wire  core_io_ibus_stb;
  wire  core_io_ibus_ack;
  wire [15:0] core_io_dbus_addr;
  wire  core_io_dbus_we;
  wire [15:0] core_io_dbus_data_rd;
  wire [15:0] core_io_dbus_data_wr;
  wire  core_io_dbus_stb;
  wire  core_io_dbus_ack;
  wire [15:0] core_io_restart_pc;
  wire  core_io_restart_core;
  wire  core_io_waiting;
  wire  core_io_halted;
  wire [63:0] la_data_in_hi = io_la_data_in[127:64];
  wire [127:0] _la_data_in_T_2 = {la_data_in_hi,64'h0};
  reg [127:0] la_data_in;
  reg  ibus_stb_latch;
  reg  dbus_stb_latch;
  wire  _GEN_0 = core_io_ibus_stb | ibus_stb_latch;
  reg  REG;
  wire  ibus_stb_clear = la_data_in[97];
  reg  core_io_ibus_ack_REG;
  wire  ibus_ack_in = la_data_in[96];
  wire  _GEN_2 = core_io_dbus_stb | dbus_stb_latch;
  reg  REG_1;
  wire  dbus_stb_clear = la_data_in[99];
  reg  core_io_dbus_ack_REG;
  wire  dbus_ack_in = la_data_in[98];
  wire [48:0] io_la_data_out_lo = {ibus_stb_latch,core_io_dbus_data_wr,core_io_dbus_addr,core_io_ibus_addr};
  wire [3:0] io_la_data_out_hi = {core_io_halted,core_io_waiting,core_io_dbus_we,dbus_stb_latch};
  reg [52:0] io_la_data_out_REG;
  reg  core_io_restart_core_REG;
  Core core (
    .clock(core_clock),
    .reset(core_reset),
    .io_ibus_addr(core_io_ibus_addr),
    .io_ibus_data_rd(core_io_ibus_data_rd),
    .io_ibus_stb(core_io_ibus_stb),
    .io_ibus_ack(core_io_ibus_ack),
    .io_dbus_addr(core_io_dbus_addr),
    .io_dbus_we(core_io_dbus_we),
    .io_dbus_data_rd(core_io_dbus_data_rd),
    .io_dbus_data_wr(core_io_dbus_data_wr),
    .io_dbus_stb(core_io_dbus_stb),
    .io_dbus_ack(core_io_dbus_ack),
    .io_restart_pc(core_io_restart_pc),
    .io_restart_core(core_io_restart_core),
    .io_waiting(core_io_waiting),
    .io_halted(core_io_halted)
  );
  assign io_la_data_out = {{75'd0}, io_la_data_out_REG};
  assign core_clock = clock;
  assign core_reset = reset;
  assign core_io_ibus_data_rd = la_data_in[95:64];
  assign core_io_ibus_ack = ibus_ack_in & ~core_io_ibus_ack_REG;
  assign core_io_dbus_data_rd = la_data_in[79:64];
  assign core_io_dbus_ack = dbus_ack_in & ~core_io_dbus_ack_REG;
  assign core_io_restart_pc = la_data_in[95:80];
  assign core_io_restart_core = la_data_in[100] & ~core_io_restart_core_REG;
  always @(posedge clock) begin
    if (|io_la_oenb[127:64]) begin
      la_data_in <= 128'h0;
    end else begin
      la_data_in <= _la_data_in_T_2;
    end
    if (reset) begin
      ibus_stb_latch <= 1'h0;
    end else if (ibus_stb_clear & ~REG) begin
      ibus_stb_latch <= 1'h0;
    end else begin
      ibus_stb_latch <= _GEN_0;
    end
    if (reset) begin
      dbus_stb_latch <= 1'h0;
    end else if (dbus_stb_clear & ~REG_1) begin
      dbus_stb_latch <= 1'h0;
    end else begin
      dbus_stb_latch <= _GEN_2;
    end
    REG <= la_data_in[97];
    core_io_ibus_ack_REG <= la_data_in[96];
    REG_1 <= la_data_in[99];
    core_io_dbus_ack_REG <= la_data_in[98];
    io_la_data_out_REG <= {io_la_data_out_hi,io_la_data_out_lo};
    core_io_restart_core_REG <= la_data_in[100];
  end

`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE_MEM_INIT
  integer initvar;
`endif
`ifndef SYNTHESIS
`ifdef FIRRTL_BEFORE_INITIAL
`FIRRTL_BEFORE_INITIAL
`endif
initial begin
  `ifdef RANDOMIZE
    `ifdef INIT_RANDOM
      `INIT_RANDOM
    `endif
    `ifndef VERILATOR
      `ifdef RANDOMIZE_DELAY
        #`RANDOMIZE_DELAY begin end
      `else
        #0.002 begin end
      `endif
    `endif
`ifdef RANDOMIZE_REG_INIT
  _RAND_0 = {4{`RANDOM}};
  la_data_in = _RAND_0[127:0];
  _RAND_1 = {1{`RANDOM}};
  ibus_stb_latch = _RAND_1[0:0];
  _RAND_2 = {1{`RANDOM}};
  dbus_stb_latch = _RAND_2[0:0];
  _RAND_3 = {1{`RANDOM}};
  REG = _RAND_3[0:0];
  _RAND_4 = {1{`RANDOM}};
  core_io_ibus_ack_REG = _RAND_4[0:0];
  _RAND_5 = {1{`RANDOM}};
  REG_1 = _RAND_5[0:0];
  _RAND_6 = {1{`RANDOM}};
  core_io_dbus_ack_REG = _RAND_6[0:0];
  _RAND_7 = {2{`RANDOM}};
  io_la_data_out_REG = _RAND_7[52:0];
  _RAND_8 = {1{`RANDOM}};
  core_io_restart_core_REG = _RAND_8[0:0];
`endif
  `endif
end
`ifdef FIRRTL_AFTER_INITIAL
`FIRRTL_AFTER_INITIAL
`endif
`endif
endmodule