Not sure I understand the question. Typically you will have separate states of your FSM for AW and W stages. The way it's supposed to work is as follows: you place the data on a bus and assert *VALID signal. Then you keep this data until *READY is also high (AXI mandates than once you set your *VALID signal, you are not allowed to change anything on a bus until transfer occurs), then you advance your FSM to W state (AXI states that transfer only happens when both *VALID and *READY signals are high on the same clock edge). You've got to remember than when you set some signal via non-blocking assignment, it will only become "visible" to receiver on the next clock edge, so you can't check *READY signal at a time you're asserting *VALID and assume it will be the same on a next clock edge, when the transfer actually occurs.
Also - for the last transfer in a burst you've got to assert both *VALID and *LAST signals.
Finally, if you use Vivado, I highly recommend to use AXI Verification IP as it both helps to stimulate your AXI bus interfaces using very simple SV code, as well as to verify that transactions your module is performing are AXI-compliant (it will halt the simulation if it observes any activity on any AXI channel that is not compliant to the specification).