-
-
Notifications
You must be signed in to change notification settings - Fork 304
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BusSlaveFactory driveFlow does not honor byteEnable #1265
Comments
Flow them self aren't made for byteenable, could add additional versions which would work on specific payload type.
Yes you are right, all bytemask being low could / should be used to not have valid = '1' which transactions make the axi width converter make all strb going low in some transactions (example) ? |
I'm not actually using the built-in width converter / unburstifier / ..., but an external IP instead. An example of the all low strb transaction is as follows in a downsize from 512 to 64: You can see that |
I would say, you may get peripherals which trigger actions when a register is written and on which byte mask make no sense, for instance the PLIC interrupt reservation.
What kind of master generates it ? |
The offending request comes from the Xilinx XDMA bridge; it issues narrow writes with 64B AWSIZE but only partial WSTRB (in this case 8 bytes). Per my understanding this is allowed by AXI (see this thread: WSTRB is allowed to go low during a transaction to signal only some bytes are valid). Regarding a possible solution, I agree that it's bad to change behaviour of existing peripherals that expect the current behaviour. I'm working on a pull request to add an optional parameter to the method (that defaults to the old behaviour); what do you think? |
Ok for me ^^ Else, a general fix would be to implement an AXI bridge which filter this kind of accesses, so you would just have to put the bridge in between the width adapter and peripherals. |
It seems like the
driveFlow
function inBusSlaveFactory
does not honourbyteEnable
:SpinalHDL/lib/src/main/scala/spinal/lib/bus/misc/BusSlaveFactory.scala
Lines 512 to 516 in 68b6158
I had the impression that the
valid
bit in the flow should not be on whenbyteEnable
was all zero for the width of the flow. This scenario is tricky however, since it's not clear how to properly handle partialbyteEnable
s on aFlow
:A real-scenario where this would matter: I am using a Axi4SlaveFactory after an AXI width converter. For a wide write request with some bytes disabled with
strb
, the AXI width converter issues requests that contains beats with zerostrb
. This then falsely triggers the downstreamFlow
.The text was updated successfully, but these errors were encountered: