I send 32-bit data to slave.
0 to 3 bits are meaningless data.
If so, I should send the original strobe signal to 4'b1110.
If I send a strobe signal to 4'b1111, is this a violation of the specification? Or is it just the wrong transmission?
Each bit of WSTRB covers 8 bits of WDATA, so sending WSTRB=4'b1110 would signal that WDATA[7:0] is invalid. There wouldn't be any simple way of signalling WDATA[3:0] as being invalid.
Sending WSTRB=4'b1111 is legal protocol as long as AWSIZE=3'b010 (32-bit transfer). But as with the WSTRB=4'b1110 case, it isn't going to correctly signal the valid data you want.
Unfortunately the AXI protocol's smallest data quantity supported is an 8-bit byte (AWSIZE=3'b000), so you would need to encode additional logic in the slave's address map so that you could have addresses you write to that will be treated as signalling 4-bit transfers, but none of this would be standard AXI, so a slave implementation feature rather than anything covered by the protocol.
sorry, my mistake.
I mean 8bit. [0:7]
0 to 7 bits are meaningless data.
Sending WSTRB=4'b1111 would signal all 32-bits of data are valid, so not what you want, but not a protocol violation.
It looks like you already know 4'b1110 is the WSTRB value you want, so why consider 4'b1111 ?
I wondered if the 'strobe' signal could go to a value I didn't want.
I thought there would be something that would accurately send the strobe signal.
If the AXI bus master is correctly designed, it will send the correct WSTRB encoding to match the valid data.
If you are designing the slave in this case you've got to assume whoever has designed the master has done their job correctly, and if not, they need to fix their design.
AXI is difficult :(
Thank you for your help.
View all questions in Embedded forum