Checking AXI data when using WSTRB

Why OSVVM™? Forums OSVVM Checking AXI data when using WSTRB

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #2901
    jon
    Member

    I am using the AXI memory to write a burst. The first beat has the WSTRB set to 1110 (first byte no used). I am using a scoreboard to check the data, and I set the expected data to be 020100UU. But when I call check the scoreboard fails. It seems to be checking the full value rather than only the three active bytes. Is this the correct way to do it?
    Thanks
    Jon

    #2902
    jon
    Member

    I just realized that I can read the AXI memory using a byte address which then shifts the data into the correct position.

    #2903
    jon
    Member

    But actually I still have the same issue at the end of the burst if the bytes arent a multiple of the bus width.

    #2908
    jon
    Member

    I just created a function to sero out the unused bytes in the read data and scoreboard data.

    #2909
    Jim Lewis
    Member

    Hi Jon,
    Which OSVVM VC are you using?

    For AXI4 Manager, it writes a U to memory in locations when WSTRB is 0. The U will not be stored in memory. For reading, there is no indication the data is valid or not. Hence, if your burst FIFO is organized as words, you will need to exclude those bits from comparing to X”020100–“. The ‘-‘ is allowed with VHDL-2008. If your burst FIFO is organized as bytes, the unused bytes will not be in the FIFO. Of the FIFO handles words, no special handling is done for the first and last words to mark unused bytes – (AxiStream does do this though, not sure why similar logic was not added for AXI FULL reads – if you want to be able to do this, fill out an issue report on it.)

    For AXI4 Memory, if WSTRB is 0, the byte will not be stored in memory. On reading, the value will be a U if it was not written by an operation previous to this one.

    Best Regards,
    Jim

    #2910
    jon
    Member

    Hi Jim

    I am using the AXI memory model. I think it is all working as it should. I actually tried using the ‘-‘ in the scoreboard data for the inactive bytes. I then used check() and it worked well.
    Thanks
    Jon

Viewing 6 posts - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.