This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Axi ARSIZE with narrow subordinates

I have an AXI4 Initiator with data_width = 32bits and an APB Target with data_width = 8bit. There's a protocol conversion bridge between these two.
Suppose the initiator want to do a READ with ARSIZE = 1 (16bits). how does the data look on RDATA lines?

Address 7:0
0x1000 01
0x1001 00
0x1002 a1
0x1003 aa
0x1004 02
0x1005 00
0x1006 a2
0x1007 aa
0x1008 03
0x1009 00
0x100a a3
0x100b aa

Suppose axi initiator sends req : Araddr = 0x1000 ARSIZE = 1 ARLEN = 3 ARBURST= INCR then how does the RDATA look like ?

Case 1:
1st   rdata = 00010001  --  from address 0x1000
2nd  rdata = aaa1aaa1  --  from address 0x1002
3rd  rdata  = 00020002  -- from address 0x1004
4th  rdata  = aaa2aaa2  --  from address 0x1006

Case 2:
1st   rdata = 00000001  --  from address 0x1000
2nd  rdata = aaa10001  --  from address 0x1002
3rd  rdata  = 00000002  -- from address 0x1004
4th  rdata  = aaa20002  --  from address 0x1006

Basically, I want to understand how to handle the data being read from APB side should be handled inside the axi-to-apb bridge to be sent to AXI initiator.

Thank you in advance for all your response.

Parents
  • If your AXI4-APB bridge is converting the 32-bit requests into 4 8-bit requests, and you have implemented some sort of MUXing to connect the 8-bit APB target to the appropriate 8-bits of the 32-bit APB bus, then the resulting read data for your example 4-beat 16-bit sequence would be...

    0x1000 xxxx0001

    0x1002 aaa1xxxx

    0x1004 xxxx0002

    0x1006 aaa2xxxx

    The xxxx fields are data bytes that were not requested, so they are undefined. They could be a copy of the other 16-bits (it might simplify MUXing), or they could be whatever was last driven on those bits for the previous transfer, or they could be a default value (probably 0000), but that is all down to the implementation of the 32:8 conversion in the bridge.

Reply
  • If your AXI4-APB bridge is converting the 32-bit requests into 4 8-bit requests, and you have implemented some sort of MUXing to connect the 8-bit APB target to the appropriate 8-bits of the 32-bit APB bus, then the resulting read data for your example 4-beat 16-bit sequence would be...

    0x1000 xxxx0001

    0x1002 aaa1xxxx

    0x1004 xxxx0002

    0x1006 aaa2xxxx

    The xxxx fields are data bytes that were not requested, so they are undefined. They could be a copy of the other 16-bits (it might simplify MUXing), or they could be whatever was last driven on those bits for the previous transfer, or they could be a default value (probably 0000), but that is all down to the implementation of the 32:8 conversion in the bridge.

Children