Jump to content

uvm_reg_predictor possible bug when using a 64bit register with 32bit interface


Recommended Posts


I have in my environment a RTL which has registers interface with data size of 32bits

And I have a register which is defined as a 64bits. I use uvm_reg_adapter and uvm_reg_predicator to update the mirror value of the registers.

When we perform a register write to this register we correctly see 2 write transactions to reg_address and reg_address+4

The adapter capture those transactions and send the correct address, data and byte_en (In our case byte_en is 0b1111 for EACH transaction)

The issue in the uvm_reg_predicator is that the data is saved:   reg_item.value[0] |= rw.data << (i * map.get_n_bytes()*8);

And when the second write arrives the mirror value is updated as follows:    rg.do_predict(reg_item, predict_kind, rw.byte_en);
Which means the byte_en in this case is 0b00001111, thus the MSB data of the register is not set!

I believe that the byte_en should have been treated like the data itself.

Did any one encounter this issue?


Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...