import tlul_pkg::*;
import trial1_reg_pkg::*;

module trial1_test (
  input                   clk,
  input                   rst_n,

  output tl_h2d_t         tl_h2d,
  input  tl_d2h_t         tl_d2h,

  input  trial1_reg2hw_t  reg2hw,
  output trial1_hw2reg_t  hw2reg
);

  int errorcount = 0;
  logic DEBUG = 1'b1;
  // for now always accept read responses
  assign  tl_h2d.d_ready = 1'b1;

  task send_wr (
    input [11:0] waddr,
    input [31:0] wdata
  );
    begin
      tl_h2d.a_address = waddr;
      tl_h2d.a_data = wdata;
      tl_h2d.a_mask = 4'hF;
      tl_h2d.a_size = 'h2;
      tl_h2d.a_opcode = PutFullData;
      tl_h2d.a_source = '0;
      tl_h2d.a_param = '0;
      tl_h2d.a_valid = 1'b1;
      @(posedge clk);
      while(!tl_d2h.a_ready)
        @(posedge clk);
      tl_h2d.a_valid = 1'b0;
      while(!tl_d2h.d_valid)
        @(posedge clk);
    end
  endtask

  task send_rd (
    input  [11:0] raddr,
    output [31:0] rdata
  );
    begin
      tl_h2d.a_address  = raddr;
      tl_h2d.a_opcode = Get;
      tl_h2d.a_mask = 4'hF;
      tl_h2d.a_size = 'h2;
      tl_h2d.a_source = '0;
      tl_h2d.a_param = '0;
      tl_h2d.a_valid = 1'b1;
      @(posedge clk);
      while(!tl_d2h.a_ready)
        @(posedge clk);
      tl_h2d.a_valid = 1'b0;
      while(!tl_d2h.d_valid)
        @(posedge clk);
      rdata = tl_d2h.d_data;
    end
  endtask

  task test_q (
    string regname,
    input [31:0] gotval,
    input [31:0] expval
  );
    begin
      if (gotval !== expval) begin
        $display("ERROR: expected q value for %s is %x got %x", regname, expval, gotval);
        errorcount++;
      end else if (DEBUG)
        $display("INFO: got expected q value for %s of %x", regname, expval);
    end
  endtask

  // these registers need capturers to see the qe effect

  logic [31:0] rwtype5_capture;
  always_ff @(posedge clk or negedge rst_n) begin
    if (!rst_n)
      rwtype5_capture <= 32'h0;
    else if (reg2hw.rwtype5.qe)
      rwtype5_capture <= reg2hw.rwtype5.q;
    end

  logic [31:0] rwtype6_capture;
  always_ff @(posedge clk or negedge rst_n) begin
    if (!rst_n)
      rwtype6_capture <= 32'hc8c8c8c8;
    else if (reg2hw.rwtype6.qe)
      rwtype6_capture <= reg2hw.rwtype6.q;
  end
  // externalized register
  assign hw2reg.rwtype6.d = rwtype6_capture;

  logic [31:0] rotype1_capture, my_rotype1_d;
  logic my_rotype1_de;
  always_ff @(posedge clk or negedge rst_n) begin
    if (!rst_n)
      rotype1_capture <= 32'h66aa66aa;
    else if (my_rotype1_de)
      rotype1_capture <= my_rotype1_d;
  end
  // externalized register
  assign hw2reg.rotype1.d = rotype1_capture;

  task test_capture (
    string regname,
    input [31:0] gotval,
    input [31:0] expval
  );
    begin
      if (gotval !== expval) begin
        $display("ERROR: expected hwqe captured value for %s is %x got %x", regname, expval, gotval);
        errorcount++;
      end else if (DEBUG)
        $display("INFO: got expected hwqe captured value for %s of %x", regname, expval);
    end
  endtask

  task test_reg (
    string regname,
    input [11:0] addr,
    input [31:0] expval
  );
    begin
      logic [31:0] gotval;
      send_rd(addr, gotval);
      if (gotval !== expval) begin
        $display("ERROR: expected rd value for %s is %x got %x", regname, expval, gotval);
        errorcount++;
      end else if (DEBUG)
        $display("INFO: got expected rd value for %s of %x", regname, expval);
    end
  endtask

  task test_rwtype0(input [31:0] expdata);
    // test register read
    test_reg("RWTYPE0", 12'h0, expdata);
    // test q
    test_q("RWTYPE0", reg2hw.rwtype0.q, expdata);
    // holds value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("RWTYPE0", 12'h0, expdata);
    // test q
    test_q("RWTYPE0", reg2hw.rwtype0.q, expdata);
  endtask

  task test_rwtype1(input [31:0] expdata);
    logic [31:0] maskexp;
    assign maskexp = expdata & 32'h0000ff13;
    test_reg("RWTYPE1", 12'h4, maskexp);
    // test q's
    test_q("RWTYPE1.field0", reg2hw.rwtype1.field0.q, maskexp[0]);
    test_q("RWTYPE1.field1", reg2hw.rwtype1.field1.q, maskexp[1]);
    test_q("RWTYPE1.field4", reg2hw.rwtype1.field4.q, maskexp[4]);
    test_q("RWTYPE1.field15_8", reg2hw.rwtype1.field15_8.q, maskexp[15:8]);
    // hold value
    repeat(5) @(posedge clk);
    test_reg("RWTYPE1", 12'h4, maskexp);
    // test q
    test_q("RWTYPE1.field0", reg2hw.rwtype1.field0.q, maskexp[0]);
    test_q("RWTYPE1.field1", reg2hw.rwtype1.field1.q, maskexp[1]);
    test_q("RWTYPE1.field4", reg2hw.rwtype1.field4.q, maskexp[4]);
    test_q("RWTYPE1.field15_8", reg2hw.rwtype1.field15_8.q, maskexp[15:8]);
  endtask

  task test_rwtype2(input [31:0] expdata);
    // test register read
    test_reg("RWTYPE2", 12'h8, expdata);
    // test q
    test_q("RWTYPE2", reg2hw.rwtype2.q, expdata);
    // holds value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("RWTYPE2", 12'h8, expdata);
    // test q
    test_q("RWTYPE2", reg2hw.rwtype2.q, expdata);
  endtask

  task test_rwtype3(input [31:0] expdata);
    test_reg("RWTYPE3", 12'hc, expdata);
    // test q's
    test_q("RWTYPE3.field0", reg2hw.rwtype3.field0.q, expdata[15:0]);
    test_q("RWTYPE3.field1", reg2hw.rwtype3.field1.q, expdata[31:16]);
    // hold value
    repeat(5) @(posedge clk);
    test_reg("RWTYPE3", 12'hc, expdata);
    // test q
    test_q("RWTYPE3.field0", reg2hw.rwtype3.field0.q, expdata[15:0]);
    test_q("RWTYPE3.field1", reg2hw.rwtype3.field1.q, expdata[31:16]);
  endtask

  task test_rwtype4(input [31:0] expdata);
    test_reg("RWTYPE4", 12'h200, expdata);
    // test q's
    test_q("RWTYPE4.field0", reg2hw.rwtype4.field0.q, expdata[15:0]);
    test_q("RWTYPE4.field1", reg2hw.rwtype4.field1.q, expdata[31:16]);
    // hold value
    repeat(5) @(posedge clk);
    test_reg("RWTYPE4", 12'h200, expdata);
    // test q
    test_q("RWTYPE4.field0", reg2hw.rwtype4.field0.q, expdata[15:0]);
    test_q("RWTYPE4.field1", reg2hw.rwtype4.field1.q, expdata[31:16]);
  endtask

  task test_rotype0(input [31:0] expdata);
    // test register read
    test_reg("ROTYPE0", 12'h204, expdata);
    // test q
    test_q("ROTYPE0", reg2hw.rotype0.q, expdata);
    // holds value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("ROTYPE0", 12'h204, expdata);
    // test q
    test_q("ROTYPE0", reg2hw.rotype0.q, expdata);
  endtask

  task test_w1ctype0(input [31:0] expdata);
    // test register read
    test_reg("W1CTYPE0", 12'h208, expdata);
    // test q
    test_q("W1CTYPE0", reg2hw.w1ctype0.q, expdata);
    // holds value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("W1CTYPE0", 12'h208, expdata);
    // test q
    test_q("W1CTYPE0", reg2hw.w1ctype0.q, expdata);
  endtask

  task test_w1ctype1(input [31:0] expdata);
    test_reg("W1CTYPE1", 12'h20c, expdata);
    // test q's
    test_q("W1CTYPE1.field0", reg2hw.w1ctype1.field0.q, expdata[15:0]);
    test_q("W1CTYPE1.field1", reg2hw.w1ctype1.field1.q, expdata[31:16]);
    // hold value
    repeat(5) @(posedge clk);
    test_reg("W1CTYPE1", 12'h20c, expdata);
    // test q
    test_q("W1CTYPE1.field0", reg2hw.w1ctype1.field0.q, expdata[15:0]);
    test_q("W1CTYPE1.field1", reg2hw.w1ctype1.field1.q, expdata[31:16]);
  endtask

  task test_w1ctype2(input [31:0] expdata);
    // test register read
    test_reg("W1CTYPE2", 12'h210, expdata);
    // test q
    test_q("W1CTYPE2", reg2hw.w1ctype2.q, expdata);
    // holds value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("W1CTYPE2", 12'h210, expdata);
    // test q
    test_q("W1CTYPE2", reg2hw.w1ctype2.q, expdata);
  endtask

  task test_w1stype2(input [31:0] expdata);
    // test register read
    test_reg("W1STYPE2", 12'h214, expdata);
    // test q
    test_q("W1STYPE2", reg2hw.w1stype2.q, expdata);
    // holds value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("W1STYPE2", 12'h214, expdata);
    // test q
    test_q("W1STYPE2", reg2hw.w1stype2.q, expdata);
  endtask

  task test_w0ctype2(input [31:0] expdata);
    // test register read
    test_reg("W0CTYPE2", 12'h218, expdata);
    // test q
    test_q("W0CTYPE2", reg2hw.w0ctype2.q, expdata);
    // holds value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("W0CTYPE2", 12'h218, expdata);
    // test q
    test_q("W0CTYPE2", reg2hw.w0ctype2.q, expdata);
  endtask

  task test_r0w1ctype2(input [31:0] expdata);
    // test register read
    test_reg("R0W1CTYPE2", 12'h21c, 0);
    // test q
    test_q("R0W1CTYPE2", reg2hw.r0w1ctype2.q, expdata);
    // holds value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("R0W1CTYPE2", 12'h21c, 0);
    // test q
    test_q("R0W1CTYPE2", reg2hw.r0w1ctype2.q, expdata);
  endtask

  task test_rctype0(input [31:0] expdata);
    // test q
    test_q("RCTYPE0", reg2hw.rctype0.q, expdata);
    // test register read
    test_reg("RCTYPE0", 12'h220, expdata);
    // second read returns zero value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("RCTYPE0", 12'h220, 32'h0);
    // test q
    test_q("RCTYPE0", reg2hw.rctype0.q, 32'h0);
  endtask

  task test_wotype0(input [31:0] expdata);
    // test register read, always returns zero
    test_reg("WOTYPE0", 12'h224, 0);
    // test q
    test_q("WOTYPE0", reg2hw.wotype0.q, expdata);
    // holds value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("WOTYPE0", 12'h224, 32'h0);
    // test q
    test_q("WOTYPE0", reg2hw.wotype0.q, expdata);
  endtask

  task test_mixtype0(input [31:0] expdata);
    // test q's
    test_q("MIXTYPE0.field0", reg2hw.mixtype0.field0.q, expdata[3:0]);
    test_q("MIXTYPE0.field1", reg2hw.mixtype0.field1.q, expdata[7:4]);
    test_q("MIXTYPE0.field2", reg2hw.mixtype0.field2.q, expdata[11:8]);
    test_q("MIXTYPE0.field3", reg2hw.mixtype0.field3.q, expdata[15:12]);
    test_q("MIXTYPE0.field4", reg2hw.mixtype0.field4.q, expdata[19:16]);
    test_q("MIXTYPE0.field5", reg2hw.mixtype0.field5.q, expdata[23:20]);
    test_q("MIXTYPE0.field6", reg2hw.mixtype0.field6.q, expdata[27:24]);
    test_q("MIXTYPE0.field7", reg2hw.mixtype0.field7.q, expdata[31:28]);
    // test register
    test_reg("MIXTYPE0", 12'h228, expdata & 32'h0fffffff);  // [31:28] is write-only
    // hold value
    repeat(5) @(posedge clk);
    test_reg("MIXTYPE0", 12'h228, expdata & 32'h00ffffff);  // [31:28] is write-only, [27:24] is read-clear
    // test q
    test_q("MIXTYPE0.field0", reg2hw.mixtype0.field0.q, expdata[3:0]);
    test_q("MIXTYPE0.field1", reg2hw.mixtype0.field1.q, expdata[7:4]);
    test_q("MIXTYPE0.field2", reg2hw.mixtype0.field2.q, expdata[11:8]);
    test_q("MIXTYPE0.field3", reg2hw.mixtype0.field3.q, expdata[15:12]);
    test_q("MIXTYPE0.field4", reg2hw.mixtype0.field4.q, expdata[19:16]);
    test_q("MIXTYPE0.field5", reg2hw.mixtype0.field5.q, expdata[23:20]);
    test_q("MIXTYPE0.field6", reg2hw.mixtype0.field6.q, 4'h0); // read-clear
    test_q("MIXTYPE0.field7", reg2hw.mixtype0.field7.q, expdata[31:28]);
  endtask

  task test_rwtype5(input [31:0] expdata);
    // test register read
    test_reg("RWTYPE5", 12'h22c, expdata);
    // test q
    test_q("RWTYPE5", reg2hw.rwtype5.q, expdata);
    // holds value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("RWTYPE5", 12'h22c, expdata);
    // test q
    test_q("RWTYPE5", reg2hw.rwtype5.q, expdata);
  endtask

  task test_rwtype5_capture(input [31:0] expdata);
    // test captured value
    test_capture("RWTYPE5", rwtype5_capture, expdata);
  endtask

  task test_rwtype6(input [31:0] expdata);
    // test register read
    test_reg("RWTYPE6", 12'h230, expdata);
    // holds value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("RWTYPE6", 12'h230, expdata);
  endtask

  task test_rwtype6_capture(input [31:0] expdata);
    // test captured value
    test_capture("RWTYPE6", rwtype6_capture, expdata);
  endtask

  task test_rwtype7(input [31:0] expdata);
    // test register read
    test_reg("RWTYPE7", 12'h23c, expdata);
    // holds value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("RWTYPE7", 12'h23c, expdata);
  endtask

  task test_rotype1(input [31:0] expdata);
    // test register read
    test_reg("ROTYPE1", 12'h234, expdata);
    // holds value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("ROTYPE1", 12'h234, expdata);
  endtask

  task test_rotype1_capture(input [31:0] expdata);
    // test captured value
    test_capture("ROTYPE1", rotype1_capture, expdata);
  endtask

  task test_rotype2(input [31:0] expdata);
    // test register read
    test_reg("ROTYPE2", 12'h238, expdata);
    // holds value
    repeat(5) @(posedge clk);
    // test register read
    test_reg("ROTYPE2", 12'h238, expdata);
  endtask

  // so far just these registers we need to drive back into
  // RWTYPE2[31:0]
  // RWTYPE3.FIELD0[15:0]
  // RWTYPE3.FIELD1[15:0]
  // ROTYPE0[31:0]
  // W1CTYPE2[31:0]
  // W1STYPE2[31:0]
  // W0CTYPE2[31:0]
  // R0W1CTYPE2[31:0]
  // RCTYPE0[31:0]
  // MIXTYPE0.FIELD1[3:0]
  // MIXTYPE0.FIELD3[3:0]
  // MIXTYPE0.FIELD4[3:0]
  // MIXTYPE0.FIELD5[3:0]
  // MIXTYPE0.FIELD6[3:0]
  // RWTYPE5[31:0]

  logic [31:0] hold_wd, hold_q;
  initial begin
    hw2reg.rwtype2.de = 1'b0;
    hw2reg.rwtype2.d  = 32'hxxxxxxxx;
    hw2reg.rwtype3.field0.de = 1'b0;
    hw2reg.rwtype3.field0.d  = 16'hxxxx;
    hw2reg.rwtype3.field1.de = 1'b0;
    hw2reg.rwtype3.field1.d  = 16'hxxxx;
    hw2reg.rotype0.de = 1'b0;
    hw2reg.rotype0.d  = 32'hxxxxxxxx;
    hw2reg.w1ctype2.de = 1'b0;
    hw2reg.w1ctype2.d  = 32'hxxxxxxxx;
    hw2reg.w1stype2.de = 1'b0;
    hw2reg.w1stype2.d  = 32'hxxxxxxxx;
    hw2reg.w0ctype2.de = 1'b0;
    hw2reg.w0ctype2.d  = 32'hxxxxxxxx;
    hw2reg.r0w1ctype2.de = 1'b0;
    hw2reg.r0w1ctype2.d  = 32'hxxxxxxxx;
    hw2reg.rctype0.de = 1'b0;
    hw2reg.rctype0.d  = 32'hxxxxxxxx;
    hw2reg.mixtype0.field1.de = 1'b0;
    hw2reg.mixtype0.field1.d  = 4'hx;
    hw2reg.mixtype0.field3.de = 1'b0;
    hw2reg.mixtype0.field3.d  = 4'hx;
    hw2reg.mixtype0.field4.de = 1'b0;
    hw2reg.mixtype0.field4.d  = 4'hx;
    hw2reg.mixtype0.field5.de = 1'b0;
    hw2reg.mixtype0.field5.d  = 4'hx;
    hw2reg.mixtype0.field6.de = 1'b0;
    hw2reg.mixtype0.field6.d  = 4'hx;
    hw2reg.rwtype5.de = 1'b0;
    hw2reg.rwtype5.d  = 32'hxxxxxxxx;
    my_rotype1_de = 1'b0;
    my_rotype1_d = 32'hxxxxxxxx;
    tl_h2d.a_valid = 1'b0;
    tl_h2d.a_opcode = Get;
    tl_h2d.a_user = 16'h0;
    repeat(20) @(posedge clk);
     ///////
    //
    // test RWTYPE0
    //
    // default value is 12345678
    test_rwtype0(12345678);
    // write value
    hold_wd = 32'hdeadbeef;
    send_wr(12'h0, hold_wd);
    test_rwtype0(hold_wd);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    send_wr(12'h0, hold_wd);
    test_rwtype0(hold_wd);
     ///////
    //
    // test RWTYPE1
    //
    // default value is 32'h00006411
    test_rwtype1(32'h00006411);
    // write value
    hold_wd = 32'hdeadbeef;
    send_wr(12'h4, hold_wd);
    test_rwtype1(hold_wd);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    send_wr(12'h4, hold_wd);
    test_rwtype1(hold_wd);
     ///////
    //
    // test RWTYPE2, RW + HRW
    //
    // default value is 0x04000400
    test_rwtype2(32'h04000400);
    // write value
    hold_wd = 32'hdeadbeef;
    send_wr(12'h8, hold_wd);
    test_rwtype2(hold_wd);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    send_wr(12'h8, hold_wd);
    test_rwtype2(hold_wd);
    // write from HW side
    hold_wd = $urandom;
    hw2reg.rwtype2.de <= 1'b1;
    hw2reg.rwtype2.d  <= hold_wd;
    @(posedge clk);
    hw2reg.rwtype2.de <= 1'b0;
    hw2reg.rwtype2.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_rwtype2(hold_wd);
    // write from HW side inverted
    hold_wd = ~hold_wd;
    hw2reg.rwtype2.de <= 1'b1;
    hw2reg.rwtype2.d  <= hold_wd;
    @(posedge clk);
    hw2reg.rwtype2.de <= 1'b0;
    hw2reg.rwtype2.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_rwtype2(hold_wd);
    // try and get both the we and the de at the same time, we should win
    hold_wd = 32'haaaaaaaa;
    fork
      begin
        send_wr(12'h8, hold_wd);
      end
      begin
        hw2reg.rwtype2.de <= 1'b1;
        hw2reg.rwtype2.d  <= 32'h55555555;
        @(posedge clk);
        hw2reg.rwtype2.de <= 1'b0;
        hw2reg.rwtype2.d  <= 32'hxxxxxxxx;
      end
    join
    @(posedge clk);
    test_rwtype2(hold_wd);
     ///////
    //
    // test RWTYPE3, separate HRW fields
    //
    // default value is 0xee66cc55
    test_rwtype3(32'hee66cc55);
    // write value
    hold_wd = 32'hdeadbeef;
    send_wr(12'hc, hold_wd);
    test_rwtype3(hold_wd);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    send_wr(12'hc, hold_wd);
    test_rwtype3(hold_wd);
    // write one field from HW side
    hold_q = hold_wd;
    hold_wd = $urandom;
    hw2reg.rwtype3.field0.de <= 1'b1;
    hw2reg.rwtype3.field0.d  <= hold_wd[15:0];
    @(posedge clk);
    hw2reg.rwtype3.field0.de <= 1'b0;
    hw2reg.rwtype3.field0.d  <= 16'hxxxx;
    @(posedge clk);
    test_rwtype3({hold_q[31:16],hold_wd[15:0]});
    // write other field from HW side
    hw2reg.rwtype3.field1.de <= 1'b1;
    hw2reg.rwtype3.field1.d  <= hold_wd[31:16];
    @(posedge clk);
    hw2reg.rwtype3.field1.de <= 1'b0;
    hw2reg.rwtype3.field1.d  <= 16'hxxxx;
    @(posedge clk);
    test_rwtype3(hold_wd);
    // write inverted
    hold_q = hold_wd;
    hold_wd = ~hold_wd;
    hw2reg.rwtype3.field1.de <= 1'b1;
    hw2reg.rwtype3.field1.d  <= hold_wd[31:16];
    @(posedge clk);
    hw2reg.rwtype3.field1.de <= 1'b0;
    hw2reg.rwtype3.field1.d  <= 16'hxxxx;
    @(posedge clk);
    test_rwtype3({hold_wd[31:16],hold_q[15:0]});
    // write other field from HW side
    hw2reg.rwtype3.field0.de <= 1'b1;
    hw2reg.rwtype3.field0.d  <= hold_wd[15:0];
    @(posedge clk);
    hw2reg.rwtype3.field0.de <= 1'b0;
    hw2reg.rwtype3.field0.d  <= 16'hxxxx;
    @(posedge clk);
    test_rwtype3(hold_wd);
    // try and get both the we and one de at the same time, we should win
    hold_q = 32'h55555555;
    hold_wd = 32'haaaaaaaa;
    fork
      begin
        send_wr(12'hc, hold_wd);
      end
      begin
        hw2reg.rwtype3.field0.de <= 1'b1;
        hw2reg.rwtype3.field0.d  <= hold_q[15:0];
        @(posedge clk);
        hw2reg.rwtype3.field0.de <= 1'b0;
        hw2reg.rwtype3.field0.d  <= 16'hxxxx;
      end
    join
    @(posedge clk);
    test_rwtype3(hold_wd);
    hold_q = 32'h77777777;
    hold_wd = 32'hcccccccc;
    fork
      begin
        send_wr(12'hc, hold_wd);
      end
      begin
        hw2reg.rwtype3.field1.de <= 1'b1;
        hw2reg.rwtype3.field1.d  <= hold_q[15:0];
        @(posedge clk);
        hw2reg.rwtype3.field1.de <= 1'b0;
        hw2reg.rwtype3.field1.d  <= 16'hxxxx;
      end
    join
    @(posedge clk);
    test_rwtype3(hold_wd);
     ///////
    //
    // test RWTYPE4
    //
    // default value is 80004000
    test_rwtype4(32'h80004000);
    // write value
    hold_wd = 32'hdeadbeef;
    send_wr(12'h200, hold_wd);
    test_rwtype4(hold_wd);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    send_wr(12'h200, hold_wd);
    test_rwtype4(hold_wd);
     ///////
    //
    // test ROTYPE0
    //
    // default value is 0x11111111
    hold_wd = 32'h11111111;
    test_rotype0(hold_wd);
    // write value, should be ignored
    send_wr(12'h204, 32'hdeadbeef);
    test_rotype0(hold_wd);
    // write opposite
    send_wr(12'h204, ~32'hdeadbeef);
    test_rotype0(hold_wd);
    // write from HW side
    hold_wd = $urandom;
    hw2reg.rotype0.de <= 1'b1;
    hw2reg.rotype0.d  <= hold_wd;
    @(posedge clk);
    hw2reg.rotype0.de <= 1'b0;
    hw2reg.rotype0.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_rotype0(hold_wd);
    // write from HW side inverted
    hold_wd = ~hold_wd;
    hw2reg.rotype0.de <= 1'b1;
    hw2reg.rotype0.d  <= hold_wd;
    @(posedge clk);
    hw2reg.rotype0.de <= 1'b0;
    hw2reg.rotype0.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_rotype0(hold_wd);
     ///////
    //
    // test W1CTYPE0
    //
    // default value is 0xbbccddee
    hold_q = 32'hbbccddee;
    test_w1ctype0(hold_q);
    // write value, should clear those bits
    hold_wd = 32'hdeadbeef;
    hold_q &= ~hold_wd;
    send_wr(12'h208, hold_wd);
    test_w1ctype0(hold_q);
    // write opposite, should clear everything by now
    hold_wd = 32'hdeadbeef;
    hold_q &= ~hold_wd;
    send_wr(12'h208, hold_wd);
    test_w1ctype0(hold_q);
     ///////
    //
    // test W1CTYPE1
    //
    // default value is 0x7777eeee
    hold_q = 32'h7777eeee;
    test_w1ctype1(hold_q);
    // write value, should clear those bits
    hold_wd = 32'hdeadbeef;
    hold_q &= ~hold_wd;
    send_wr(12'h20c, hold_wd);
    test_w1ctype1(hold_q);
    // write opposite, shoudl clear everything by now
    hold_wd = ~32'hdeadbeef;
    hold_q &= ~hold_wd;
    send_wr(12'h20c, hold_wd);
    test_w1ctype1(hold_q);
     ///////
    //
    // test W1CTYPE2, W1C + HRW
    //
    // default value is 0xaa775566
    hold_q = 32'haa775566;
    test_w1ctype2(hold_q);
    // write value
    hold_wd = 32'hdeadbeef;
    hold_q &= ~hold_wd;
    send_wr(12'h210, hold_wd);
    test_w1ctype2(hold_q);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    hold_q &= ~hold_wd;
    send_wr(12'h210, hold_wd);
    test_w1ctype2(hold_q);
    // write from HW side
    hold_wd = $urandom;
    hw2reg.w1ctype2.de <= 1'b1;
    hw2reg.w1ctype2.d  <= hold_wd;
    @(posedge clk);
    hw2reg.w1ctype2.de <= 1'b0;
    hw2reg.w1ctype2.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_w1ctype2(hold_wd);
    // write from HW side inverted
    hold_wd = ~hold_wd;
    hw2reg.w1ctype2.de <= 1'b1;
    hw2reg.w1ctype2.d  <= hold_wd;
    @(posedge clk);
    hw2reg.w1ctype2.de <= 1'b0;
    hw2reg.w1ctype2.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_w1ctype2(hold_wd);
    // write value
    hold_q = hold_wd;
    hold_wd = 32'hdeadbeef;
    hold_q &= ~hold_wd;
    send_wr(12'h210, hold_wd);
    test_w1ctype2(hold_q);
    // try and get both the we and the de at the same time, we should clear bits in d
    hold_wd = 32'h44444444;
    hold_q = 32'heeddbb77;
    fork
      begin
        send_wr(12'h210, hold_wd);
      end
      begin
        hw2reg.w1ctype2.de <= 1'b1;
        hw2reg.w1ctype2.d  <= hold_q;
        @(posedge clk);
        hw2reg.w1ctype2.de <= 1'b0;
        hw2reg.w1ctype2.d  <= 32'hxxxxxxxx;
      end
    join
    @(posedge clk);
    hold_q &= ~hold_wd;
    test_w1ctype2(hold_q);
     ///////
    //
    // test W1STYPE2, W1S + HRW
    //
    // default value is 0x11224488
    hold_q = 32'h11224488;
    test_w1stype2(hold_q);
    // write value
    hold_wd = 32'hdeadbeef;
    hold_q |= hold_wd;
    send_wr(12'h214, hold_wd);
    test_w1stype2(hold_q);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    hold_q |= hold_wd;
    send_wr(12'h214, hold_wd);
    test_w1stype2(hold_q);
    // write from HW side
    hold_wd = $urandom;
    hw2reg.w1stype2.de <= 1'b1;
    hw2reg.w1stype2.d  <= hold_wd;
    @(posedge clk);
    hw2reg.w1stype2.de <= 1'b0;
    hw2reg.w1stype2.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_w1stype2(hold_wd);
    // write from HW side inverted
    hold_wd = ~hold_wd;
    hw2reg.w1stype2.de <= 1'b1;
    hw2reg.w1stype2.d  <= hold_wd;
    @(posedge clk);
    hw2reg.w1stype2.de <= 1'b0;
    hw2reg.w1stype2.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_w1stype2(hold_wd);
    // write value
    hold_q = hold_wd;
    hold_wd = 32'hdeadbeef;
    hold_q |= hold_wd;
    send_wr(12'h214, hold_wd);
    test_w1stype2(hold_q);
    // try and get both the we and the de at the same time, we should set bits in d
    hold_wd = 32'h44444444;
    hold_q = 32'h9955cc33;
    fork
      begin
        send_wr(12'h214, hold_wd);
      end
      begin
        hw2reg.w1stype2.de <= 1'b1;
        hw2reg.w1stype2.d  <= hold_q;
        @(posedge clk);
        hw2reg.w1stype2.de <= 1'b0;
        hw2reg.w1stype2.d  <= 32'hxxxxxxxx;
      end
    join
    @(posedge clk);
    hold_q |= hold_wd;
    test_w1stype2(hold_q);
     ///////
    //
    // test W0CTYPE2, W0C + HRW
    //
    // default value is 0xfec8137f
    hold_q = 32'hfec8137f;
    test_w0ctype2(hold_q);
    // write value
    hold_wd = 32'hdeadbeef;
    hold_q &= hold_wd;
    send_wr(12'h218, hold_wd);
    test_w0ctype2(hold_q);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    hold_q &= hold_wd;
    send_wr(12'h218, hold_wd);
    test_w0ctype2(hold_q);
    // write from HW side
    hold_wd = $urandom;
    hw2reg.w0ctype2.de <= 1'b1;
    hw2reg.w0ctype2.d  <= hold_wd;
    @(posedge clk);
    hw2reg.w0ctype2.de <= 1'b0;
    hw2reg.w0ctype2.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_w0ctype2(hold_wd);
    // write from HW side inverted
    hold_wd = ~hold_wd;
    hw2reg.w0ctype2.de <= 1'b1;
    hw2reg.w0ctype2.d  <= hold_wd;
    @(posedge clk);
    hw2reg.w0ctype2.de <= 1'b0;
    hw2reg.w0ctype2.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_w0ctype2(hold_wd);
    // write value
    hold_q = hold_wd;
    hold_wd = 32'hdeadbeef;
    hold_q &= hold_wd;
    send_wr(12'h218, hold_wd);
    test_w0ctype2(hold_q);
    // try and get both the we and the de at the same time, we should set bits in d
    hold_wd = 32'hee77bbcc;
    hold_q = 32'hbcada8e4;
    fork
      begin
        send_wr(12'h218, hold_wd);
      end
      begin
        hw2reg.w0ctype2.de <= 1'b1;
        hw2reg.w0ctype2.d  <= hold_q;
        @(posedge clk);
        hw2reg.w0ctype2.de <= 1'b0;
        hw2reg.w0ctype2.d  <= 32'hxxxxxxxx;
      end
    join
    @(posedge clk);
    hold_q &= hold_wd;
    test_w0ctype2(hold_q);
     ///////
    //
    // test R0W1CTYPE2, R0W1C + HRW
    //
    // default value is 0xaa775566
    hold_q = 32'haa775566;
    test_r0w1ctype2(hold_q);
    // write value
    hold_wd = 32'hdeadbeef;
    hold_q &= ~hold_wd;
    send_wr(12'h21c, hold_wd);
    test_r0w1ctype2(hold_q);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    hold_q &= ~hold_wd;
    send_wr(12'h21c, hold_wd);
    test_r0w1ctype2(hold_q);
    // write from HW side
    hold_wd = $urandom;
    hw2reg.r0w1ctype2.de <= 1'b1;
    hw2reg.r0w1ctype2.d  <= hold_wd;
    @(posedge clk);
    hw2reg.r0w1ctype2.de <= 1'b0;
    hw2reg.r0w1ctype2.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_r0w1ctype2(hold_wd);
    // write from HW side inverted
    hold_wd = ~hold_wd;
    hw2reg.r0w1ctype2.de <= 1'b1;
    hw2reg.r0w1ctype2.d  <= hold_wd;
    @(posedge clk);
    hw2reg.r0w1ctype2.de <= 1'b0;
    hw2reg.r0w1ctype2.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_r0w1ctype2(hold_wd);
    // write value
    hold_q = hold_wd;
    hold_wd = 32'hdeadbeef;
    hold_q &= ~hold_wd;
    send_wr(12'h21c, hold_wd);
    test_r0w1ctype2(hold_q);
    // try and get both the we and the de at the same time, we should clear bits in d
    hold_wd = 32'h44444444;
    hold_q = 32'heeddbb77;
    fork
      begin
        send_wr(12'h21c, hold_wd);
      end
      begin
        hw2reg.r0w1ctype2.de <= 1'b1;
        hw2reg.r0w1ctype2.d  <= hold_q;
        @(posedge clk);
        hw2reg.r0w1ctype2.de <= 1'b0;
        hw2reg.r0w1ctype2.d  <= 32'hxxxxxxxx;
      end
    join
    @(posedge clk);
    hold_q &= ~hold_wd;
    test_r0w1ctype2(hold_q);
     ///////
    //
    // test RCTYPE0 (read-only clear)
    //
    // default value is 0x77443399
    hold_wd = 32'h77443399;
    test_rctype0(hold_wd);
    // write value, should be ignored
    hold_wd = 32'hdeadbeef;
    send_wr(12'h220, hold_wd);
    test_rctype0(0);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    send_wr(12'h220, hold_wd);
    test_rctype0(0);
    // write from HW side
    hold_wd = $urandom;
    hw2reg.rctype0.de <= 1'b1;
    hw2reg.rctype0.d  <= hold_wd;
    @(posedge clk);
    hw2reg.rctype0.de <= 1'b0;
    hw2reg.rctype0.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_rctype0(hold_wd);
    // write from HW side inverted
    hold_wd = ~hold_wd;
    hw2reg.rctype0.de <= 1'b1;
    hw2reg.rctype0.d  <= hold_wd;
    @(posedge clk);
    hw2reg.rctype0.de <= 1'b0;
    hw2reg.rctype0.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_rctype0(hold_wd);
     ///////
    //
    // test WOTYPE0
    //
    // default value is 0x11223344
    hold_wd = 32'h11223344;
    test_wotype0(hold_wd);
    // write value
    hold_wd = 32'hdeadbeef;
    send_wr(12'h224, hold_wd);
    test_wotype0(hold_wd);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    send_wr(12'h224, hold_wd);
    test_wotype0(hold_wd);
     ///////
    //
    // test MIXTYPE0
    //
    // default value is 0x87654321
    hold_q = 32'h87654321;
    test_mixtype0(hold_q);
    // read cleared bits [27:24]
    hold_q  &= 32'hf0ffffff;
    // write value
    hold_wd = 32'h55555555;
    send_wr(12'h228, hold_wd);
    @(posedge clk);
    hold_q = { hold_wd[31:28],                  // write-only
                                hold_q[27:24],  // read-only-clear
               hold_wd[23:20] | hold_q[23:20],  // rw1s
              ~hold_wd[19:16] & hold_q[19:16],  // rw1c
                                hold_q[15:12],  // ro
                                hold_q[11: 8],  // ro
               hold_wd[ 7: 4],                  // rw
               hold_wd[ 3: 0]};                 // rw
    test_mixtype0(hold_q);
    // write opposite
    hold_wd = 32'haaaaaaaa;
    send_wr(12'h228, hold_wd);
    @(posedge clk);
    hold_q = { hold_wd[31:28],                  // write-only
                                hold_q[27:24],  // read-only-clear
               hold_wd[23:20] | hold_q[23:20],  // rw1s
              ~hold_wd[19:16] & hold_q[19:16],  // rw1c
                                hold_q[15:12],  // ro
                                hold_q[11: 8],  // ro
               hold_wd[ 7: 4],                  // rw
               hold_wd[ 3: 0]};                 // rw
    test_mixtype0(hold_q);
    repeat(2) begin
      // write one field at a time from HW side
      hold_wd = $urandom;
      // field 1
      $display("INFO: trying field[1] with %h", hold_wd);
      hw2reg.mixtype0.field1.de <= 1'b1;
      hw2reg.mixtype0.field1.d  <= hold_wd[7:4];
      @(posedge clk);
      hw2reg.mixtype0.field1.de <= 1'b0;
      hw2reg.mixtype0.field1.d  <= 4'hx;
      @(posedge clk);
      hold_q = {hold_q[31:8],hold_wd[7:4],hold_q[3:0]};
      test_mixtype0(hold_q);
      // field 3
      $display("INFO: trying field[3] with %h", hold_wd);
      hw2reg.mixtype0.field3.de <= 1'b1;
      hw2reg.mixtype0.field3.d  <= hold_wd[15:12];
      @(posedge clk);
      hw2reg.mixtype0.field3.de <= 1'b0;
      hw2reg.mixtype0.field3.d  <= 4'hx;
      @(posedge clk);
      hold_q = {hold_q[31:16],hold_wd[15:12],hold_q[11:0]};
      test_mixtype0(hold_q);
      // field 4
      $display("INFO: trying field[4] with %h", hold_wd);
      hw2reg.mixtype0.field4.de <= 1'b1;
      hw2reg.mixtype0.field4.d  <= hold_wd[19:16];
      @(posedge clk);
      hw2reg.mixtype0.field4.de <= 1'b0;
      hw2reg.mixtype0.field4.d  <= 4'hx;
      @(posedge clk);
      hold_q = {hold_q[31:20],hold_wd[19:16],hold_q[15:0]};
      test_mixtype0(hold_q);
      // field 5
      $display("INFO: trying field[5] with %h", hold_wd);
      hw2reg.mixtype0.field5.de <= 1'b1;
      hw2reg.mixtype0.field5.d  <= hold_wd[23:20];
      @(posedge clk);
      hw2reg.mixtype0.field5.de <= 1'b0;
      hw2reg.mixtype0.field5.d  <= 4'hx;
      @(posedge clk);
      hold_q = {hold_q[31:24],hold_wd[23:20],hold_q[19:0]};
      test_mixtype0(hold_q);
      // field 6
      $display("INFO: trying field[6] with %h", hold_wd);
      hw2reg.mixtype0.field6.de <= 1'b1;
      hw2reg.mixtype0.field6.d  <= hold_wd[27:24];
      @(posedge clk);
      hw2reg.mixtype0.field6.de <= 1'b0;
      hw2reg.mixtype0.field6.d  <= 4'hx;
      @(posedge clk);
      hold_q = {hold_q[31:28],hold_wd[27:24],hold_q[23:0]};
      test_mixtype0(hold_q);
      hold_q &= 32'hf0ffffff; // read-clear
    end
    // try and get both the we and the de's at the same time, we should win
    repeat(2) begin
      // bits [11:8] (field2) can never be changed
      hold_q  = ($urandom & 32'hfffff0ff) | (hold_q & 32'h00000f00);
      hold_wd = $urandom;
      $display("INFO: trying field collision with we %h de %h", hold_wd, hold_q);
      fork
        begin
          send_wr(12'h228, hold_wd);
        end
        begin
          hw2reg.mixtype0.field1.de <= 1'b1;
          hw2reg.mixtype0.field1.d  <= hold_q[7:4];
          hw2reg.mixtype0.field3.de <= 1'b1;
          hw2reg.mixtype0.field3.d  <= hold_q[15:12];
          hw2reg.mixtype0.field4.de <= 1'b1;
          hw2reg.mixtype0.field4.d  <= hold_q[19:16];
          hw2reg.mixtype0.field5.de <= 1'b1;
          hw2reg.mixtype0.field5.d  <= hold_q[23:20];
          hw2reg.mixtype0.field6.de <= 1'b1;
          hw2reg.mixtype0.field6.d  <= hold_q[27:24];
          @(posedge clk);
          hw2reg.mixtype0.field1.de <= 1'b0;
          hw2reg.mixtype0.field1.d  <= 4'hx;
          hw2reg.mixtype0.field3.de <= 1'b0;
          hw2reg.mixtype0.field3.d  <= 4'hx;
          hw2reg.mixtype0.field4.de <= 1'b0;
          hw2reg.mixtype0.field4.d  <= 4'hx;
          hw2reg.mixtype0.field5.de <= 1'b0;
          hw2reg.mixtype0.field5.d  <= 4'hx;
          hw2reg.mixtype0.field6.de <= 1'b0;
          hw2reg.mixtype0.field6.d  <= 4'hx;
        end
      join
      @(posedge clk);
      hold_q = { hold_wd[31:28],                  // write-only
                                  hold_q[27:24],  // read-only-clear
                 hold_wd[23:20] | hold_q[23:20],  // rw1s
                ~hold_wd[19:16] & hold_q[19:16],  // rw1c
                                  hold_q[15:12],  // ro
                                  hold_q[11: 8],  // ro
                 hold_wd[ 7: 4],                  // rw
                 hold_wd[ 3: 0]};                 // rw
      test_mixtype0(hold_q);
    end
     ///////
    //
    // test RWTYPE5, RW + HRW + HWQE
    // test that only sw writes effect captured value
    //
    // default value is 0xbabababa
    test_rwtype5(32'hbabababa);
    // write value
    hold_wd = 32'hdeadbeef;
    send_wr(12'h22c, hold_wd);
    test_rwtype5(hold_wd);
    test_rwtype5_capture(hold_wd);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    send_wr(12'h22c, hold_wd);
    test_rwtype5(hold_wd);
    test_rwtype5_capture(hold_wd);
    // write from HW side
    hold_q = hold_wd;
    hold_wd = $urandom;
    hw2reg.rwtype5.de <= 1'b1;
    hw2reg.rwtype5.d  <= hold_wd;
    @(posedge clk);
    hw2reg.rwtype5.de <= 1'b0;
    hw2reg.rwtype5.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_rwtype5(hold_wd);
    test_rwtype5_capture(hold_q);
    // write from HW side inverted
    hold_wd = ~hold_wd;
    hw2reg.rwtype5.de <= 1'b1;
    hw2reg.rwtype5.d  <= hold_wd;
    @(posedge clk);
    hw2reg.rwtype5.de <= 1'b0;
    hw2reg.rwtype5.d  <= 32'hxxxxxxxx;
    @(posedge clk);
    test_rwtype5(hold_wd);
    test_rwtype5_capture(hold_q);
    // try and get both the we and the de at the same time, we should win
    hold_wd = 32'haaaaaaaa;
    fork
      begin
        send_wr(12'h22c, hold_wd);
      end
      begin
        hw2reg.rwtype5.de <= 1'b1;
        hw2reg.rwtype5.d  <= 32'h55555555;
        @(posedge clk);
        hw2reg.rwtype5.de <= 1'b0;
        hw2reg.rwtype5.d  <= 32'hxxxxxxxx;
      end
    join
    @(posedge clk);
    test_rwtype5(hold_wd);
    test_rwtype5_capture(hold_wd);
     ///////
    //
    // test RWTYPE6, RW + HRW + HWEXT
    // create a true external register
    //
    // default value is 0xc8c8c8c8
    test_rwtype6(32'hc8c8c8c8);
    // write value
    hold_wd = 32'hdeadbeef;
    send_wr(12'h230, hold_wd);
    test_rwtype6(hold_wd);
    test_rwtype6_capture(hold_wd);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    send_wr(12'h230, hold_wd);
    test_rwtype6(hold_wd);
    test_rwtype6_capture(hold_wd);
     ///////
    //
    // test ROTYPE1, RO + HRW + HWEXT
    // create a true external register, writable only by us
    //
    // default value is 0x66aa66aa
    hold_q = 32'h66aa66aa;
    test_rotype1(hold_q);
    // write value
    hold_wd = 32'hdeadbeef;
    send_wr(12'h234, hold_wd);
    test_rotype1(hold_q);
    test_rotype1_capture(hold_q);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    send_wr(12'h234, hold_wd);
    test_rotype1(hold_q);
    test_rotype1_capture(hold_q);
    // simulate write from our side
    @(posedge clk);
    hold_wd = 32'h66778899;
    my_rotype1_de = 1'b1;
    my_rotype1_d = hold_wd;
    @(posedge clk);
    my_rotype1_de = 1'b0;
    my_rotype1_d = 32'hxxxxxxxx;
    @(posedge clk);
    test_rotype1(hold_wd);
    test_rotype1_capture(hold_wd);
    @(posedge clk);
    hold_wd = ~32'h66778899;
    my_rotype1_de = 1'b1;
    my_rotype1_d = hold_wd;
    @(posedge clk);
    my_rotype1_de = 1'b0;
    my_rotype1_d = 32'hxxxxxxxx;
    @(posedge clk);
    test_rotype1(hold_wd);
    test_rotype1_capture(hold_wd);
     ///////
    //
    // test ROTYPE2, RO + HWNONE
    //
    // constant value is 0x9b908a79
    hold_q = 32'h9b908a79;
    test_rotype2(hold_q);
    // write value
    hold_wd = 32'hdeadbeef;
    send_wr(12'h238, hold_wd);
    test_rotype2(hold_q);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    send_wr(12'h238, hold_wd);
    test_rotype2(hold_q);
     ///////
    //
    // test RWTYPE7, RW + HWNONE
    //
    // default value is 0xf6f6f6f6
    test_rwtype7(32'hf6f6f6f6);
    // write value
    hold_wd = 32'hdeadbeef;
    send_wr(12'h23c, hold_wd);
    test_rwtype7(hold_wd);
    // write opposite
    hold_wd = ~32'hdeadbeef;
    send_wr(12'h23c, hold_wd);
    test_rwtype7(hold_wd);

    if (errorcount)
      $display("ERROR: completed test with %d errors", errorcount);
    else
      $display("TEST PASSED CHECKS");
  end

endmodule
