In UVM (Universal Verification Methodology) for SystemVerilog, the Write Data Agent differs from the Write Address Agent by driving data fields within a for loop that iterates through transaction length, while the Write Response Agent functions as a slave driver that accepts transactions from the sequence, manages sequencer transactions by fetching items when valid responses are available, and sends filled transactions back to the sequence.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
Course : UVM in Systemverilog 2 : L5.4 : Writing AXI Write Date & Write Response Agent Classes
Added:in the previous session you have completely written nix right address agent and what is remaining is write data write response read address and read data actions i will not be elaborating all these agents because all of them are similar to that whatever you have learned in the previous session but uh the the main functional point which are different from the previous one which i will be explaining are all other parts will be going covering very quickly so first we will add the right data agent and its code is exactly the same side of uh the right address agent uh the only difference is will be while driving this data so from the manage sequence transaction when you drive data you have to consider the length of the transaction uh so for till the transaction in this equals you have to drive this data all these fields uh this is data and then the last is derived as f is equal to length of id minus one then after that you will wait for a clock cycle then wait for ready to be accepted and all everything will be repeated within this for loop so this is the main difference for the main functional difference in the right data part rest everything is exactly the same as that of the right address agent now coming to the slave driver again this is exactly the same outside of the right address agent because this here again you will be simply driving the ready signal so this part is exactly same except the names again now coming to the monitor part will quickly go go over the monitor the monitor will be having the interface and analysis port and in the run phase after the uh null pointer check and the reset you will monitor the data where uh in a forward loop what you will do is you will wait for a right violet and right ready you will create a transaction and you are using a temporary data cube because you have to accumulate a large a set of data together until the w lasts coming in the interface for that you are releasing a temporary data queue and first you are making sure this data is uh empty at this point so this is this will be relevant uh when this is coming to the next part otherwise uh you will mess up things so to make sure that you are not doing anything wrong here you first will check this size is uh it's this temporary queue is empty here and flag an error otherwise and first then you will delete this thing this is again required when you iterate this multiple types and this is the main functional past while this is while a last is coming in this interface you will push back this current data into the queue wait for the next clock cycle and also you will make sure that this wild and ready is again high in the next clock cycle so if it is going low you will wait here and this is repaired until the last is seen in this one in this interface so at that point uh when last you see will again uh push it the current data into skew and at this point you know the length of this transaction which will be equal to the size of this temporary data queue and then you will create the transaction data dynamic array with this length and they will push you will fill this data with this data that is present in this temporary queue by popping them and again this is another additional check to make sure that this temporary data skew size is empty here you haven't messed up things here uh and we are flagging an error if it is not dumpies this is just an additional safety thing if you don't want you can emit it and finally i'm printing this information this newly created transaction and the newly derived transaction using the converted string function in the transaction and finally it's important to write this transaction into the analysis part that is present in this monitor so here is the main functional part of the right data monitor as you have seen here it it need to be i tried it over multiple times while the last is coming in this interface now the x agent part is exactly same as that of the right address agent so i will not be covering this in detail you can see that the same names are written here only differences the data the name of the interface and things like that so all based on the configuration you will be creating them appropriately then you will be connecting connecting them appropriately next will be the extra write response agent so here is a code so again we will not go to go through them in detail but in case of the right response agent the tp part our tv part need to be acting as a slave part and therefore we will be going into the implementation of the slave driver which is accepting transactions from the sequence so first you will quickly go through the master driver this is not used in the environment but still you have to define it for the completeness so this is exactly the same as that you have seen the previous cases uh and here i haven't filled this actual driving part so if you are using that you have to fill this driving part here and otherwise it's exactly the same and the interesting thing will be the write response slave driver the slave driver before writing the slave driver let's define the protocol with which it is communicating the sequence so the idea here is a sequence will be sending a transaction uh from the sequence and whenever a response is available in this interface the driver need to fill those transaction fields and send it back to the sequence so this is the idea behind developing this slave driver now let's go through the code so after the component factory registration micro it is it got the interface and config and new function there is nothing um no intelligence in the new and built phase function and in the right phase function after the null check and initialization and waiting for reset you are forking two tasks which will manage sequence transaction and drive ready this is again slightly different from the previous slave drivers because in the previous cases we are just driving ready randomly so that drive ready part is again written here so this logic is exactly similar to that you have seen in the right address and type data channels it is based on the configuration either we are always driving ready or we are driving ready randomly but let's see the other task the manage sequencer transactions so this layer driver will will be um will be waiting for a sec will be communicating with the sequence therefore it need to manage this transaction so what it will do is on every positive edge of this on every clock cycle of this interface if there is a valid uh response and valid ready is available in this interface then only it will fetch the next item from this sql sequencer so see quite about dot next item will be called only when there is a violet thing is available so this will make sure that once a sequence is sending a slave response transaction at time 0 this will be it will not be pulled into this driver until a valid response is available in the interface once a wallet response is available in interface it will pull the next item the next transaction and see whether it is a right transaction then the channel is correct that write response channel and also see it will see whether the transaction is requesting a response generally to send the response so the sequence should explicitly say that the transaction is requesting a response and if if all these criterias are satisfied then the transaction not id will be filled with this id that is available in the interface and the response will be filled from this interface as well then it will send this transaction back to this sequence by using the secret important so it's the same transaction is filled with this data from these interfaces uh when the sequence is sequence complete the finish item code it will have all this information in the sequence so this was the manage sequencer transaction task in case of a slave driver which is actually communicating with the sequence this we have already seen and the monitor is again similar to uh that you see in case of right address agent so you can see that similar and again the final agent it's again similar to those two previous agent you have seen the right address and right data agent based on uh the configuration you need to build things correctly and you need to connect things correctly
Related Videos
LBF101 Creating an XML Changelog
liquibase7511
3K views•2026-06-15
Alta Labs Cloud Dashboard Real time Network & Xnet Insights!
ShinyTechThings
158 views•2026-06-17
Wait... Group Policy Not Applying? Check This First!
keeplearning_iT
144 views•2026-06-15
Leetcode Weekly Contest 506 | Life's boring these days
Pudeesht
2K views•2026-06-14
microJAM: MAKING A MICRO GAME FOR A GAME JAM IN CLOJURESCRIPT AND TOTALLY NOT C
janetacarr
156 views•2026-06-18
Partitioning vs Bucketing vs Clustering: How to Make Queries 100x Faster
thedataandaiguy
194 views•2026-06-16
Design Claude Code Like a Senior Engineer
hayk.simonyan
344 views•2026-06-19
Linus Torvalds: AI Won’t Replace Understanding Code
SavvyNik
140 views•2026-06-19











