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

Query related to ARM IHI 0033C (AMBA AHB Protocol Specification)

ARM IHI 0033C:: Section 3.5.2 Write strobes rules: The first bullet point have 2 sub-points stated below:

The first one states that "Write strobes which correspond to an active byte lane can be HIGH or LOW. A transfer with LOW strobe bits for active byte lanes is known as a sparse write."; and the second one states that "Write strobes which correspond to an inactive byte lane can be HIGH or LOW. An interface must use HSIZE and HADDR to determine which byte lanes are inactive."

These two statements for the same scenario regarding Write Strobes bit for both active byte lanes and inactive byte lanes looks conflicting to me. Can anyone please help me clear my doubt?

Parents
  • I think the clue to explaining the wording is in section 3.5.3 regarding interoperability, where if the manager does not support write strobes it should drive all HWSTRB outputs high. This would be the default driver value for a manager that doesn't actively drive strobes, and isn't in any way restricted by the HSIZE transfer width.

    So going back to the two sub-bullet points in 3.5.2, HADDR and HSIZE determine the byte lanes that could be used for a transfer. Within the HADDR/HSIZE defined "active" byte lanes the corresponding HWSTRB bits can be high or low, and if they are not all high this indicates what is referred to as a "sparse" write.

    And in the "inactive" byte lanes outside the HADDR/HSIZE defined range, we don't care what the HWSTRB bits are because they can't be used for transfers.

    The wording in the two bullet points is a bit awkward, but not contradictory. If I was to reword it I would just say that each HWSTRB bit can be high or low, but only HWSTRB bits high within the HADDR/HSIZE defined range of byte lanes can be used for data transfers.

    This is different compared to the use of write strobes in AXI, where only byte lanes within the AWADDR/AWSIZE/AWBURST defined area can be asserted. But the differing descriptions will be because WSTRB was always present in AXI, whereas HWSTRB is new to the later revisions of AHB5, so we need to have a simple default value for backwards compatibility.

    Hopefully that's a bit clearer.

Reply
  • I think the clue to explaining the wording is in section 3.5.3 regarding interoperability, where if the manager does not support write strobes it should drive all HWSTRB outputs high. This would be the default driver value for a manager that doesn't actively drive strobes, and isn't in any way restricted by the HSIZE transfer width.

    So going back to the two sub-bullet points in 3.5.2, HADDR and HSIZE determine the byte lanes that could be used for a transfer. Within the HADDR/HSIZE defined "active" byte lanes the corresponding HWSTRB bits can be high or low, and if they are not all high this indicates what is referred to as a "sparse" write.

    And in the "inactive" byte lanes outside the HADDR/HSIZE defined range, we don't care what the HWSTRB bits are because they can't be used for transfers.

    The wording in the two bullet points is a bit awkward, but not contradictory. If I was to reword it I would just say that each HWSTRB bit can be high or low, but only HWSTRB bits high within the HADDR/HSIZE defined range of byte lanes can be used for data transfers.

    This is different compared to the use of write strobes in AXI, where only byte lanes within the AWADDR/AWSIZE/AWBURST defined area can be asserted. But the differing descriptions will be because WSTRB was always present in AXI, whereas HWSTRB is new to the later revisions of AHB5, so we need to have a simple default value for backwards compatibility.

    Hopefully that's a bit clearer.

Children