rggen / rggen

Code generation tool for control and status registers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Internal bus protocol error

taichi-ishitani opened this issue · comments

Internal bus protocol error raised when a write access arrives during a read access is in progress.
image

To fix this error, the adapter module needs to hold which channel is active during an access in progress.
This could cause #121.

This is a test sequence to reproduce this error.

class ral_issue_121_test_sequence extends ral_test_sequence #(ral_hw_reset_test_sequence);
  task body();
    uvm_status_e    status[2];
    uvm_reg_data_t  read_data[2];

    for (int i = 0;i < 3;++i) begin
      p_sequencer.model.register_14.register_file_0.register_1.write(status[1], 32'hcafe_0000 | 32'(i));
      if (i inside {0, 2}) begin
        fork
          p_sequencer.model.register_14.register_file_0.register_1.read(status[1], read_data[1]);
        join_none
        #1;
        fork
          p_sequencer.model.register_14.register_file_0.register_0.write(status[0], 32'hdead_0000 | 32'(i));
        join_none
      end
      else begin
        fork
          p_sequencer.model.register_14.register_file_0.register_0.write(status[0], 32'hdead_0000 | 32'(i));
        join_none
        #1;
        fork
          p_sequencer.model.register_14.register_file_0.register_1.read(status[1], read_data[1]);
        join_none
      end
      wait fork;
      p_sequencer.model.register_14.register_file_0.register_0.read(status[0], read_data[0]);
    end
  endtask

  `tue_object_default_constructor(ral_issue_121_test_sequence)
  `uvm_object_utils(ral_issue_121_test_sequence)
endclass