Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Inconsistent grant behavior of rr_arb_tree module between NumIn == 1 and NumIn > 1 #248

Open
ckf104 opened this issue Nov 10, 2024 · 0 comments

Comments

@ckf104
Copy link

ckf104 commented Nov 10, 2024

If we set parameter bit AxiVldRdy = 1'b0 with NumIn > 1

            assign gnt_o[l*2]        = gnt_nodes[Idx0] & (AxiVldRdy | req_d[l*2])   & ~sel;
            assign gnt_o[l*2+1]      = gnt_nodes[Idx0] & (AxiVldRdy | req_d[l*2+1]) & sel;

above code shows that if gnt_o would not be asserted if req_i == 0.

But if we set NumIn == 1, the following code shows that gnt_o is just the same value as gnt_i and don't depend on req_i

  // just pass through in this corner case
  if (NumIn == unsigned'(1)) begin : gen_pass_through
    assign req_o    = req_i[0];
    assign gnt_o[0] = gnt_i;
    assign data_o   = data_i[0];
    assign idx_o    = '0;
  // non-degenerate cases
  end

This causes inconsistent grant behavior between NumIn == 1 and NumIn > 1 and subtle bugs on my design which only occurs when NumIn == 1.

Making the following changes in NumIn == 1 maybe makes it better?

  // just pass through in this corner case
  if (NumIn == unsigned'(1)) begin : gen_pass_through
    assign req_o    = req_i[0];
    assign gnt_o[0] = gnt_i & (AxiVldRdy | req_i[0];
    assign data_o   = data_i[0];
    assign idx_o    = '0;
  // non-degenerate cases
  end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant