Hello Everyone,
I created a DUT for a simple memory system along with its UVM testbench. I am unable to detect the problem that why my monitor is providing an incorrect data. It is displaying the “zero” value for the first set of Driver inputs. I have attached the link for my code, I will be grateful if you can detect the error for me.
In reply to SV26:
This is the first entry from the driver:
UVM_INFO my_pkg.sv(46) @ 0: uvm_test_top.env.agnt.sqncr@@seq [my_sequence] Starting the sequence
UVM_INFO @ 30000: uvm_test_top.env.agnt.driv [DRIV] Driving data across DUT:
wr= 1
addr= 1
data= 24
It is from runtime 0 (see @0). What you are printing is the content of your seq_item. At that time the reset is active in your DUT. This resets the mem to ‘0’ and the driver data do not show-up here. Thjis results in the monitor values of:
UVM_INFO my_pkg.sv(135) @ 50000: uvm_test_top.env.agnt.mon [MON] Monitor received data for WR operation
UVM_INFO @ 50000: uvm_test_top.env.agnt.mon [MONITOR] Monitoring data:
wr= 0
addr= 0
data= 0
And you had a few weaknesses in your code tolerated by VCS.
See how it works here:
In reply to chr_sue:
Sir,
So far I understood my previous error and I am getting positive results for the write operation. But, for the read operation, the value at vif.rdata is 0 for each case. I tried everything but was unable to correct the code.
So your rdata is the current interface rdata and not the read from the requested address, since all three assignments occur in parallel. But switching them to blocking assignments is not enough, since your DUT needs a clock pulse to answer a read request. So to resolve this you should wait a clock pulse before copying rdata.
Hi,
Thank you for replying to my problem. I did the reset thing but even after changing the driver, it is still showing the same error, infact, now the monitor output is increased by 4 redundant display.